我意识到,虽然基础设施自动化,测试和持续交付等技术很有用,但如果系统本身的设计不支持快速变化,那所能做的事情将会受到很大的限制。
本书关注的是微服务的理念,而不是具体的技术,因为实现技术的变化速度很快,但是其背后的理论概念却需要时间进行变迁。
随着领域驱动设计,持续交付,按需虚拟化,基础设施自动化,小型自治团队,大型集群系统这些实践的流行,微服务也应运而生。
什么是微服务?
微服务很小,专注做好一件事情。在一个单体系统内,通常会创建抽象层或者模块来保证代码的内举行,从而避免上述问题。
单一职责原则,即内聚性:把因相同原因而变化的东西聚合到一起,而把不同原因而变化的东西分离开来。
微服务的自治性:
为了达到解耦的目的,你需要正确地建模服务和API,服务的交互协议可以有多种。
微服务可以单独管理生命周期,不会影响其他的服务。
微服务的主要好处:
1. 技术的异构性,且每个微服务可以有自己的技术栈(从开发语言,存储技术等)。
2. 扩展,系统中一般只有一部分的逻辑存在性能问题,但为此却需要扩展整个单体应用。
3. 可以快速的部署,两次发布之间的差异越大,出错的可能性就更大。
4. 与组织结构相匹配,且方便项目在团之间的流通交接。
6. 可组合型。外部复杂多变的需求,多样的渠道终端,可能需要后部同一服务支持多种组装模式和多种交互协议。
7. 对可替代性优化,重要且又复杂的遗留系统的改造:工作量大,而且修改 风险很高。