12因素应用和微服务
12-Factor 为构建如下的 SaaS 应用提供了方法论:
- 使用标准化流程自动配置,从而使新的开发者花费最少的学习成本加入这个项目。
- 和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性。
- 适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源。
- 将开发环境和生产环境的差异降至最低,并使用持续交付实施敏捷开发。
- 可以在工具、架构和开发流程不发生明显变化的前提下实现扩展。
满足12 因素的app大概是这样的:
1 | I. 基准代码 |
微服务作为一个概念是满足12因素的多应用方案,是一个可以具体落地的方案。
单体服务与微服务
单体服务,以 MVC 架构为例,业务通常是通过部署一个 WAR 包到 Tomcat 中,然后启动 Tomcat,监听某个端口即可对外提供服务。早期在业务规模不大、开发团队人员规模较小的时候,采用单体应用架构,团队的开发和运维成本都可控。存在问题如下:
- 部署效率低下。
- 团队协作开发成本高。
- 系统高可用性差。
- 线上发布变慢。
服务化,就是把传统的单机应用中通过 JAR 包依赖产生的本地方法调用,改造成通过 RPC 接口产生的远程方法调用。通过服务化,可以解决单体应用膨胀、团队开发耦合度高、协作效率低下的问题。
- 单体服务的线上服务稳定容易被其他功能模块影响。
- 单体服务在进行多个功能模块开发的时候混合进行开发、测试部署。不同功能之间容易影响。
服务化的思想进一步演化,演变为今天我们所熟知的微服务。微服务相比于服务化的不同:
- 服务拆分粒度更细。
- 服务独立部署。
- 服务独立维护。
- 服务治理能力要求高。
常见的服务拆分方式:
- 纵向拆分,从业务角度拆分,按照业务的关联独立程度来决定。独立功能,关联较为深的拆分微服务。
- 横向拆分,从公共且独立功能维度拆分。多个公共服务被调用,且依赖资源独立不与其他业务耦合。
参考
- 12-factors app
- [从 0 开始学微服务 - 极客时间 - 胡忠想]