引用场景
春节期间朋友间相互发送红包表示问候,高峰期位于除夕和初一。静态页面和数据分离
前台展示采用纯静态页面,采用ajax异步处理数据。以便,ui变化时,快速地更新前台页面,并且方便地进行页面缓存。采用nginx进行反向代理
3.1 静态资源缓存
比如缓存html、js、css等,便于减少对业务部门的请求压力。
3.2 限流
当请求超过一定阈值时,返回统一的错误码(或者统一的提示页面),这样当请求峰值超过后端业务部件的承受能力时(尤其是数据库的读写压力),进行降级处理,不致于压垮后面的部件。
3.3 平滑升级
业务升级时,设置不同的upstream策略,把业务请求导入到不同的业务部件中,这样可以轮流升级不同的业务部件,做到升级不中断业务。- 缓存
一般,数据库的读写是整个业务的瓶颈,尤其是读取远大于写入的场景下,可以使用缓存,减少数据库的读取压力。可以考虑使用内存数据库或者redis数据库。 - 全局锁
涉及到多个用户同时操作的一致性问题,如多个用户同时拆去同一个红包时,需要采用全局锁,让用户串行操作,可以采用全局锁的方式进行(redis或者zookeeper),同时要注意所的粒度。 - 数据库
合理设计数据库表的索引,拜年红包设计了常见操作表的索引后,cpu由200%左右快速到下降到60%左右。
数据库前置添加缓存减少数据库的读取压力。
当数据库添加了索引后,压力依然增大,需要采用分库分表的方式进行(采用阿里云的数据库可以快速的进行数据库扩容)
由拜年红包引起的程序架构思考
最新推荐文章于 2022-07-01 12:02:22 发布