Microservices(微服务)入门

68 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情

微服务是一种现代的软件开发方法,通过这种方法,应用程序代码可以分成小的、可管理的部分,独立于其他部分。

image.png

特性

  • 服务组件化(每个组件都有完整的生命周期,包含自己的API,可以独立存在)
  • 围绕业务能力组织(缩小服务边界,每个服务可以独立负责)
  • 做产品不是做项目(服务要以产品的思维考虑模块的设计和演进)
  • 智能端点和哑管道(服务之间调用的端点可以动态获取以服务发现的方式提供,对于出错的场景提供熔断器)
  • 去中心化治理(每个服务都相对独立,可以用不同的技术方案实现)
  • 去中心化管理数据(不同模块使用不同的库或表)
  • 基础设施自动化(自动化部署、自动化交付等)
  • 容错设计(服务是不可信的,快速检测故障并尽可能自动恢复服务是必须被设计和考虑的)
  • 演进式设计(微服务的架构设计,应当是逐步推进的。先核心后边缘、先稳定后多变)

优点

  • 可以解决应用复杂性问题,每个微服务更好的切分业务边界
  • 每个模块有专门的团队和人员负责,可以选择最合适的技术进行实现,架构演进简单,降低历史技术债务
  • 微服务之间相互不影响与依赖,降低耦合度,可以独立开发
  • 微服务都可以独立部署,根据业务特征动态调整资源

缺点

  • 开发人员要处理分布式系统改造,增加技术成本
  • 更清晰的边界划分使标准化变的困难
  • 单体应用内部的通信远低于微服务组件通信
  • 管理微服务拓扑的复杂性
  • 数据库的设计和业务规划成为难点,对开发者提出更多的要求

三维可扩展模型

image.png

应用基本可以用以上三个维度来表示

  • X轴(水平复制)通过对完整应用复制进行扩展
  • Y轴(功能分解)通过分割不同模块进行扩展(微服务)
  • Z轴(数据分区)通过分割相同模块进行扩展

基础设施自动化架构图

image.png