微服务的拆分规范和原则

微服务的拆分规范和原则_第1张图片

压力模型拆分

压力模型简单来说就是用户访问量,我们要识别出某些超高并发量的业务,尽可能把这部分业务独立拆分出来。

压力模型拆解为三个维度:

  • 高频高并发场景

微服务的拆分规范和原则_第2张图片

原因:

比如商品详情页,它既是一个高频场景(时时刻刻都会发生),同时也是高并发的场景(QPS - Query per seconds极高)

低频突发流量场景

微服务的拆分规范和原则_第3张图片

原因: 秒杀场景它并不是高频场景(偶尔发生),但是它会产生突发流量。再跟大家举一个例子,那就是“商品发布”,对新零售业务来说,当开设一个线下大型卖场以后,需要将所有库存商品一键上架,这里的商品总数是个非常庞大的数字(几十万+),瞬间就可以打出很高的QPS

低频流量场景

微服务的拆分规范和原则_第4张图片

原因:

后台运营团队的服务接口,比如商品图文编辑,添加新的优惠计算规则,上架新商品。它发生的频率比较低,而且也不会造成很高的并发量。

业务模型拆分

业务模型拆分的维度有很多,我们在实际项目中应该综合各个不同维度做考量。我这里主要从主链路、领域模型和用户群体三个维度。

主链路拆分

在电商领域"主链路"是一个很重要的业务链条,它是指用户完成下单场景所必须经过的场景。按照我们平时买买买的剁手经验,可以识别出很多核心主链路,比如商品搜索->商品详情页->购物车模块->订单结算->支付业务,这是就是一条最简单的主链路。如果这是一场战斗的话,那么主链路就是这场战斗的正面战场,我们必须力保主链路不失守。

核心主链路拆分,有以下几个目的:

  1. 异常容错:为主链路建立层次化的降级策略(多级降级),以及合理的熔断策略。
  2. 调配资源:主链路通常来讲都是高频场景,自然需要更多的计算资源,最主要的体现就是集群里分配的虚机数量多。
  3. 服务隔离:主链路是主打输出的C位,把主链路与其他打辅助的业务服务隔离开来,避免边缘服务的异常情况影响到主链路。
领域模型拆分

领域驱动设计DDD(Domain-Driven Design 领域驱动设计)不是一个新概念,但老外们有个毛病,做什么事情特别喜欢提炼方法论,本来一个非常简单的概念,愣是被吹到神乎其神高深莫测。

用户群体拆分

根据用户群体做拆分,我们首先要了解自己的系统业务里有哪些用户,比如说电商领域,我们有2C的小卖家,也有2B的大客户,在集团内部有运营、采购、还有客服小二等等。对每个不同的用户群体来说,即便是相同的业务领域,也有该群体其独有的业务场景。

用户群体相当于一个二级域,我们建议先根据主链路和领域模型做一级域的拆分,再结合具体的业务分析,看是否需要在用户领域方向上做更细粒度的拆分。

你可能感兴趣的:(微服务,网络,java)