交易型系统设计的一些原则
系统不是一下子就设计的完美的,要根据时间,环境而异。在有限的资源下应该首先解决最核心的问题。系统设计是不断迭代的过程。在迭代中不断发现问题并修复问题,即好的系统是不断迭代优化出来的,这是一个持续的过程。
墨菲定律
- 任何事情都没有表面看起来那么简单
- 所有的事都要比你预计的时间要长
- 可能出错的事情总会出错
- 如果你担心某种情况发生,那么它就更有可能发生
康威定律
系统划分时候需要遵循的
- 系统架构应该是公司组织架构的反应
- 应该按照业务闭环进行系统拆分/组织架构拆分,实现闭环/高内经/低耦合,减少沟通成本
- 沟通出现问题,应该考虑系统和组织架构的调整
- 合适的时机在进行系统拆分,一开始系统/服务拆分的非常细,维护成本高
高并发原则
无状态
无状态方便水平扩展
拆分
- 系统维度
按照系统功能/业务拆分,比如商品系统、购物车、结算、订单系统 - 功能维度
对一个系统进行功能再拆分,比如,优惠券系统可以分为后台券创建系统、领券系统、用券系统 - 读写维度
服务化
服务动态扩展,服务分组隔离,服务限流,服务鉴权,服务白名单,超时,重试,服务路由,服务set化。
服务化演进:进程内服务—单机远程服务–集群手动注册服务–自动注册和发现服务–服务分组/隔离/路由–服务治理 如限流/黑白名单
消息队列
作用:系统解耦、异步处理、削峰平流
问题
- 多个订阅者订阅一个消息队列,系统性能瓶颈
- 消息重试导致的重复,下游需要幂等
缓存
- http相关缓存
- app缓存
- cdn缓存
并发化
2.高可用原则
2.1降级
2.2 限流
- 恶心请求只请求到cache
- 对于恶意ip限制
- nginx limit模块