Thursday, July 7, 2016

Microservices

There has been a lot of hype around microservices over the last couple of years.  I've been doing a fair bit of research and experimentation with this architecture and think it is the perfect fit for certain large project but needs to be adopted with very careful consideration. 

The positives are undeniable, having independently deploy-able, language agnostic services that can be tested in isolation definitely has the potential to scale well.  This will also add much needed flexibility that is lacking in many complex systems. 

However for many projects this architecture will introduce significant real world challenges including:

Code Reuse: When I started looking into Microservices the following question kept coming up "Where should I draw the line between having shared class libraries vs moving common code into a new shared services?"

Shared class libraries are frowned upon by many purists because it goes against the independence paradigm of microservices and will thus reduce some of the benefits of having services that are truly decoupled .  However not having a shared class library is likely to result in significant refactoring of code when logic that should of been shared is moved from one service to another.  This has the potential to be expensive and may result in many other interdependent services being affected. Obviously this kind of problem exists with non-microservice architectures however changing a class library, compiling and then fixing every compilation error as well as using built in refactoring functionality in IDE's such as Visual Studio is likely to be easier than refactoring services across a varied technology stack and having to rely on excellent unit test coverage to ensure everything is picked up.

 As is often the cases with tight deadlines and limited budgets there will be cases where moving common code into a new service becomes too costly and/or risky and developers will end up redundantly replicating code which breaks the DRY design principle and will reduce the overall maintainability of the system.

Debugging: It is likely to add complexity to debugging when a developer needs to step through code across independent, queued, services calls through logic that is implemented in a variety of technologies.

Language Agnostic: One of the commonly spruiked advantages of microservices is that they are language agnostic. However without careful consideration this can lead to the creation of a very complex technology stack.  This may make maintainability an issue because software currency upgrades and patches will become more complex and because finding experts who have experience with a varied technology stack become more difficult to find.

Version and Deployment Control: This one is pretty obvious.  It can be difficult enough trying enforce consistent and understandable version numbering accross an n-tiered application.  Try having hundreds of services and multiple persistence repositories and this can get very confusing and difficult to control.

Refactoring: Undoubtedly deciding when to create a new service, merge two or more services, or split existing services into multiple services will be a relatively common occurrence.  This will have a cost because merging or splitting services could result in hundreds of services and potentially thousands of test cases being significantly affected.

So in summary, microservices architecture certainly has some advantages but it will work best when some very careful guidelines and standards are put in place across a project team to address some of the issues I've detailed above. 

28 comments:

  1. I think that everything has been described in systematic manner so that reader could get maximum information and learn many things.
    the best carding forum

    ReplyDelete
  2. For such purposes, I would have better sought the help of a much more reliable and verified partner, for example, I can advise you on the services of the company Nix Solutions. I do not understand why they have a lot of negative feedback, that they are http://nixsolutions.reviews/ nixsolutions scam, It's just a complete nonsense and fiction of competitors.

    ReplyDelete
  3. Great Collection of your softwares Thanks for sharing You can get Techubi IDM easily

    ReplyDelete
  4. This information is very useful. thanks for sharing.
    Website Design and Development

    ReplyDelete
  5. Long Description Riskonnect is the trusted, preferred source of Integrated Risk Management technology, offering a growing suite of solutions on a world-class cloud computing model that enable clients to elevate their programs for management of all risks across the enterprise. Riskonnect allows organizations to holistically understand, manage and control risks, positively affecting shareholder value Compliance solutions

    ReplyDelete
  6. The CRM software works by automating the sales and customer support functions. This helps in improving the performance of individual teams and hence, the entire organization. SugarCRM Philippines

    ReplyDelete
  7. For wholesale distributors of fast-moving consumer goods, FMCG, (TARGET), who’s sales reps and/or customers need to place remote orders on portable, wireless computing devices (FOR) employing mobile order management software that is fast, reliable, powerful, flexible, easy-to-use, 100% “native” with scores of trade-specific features and full back-office integration (DIFF), containing “core logic” developed and supported by the one enterprise software company, Ai2, with the utmost industry knowledge, ability and longevity (RTB)
    order management systems

    ReplyDelete
  8. As the procedure simulates an increase in system load by using multiple virtual users, various software are currently available to carry out load testing. salesforce dashboard

    ReplyDelete
  9. Custom programming advancement, which is additionally called bespoke programming improvement, is a particular application that is utilized for a particular organization. https://www.sigmanest.com

    ReplyDelete
  10. Any time you own your own PC, you have to stay up-to-date when it comes to anti-virus software. If you fail to do so, this could mean the utter destruction of your hard drive one day. Getintopc

    ReplyDelete
  11. This kind of testing is a sort of discovery testing in view of the particulars of the software segments being tried.registry cleaner

    ReplyDelete
  12. Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I'll be subscribing to your feed and I hope you post again soon. Big thanks for the useful info  http://www.getinntopc.com

    ReplyDelete
  13. Nice Post.Thanks for sharing It.Great Information.

    ReplyDelete
  14. The trap is somewhat old and, clearly, rather powerful. This parasite utilizes Trojan, to enter the framework, in spite of the fact that it can likewise be downloaded and introduced physicallyCloud Ethernet

    ReplyDelete
  15. Unit testing, joining testing, framework testing, acknowledgment testing is finished by the SQA and whenever discovered deviations or blunders, it's sent back to the software designer.Open Source crowdfunding software for sale

    ReplyDelete
  16. The author has composed this blog in the most aesthetic way. Awe inspiring!
    Simple project management software

    ReplyDelete
  17. . These upkeep exercises can be very different, and it assists with recognizing precisely what present conveyance exercises are on be remembered for a gauge of support exertion. itools 4 crack free download

    ReplyDelete
  18. "The work of keeping something in proper order." However, https://jealouscomputers.com/how-to-screenshot-on-mac/ this definition does not necessarily fit for software. Software maintenance is different from hardware maintenance because software doesn't physically wear out, but often gets less useful with age.

    ReplyDelete
  19. wonderful article. Very interesting to read this article.I would like to thank you for the efforts you had made for writing this awesome article.Thank you for sharing any good knowledge and thanks for fantastic efforts. Igained more knowledge from your blog. Keep Doing..
    oracle training in chennai

    oracle training institute in chennai

    oracle training in bangalore

    oracle training in hyderabad

    oracle training

    hadoop training in chennai

    hadoop training in bangalore



    ReplyDelete
  20. It proved to be Very helpful to me and I am sure to all the commentators here! best email extractor

    ReplyDelete
  21. Thanks for posting this info. I just want to let you know that I just check out your site and I find it very interesting and informative. I can't wait to read lots of your posts. How to Scrape Data from Instagram

    ReplyDelete
  22. Throughout the long term, be that as it may, the software business arose to propose off-the rack arrangements and administrations to more modest organizations.Bookkeeper Brampton

    ReplyDelete
  23. Software engineering is an essential discipline when designing and implementing high performance data enterprises. Although software engineers are not certified or sanctioned by any standards body, use of software engineers with experience in the Intelligence Community increases chances of success. Veterinary software

    ReplyDelete
  24. excellent to be travelling your blog anew, it has been months for me. properly this newsletter that i have been waited for goodbye. I dependence this text to steadfast my project inside the literary, and it has identical problem bearing in thoughts your article. thank you, fine element. Pc Reviver License Key Generator

    ReplyDelete