什么是微服务架构?有很多种定义方法。我的定义是这这样的:
微服务架构指的是将大型复杂系统按功能或者业务需求垂直切分成更小的子系统,这些子系统以独立部署的子进程存在,它们之间通过轻量级的、跨语言的同步(比如 REST,gRPC)或者异步(消息)网络调用进行通信。
下面是基于微服务架构的商业 Web 应用的组件视图:
微服务架构的重要特征
整个应用程序被拆分成相互独立但包含多个内部模块的子进程
与模块化的单体应用(Modular Monoliths)或 SOA 相反,微服务应用程序根据业务范围或领域垂直拆分。
微服务边界是外部的,微服务之间通过网络调用(RPC 或消息)相互通信。
微服务是独立的进程,它们可以独立部署。
它们以轻量级的方式进行通信,不需要任何智能通信通道。
微服务架构的优点
更好的开发规模
更快的开发速度
支持迭代开发或现代化增量开发
充分利用现代软件开发生态系统的优势(云、容器、 DevOps、Serverless)
支持水平缩放和细粒度缩放
小体量,较低了开发人员的认知复杂性
微服务架构的缺点
更高数量级的活动组件(服务、数据库、进程、容器、框架)
复杂性从代码转移到基础设施
RPC 调用和网络通信的大量增加
整个系统的安全性管理更具有挑战性
整个系统的设计变得更加困难
引入了分布式系统的复杂性
何时使用微服务架构
大规模 Web 应用开发
跨团队企业级应用协作开发
长期收益优先于短期收益
团队拥有能够设计微服务架构的软件架构师或高级工程师