设计一个系统,不仅需要考虑实现业务功能,还要保证系统高并发、高可用、高可靠等,在系统容量规划(流量、容量)、SLA指定(吞吐量、响应时间、可用性、降级方案等)、压测方案(线上、线下等)、监控报警(机器负载、响应时间、可用率等)、应急预案(容灾、降级、限流、隔离、切流量、可回滚)等方面
1. 高并发原则
1.1 无状态
应用无状态易于扩展.实际中应用无状态,配置文件有状态。
1.2 拆分
是否拆分取决于系统规模与可利用资源. 如果确实需要拆分,一般来说有以下几种情况:
- 系统维度:按照系统功能和系统业务拆分,如商品系统、购物车系统、结算系统、订单系统等
- 功能维度:对一个系统进行功能再拆分,比如优惠券系统可以拆分为后台券创建系统、领券系统、用券系统等;
- 读写维度:根据读写比例特征进行拆分,比如商品系统的读远大于写,可拆分为商品写服务和商品读服务;读的时候可用缓存优化;写的时候可分库分表;
- AOP维度:根据访问特征,按照AOP进行拆分,比如商品详情页可以分为CDN、页面渲染系统;
- 模块维度:按照基础或者代码维护特征拆分,比如基础模块分库分表,数据库池连接等;
1.3 服务化
服务注册与发现,服务分组、隔离、路由,服务治理:限流、黑白名单等.
题外话: 之前有被问到一个