工作中使用了微服务,接下来的一段时间里,我会写一系列的文章来介绍微服务架构,同时我也会在github上写一个microservices的应用框架(地址会在后续文章给出)。

上一篇文章详细说明了单一应用架构与微服务架构各自的优缺点,这篇文章是对

http://microservices.io/patterns/decomposition/decompose-by-business-capability.html和 http://microservices.io/patterns/decomposition/decompose-by-subdomain.html 的翻译和整理, 内容是讲解如何把应用拆分成服务: 根据业务能力拆分或者根据子域拆分。

一、上下文

你正在开发一个大型的复杂项目,并且你想要使用微服务架构。微服务架构把应用的结构变成了一系列松耦合的服务。使用微服务架构的目的是通过持续交付、持续部署来加速软件开发的速度。

微服务架构用两种方式来达到目的:

  1. 简化测试,使得组件可以独立部署
  2. 把工程师团队分成一个个小的、自主的团队(6到10人),每个团队负责一个或多个服务

这些好处不是自动就能得到的,相反的,它需要我们对服务有一个仔细的划分。

一个服务必须足够小,使得可以被一个小的团队开发和测试。从面向对象设计那里学到的一个有用的方法是单一职责原则。

应用也要被一种合适的方法拆分,从而大多数新的和修改的需求只影响到单个service。因为影响到多个service的改动需要多个团队之间的合作,这会拖慢开发的速度。另一个面向对象设计的有效原则是共同封闭原则,它是说,因为同一个原因修改的类应该在同一个包中。这种思想在设计服务时也同样有效:每个变化应该只影响一个service。

二、问题和强制条件

问题:
如何把应用拆解成服务?
强制条件:

  • 架构应该稳定
  • 一个服务应该实现一个强相关的方法的小集合
  • 服务必须遵从共同封闭原则
  • 服务应该松耦合:一个服务的实现的变化不影响调用它的API的客户端
  • 服务应该是可测试的
  • 服务应该足够小,可以被6到10人的小团队开发
  • 每个团队应该是自主的。一个团队可以开发和部署他们的服务,而只需要和别的团队有一些最小的合作

三、解决方案

1.根据业务能力拆分

业务能力是业务架构模型中的一个概念。业务模型经常对应于一个业务对象,比如说:订单管理负责订单,客户管理负责客户。

业务能力经常组织成一个多层等级。比如说,一个企业应用也许有顶级的分类,如产品开发、产品交付、需求挖掘等。

示例

一个在线商城的业务能力包括:

  • 产品目录管理
  • 存货管理
  • 订单管理
  • 发货管理

对应的微服务架构会有一些服务对应于这些业务能力:

结果

这种模式有以下好处:

  • 架构稳定,因为业务能力相对比较稳定
  • 开发团队是自主的,围绕着交付业务价值而不是技术特性来组织
  • 服务之间共同合作,松耦合

问题

有以下问题需要解决:
  • 如何定义业务能力?定义业务能力和服务需要对业务有一个好的理解, 需要对组织的目标、结构、业务流程做一个分析。定义业务能力的好的开始点是:

    • 组织结构: 一个组织内的不同组对应于业务能力或者业务能力组
    • 高层领域模型: 业务能力经常对应于领域对象

2. 根据子域拆分

定义对应于领域驱动设计(DDD)的子域的服务。 一个领域由多个子域组成。每个子域对应了业务的不同组成部分。
子域可以被这样分类:
  • 核心: 业务的核心区分点,应用的最有价值的部分
  • 支持: 与业务是做什么的相关,但不是主要区分点。这个可以自己做或者外包。
  • 通用: 不特定于业务,理想情况下使用现成的软件来实现

示例

一个在线商城的子域包括

  • 商品目录
  • 存货管理
  • 订单管理
  • 发货管理

对应的微服务架构会有一些服务对应于这些子域。

结果

这种模式有以下这些好处:(与上面的方法一样的)

  • 架构稳定,因为业务能力相对比较稳定
  • 开发团队是自主的,围绕着交付业务价值而不是技术特性来组织
  • 服务之间共同合作,松耦合

问题

有以下问题需要解决:
  • 如何定义子域?定义子域和服务需要对业务有一个好的理解, 需要对组织的目标、结构、业务流程做一个分析。定义子域的好的开始点是:

    • 组织结构: 一个组织内的不同组对应于业务能力或者业务能力组
    • 高层领域模型: 业务能力经常对应于领域对象
