前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微服务如何划分

微服务如何划分

作者头像
方丈的寺院
发布于 2022-04-12 05:56:34
发布于 2022-04-12 05:56:34
1.3K0
举报
文章被收录于专栏:方丈的寺院方丈的寺院

摘要

作为团队架构师/技术负责人你该如何进行微服务的划分呢?在以前的文章中讨论过这个话题,可落地的DDD(4)-如何利用DDD进行微服务的划分(2)[1],最近结合在不同的开发团队实践,又有了新的思考,相比较之前的基于DDD会更加全面可落地,也欢迎大家留言讨论。

为何要划分微服务

微服务架构被广泛用于互联网公司,其优势在于每个服务足够小,相互之间具备隔离性。配合一些基础设施,能够使得需求快速迭代上线。但是每个服务的粒度应该多大呢,服务之间的关系应该是怎样的呢?

首先我们来探讨一下微服务划分的目标。微服务划分涉及到两个对象,一个是微服务,一个是开发人员。所以目标是高效有序将微服务及开发人员组织起来。

如何衡量有序呢?

1.职责清晰2.相互间的依赖关系清晰 一个无序的微服务调用,会陷入混乱地狱。

因此制定一些标准

横向:按照业务流程拆,业务流程反映的是数据流程,数据从上游流下下游。上游需要和下游解耦,上游不可通过服务间调用下游。下游可以。

纵向:按照技术拆分,由上到下分为4层,上层可以调用下层,同级可以相互调用,下层强制不能调用上层。

1.应用系统 面向各个端,比如pc端,面向用户的,面向小二的。app端。属于前端应用。

2.核心领域 整个系统的核心业务,与业务紧密相连。支撑业务发展。

3.基础能力 从核心领域中下沉抽象出来的更通用的服务,不只是服务当前业务。也服务于公司其他业务。

4.依赖系统 一些通用的公共模块以及与其他兄弟部门的服务依赖。

如此调用关系比较清晰了。

如何衡量高效呢?

对于服务是性能高且稳定 对于开发人员是效率高且有技术成长空间

业务量上来一个,后端的很多工作就是围绕着性能和稳定,微服务的划分也深深影响着。因此服务划分还会按照

1.基于迭代频次 变更是引发故障的主要原因,因此如果一个服务是稳定的,我们可以把他单独拆分为一个微服务,这样在项目快速迭代时,不会影响已有功能。不需要投入太多回归测试时间。

2. 基于可靠性 核心服务需要重点保障,流量高的应用和流量低的应用稳定性要求也不一样。可以将核心服务,流量高的应用单独拆出来,这样使得核心服务功能逻辑简单,依赖减少,存储独立。稳定性得到极大保障。

3.基于开发人员 架构活动不仅要关心机器,还要关心人。开发人员的工作效率极大影响了业务的交付速度和质量。一个微服务需要一个唯一owner和2-3个开发人员(owner也参与开发)。owner是第一责任人,负责整个应用的代码质量,服务稳定性。2-3个人负责开发一个系统,不会有单点,在人员流动的情况能够进行相互补位,同时相互之间可以进行技术方案深度讨论,能够应对一定级别的复杂需求。人数不宜超过4个人,人太多,在同一个应用中开发不同的需求,可能每天都要处理不同的分支之间冲突,多套环境进行测试,效率比较低。同时人数太多,讨论效率也比较低。此外需要尽量保证每个中高级别的开发者都是一个微服务的owner,有自己的一块自留地,在需求承接之外,能够在做一些技术相关的开发工作。

当然高效和有序并不总是统一的,有时候我们需要去做架构取舍。

如何划分

举个例子,比如你公司是做在线教育的,你入职负责开发公司的客户管理系统(CRM,下面统一用CRM代替)业务。首先你需要从全局分析CRM这块业务。

流程

CRM按照流程划分主要是获客-跟进-转化-签约-服务。按照领域进行抽象,可以分为售前,售中,售后。

服务

按照服务来划分,主要有投放服务、营销活动服务、呼叫服务、客户管理、日程管理、消息提醒、订单、合同、工单、销售效果分析。

功能

每个服务有更细粒度的功能。比如 投放服务:提供多渠道投放方式,百度,头条,微信等,投放分析。营销活动服务:营销落地页,开学季优惠活动,抽奖活动,优惠券活动。客户管理服务:客户档案,销售机会,销售看板。其他不再赘述。

人员

目前业务还是在初级阶段,负责这块的开发总共有6人,3个后端,2个前端,一个测试。

