专栏名称: 聊聊架构
聊聊架构
目录
相关文章推荐
字节跳动技术团队  ·  字节跳动技术副总裁洪定坤:TRAE 想做 ... ·  昨天  
java1234  ·  跟阿里P9学 画架构图,永久免费了 ·  2 天前  
java1234  ·  跟阿里P9学 画架构图,永久免费了 ·  2 天前  
51好读  ›  专栏  ›  聊聊架构

Re:重识微服务架构

聊聊架构  · 公众号  · 架构  · 2017-07-26 18:00

正文

请到「今天看啥」查看全文


Chris Richardson 说:“微服务”是一个很糟糕的名字,它导致开发人员创建了许多粒度很小的服务,每个服务拥有一个单独的 REST 端点。不仅如此,这个名字还暗示了微服务在开发者心目中的重要位置。例如,人们会说“我们可以用微服务来解决这个问题”;我也看到了越来越多的“某某微服务框架”,而实际上,这些框架跟微服务架构不一定有太多联系,它们只是简单的 Web 框架。使用“微服务架构”这个名字会更恰当些。它是一种架构风格,它把一系列协作的服务组织成一个系统来支撑业务。

常见的微服务组件及概念
  1. 服务注册 ,服务提供方将自己调用地址注册到服务注册中心,让服务调用方能够方便地找到自己。

  2. 服务发现 ,服务调用方从服务注册中心找到自己需要调用的服务的地址。

  3. 负载均衡 ,服务提供方一般以多实例的形式提供服务,负载均衡功能能够让服务调用方连接到合适的服务节点。并且,节点选择的工作对服务调用方来说是透明的。

  4. 服务网关 ,服务网关是服务调用的唯一入口,可以在这个组件是实现用户鉴权、动态路由、灰度发布、A/B 测试、负载限流等功能。

  5. 配置中心 ,将本地化的配置信息(properties, xml, yaml 等)注册到配置中心,实现程序包在开发、测试、生产环境的无差别性,方便程序包的迁移。

  6. API 管理 ,以方便的形式编写及更新 API 文档,并以方便的形式供调用者查看和测试。

  7. 集成框架 ,微服务组件都以职责单一的程序包对外提供服务,集成框架以配置的形式将所有微服务组件(特别是管理端组件)集成到统一的界面框架下,让用户能够在统一的界面中使用系统。

  8. 分布式事务 ,对于重要的业务,需要通过分布式事务技术(TCC、高可用消息服务、最大努力通知)保证数据的一致性。

  9. 调用链 ,记录完成一个业务逻辑时调用到的微服务,并将这种串行或并行的调用关系展示出来。在系统出错时,可以方便地找到出错点。

  10. 支撑平台 ,系统微服务化后,系统变得更加碎片化,系统的部署、运维、监控等都比单体架构更加复杂,那么,就需要将大部分的工作自动化。现在,可以通过 Docker 等工具来中和这些微服务架构带来的弊端。 例如持续集成、蓝绿发布、健康检查、性能健康等等。严重点,以我们两年的实践经验,可以这么说,如果没有合适的支撑平台或工具,就不要使用微服务架构。

一般情况下,如果希望快速地体会微服务架构带来的好处,使用 Spring Cloud 提供的 服务注册(Eureka) 服务发现(Ribbon) 服务网关(Zuul) 三个组件即可以快速入门。其它组件则需要根据自身的业务选择性使用。

微服务架构有哪些优势劣势?

要谈优势,就一定要有对比,我们可以尝试着从 两个维度 来对比。

一、微服务架构与单体架构的对比
S/N 对比点 微服务架构 单体架构 结论
1 上手难度 API 接口调用 数据库共享或本地程序调用 单体架构胜
2.1 开发效率(简单项目) 早期设计和沟通的工作量加大,随着项目规模和时间的推移,效率变化不大 早期工作量小,随着项目规模和时间的推移,效率大幅度下降 单体架构胜
2.2 开发效率(复杂项目) 早期设计和沟通的工作量加大,随着项目规模和时间的推移,效率变化不大 早期工作量小,随着项目规模和时间的推移,效率大幅度下降 微服务架构胜
3 系统设计(高内聚低耦合) 每个业务单独包装成一个微服务,数据和代码都从物理上隔离开来,实现高内聚低耦合相对容易 以包的形式对代码进行模块划分,控制得当即可实现高内聚。但最终都是在数据层面将整个系统耦合在一起 微服务架构胜
4 系统设计(扩展性) 独立开发新模块,通过 API 与现有模块交互 在现有系统上修改,与现存业务逻辑高度耦合 微服务架构胜
5 需求变更响应速度 各个微服务组件独立变更,容易实施敏捷开发方法 需要了解整个系统才可以正确修改,容易导致不相关模块的意外失败 微服务架构胜
6 系统升级效率 各个微服务组件独立升级,上手和开发效率高,影响面小 需要了解整个系统才可以正确修改,容易导致不相关模块的意外失败 微服务架构胜
7 运维效率 大系统被拆分为多个小系统,部署和运维难度加大,但可以利用 DevOps 等方式将运维工作自动化 简单直接 单体架构胜
8 知识积累 微服务组件可以在新项目中直接复用,包括前端页面 一般以共享库的形式复用后台代码 微服务架构胜
9.1 硬件需求(简单项目) 一个系统需部署多个微服务,需要启动多个运行容器 整个系统只需要一个运行容器 单体架构胜
9.2 硬件需求(高要求项目) 按需为不同业务模块伸缩资源节点 为整个系统分配资源,导致冗余 微服务架构胜
10.1 项目成本(简单系统) 项目早期和后期,成本变化曲线平缓 项目早期成本低,后期成本大 单体架构胜
10.2 项目成本(复杂系统) 项目早期和后期,成本变化曲线平缓 项目早期成本低,后期成本大 微服务架构胜
11 非功能需求 为单独的微服务按需调优,甚至更换实现方式和程序语言 为整个系统调优,牵一发而动全身 微服务架构胜
12 职责、成就感 拥有明确的职责划分,主人翁意识和成就感加强,容易形成自组织型团队 职责不明确,容易产生扯皮行为 微服务架构胜
13 风险 大系统被拆分为小系统,风险可被控制在小系统内,但也引入了各小系统之间的交互风险 系统是一个整体,一荣俱荣,一损俱损 微服务架构胜

结论 :







请到「今天看啥」查看全文