业务层扩展性
一般从三个维度考虑业务层的拆分方案
业务纬度
重要性纬度
请求来源纬度
首先需把相同业务服务拆分成单独业务池,比方知乎,可按业务维度拆分成用户池、内容池、关系池、评论池、点赞池和搜索池。
每个业务依赖独自DB资源,不会依赖其它业务的。这样当某业务接口成为瓶颈时,只需扩展业务池,以及确认上下游依赖方,大大减少扩容复杂度。
还可根据业务接口重要程度,把业务分为核心池和非核心池。比如关系池:
关注、取消关注接口相对重要,可放在核心池
拉黑和取消拉黑的操作就相对不那么重要,可以放在非核心池里面
这可优先保证核心池性能,当整体流量上升时优先扩容核心池,降级部分非核心池的接口,从而保证整体系统的稳定性。
关系池拆分示意图
还可以根据接入客户端类型做业务池拆分。比如服务于
- 客户端接口的业务可定义为外网池
- 小程序或者HTML5页面的业务可定义为H5池
- 内部其它部门的业务可以定义为内网池。
- 总结
未做拆分的系统虽然可扩展性不强,但简单,无论开发、运维都无需很大精力。拆分后,需求开发需要横跨多系统多团队,排查问题也需要涉及多系统,运维每个子系统都需专人负责,所以大厂招聘也都要求沟通协作能力强。
参考
https://www.infoq.cn/article/1w2MJZzx-0dm9j9VYSam
如何让系统易于扩展?