解析微服
-
为什么需要微服务架构
“微服务
-
使用传统
的整体式 架构(M onol ithi c Arch itec ture )应用开 发系统, 如CRM 、ERP 等大型应 用,随着 新需求的 不断增加 ,企业更 新和修复 大型整体 式应用变 得越来越 困难 ; -
随着移动
互联网的 发展,企 业被迫将 其应用迁 移至现代 化UI界 面架构以 便能兼容 移动设备 ,这要求 企业能实 现应用功 能的快速 上线 ; -
许多企业
在SOA 投资中得 到的回报 有限,S OA可以 通过标准 化服务接 口实现能 力的重用 ,但对于 快速变化 的需求, 受到整体 式应用的 限制,有 时候显得 力不从心 ; -
随着应用
云化的日 益普及, 生于云端 的应用具 有与传统 IT不同 的技术基 因和开发 运维模式 。
此外,从
-
互联网/内联网/网络更加成熟;
-
轻量级运
行时技术 的出现( node .js, WAS Liberty等); -
新的方法与工具(Agile, DevOps, TDD, CI, XP, Puppet, Chef…);
-
新的轻量级协议(RESTful API接口, 轻量级消息机制);
-
简化的基
础设施: 操作系统 虚拟化( hype rvis ors) , 容器化(e.g. Docker), 基础设施即服务 (IaaS), 工作负载 虚拟化( Kube rnet es,S park …)等 ; -
服务平台化(PaaS): 云服务平
台上具有 自动缩放 、工作负 载管理、 SLA 管理、消 息机制、 缓存、构 建管理等 各种按需 使用的服 务 ; -
新的可替
代数据持 久化模型 :如No SQL, MapReduce, BASE, CQRS等; -
标准化代码管理:如Github等。
这一切都催生了新的架构设计风格 – 微服务架构的出现。
-
什么是微服务
微服务是
微服务的
尽管“微
微服务架
其中,对
-
微服务架构的一些通用特性
根据Ma
-
通过服务
实现应用 的组件化 (Com pone ntiz atio nvia Serv ices ):微服 务架构中 将组件定 义为可被 独立替换 和升级的 软件单元 ,在应用 架构设计 中通过将 整体应用 切分成可 独立部署 及升级的 微服务方 式进行组 件化设计 。 -
围绕业务
能力组织 服务(O rgan ized arou nd Business Capa bili ties ):微服 务架构采 取以业务 能力为出 发点组织 服务的策 略,因此 微服务团 队的组织 结构必须 是跨功能 的(如: 既管应用 ,也管数 据库)、 强搭配的 DevO ps开发 运维一体 化团队, 通常这些 团队不会 太大(如 :亚马逊 的“Tw o pizzateam”- 不超过12人)。 -
产品而非
项目模式 (Pro duct snot Proj ects ):传统 的应用模 式是一个 团队以项 目模式开 发完整的 应用,开 发完成后 就交付给 运维团队 负责维护 ;微服务 架构则倡 导一个团 队应该如 开发产品 般负责一 个“微服 务”完整 的生命周 期,倡导 “谁开发 ,谁运营 ”的开发 运维一体 化方法 。 -
智能端点
与管道扁 平化(S mart endp oint s and dumb pipe s):微 服务架构 主张将组 件间通讯 的相关业 务逻辑/ 智能放在 组件端点 侧而非放 在通讯组 件中,通 讯机制或 组件应该 尽量简单 及松耦合 。RES Tful HTTP 协议和仅 提供消息 路由功能 的轻量级 异步机制 是微服务 架构中最 常用的通 讯机制 。 -
“去中心
化”治理 (Dec entr aliz edGo vern ance ):整体 式应用往 往倾向于 采用单一 技术平台 ,微服务 架构则鼓 励使用合 适的工具 完成各自 的任务, 每个微服 务可以考 虑选用最 佳工具完 成(如不 同的编程 语言)。 微服务的 技术标准 倾向于寻 找其他开 发者已成 功验证解 决类似问 题的技术 。 -
“去中心
化”数据 管理(D ecen tral ized Data Mana geme nt): 微服务架 构倡导采 用多样性 持久化( Poly glot Pers iste nce) 的方法, 让每个微 服务管理 其自有数 据库,并 允许不同 微服务采 用不同的 数据持久 化技术 。 -
基础设施
自动化( Infr astr uctu reAu toma tion ):云化 及自动化 部署等技 术极大地 降低了微 服务构建 、部署和 运维的难 度,通过 应用持续 集成和持 续交付等 方法有助 于达到加 速推出市 场的目的 。 -
故障处理设计(Designfor fail
ure) :微服务 架构所带 来的一个 后果是必 须考虑每 个服务的 失败容错 机制。因 此,微服 务非常重 视建立架 构及业务 相关指标 的实时监 控和日志 机制 。 -
演进式的
设计(E volu tion aryD esig n):微 服务应用 更注重快 速更新, 因此系统 的计会随 时间不断 变化及演 进。微服 务的设计 受业务功 能的生命 周期等因 素影响。 如某应用 是整体式 应用,但 逐渐朝微 应用架构 方向演进 ,整体式 应用仍是 核心,但 新功能将 使用应用 所提供的 API构 建。再如 在某微服 务应用中 ,可替代 性模块化 设计的基 本原则, 在实施后 发现某两 个微服务 经常必须 同时更新 ,则这很 可能意味 着应将其 合并为一 个微服务 。
-
微服务的一些常见误解
关于一些比较概念的澄清:
-
在同一范畴内比较才有意义:
-
微服务架构 vs. SOA – 两者都是
架构风格 范畴,但 其关注领 域与涉及 范围不同 。SOA 更关注企 业规模范 围,微服 务架构则 更关注应 用规模范 围 。 -
微服务组件 vs. 服务组件 – 两者都是
描述业务 功能的具 体实现, 其区别在 于粒度不 同,此外 还有在可 管理性、 灵活性上 的差异 。
-
-
概念混淆的不恰当比较
-
微服务 vs. SOA – 不恰当的
比 较。微服 务是组件 范畴,而 SOA是 一种架构 设计风格 。因此应 该比较的 是微服务 架构与S OA 。 -
微服务 vs. API – 不恰当的比较。 API是
接口,是 业务功能 暴露的一 种机制。 微服务架 构是用于 实施业务 功能的组 件架构。 因此直接 比较它们 是没有意 义的 。 -
微服务 vs. 服务– 不恰当的
比 较。“服 务”在不 同的场景 下有不同 的含义, 需要进一 步澄清其 描述的语 境,是指 服务实施 、服务暴 露、服务 定义还是 其他?微 服务亦是 如此,需 要有特定 语境才可 判断比较 是否有意 义 。
-
-
微服务架构与SOA架构的比较
-
一个简单的微服务应用例子:航班预订应用
将航班预
-
哪些应用会从微服务收益 ?
-
记录型系统(System of Reco
rd )将从微 服务方法 中获益最 多。例如 可将大型 应用按相 对独立的 业务功能 分解成若 干个微服 务实现 。 -
交互型系统(System of Enga
geme nt )也将受 益于微服 务方法, 例如渠道 应用可以 应用“后 端服务前 端”的模 式实现 。 -
分析型系统(System of Insi
ght )则可能 对微服务 受益不多 。其他架 构模式如 管道及过 滤模式可 能更适用 于分析型 系统 。
-
微服务架构的优点:
-
每个服务
都比较简 单,只关 注于一个 业务功能 。 -
微服务架
构方式是 松耦合的 ,可以提 供更高的 灵活性 。 -
微服务可
通过最佳 及最合适 的不同的 编程语言 与工具进 行开发, 能够做到 有的放矢 地解决针 对性问题 。 -
每个微服
务可由不 同团队独 立开发, 互不影响 ,加快推 出市场的 速度 。 -
微服务架
构是持续 交付(C D)的巨 大推动力 ,允许在 频繁发布 不同服务 的同时保 持系统其 他部分的 可用性和 稳定性 。
-
微服务架构的缺点:
微服务
-
运维开销
及成本增 加:整体 应用可能 只需部署 至一小片 应用服务 区集群, 而微服务 架构可能 变成需要 构建/测 试/部署 /运行数 十个独立 的服务, 并可能需 要支持多 种语言和 环境。这 导致一个 整体式系 统如果由 20个微 服务组成 ,可能需 要40~ 60个进 程 。 -
必须有坚
实的De vOps 开发运维 一体化技 能:开发 人员需要 熟知运维 与投产环 境,开发 人员也需 要掌握必 要的数据 存储技术 如NoS QL,具 有较强D evOp s技能的 人员比较 稀缺,会 带来招聘 人才方面 的挑战 。 -
隐式接口
及接口匹 配问 题:把系 统分为多 个协作组 件后会产 生新的接 口,这意 味着简单 的交叉变 化可能需 要改变许 多组件, 并需协调 一起发布 。在实际 环境中, 一个新品 发布可能 被迫同时 发布大量 服务,由 于集成点 的大量增 加,微服 务架构会 有更高的 发布风险 。 -
代码重
复:某些 底层功能 需要被多 个服务所 用,为了 避免将“ 同步耦合 引入到系 统中”, 有时需要 向不同服 务添加一 些代码, 这就会导 致代码重 复 。 -
分布式系
统的复杂 性:作为 一种分布 式系统, 微服务引 入了复杂 性和其他 若干问题 ,例如网 络延迟、 容错性、 消息序列 化、不可 靠的网络 、异步机 制、版本 化、差异 化的工作 负载等, 开发人员 需要考虑 以上的分 布式系统 问题 。 -
异步机
制:微服 务往往使 用异步编 程、消息 与并行机 制,如果 应用存在 跨微服务 的事务性 处理,其 实现机制 会变得复 杂化 。 -
可测性的
挑 战:在动 态环境下 服务间的 交互会产 生非常微 妙的行为 ,难以可 视化及全 面测试。 经典微服 务往往不 太重视测 试,更多 的是通过 监控发现 生产环境 的异常, 进而快速 回滚或采 取其他必 要的行动 。但对于 特别在意 风险规避 监管或投 产环境错 误会产生 显著影响 的场景下 需要特别 注意 。
-
关于微服务架构的取舍
-
在合适的
项目,合 适的团队 ,采用微 服务架构 收益会大 于成本 。 -
微服务架
构有很多 吸引人的 地方,但 在拥抱微 服务之前 ,也需要 认清它所 带来的挑 战 。 -
需要避免为了“微服务”而“微服务”。
-
微服务架构引入策略 – 对传统企
业而言, 开始时可 以考虑引 入部分合 适的微服 务架构原 则对已有 系统进行 改造或新 建微服务 应用,逐 步探索及 积累微服 务架构经 验,而非 全盘实施 微服务架 构 。
下
转载自:https://www.ibm.com/developerworks/community/blogs/3302cc3b-074e-44da-90b1-5055f1dc0d9c/entry/%E8%A7%A3%E6%9E%90%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84_%E4%B8%80_%E4%BB%80%E4%B9%88%E6%98%AF%E5%BE%AE%E6%9C%8D%E5%8A%A1?lang=es