微服务是个说的挺长时间的概念,也是比较成熟的技术体系。像 Spring Cloud,甚至提供了
微服务所需要的全套框架,包括注册中心 (Eureka)、配置中心 (Config)、断路器 (Hytrix)、API
网关 (Zuul) 等组件。微服务体系庞杂,每个组件都能独自成章。
微服务与更早就起来的 SOA 是什么关系? 个人觉得如果从概念上来说,微服务和 SOA 都是
一回事,强调把整个系统,按照多个服务的方式去组合及通信,而不是揉合在一起,但它们的
内涵有很大的区别。
SOA 诞生在早期企业级的应用,其业务复杂、技术体系多样,SOA 强调的是各个服务之间,
尤其是异构系统、遗留系统之间,建立起一套统一的协议和通信 (SOAP),以及寻址服务
(UDDI),它的侧重点在集成和兼容;与 SOA 同期的另一种概念 ESB(企业总线),强调通过一
根总线服务,把所有服务串联起来,由 ESB 总线来屏蔽各种不同业务系统自身业务 / 语言 /
协议的特殊性,各服务以一种统一的方式,与总线相连,从而降低接入成本。
这两种概念,我感觉在国内没有太发展起来。一是国内的软件起步相对较晚,系统的整体复杂
度——多厂商、多语言 / 技术栈、历史遗留系统的问题,还不算突出。而对于公司内部的产品
系,又没有必要使用 SOA、UDDI 来做复杂的集成。随着互联网的兴起和用户量的迅速爆发,
企业自身的产品的微服务化的需求,快速发展起来,而与此同时 SOA 这种以 XML 为基础的
SOAP 协议、以寻址为主要作用的 UDDI,不能使用互联网产品的发展——SOAP 的 XML
协议内容太多,造成性能明显下降;HTTP 协议的效率不如 RPC;UDDI 只有寻址,缺少服务
治理等功能。
在此种大背景下,以服务切分 + 服务注册 + 服务治理 + 限流降级 +RPC+ 监控等为主要
内涵的微服务,就快速发展起来的。国内的阿里巴巴走在前列,以 Dubbo 为代表在国内互联
网企业中得到广泛应用;后来 Spring 官方发布 Spring Cloud,揉合了一系列自研或其他企
业捐赠的开源项目,发布微服务领域的 Spring Cloud 产品。各自都有各自的优势和劣势,而