交易型系统设计的一些原则

墨菲定律:

  1. 任何事情都没有表面看起来那么简单
  2. 所有的事情都会比你预计的时间长
  3. 可能出错的事总会出错
  4. 如果你担心某种情况发生,那么他就更有可能发生

高并发原则

无状态

如果设计的应用是无状态的,那么应用比较容易进行水平扩展。

拆分

根据具体情况权衡,是设计一个大而全的系统还是按功能模块拆分系统。

服务化

进程内服务->单机远程服务->集群手动注册服务->自动注册和发现服务->服务的分组、隔离、路由->服务治理如限流、黑白名单

消息队列

数据异构

  1. 数据异构
  2. 数据闭环

缓存银弹

缓存对于读服务来说可谓抗流量的银弹。

  1. 浏览器端缓存:适用于对实时性不太敏感的数据
  2. APP客户端缓存:素材提前下发到客户端缓存;离线地图
  3. CDN缓存:一种是推送机制(当内容变更后主动推送到CDN边缘节点),一种是拉取机制(先访问边缘节点,当没有内容时,回源到服务器拿到内容并存储到节点上)。URL中不能 有随机数
  4. 接入层缓存:url重写,一致性哈希,proxy_cache,proxy_cache_lock,shared_dict
  5. 应用层缓存
  6. 分布式缓存

并发化

高可用原则

降级

限流

主要目的是防止恶意请求流量、恶意攻击,或者防止流量超出系统峰值。

  1. 恶意请求流量只访问到cache
  2. 对于穿透到后端的流量可以考虑使用Nginx的limit模块处理
  3. 对于恶意IP可以使用nginx deny进行屏蔽
    原则是限制流量穿透到后端薄弱的应用层

切流量

对于一个大型应用,切流量是非常重要的,比如多机房环境下某个机房挂了,或者某个机架挂了,或则某台服务器挂了,都需要切流量。

  1. DNS:切换机放入口
  2. HttpDNS:主要APP场景下,在客户端分配好流量入口
  3. LVS/HaProxy:切换故障的nginx接入层
  4. Nginx:切换故障的应用层

可回滚

业务设计原则

防重设计

考虑重复提交,防止重复扣减库存等

幂等设计

流程可定义

状态与状态机

后台系统操作可反馈

后台系统审批化

操作可追溯、可审计

文档和注释

系统发展的一开始就有文档库(设计架构、设计思想、数据字典/业务流程、现有问题),业务代码和特殊需求都要有注释。

备份

在这里插入图片描述

在这里插入图片描述

发布了402 篇原创文章 · 获赞 60 · 访问量 71万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章