持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情
微服务是一种现代的软件开发方法,通过这种方法,应用程序代码可以分成小的、可管理的部分,独立于其他部分。
特性
- 服务组件化(每个组件都有完整的生命周期,包含自己的API,可以独立存在)
- 围绕业务能力组织(缩小服务边界,每个服务可以独立负责)
- 做产品不是做项目(服务要以产品的思维考虑模块的设计和演进)
- 智能端点和哑管道(服务之间调用的端点可以动态获取以服务发现的方式提供,对于出错的场景提供熔断器)
- 去中心化治理(每个服务都相对独立,可以用不同的技术方案实现)
- 去中心化管理数据(不同模块使用不同的库或表)
- 基础设施自动化(自动化部署、自动化交付等)
- 容错设计(服务是不可信的,快速检测故障并尽可能自动恢复服务是必须被设计和考虑的)
- 演进式设计(微服务的架构设计,应当是逐步推进的。先核心后边缘、先稳定后多变)
优点
- 可以解决应用复杂性问题,每个微服务更好的切分业务边界
- 每个模块有专门的团队和人员负责,可以选择最合适的技术进行实现,架构演进简单,降低历史技术债务
- 微服务之间相互不影响与依赖,降低耦合度,可以独立开发
- 微服务都可以独立部署,根据业务特征动态调整资源
缺点
- 开发人员要处理分布式系统改造,增加技术成本
- 更清晰的边界划分使标准化变的困难
- 单体应用内部的通信远低于微服务组件通信
- 管理微服务拓扑的复杂性
- 数据库的设计和业务规划成为难点,对开发者提出更多的要求
三维可扩展模型
应用基本可以用以上三个维度来表示
- X轴(水平复制)通过对完整应用复制进行扩展
- Y轴(功能分解)通过分割不同模块进行扩展(微服务)
- Z轴(数据分区)通过分割相同模块进行扩展