目录
一 为什么需要进行系统拆分
一个系统,在不断的迭代和发展过程中将变得越来越复杂。其中复杂主要体现在两方面:一方面是代码量的增加、一方面是系统功能的增加。
那么当一个需求提出来之后,将可能出现牵一发而动全身的情况,也就是说,系统需要修改的地方太多,有些地方甚至需要推倒重来。由于改动的地方太多,需要验证和回归的功能越多,导致开发周期拉长,人员投入将增多,风险偏大。
系统拆分之后能达到如下效果:
- 业务解耦,动静分离,快速迭代。
- 解决可扩展性问题。
- 有利于进行单点优化,构建更加稳定的系统。
二 如何对系统进行拆分
一般来说将一个复杂系统按照拆分成多个小系统,一般有如下四种方式:
2.1 基于业务逻辑拆分
比如一个复杂的电商系统可以拆分为商品系统、订单系统、支付系统、物流系统等。
2.2 基于可扩展性拆分
将系统中业务模块按照稳定性排序,已经成熟或者改动不大的服务拆分为稳定系统,经常开发和迭代的系统拆分为迭代系统。稳定系统的粒度可以大些,迭代系统粒度可以小些。
2.3 基于可靠性拆分
将系统中的业务模块按照优先级排序,将可靠性要求高的核心服务和可靠性要求低的非核心服务拆分开来,然后重点保证核心服务的高可用。
2.4 基于性能拆分
基于性能拆分和基于可靠性拆分类似,将性能要求高或者性能压力大的模块拆分出来,避免性能压力大的服务影响其他服务。
三 系统拆分实践
user-center 系统聚合的功能有登录、注册、忘记密码、鉴权、批量和复杂查询,复杂度较高。为了提高系统的稳定性,我们进行了系统拆分实践。
3.1 依据业务逻辑拆分原则
我们将 user-center 拆分成账号中心和用户中心。
3.2 依据可靠性原则
我们将 user-center 拆分成核心业务(PX级别)和非核心业务(非PX级别)。
3.3 依据性能拆分原则
我们将 user-center 拆分成 uc-auth 和 uc-search。
- uc-auth 负责鉴权,对 QPS 要求高,容易进行单点优化。
- uc-search 负责系统复杂查询。