服务划分

基于以上考虑,服务划分为以下6个服务。

考虑到只需要一个pc工作台,市场人员、销售人员都用同一个工作台,应用系统这一层不需要。然后核心领域分为售前(市场人员)、售中(客服,销售)、售后(客服,财务)三个服务,每个开发负责一个服务。同时抽象出3个通用基础能力服务,每个开发负责一个。

1. 公司内部的账号系统 提供统一的账号管理能力,组织架构能力,权限管理能力。

2. 服务系统 通用的一些工具能力,比如隐私号、坐席呼叫、待办、消息提醒等能力。这些并不属于同一个领域,但是考虑到当前阶段,服务不宜拆分的过细。所以都放在同一个服务中。

3.数据分析 各个模块都需要数据分析,所以抽象出一个单独能力,统一处理。

演进

经过半年的发展,业务蒸蒸日上,需求越来越多。人员也在逐步扩展。后端人员扩大到了10人。原有的微服务架构逐渐不太适应。因此需要进行适当调整。经过分析,当前业务重点是

  1. 售前 两个核心指标一个是有效线索量,一个是单个线索成本

2. 售中 售中决定了线索能否转化为订单。目前对应的运营人员最多,客服100人,销售300人。提高运营人员效率是重点。

3. 售后 工单响应时长

售前这块基本系统功能已搭建完毕,通用的营销工具已经有了,市场人员可以进行组件组合,搭建不同营销页,然后根据投放效果进行适当调整。服务比较稳定了,所以这块有2个开发即可。主要负责营销工具开发。

售后相对也比较稳定了,2个开发。售中是重点,需求迭代也比较多,6个开发。之前只有一个微服务,开发效率比较低了。需要进行适当拆分。增加3个服务

1.应用系统增加一个移动工作台 因为销售人员经常在外部,所以需要移动端,而移动端通常是销售管理活动中的操作类功能。pc端则是查看分析。

2.核心领域层增加一个售中服务域

售中拆成2个服务,一个是线索域,主要围绕着公海、私海,线索推荐。另外一个是服务域,是面向销售日常活动的。如活动,拜访,小记,客户标签等。

3 .基础能力层增加一个流程引擎服务 各个角色人员需要经常发起审批,流程编排,所以新构建一个基础能力,流程引擎。能够服务于整个crm业务,同时如果公司其他业务需要,可以提供给其他业务使用。

参考文章

http://www.woshipm.com/pd/3983693.html

