由拜年红包引起的程序架构思考

  1. 引用场景
    春节期间朋友间相互发送红包表示问候,高峰期位于除夕和初一。

  2. 静态页面和数据分离
    前台展示采用纯静态页面,采用ajax异步处理数据。以便,ui变化时,快速地更新前台页面,并且方便地进行页面缓存。

  3. 采用nginx进行反向代理
    3.1 静态资源缓存
    比如缓存html、js、css等,便于减少对业务部门的请求压力。
    3.2 限流
    当请求超过一定阈值时,返回统一的错误码(或者统一的提示页面),这样当请求峰值超过后端业务部件的承受能力时(尤其是数据库的读写压力),进行降级处理,不致于压垮后面的部件。
    3.3 平滑升级
    业务升级时,设置不同的upstream策略,把业务请求导入到不同的业务部件中,这样可以轮流升级不同的业务部件,做到升级不中断业务。

  4. 缓存
    一般,数据库的读写是整个业务的瓶颈,尤其是读取远大于写入的场景下,可以使用缓存,减少数据库的读取压力。可以考虑使用内存数据库或者redis数据库。
  5. 全局锁
    涉及到多个用户同时操作的一致性问题,如多个用户同时拆去同一个红包时,需要采用全局锁,让用户串行操作,可以采用全局锁的方式进行(redis或者zookeeper),同时要注意所的粒度。
  6. 数据库
    合理设计数据库表的索引,拜年红包设计了常见操作表的索引后,cpu由200%左右快速到下降到60%左右。
    数据库前置添加缓存减少数据库的读取压力。
    当数据库添加了索引后,压力依然增大,需要采用分库分表的方式进行(采用阿里云的数据库可以快速的进行数据库扩容)

你可能感兴趣的:(程序架构)