Microservices

Microservices is a specialisation of and implementation approach for service-oriented architectures (SOA) used to build flexible, independently deployable software systems. Services in a microservice architecture (MSA)[1] are processes that communicate with each other over a network in order to fulfill a goal. These services use technology-agnostic protocols.[2][3][4] The microservices approach is a first realisation of SOA that followed the introduction of DevOps and is becoming more popular for building continuously deployed systems.[5][6]

In a microservices architecture, services should have a small granularity and the protocols should be lightweight. A central microservices property that appears in multiple definitions is that services should be independently deployable.[7] The benefit of distributing different responsibilities of the system into different smaller services is that it enhances the cohesion and decreases the coupling. This makes it easier to change and add functions and qualities to the system at any time.[8] It also allows the architecture of an individual service to emerge through continuous refactoring,[9] and hence reduces the need for a big up-front design and allows for releasing software early and continuously.

Details

There is no industry consensus yet regarding the properties of microservices, and an official definition is missing as well. Some of the defining characteristics that are frequently cited include:

A microservices-based architecture:

History

A workshop of software architects held near Venice in May 2011 used the term "microservice" to describe what the participants saw as a common architectural style that many of them had been recently exploring. In May 2012, the same group decided on "microservices" as the most appropriate name. James Lewis presented some of those ideas as a case study in March 2012 at 33rd Degree in Kraków in Microservices - Java, the Unix Way, as did Fred George about the same time. Adrian Cockcroft at Netflix, describing this approach as "fine grained SOA", pioneered the style at web scale, as did many of the others mentioned in this article - Joe Walnes, Dan North, Evan Bottcher and Graham Tackley.[11]

Dr. Peter Rodgers introduced the term "Micro-Web-Services" during a presentation at Cloud Computing Expo in 2005. On slide #4 of the conference presentation, he states that "Software components are Micro-Web-Services". Juval Löwy had similar precursor ideas about classes being granular services, as the next evolution of Microsoft architecture.[12][13][14] "Services are composed using Unix-like pipelines (the Web meets Unix = true loose-coupling). Services can call services (+multiple language run-times). Complex service-assemblies are abstracted behind simple URI interface. Any service, at any granularity, can be exposed." He described how a well-designed service platform "applies the underlying architectural principles of the Web and Web services together with Unix-like scheduling and pipelines to provide radical flexibility and improved simplicity by providing a platform to apply service-oriented architecture throughout your application environment".[15] The design, which originated in a research project at Hewlett Packard Labs, aims to make code less brittle and to make large-scale, complex software systems robust to change.[16] To make "Micro-Web-Services" work, one has to question and analyze the foundations of architectural styles (such as SOA) and the role of messaging between software components in order to arrive at a new general computing abstraction.[17] In this case, one can think of resource-oriented computing (ROC) as a generalized form of the Web abstraction. If in the Unix abstraction "everything is a file", in ROC, everything is a "Micro-Web-Service". It can contain information, code or the results of computations so that a service can be either a consumer or producer in a symmetrical and evolving architecture.

Philosophy

The philosophy of the microservices architecture essentially equals to the Unix philosophy of "Do one thing and do it well". It is described as follows:[18][19][20]

Criticism

The microservices approach is subject to criticism for a number of issues:

Also, an application made up of any number of microservices has to access its respective ecosystem which may have unnecessary complexity.[25] This kind of complexity can be reduced by standardizing the access mechanism. The Web as a system standardized the access mechanism by retaining the same access mechanism between browser and application resource over the last 20 years. Using the number of Web pages indexed by Google it grew from 26 million pages in 1998 to around 60 trillion individual pages by 2015 without the need to change its access mechanism. The Web itself is an example that the complexity inherent in traditional monolithic software systems can be overcome.[26][27]

Nanoservices

Too-fine-grained microservices have been criticized as an anti-pattern, dubbed a nanoservice by Arnon Rotem-Gal-Oz:

[A] nanoservice is an anti-pattern where a service is too fine grained. [A] nanoservice is a service whose overhead (communications, maintenance etc.) outweighs its utility.[28][29]

Problems include the code overhead (interface definition, retries), runtime overhead (serialization/deserialization, network traffic), and fragmented logic (useful functionality not implemented in one place, instead requiring combining many services).

Proposed alternatives to nanoservices include:[29]

Users

Known users of microservices principles and practices:

Implementations

See also

