1.为什么提升扩展性很复杂
高可扩展性是一个设计的指标:可以通过增加机器的方式来线性提高系统的处理能力,从而承担更高的流量和并发
平时会预留冗余以应对分值流量
无状态的服务和组件更易于扩展,而像** MySQL 这种存储服务是有状态**的,就比较难以扩展。(瓶颈点,制约着横向扩展)
2.高可扩展性思路
**将复杂问题简单化:**拆分是扩展性的重要思路,将复杂的系统拆分成独立的,有单一职责的模块(通过对大模块进行拆分)。
不同类型的模块,拆分原则不同
举个栗子:
当前情况
社区模块:
- 用户:负责维护社区用户信息,注册,登陆等;
- 关系:用户之间关注、好友、拉黑等关系的维护;
- 内容:社区发的内容,就像朋友圈或者微博的内容;
- 评论、赞:用户可能会有的两种常规互动操作;
- 搜索:用户的搜索,内容的搜索。
架构:
- 负载均衡负责请求的分发
- 应用服务器负责业务逻辑的处理
- 数据库负责数据的存储落地
现状:
- 业务代码耦合在一起
- 数据也耦合在一起
2.1存储层的扩展性
根据业务维度进行拆分,根据实际场景进行拆分(关系数据量大,用户数据访问频繁)
当拆分后的数据库达到单机上限后,需要进行二次拆分
可以根据数据特征进行水平拆分:**分库分表(**做好规划后,避免扩容的成本过高)
最佳实践:不要使用事务,会导致二阶段提交
2.2业务层的扩展信息
拆分维度=业务维度(冒泡,发单,履约,结账,乘客中心)+重要性维度(core,other)+请求来源维度(乘客,司机,公用)
某个业务接口成为瓶颈后,只需扩容该服务和其上下游即可
核心池+非核心池(优先扩容核心池,降级非核心池接口)(保证系统的稳定性)
根据客户类型(外网池、内网池...)
3.总结
未做拆分的系统虽然可扩展性不强,但是却足够简单,无论是系统开发还是运行维护都不需要投入很大的精力。