原文来自原点击打开链接

【Dubbo】微服务架构(二): 如何把应用分解成多个服务相关推荐

  1. 微服务架构(二):融入微服务的企业集成架构

    上一篇文章介绍了微服务架构的起源.定义.通用特性.常见概念误区.微服务架构与SOA架构比较.微服务架构收益以及企业引入微服务架构的策略. 本文将介绍融入微服务的企业集成架构的演进,并描述交互式系统的微 ...

  2. 让ERP的服务更开放! ——用微服务架构搭建的一套基于EBS的API服务系统

    1. 源码下载地址 源码链接: https://github.com/samt007/xygerp-api-demo 这是用Spring Cloud微服务架构搭建的一套基于EBS的API服务系统 如对 ...

  3. Re:从0开始的微服务架构--(二)快速快速体验微服务架构?--转

    原文地址:https://mp.weixin.qq.com/s/QO1QDQWnjHZp8EvGDrxZvw 这是专题的第二篇文章,看看如何搭建一个简单模式的微服务架构. 记得好久之前看到一个大牛说过 ...

  4. [云原生]微服务架构是什么

    作者简介:大家好,我是?让我们一起共同进步吧!?? ??个人主页:的csdn博客 ??系列专栏: 数据结构与算法 ??哲学语录: 承认自己的无知,乃是开启智慧的大门 ??如果觉得博主的文章还不错的话, ...

  5. Dubbo和Spring Cloud微服务架构对比

    一.为什么要使用微服务? 微服务提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合. 今天我们来了解下业内主要的微服务框架:Dubbo 和 Spring Cloud 微服务主要的优势 降 ...

  6. Dubbo和Spring Cloud微服务架构的对比

    微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...

  7. Dubbo和Spring Cloud微服务架构

    微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...

  8. 终极对决!Dubbo 和 Spring Cloud 微服务架构到底孰优孰劣?

    微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...

  9. 阿里P8架构师谈:微服务Dubbo和SpringCloud架构设计、优劣势比较

    本文主要围绕微服务的技术选型.通讯协议.服务依赖模式.开始模式.运行模式等几方面来综合比较Dubbo和Spring Cloud 这2种开发框架.架构师可以根据公司的技术实力并结合项目的特点来选择某个合 ...

最新文章

  1. NAT环境无法访问云端的深层次分析
  2. 使用UrlRewrite时修改form的action属性问题
  3. 基于 SpringBoot,来实现MySQL读写分离技术
  4. Linux 自动挂载 和 fstab分区-自动挂载
  5. could not open C:\Program Files\Java\jdk1.6.0-11\lib\i386\jvm.cfg
  6. boost::process::throw_on_error相关的测试程序
  7. 怎么把word转换pdf,pdf转换word ,pdf转换成高清图片
  8. [react] 有用过react的Fragment吗?它的运用场景是什么
  9. java开发者工具开源版_开源工具如何帮助飓风受害者
  10. 注解之RetentionPolicy,ElementType
  11. 程序员界之行业求职黑名单!实用!
  12. 计算机专业辐射,电脑辐射主要来源在哪——专业实测让你弄个明白
  13. 苹果11触屏不灵敏_苹果iPhone11Pro屏幕失灵怎么办
  14. vbs或vbe如何修改图标
  15. 论文笔记 Acquiring Common Sense Spatial Knowledge through Implicit Spatial Templates (AAAI2018)
  16. web前端设计与开发期末作品_期末大作业【使用HTML制作汽车首页】
  17. 回调函数与回调地狱及其解决方法 | JavaScript
  18. 【Matlab】求解微分方程{上}(通解和特解)
  19. VBA,单元格处理,数据复制,格式设置,折线图,图表属性设置
  20. docker images 保存导入导出、容器导入导出

热门文章

  1. 【windows脚本】开机后定时重启
  2. 蓝桥杯 算法训练 强力党逗志芃
  3. java培训 | Java设计模式之装饰者设计模式
  4. 朴素贝叶斯分类器(附代码)
  5. 从CorelDRAW群组中快速拷贝颜色和属性的教程
  6. “好嗨哟” 收获手机淘宝高可用这些干货 感觉开发走向了巅峰
  7. 《痞子衡嵌入式半月刊》 第 62 期
  8. 完整的虚拟机安装步骤
  9. java中settext_Java JCheckBoxMenuItem.setText方法代码示例
  10. AE(automatic exposure)相关概念