君子以厚德载物
有朋自远方来,不宜乐乎。

首先,照惯例,先给答案:

  微服务粒度有三个重要参考指标:

  1、业务复杂度。

  2、团队规模。

  3、数据规模。

开始论证:

  我们看一个简单的cms(内容发布)系统的生命周期。

  阶段一:没流量,刚开始做。

    业务需求:后台能人工发文章、视频,用户能看。

    核心架构诉求:设计好库表,完成功能即可。

 

    
    微服务?不用,单体应用即可。

  阶段二:平台发展不错,100万pv了,内容发布流程也开始强管控了,功能高频迭代。

    业务需求:各种新功能层出不穷。系统能抓取他站内容,用户也能发文章,发的文章,要人工介入审批;平台具备支付打赏功能;平台具备评论,盖楼功能;

    核心架构诉求:业务开始复杂,研发团队也到了10人规模,服务如何划分使得服务功能聚焦,人员职责聚焦,从而降低服务互相影响,提升业务迭代效率。

  

    关键tips:此时设计核心考量指标以业务发展为主,各领域划分清楚,要有些前瞻性,同时又不能YY的太远(未来说不准)。

    至于怎么定义出打赏、评论、文章这些服务出来的,看看领域驱动设计(抽空我也发篇关于这个的文章),微服务是概念,领域驱动设计则是很好的一个方法论。

  阶段三:1000万pv了,波峰上万qps。
    业务需求:精细化体验,与其他平台各种换量,细化需求很多,跟竞对各种卷;

    核心架构诉求:

      确认什么是核心流程,将核心流程进行服务及存储剖离,同时做一定的性能扩展。

      人员基本也50+了,把靠谱或者有潜力的人放在核心服务链路上,逐渐培养,半年内基本就全链路稳定了。

    

    关键tips:此时设计核心参考指标就要综合人和事两方面来看了,事的话划分清楚核心链路,同时将靠谱的人扑在核心链路的服务上,不建议核心服务超过3人维护。

  阶段四:几十亿pv,上百万qps了。

    业务需求:好多...;

    核心架构诉求:存储瓶颈,流量专项治理。

      一套代码,布署多个服务?比如大V的流量,服务进行独立布署。

      分布式存储,冷热数据,数据地域性存储。

    关键tips:性能、稳定才是王道,如有必要,单个接口都能拆成一个服务,同时更多的要结合存储来看方案。

 

 

  最后有一个总结,性能上的问题,要优先于业务发展考虑,而服务化,可以在业务发展确定后再做(即上面第二步晚点服务化也没关系)。

posted on 2022-04-08 19:25  snowcolin  阅读(202)  评论(0编辑  收藏  举报

期待你的评论交流