2.1 微服务架构的起源
2005年,Peter Rodgers博士在云端运算博览会上提出微Web服务(Micro-Web-Service),将程序设计成细粒度的服务(Granular Service),以作为Microsoft下一阶段的软件架构。其核心思想是让服务按照类似 Unix 管道的存取方式使用,而且复杂的服务背后使用简单URI来开放界面,任何服务都能被开放(exposed)。这个设计在HP的实验室被实现,具有改变复杂软件系统的强大力量。
2014年,Martin Fowler与James Lewis共同提出了微服务的概念,定义了微服务架构是以开发一组小型服务的方式来开发一个独立的应用系统,每个服务都以一个独立进程的方式运行,每个服务与其他服务使用轻量级(通常是HTTP API)通信机制。这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署,同时服务会使用最小规模的集中管理(例如Docker)能力,也可以采用不同的编程语言和数据库。
实际上,微服务的诞生绝非偶然,敏捷开发帮助我们减少浪费、快速反馈,以用户体验为目标;持续交付促使我们更快、更可靠、更频繁地改进软件;基础设施即代码(Infrastructure As Code)帮助我们简化环境的管理,这些都是推动微服务诞生的重要因素。如果没有这些基础,微服务架构在展现魅力的同时,可能由于各种问题导致最终失败。
从SOA架构到服务化架构,再到微服务架构,是一个逐步演进的过程。Amazon被认为是微服务的鼻祖。2015年我曾经接触过一个Amazon的工程师,他并不是特别了解微服务这个名词,直到看完Martin Fowler关于微服务的文章,才发现自己一直在做的就是微服务架构。可以说微服务架构并不是什么技术创新,而是开发过程发展到一定阶段对技术架构的要求,是在实践中不断摸索而来的。每个公司所信奉的架构思想有相同之处,但是也不尽相同。这种化繁为简的拆分方式,不只在技术上带来突破,更带来了很多潜在的价值,如关注点分离、沟通效率提升、快速演进、快速交付、快速反馈等。