References

  1. "Microservices: yesterday, today, and tomorrow" (PDF). Retrieved 6 July 2016.
  2. 1 2 3 4 5 Martin Fowler. "Microservices".
  3. Newman, Sam. Building Microservices. O'Reilly Media. ISBN 978-1491950357.
  4. Wolff, Eberhard. Microservices: Flexible Software Architectures. ISBN 978-0134602417.
  5. Balalaie, A.; Heydarnoori, A.; Jamshidi, P. (2016-05-01). "Microservices Architecture Enables DevOps: Migration to a Cloud-Native Architecture". IEEE Software. 33 (3): 42–52. doi:10.1109/MS.2016.64. ISSN 0740-7459.
  6. Continuous Deployment: Strategies
  7. 1 2 Nadareishvili, I., Mitra, R., McLarty, M., Amundsen, M., Microservice Architecture: Aligning Principles, Practices, and Culture, O’Reilly 2016
  8. Oliver Wolf. "Introduction into Microservices".
  9. Chen, Lianping; Ali Babar, Muhammad (2014). Towards an Evidence-Based Understanding of Emergence of Architecture through Continuous Refactoring in Agile Software Development. The 11th Working IEEE/IFIP Conference on Software Architecture(WICSA 2014). IEEE.
  10. Microservices Resources and Positions
  11. James Lewis and Martin Fowler. "Microservices".
  12. Löwy, Juval (October 2007). "Every Class a WCF Service". Channel9, ARCast.TV.
  13. Löwy, Juval (2007). Programming WCF Services 1st Edition. pp. 543–553.
  14. Löwy, Juval (May 2009). "Every Class As a Service". Microsoft TechEd Conference, SOA206. Archived from the original on 2010.
  15. Rodgers, Peter. "Service-Oriented Development on NetKernel- Patterns, Processes & Products to Reduce System Complexity". CloudComputingExpo. SYS-CON Media. Retrieved 19 August 2015.
  16. Russell, Perry; Rodgers, Peter; Sellman, Royston (2004). "Architecture and Design of an XML Application Platform". HP Technical Reports. p. 62. Retrieved 20 August 2015.
  17. Hitchens, Ron (Dec 2014). Swaine, Michael, ed. "Your Object Model Sucks". PragPub Magazine. Pragmatic Programmers: 15.
  18. Lucas Krause. Microservices: Patterns and Applications. ASIN B00VJ3NP4A.
  19. Lucas Krause. "Philosophy of Microservices?".
  20. 1 2 Jim Bugwadia. "Microservices: Five Architectural Constraints".
  21. Li, Richard. "Microservices Essentials for Executives: The Key to High Velocity Software Development". Datawire. Datawire, Inc. Retrieved 21 October 2016.
  22. Jan Stenberg (11 August 2014). "Experiences from Failing with Microservices".
  23. 1 2 3 "Developing Microservices for PaaS with Spring and Cloud Foundry".
  24. Robert Annett. "Where is the complexity?".
  25. "BRASS Building Resource Adaptive Software Systems". U.S. Government. DARPA. April 7, 2015. "Access to system components and the interfaces between clients and their applications, however, are mediated via a number of often unrelated mechanisms, including informally documented application programming interfaces (APIs), idiosyncratic foreign function interfaces, complex ill-understood model definitions, or ad hoc data formats. These mechanisms usually provide only partial and incomplete understanding of the semantics of the components themselves. In the presence of such complexity, it is not surprising that applications typically bake-in many assumptions about the expected behavior of the ecosystem they interact with."
  26. Alpert, Jesse; Hajaj, Nissan. "We knew the web was big". Official Google Blog. Google.com. Retrieved 22 August 2015.
  27. "The Story". How search works. Google.com. Retrieved 22 August 2015.
  28. Services, Microservices, Nanoservices – oh my!, Arnon Rotem-Gal-Oz
  29. 1 2 Pratical SOA: 1.1: Nanoservices, Arnon Rotem-Gal-Oz, 2010
  30. "JLupin Next Server - References".
  31. "How Enterprise PaaS can add Critical Value to Microservices".
  32. "API Infrastructure at Knewton".
  33. "Microservices" (PDF).
  34. "Microservices".
  35. "NodeCrunch Tag Archives: microservices".
  36. "Let your developers move faster with composable services".
  37. "Schedule Thursday (3rd Dec.) - conference". gotocon.com. Retrieved 2016-04-19.
  38. "Baratine".
  39. "JLupin Next Server Website".
  40. http://www.jolie-lang.org/
  41. "KumuluzEE".
  42. http://www.codeproject.com/Tips/894355/MicroService-Net-Create-Micro-Services-Easily-with
  43. "Products > Platform". 1060 Research Ltd. Retrieved 12 October 2015.
  44. https://dzone.com/articles/adaptive-application-management
  45. Wilma documentation
  46. Wilma source code
  47. "Vertx".
  48. "Zipkin".

http://www.imotif.net/index.php/2016/10/06/microservice/

Further reading

This article is issued from Wikipedia - version of the 11/28/2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.