前面我们了解了什么是微服务和为什么需要做微服务架构(What & Why),本文我们就来探讨如何做微服务架构的拆分(How)
微服务拆分没有一个绝对正确的方案,服务拆分的粒度完全要根据业务场景来规划,而随着业务的发展,原先的架构方案也需要做调整。既然没有标准答案,那我们就使出“乱拳打死老师傅”的招数,想怎么拆怎么拆好了?且慢且慢,这不就成了暴力拆迁了吗,现在“扫黑除恶”正当头,我们可不能这么干。我这里总结了几个服务拆分的心法秘籍,同学们可以照着这个路子去思考服务拆分的粒度我行走江湖就靠着这套武功心法。
这辈子当不成拆迁户的同学们,你们也别灰心,咱房子拆不成,微服务还是可以拆一拆的。说到拆迁,咱就得有一套方式方法, 不能暴力拆迁。不妨看一看老师一般怎么规划拆迁方案。
压力模型简单来说就是用户访问量,我们要识别出某些超高并发量的业务,尽可能把这部分业务独立拆分出来。这么做的原因非常简单,高并发业务相当于前线战场,战况非常激烈,如果我方部署兵力不够(服务器资源),而敌方攻势又过于猛烈(剁手族们疯狂的流量),万一战线失手了服务器压力抵挡不住,我们不希望让这种情况影响到其他用户场景。
我这里举两个例子:
我在做具体规划的时候,会尽量把压力模型拆解为三个维度
通常我们建议将高频高并发的场景隔离出来,单独作为一个微服务模块,典型的就是商品详情页的后台服务。对低频突发流量的场景,如果条件允许也可以剥离出来独立组成模块,如果必须和其他业务包在一个微服务下,那一定要做好流控措施(最典型的就是削峰策略),而且还要考虑到异常情况下的补偿机制。对于低频流量场景,我们根据业务模型切分就好了(后面会讲到)。
业务模型拆分的维度有很多,我们在实际项目中应该综合各个不同维度做考量。我这里主要从主链路、领域模型和用户群体三个维度来讲一下
主链路拆分
在电商领域“主链路”是一个很重要的业务链条,它是指用户完成下单场景所必须经过的场景。按照我们平时买买买的剁手经验,可以识别出很多核心主链路,比如商品搜索->商品详情页->购物车模块->订单结算->支付业务,这是就是一条最简单的主链路。如果这是一场战斗的话,那么主链路就是这场战斗的正面战场,我们必须力保主链路不失守。
电商领域背后还有很多隐藏的核心主链路,比如下单之前的营销优惠结算,它会影响订单的最终价格;再比如用户地址模块,它会影响下单前的配送地址选择。如果这两个模块出了问题,大部分用户恐怕都要放弃下单了。试想,双十一我们添加了一揽子购物车,结果结算的时候发现所有优惠组合都失效了,或者是无法选择配送地址,那也只好放弃了。
各位亲,这里建议将核心主链路拆分,有以下几个目的:
领域驱动设计DDD (Domain-Driven Design领域驱动设计)不是-个新概念,但老外们有个毛病,做什么事情特别喜欢提炼方法论,本来一个非常简单的概念,愣是被吹到神乎其神高深莫测。
其实领域模型是一个很简单的概念,抛掉繁文缛节的方法论,我们-样可以做好领域模型拆分。我举一个例子大家就明白了。阿里集团推出了一套大中台战略,将集团内部的公共领域服务从各个事业部中剥离出来,整合成了一个“集团级别”的大型中台业务。比如说IC订单系统,淘系商品服务,UMP营销优惠服务,汇金平台,用户账号系统等等。
从上面这个例子中我们可以看出,所谓领域模型,其实就是一套各司其职的服务集合。这里涉及到领域和合并和分拆。领域合并的例子就是淘系的营销优惠服务,曾经天猫和淘宝各有-套营销服务,如果不考虑底层技术,从业务层面来说它们做的事情是-样的, 都属于营销优惠计算的领域范围,因此后面两条技术线整合成了-套UMP营销优惠服务。领域拆分的例子就太多了,我们做微服务规划的时候要确保各个领域之间有清晰的界限,比如商品服务,和订单服务,尽管他们之间有交集(都围绕商品主数据)但是毕竟是服务于不同领域(商品域和订单域),所以我们要将两者拆分成独立的服务。
根据用户群体做拆分,我们首先要了解自己的系统业务里有哪些用户,比如说电商领域,我们有2C的小卖家,也有2B的大客户,在集团内部有运营、采购、还有客服小二等等。对每个不同的用户群体来说,即便是相同的业务领域,也有该群体其独有的业务场景。
用户群体相当于一个二级域,我们建议先根据主链路和领域模型做一级域的拆分,再结合具体的业务分析,看是否需要在用户领域方向上做更细粒度的拆分。
同学们如果下了班当过顺丰车主的话,就会知道网约车业务不仅有一个乘客端app,也有一个司机端app。电商领域也是一样的,我们通过手淘app买买买(前台业务场景),商家通过后台的业务系统管理商品信息(后台业务场景)。在实际项目中通常也会将前台业务和后台业务做一个隔离,这也符合高频业务(前台)和低频业务(后台)的隔离策略。
本文已收录至我的个人网站:程序员波特,主要记录Java相关技术系列教程,共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源,让想要学习的你,不再迷茫。