阿里微服务布道师:详解微服务架构设计

微服务软件架构是一个包含各种组织的系统组织 , 这些组件包括 Web服务器, 应用服务器, 数据库,存储, 通讯层), 它们彼此或和环境存在关系 。系统架构的目标是解决利益相关者的关注点 。

阿里微服务布道师:详解微服务架构设计

文章插图
 
Conway’s law: Organizations which design systems[...] are constrained to produce designs which are copies of the communication structures of these organizations.
(设计系统的组织 , 其产生的设计和架构等价于组织间的沟通结构 。)
Monolithic架构
阿里微服务布道师:详解微服务架构设计

文章插图
 
Monolithic比较适合小项目 , 优点是:
开发简单直接 , 集中式管理, 基本不会重复开发
功能都在本地 , 没有分布式的管理开销和调用开销 。它的缺点也非常明显 , 特别对于互联网公司来说(不一一列举了):
开发效率低:所有的开发在一个项目改代码 , 递交代码相互等待 , 代码冲突不断
代码维护难:代码功能耦合在一起 , 新人不知道何从下手
部署不灵活:构建时间长 , 任何小修改必须重新构建整个项目 , 这个过程往往很长
稳定性不高:一个微不足道的小问题 , 可以导致整个应用挂掉
扩展性不够:无法满足高并发情况下的业务需求
微服务架构微服务是指开发一个单个小型的但有业务功能的服务 , 每个服务都有自己的处理和轻量通讯机制 , 可以部署在单个或多个服务器上 。微服务也指一种种松耦合的、有一定的有界上下文的面向服务架构 。也就是说 , 如果每个服务都要同时修改 , 那么它们就不是微服务 , 因为它们紧耦合在一起;如果你需要掌握一个服务太多的上下文场景使用条件 , 那么它就是一个有上下文边界的服务 , 这个定义来自DDD领域驱动设计 。
相对于单体架构和SOA , 它的主要特点是组件化、松耦合、自治、去中心化 , 体现在以下几个方面:
  • 一组小的服务
    服务粒度要小 , 而每个服务是针对一个单一职责的业务能力的封装 , 专注做好一件事情 。
  • 独立部署运行和扩展
    每个服务能够独立被部署并运行在一个进程内 。这种运行和部署方式能够赋予系统灵活的代码组织方式和发布节奏 , 使得快速交付和应对变化成为可能 。
  • 独立开发和演化
    技术选型灵活 , 不受遗留系统技术约束 。合适的业务问题选择合适的技术可以独立演化 。服务与服务之间采取与语言无关的API进行集成 。相对单体架构 , 微服务架构是更面向业务创新的一种架构模式 。
  • 独立团队和自治
    团队对服务的整个生命周期负责 , 工作在独立的上下文中 , 自己决策自己治理 , 而不需要统一的指挥中心 。团队和团队之间通过松散的社区部落进行衔接 。
我们可以看到整个微服务的思想就如我们现在面对信息爆炸、知识爆炸是一样的:通过解耦我们所做的事情 , 分而治之以减少不必要的损耗 , 使得整个复杂的系统和组织能够快速的应对变化 。
我们为什么采用微服务呢?
"让我们的系统尽可能快地响应变化" - Rebecca Parson
让我们的系统尽可能快地去响应变化 。其实几十年来我们一直在尝试解决这个问题 。如果一定要在前面加个限制的话 , 那就是低成本的快速响应变化 。上世纪90年代Kent Beck提出要拥抱变化 , 在同期出现了诸多轻量级开发方法(诸如 XP、Scrum);2001年敏捷宣言诞生 , 之后又出现了精益、看板等新的管理方式 。如果说 , 这些是为了尽快的响应变化 , 在软件开发流程和实践方面提出的解决方案 , 那么微服务架构就是在软件技术和架构层面提出的应对之道 。
阿里微服务布道师:详解微服务架构设计

文章插图
 
 
Autonomous
A Microservice is a unit of functionality; it provides an API for a set of capabilities oriented around a business domain or common utility
Isolated
A Microservice is a unit of deployment; it can be modified, tested and deployed as a unit without impacting other areas of a solution
Elastic


推荐阅读