由拜年红包引起的程序架构思考
2017-01-30 11:09
169 查看
引用场景
春节期间朋友间相互发送红包表示问候,高峰期位于除夕和初一。
静态页面和数据分离
前台展示采用纯静态页面,采用ajax异步处理数据。以便,ui变化时,快速地更新前台页面,并且方便地进行页面缓存。
采用nginx进行反向代理
3.1 静态资源缓存
比如缓存html、js、css等,便于减少对业务部门的请求压力。
3.2 限流
当请求超过一定阈值时,返回统一的错误码(或者统一的提示页面),这样当请求峰值超过后端业务部件的承受能力时(尤其是数据库的读写压力),进行降级处理,不致于压垮后面的部件。
3.3 平滑升级
业务升级时,设置不同的upstream策略,把业务请求导入到不同的业务部件中,这样可以轮流升级不同的业务部件,做到升级不中断业务。
缓存
一般,数据库的读写是整个业务的瓶颈,尤其是读取远大于写入的场景下,可以使用缓存,减少数据库的读取压力。可以考虑使用内存数据库或者redis数据库。
全局锁
涉及到多个用户同时操作的一致性问题,如多个用户同时拆去同一个红包时,需要采用全局锁,让用户串行操作,可以采用全局锁的方式进行(redis或者zookeeper),同时要注意所的粒度。
数据库
合理设计数据库表的索引,拜年红包设计了常见操作表的索引后,cpu由200%左右快速到下降到60%左右。
数据库前置添加缓存减少数据库的读取压力。
当数据库添加了索引后,压力依然增大,需要采用分库分表的方式进行(采用阿里云的数据库可以快速的进行数据库扩容)
春节期间朋友间相互发送红包表示问候,高峰期位于除夕和初一。
静态页面和数据分离
前台展示采用纯静态页面,采用ajax异步处理数据。以便,ui变化时,快速地更新前台页面,并且方便地进行页面缓存。
采用nginx进行反向代理
3.1 静态资源缓存
比如缓存html、js、css等,便于减少对业务部门的请求压力。
3.2 限流
当请求超过一定阈值时,返回统一的错误码(或者统一的提示页面),这样当请求峰值超过后端业务部件的承受能力时(尤其是数据库的读写压力),进行降级处理,不致于压垮后面的部件。
3.3 平滑升级
业务升级时,设置不同的upstream策略,把业务请求导入到不同的业务部件中,这样可以轮流升级不同的业务部件,做到升级不中断业务。
缓存
一般,数据库的读写是整个业务的瓶颈,尤其是读取远大于写入的场景下,可以使用缓存,减少数据库的读取压力。可以考虑使用内存数据库或者redis数据库。
全局锁
涉及到多个用户同时操作的一致性问题,如多个用户同时拆去同一个红包时,需要采用全局锁,让用户串行操作,可以采用全局锁的方式进行(redis或者zookeeper),同时要注意所的粒度。
数据库
合理设计数据库表的索引,拜年红包设计了常见操作表的索引后,cpu由200%左右快速到下降到60%左右。
数据库前置添加缓存减少数据库的读取压力。
当数据库添加了索引后,压力依然增大,需要采用分库分表的方式进行(采用阿里云的数据库可以快速的进行数据库扩容)
相关文章推荐
- 由程序语言引起的我的思考
- WPF 引起的软件架构思考
- 由程序部署所引起的思考 推荐
- 一个串口程序引起的思考
- 主从复制问题引起的架构优化思考
- 从秒杀架构引起的一些思考
- 一个程序引起的思考
- 数组元素奇偶排序程序中的死循环引起的思考
- SDI应用程序调用DestroyWindow()退出程序出现异常引起的一些思考
- 一个精典asp程序引发的错误引起的思考
- 由小程序引起的思考----关于字段和方法的分派
- 现在我采用的 php 开发的程序架构
- 米兰兄弟气质引起的思考--我的感触是深省
- 企业系统架构之思考-(速度篇)
- 关于解决商务平台ASP程序的源代码泄漏设想与思考
- 新年红包: 我的程序开发之路
- 对使用net程序架构开发的一点点儿
- 软件架构的探索和思考
- 在C#程序中实现插件架构(转载)
- 在C#程序中实现插件架构 - Sunmast翻译(转载)