【Dubbo】微服务架构(二): 如何把应用分解成多个服务
工作中使用了微服务,接下来的一段时间里,我会写一系列的文章来介绍微服务架构,同时我也会在github上写一个microservices的应用框架(地址会在后续文章给出)。
上一篇文章详细说明了单一应用架构与微服务架构各自的优缺点,这篇文章是对
http://microservices.io/patterns/decomposition/decompose-by-business-capability.html和 http://microservices.io/patterns/decomposition/decompose-by-subdomain.html 的翻译和整理, 内容是讲解如何把应用拆分成服务: 根据业务能力拆分或者根据子域拆分。
一、上下文
微服务架构用两种方式来达到目的:
- 简化测试,使得组件可以独立部署
- 把工程师团队分成一个个小的、自主的团队(6到10人),每个团队负责一个或多个服务
这些好处不是自动就能得到的,相反的,它需要我们对服务有一个仔细的划分。
一个服务必须足够小,使得可以被一个小的团队开发和测试。从面向对象设计那里学到的一个有用的方法是单一职责原则。
应用也要被一种合适的方法拆分,从而大多数新的和修改的需求只影响到单个service。因为影响到多个service的改动需要多个团队之间的合作,这会拖慢开发的速度。另一个面向对象设计的有效原则是共同封闭原则,它是说,因为同一个原因修改的类应该在同一个包中。这种思想在设计服务时也同样有效:每个变化应该只影响一个service。
二、问题和强制条件
- 架构应该稳定
- 一个服务应该实现一个强相关的方法的小集合
- 服务必须遵从共同封闭原则
- 服务应该松耦合:一个服务的实现的变化不影响调用它的API的客户端
- 服务应该是可测试的
- 服务应该足够小,可以被6到10人的小团队开发
- 每个团队应该是自主的。一个团队可以开发和部署他们的服务,而只需要和别的团队有一些最小的合作
三、解决方案
1.根据业务能力拆分
业务能力是业务架构模型中的一个概念。业务模型经常对应于一个业务对象,比如说:订单管理负责订单,客户管理负责客户。
业务能力经常组织成一个多层等级。比如说,一个企业应用也许有顶级的分类,如产品开发、产品交付、需求挖掘等。
示例
一个在线商城的业务能力包括:
- 产品目录管理
- 存货管理
- 订单管理
- 发货管理
- …
对应的微服务架构会有一些服务对应于这些业务能力:
结果
这种模式有以下好处:
- 架构稳定,因为业务能力相对比较稳定
- 开发团队是自主的,围绕着交付业务价值而不是技术特性来组织
- 服务之间共同合作,松耦合
问题
如何定义业务能力?定义业务能力和服务需要对业务有一个好的理解, 需要对组织的目标、结构、业务流程做一个分析。定义业务能力的好的开始点是:
- 组织结构: 一个组织内的不同组对应于业务能力或者业务能力组
- 高层领域模型: 业务能力经常对应于领域对象
2. 根据子域拆分
- 核心: 业务的核心区分点,应用的最有价值的部分
- 支持: 与业务是做什么的相关,但不是主要区分点。这个可以自己做或者外包。
- 通用: 不特定于业务,理想情况下使用现成的软件来实现
示例
一个在线商城的子域包括
- 商品目录
- 存货管理
- 订单管理
- 发货管理
- …
对应的微服务架构会有一些服务对应于这些子域。
结果
这种模式有以下这些好处:(与上面的方法一样的)
- 架构稳定,因为业务能力相对比较稳定
- 开发团队是自主的,围绕着交付业务价值而不是技术特性来组织
- 服务之间共同合作,松耦合
问题
如何定义子域?定义子域和服务需要对业务有一个好的理解, 需要对组织的目标、结构、业务流程做一个分析。定义子域的好的开始点是:
- 组织结构: 一个组织内的不同组对应于业务能力或者业务能力组
- 高层领域模型: 业务能力经常对应于领域对象
【Dubbo】微服务架构(二): 如何把应用分解成多个服务相关推荐
- 微服务架构(二):融入微服务的企业集成架构
上一篇文章介绍了微服务架构的起源.定义.通用特性.常见概念误区.微服务架构与SOA架构比较.微服务架构收益以及企业引入微服务架构的策略. 本文将介绍融入微服务的企业集成架构的演进,并描述交互式系统的微 ...
- 让ERP的服务更开放! ——用微服务架构搭建的一套基于EBS的API服务系统
1. 源码下载地址 源码链接: https://github.com/samt007/xygerp-api-demo 这是用Spring Cloud微服务架构搭建的一套基于EBS的API服务系统 如对 ...
- Re:从0开始的微服务架构--(二)快速快速体验微服务架构?--转
原文地址:https://mp.weixin.qq.com/s/QO1QDQWnjHZp8EvGDrxZvw 这是专题的第二篇文章,看看如何搭建一个简单模式的微服务架构. 记得好久之前看到一个大牛说过 ...
- [云原生]微服务架构是什么
作者简介:大家好,我是?让我们一起共同进步吧!?? ??个人主页:的csdn博客 ??系列专栏: 数据结构与算法 ??哲学语录: 承认自己的无知,乃是开启智慧的大门 ??如果觉得博主的文章还不错的话, ...
- Dubbo和Spring Cloud微服务架构对比
一.为什么要使用微服务? 微服务提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合. 今天我们来了解下业内主要的微服务框架:Dubbo 和 Spring Cloud 微服务主要的优势 降 ...
- Dubbo和Spring Cloud微服务架构的对比
微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...
- Dubbo和Spring Cloud微服务架构
微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...
- 终极对决!Dubbo 和 Spring Cloud 微服务架构到底孰优孰劣?
微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...
- 阿里P8架构师谈:微服务Dubbo和SpringCloud架构设计、优劣势比较
本文主要围绕微服务的技术选型.通讯协议.服务依赖模式.开始模式.运行模式等几方面来综合比较Dubbo和Spring Cloud 这2种开发框架.架构师可以根据公司的技术实力并结合项目的特点来选择某个合 ...
最新文章
- NAT环境无法访问云端的深层次分析
- 使用UrlRewrite时修改form的action属性问题
- 基于 SpringBoot,来实现MySQL读写分离技术
- Linux 自动挂载 和 fstab分区-自动挂载
- could not open C:\Program Files\Java\jdk1.6.0-11\lib\i386\jvm.cfg
- boost::process::throw_on_error相关的测试程序
- 怎么把word转换pdf,pdf转换word ,pdf转换成高清图片
- [react] 有用过react的Fragment吗?它的运用场景是什么
- java开发者工具开源版_开源工具如何帮助飓风受害者
- 注解之RetentionPolicy,ElementType
- 程序员界之行业求职黑名单!实用!
- 计算机专业辐射,电脑辐射主要来源在哪——专业实测让你弄个明白
- 苹果11触屏不灵敏_苹果iPhone11Pro屏幕失灵怎么办
- vbs或vbe如何修改图标
- 论文笔记 Acquiring Common Sense Spatial Knowledge through Implicit Spatial Templates (AAAI2018)
- web前端设计与开发期末作品_期末大作业【使用HTML制作汽车首页】
- 回调函数与回调地狱及其解决方法 | JavaScript
- 【Matlab】求解微分方程{上}(通解和特解)
- VBA,单元格处理,数据复制,格式设置,折线图,图表属性设置
- docker images 保存导入导出、容器导入导出