[1] 可落地的DDD(4)-如何利用DDD进行微服务的划分(2): https://blog.csdn.net/FS1360472174/article/details/90738148?spm=1001.2014.3001.5501

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 方丈的寺院 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
驱动领域DDD的微服务设计和开发实战
你是否还在为微服务应该拆多小而争论不休?到底如何才能设计出收放自如的微服务?怎样才能保证业务领域模型与代码模型的一致性?或许本文能帮你找到答案。 本文是基于 DDD 的微服务设计和开发实战篇,通过借鉴领域驱动设计思想,指导微服务项目团队进行设计和开发(理论篇详见《当中台遇上 DDD,我们该如何设计微服务?》)。本文包括三部分内容:第一部分讲述领域驱动设计基本知识,包括:分层架构、服务视图、数据视图和领域事件发布和订阅等;第二部分讲述微服务设计方法、过程、模板、代码目录、设计原则等内容;最后部分以一个项目为例讲述基于 DDD 的微服务设计过程。
星哥玩云
2022/07/29
7461
驱动领域DDD的微服务设计和开发实战
阿里一面:微服务拆分需要考虑什么因素?
陈某的《Spring Cloud Alibaba实战项目》 视频教程已经录完了,涉及到Alibaba的各种中间件、OAuth2微服务认证鉴权、全链路灰度发布、分布式事务实战,戳这里--->Spring Cloud Alibaba 实战 视频专栏 开放订阅~
码猿技术专栏
2023/05/01
2390
阿里一面:微服务拆分需要考虑什么因素?
Keep电商供应链系统的DDD实战复盘
任何一套业务架构都可能存在一定的历史问题,这是业务在不同阶段做技术选型必然出现的状况,如何用新的、合适的架构思想做恰到好处地改造,则是架构师们的必备能力。本文是 Keep 利用 DDD 改造电商供应链系统的一次精彩实战,InfoQ 架构头条独家分享,以供大家参考交流。文章作者:武清明,目前他在 Keep 负责商业化业务中台研发和规划工作,擅长电商业务系统架构设计,采用 DDD 合理简单化设计复杂电商系统,提升系统功能模块的复用性和扩展性。
深度学习与Python
2021/10/13
6140
电商微服务体系中分层设计和领域的划分
比起“高并发、多线程”、“分布式CAP、一致性、Paxos”、“高可用SLA”等具体的干货技术点,软件体系知识显得很“湿”,似乎人人都有自己的认识,但又很少有人能说完整。
用户4283147
2022/10/27
4670
电商微服务体系中分层设计和领域的划分
你了解to B 和 to C 数据开发的差异吗?
通常来说,大数据开发的整体架构基本一样,都涉及到底层的数据平台架构、数据中间件的选择、数仓模型的建立、可视化展现,其中数据层面主要是数据的采集(埋点、业务数据)、数据处理(离线、实时)、数据治理(数据分层、数据字典、指标体系、数据监控、数据安全、数据数仓)、数据展现(BI、可视化)。
用户8949263
2022/04/08
5320
你了解to B 和 to C 数据开发的差异吗?
下单后,微服务里都经历了什么?
面试的时候,面试官问:用户在电商网站中购买成功了,那么它在微服务中经历了什么?你该如何作答?
kubernetes中文社区
2019/07/19
1.4K0
下单后,微服务里都经历了什么?
人人都在跟风学微服务,却不知道DDD领域驱动设计?
最先介绍领域驱动设计(domain-driven design)的是在程序员 Eric Evans 2004年出版的《领域驱动设计:复杂软件核心复杂应对之道》书籍中,领域驱动设计是领域概念的扩展和应用,并且将它应用在软件开发中。它的目标是将软件相关部分连接到不断发展的模型中,以此更容易创建复杂的应用。
Lvshen
2022/05/05
4400
人人都在跟风学微服务,却不知道DDD领域驱动设计?
电商系统中微服务体系中的分层设计和领域划分
看标题感觉这个东西很理论,比起“高并发、多线程”、“分布式CAP、一致性、Paxos”、“高可用SLA”等具体的干货技术点,软件体系知识显得很“湿”,似乎人人都有自己的认识,但又很少有人能说完整,有一点可以确定的是,如果你未来需要独立设计一个复杂的系统中台,并使之未来能快速应对各种需求变化的话,科学合理的领域划分和边界界定需要我们“处女座级”的坚持下去,这对防止人力失控、减少项目烂尾很有帮助。合理的界定了边界后,即便某个微服务很糟糕,也可以就输入输出以很少的人力投入进行重构,相反的就是牵一发而动全身,加上业务需求频繁而来,很容易烂尾或是达不到如期的效果。
架构之家
2022/07/12
5380
电商系统中微服务体系中的分层设计和领域划分
电商供应链系统的DDD架构设计实战
任何一套业务架构都可能存在一定的历史问题,这是业务在不同阶段做技术选型必然出现的状况,如何用新的、合适的架构思想做恰到好处地改造,则是架构师们的必备能力。
架构之家
2022/07/12
1.3K0
电商供应链系统的DDD架构设计实战
为什么我们叫进行微服务拆分?
微服务在最近几年大行其道,很多公司的研发人员都在考虑微服务架构,同时,随着 Docker 容器技术和自动化运维等相关技术发展,微服务变得更容易管理,这给了微服务架构良好的发展机会。
码农架构
2021/06/13
1.6K0
为什么我们叫进行微服务拆分?
DDD 领域驱动设计落地实践系列:战略设计和战术设计
通过前面的文章介绍,相信大家对于什么是 DDD 有了初步的了解,知道它是一种微服务的架构设计方法论,为我们解决如何建立领域模型,如何实现微服务划分等提供了方向和指导。但是对于如何具体落地使用 DDD,可能大家还是一脸懵 B 的状态,因此从本文开始以及后面的文章将对如何进行 DDD 落地进行详细的阐述。在这其中还是会涉及到 DDD 中的一些重要概念,原本想着在一篇文章中介绍所有的概念,但是我觉得,概念总是在它该出现的时候出现才会让大家印象深刻,否则这些概念只是死板的概念,我们不清楚他为什么出现以及可以解决什么问题。
慕枫技术笔记
2023/03/20
9300
DDD 领域驱动设计落地实践系列:战略设计和战术设计
可视化微服务:设计微服务系统
原文地址:https://dzone.com/articles/visualizing-microservices-designing-a-microservice
Steve Wang
2018/06/20
1.2K0
CRM是什么意思?CRM管理软件选型必知的3大“要点”
在国内,CRM可以称之为客户关系管理(因为它英文叫Customer Relationship Management,所以简称CRM),主要是指企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售、营销和服务上的交互,从而提升其管理方式,向客户提供创新式的个性化的客户交互和服务的过程。其最终目标是吸引新客户、保留老客户以及将已有客户转为忠实客户,增加市场。
informat低代码
2022/07/22
7900
CRM是什么意思?CRM管理软件选型必知的3大“要点”
微服务架构详谈
微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为新的理念和原来的分布式系统,或者说SOA(面向服务架构)是什么区别呢?
慕容千语
2019/06/06
7300
微服务架构详谈
浅谈微服务的来龙去脉
本文主要探讨了微服务架构的优缺点,以及作者在使用微服务架构过程中遇到的问题。作者通过分析微服务的定义、发展历程、以及其与SOA之间的关系,使读者对微服务有一个初步的了解。同时,文章也探讨了微服务的几个典型架构,以及在使用微服务过程中可能遇到的问题。最后,作者提出了微服务的几个设计原则,以及在使用微服务架构时需要注意的一些问题。
王清培
2018/01/05
8440
浅谈微服务的来龙去脉
专访明略科技CTO郝杰,共绘会话智能发展蓝图 | 爱分析访谈
进入3.0用户中心时代,企业如何通过构建从售前到售后的全流程客户服务体系,实现以服务驱动营销提升销售转化效率一直是一个难题。而会话智能技术,基于机器学习、NLP、ASR、大数据等核心技术,通过沟通前销售线索跟进及智能销售策略辅助、沟通中话术指导以及会话质检、沟通后智能会话诊断及用户满意度分析等能力,助力企业实现客户全生命周期精细化运营,已成为现阶段企业在存量时代实现业务大幅增长的重要手段之一。
爱分析ifenxi
2022/06/15
5280
专访明略科技CTO郝杰,共绘会话智能发展蓝图 | 爱分析访谈
如何更好地干掉微服务架构复杂性?
作者 | 赵钰莹 分而治之是面对复杂问题时的惯用方法,微服务架构在分和治两个方面都给出了很好的理论指导和最佳实践。但是过去几年,无数的中小团队在微服务上陷入了挣扎,很多公司在放弃微服务,其中包括一些大型企业,比如 2020 年,Uber 放弃了微服务,转而使用宏服务;GitHub 的前 CTO 近期也表示全面微服务是最大的架构错误,这其中不乏对引入微服务架构带来的复杂性的声讨。那么,微服务架构带来的复杂性和架构问题到底如何被干掉呢? 本期《极客有约》,我们邀请到了快手微服务中间件技术负责人魏诗白,去哪儿旅行
深度学习与Python
2023/03/29
4830
如何更好地干掉微服务架构复杂性?
可落地的DDD(4)-如何利用DDD进行微服务的划分(2)
在前面一篇介绍了如何通过DDD的思想,来调整单体服务内的工程结构,为微服务的拆分做准备。同时介绍了我们在进行微服务拆分的时候踩过的一些坑。 这篇介绍下我们最终的方案,不一定对,欢迎留言讨论。
方丈的寺院
2019/08/05
7400
可落地的DDD(4)-如何利用DDD进行微服务的划分(2)
公有云上基于微服务架构 SAAS 产品研发实践
公有云SAAS产品不同于传统的软件包产品,我们不仅需要负责软件的研发,同时需要负责产品的运维,面对众多用户,需要保障产品7X24不间断运行;客户业务是不断变化的,产品需要在持续运行过程中进行持续升级,以满足客户业务不断变化的需要。相对传统软件包产品,公有云产品的升级更加复杂,风险也更高,类似于在运动的汽车上更换轮胎。 设计的本质就是让产品变化更容易。微服务架构是互联网时代以适应快速的业务变化而产生的一种架构模式,提供了让变化更容易的基础。自2014年起开始得到业界的广泛关注,近几年,随着DevOps技术的
DevOps时代
2018/06/22
2.8K0
微服务架构拆分的 7 大黄金法则
你是否还在为微服务架构的拆分而苦恼?本文揭秘 7 大拆分原则,助你轻松驾驭微服务架构!
码哥字节
2024/11/23
3520
微服务架构拆分的 7 大黄金法则
推荐阅读
相关推荐
驱动领域DDD的微服务设计和开发实战
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档