微服务设计的六大原则
1. 高耦合低内聚
- 单一职责
- 轻量级通信
- 服务间的契约
紧密关联的事务应该放在一起,每个服务是针对一个单一职责的业务能力的封装,专注做好一项职责,也只会因为该职责的变化而进行修改。服务之间通过轻量级的通信方式进行通信,使得服务间相对独立,处于低耦合的状态。
2. 高度自治
- 能独立开发、部署和发布
- 进程隔离
- 独立的代码库、流水线
- 服务独立部署运行和扩展,每个服务能够独立部署并运行在独立的进程内。这种部署和运行的方式能够赋予系统灵活的代码组织方式和发布节奏,使得快速交付和应对变化成为可能。
- 独立开发和演进,且技术选型灵活,不受遗留系统技术栈的约束。合适的业务问题可以选择合适的技术栈,可以独立的演进。服务与服务之间采用与语言无关的网络通信进行交互
- 独立的团队和自治,团队对服务的整个生命周期负责,工作在独立的上下文中,工程师负责项目的整个周期,不需要相互了解
3. 以业务为中心
- 每个服务代表了特定的业务逻辑
- 能更快速地响应业务变化
- 围绕业务组织团队
每个服务代表了特定的业务逻辑,有明显的边界上下文,围绕业务组织团队,能快速地响应业务的变化。隔离实现细节,让业务领域可以被重用。
4. 弹性设计
- 容错
- 服务降级
设计可容错的系统,预防异常,为已知的错误而设计。设计具有自我保护能力的系统。服务之间相互隔离,限制使用资源,防止级联的服务雪崩错误。
5. 日志与监控
- 日志聚合
- 监控和警告
监控主要包括服务可用状态、请求流量、调用链、错误计数,结构化的日志和服务依赖关系可视化等内容,以便发现问题并及时修复。全面的监控也可以进行适时调整系统负载,必要时进行降级服务,过载保护等,从而让系统和环境提供高效稳定的服务。
6. 自动化
- 持续集成
- 持续交付
传统的手工运维方式必然要被淘汰,微服务的实施是有一定先决条件的:那就是自动化。当服务规模化后需要更多自动化和标准化的手段来提升效能和降低成本。自动化运维必不可少,因为相对比单体架构,确保大量的微服务正常运行是一个更复杂的过程。