原文:https://www.cnblogs.com/lupeng2010/p/6519466.html
PS:前段时间和Mentor们一起参与研发”百度地图百城千店感恩节AR游戏送大礼”的后端项目,积累了一些高并发情景下的系统设计经验,这里统一抽象成【秒杀情景下的后端系统】,归纳总结一下学习到的知识点。
转载地址:http://blog.daijiale.cn/2016/12/07/%E3%80%90%E5%90%8E%E7%AB%AF%E3%80%91%E8%AE%BE%E8%AE%A1%E9%AB%98%E5%B9%B6%E5%8F%91%E5%9C%BA%E6%99%AF%E4%B8%8B%E7%9A%84%E5%90%8E%E7%AB%AF%E7%B3%BB%E7%BB%9F/?utm_source=tuicool&utm_medium=referral
技术角度:业务规模覆盖用户群大,数据联通实时性强,响应时间要求极短,需要高可用,高并发。
市场角度:用户体验、曝光度、促销(秒杀)等。
简而言之,就是让自己编写的系统应用做到如何更优雅的”接客”。
好,现在我们来看看,如何用正确的”姿势”来”接客”?
双活:让主备两个数据中心都同时承担用户的业务,此时,主备两个数据中心互为备份,并且进行实时备份,尤其是在缓存层和DB层。
负载均衡:分软件层、硬件层、链路层,但不管哪一层,主要有两种通用常用技术思路:第一种是将大量的同时发送的数据流在多个节点上进行处理。第二种是将单一负载的大量分担在多个节点上进行并行处理,并且在所有节点都完成处理后将结果合并起来输出给用户。而现在,负载均衡技术已经不是什么新鲜技术,一般维护过服务器,或有两台以上的服务器都可以使用负载均衡技术。
安全过滤:设置比较完备的rules过滤器。
静态配置:在前端页面主要呈现内容为主,在接口层主要只读
的数据字段。
动态数据:频繁更新,频繁检索的数据字段。
注意设置缓存失效时间,不然超出redis缓存最大内存,溢出讲导致雪崩。
注意设置缓存失效时间的随机性,别同一时间同时失效,瞬间同时失效将导致密集的IO读写操作,容易导致缓存击穿。
简而言之就是:千万不要把鸡蛋放在一个篮子里!!!
PS: “没有最好的方式,只有最适合的方式”,不同的业务场景需求,不同的模块:数据库、缓存、消息中间件、媒体资源、系统应用等,需要选用不同的部署方案才能达到高可用,当然,一般更建议两种方式组合部署。
系统研发完成,测试通过并不代表就结束了,一个高并发系统最关键的时期往往是在活动的峰值期间,为了不让RD们24小时目不转睛地盯着所有可能出现问题的地方,最好在关键处加上异常监控信息,以便及时对异常事件做出响应。
这里介绍两个开源监控项目:
opcode缓存
、BigPipe
、BDRP(RedisV3)集群
、ORP集群
、CDN分流
,hiphoto
等更大的云实例。云监控
、云盾
、ECS
、OSS
、RDS
、CDN
分流,这些大都已经是面向大众的商业产品。回头单开一篇文章介绍,留个传送门。
通用的业务场景如下:
页面/服务器优化,依赖包cdn网络加速部署,隐藏跳转页面,状态切换(sh脚本设置定时任务实现),这里就不扩展了,现在应对大型Web系统的成熟前端页面技术栈特别多。
比较常见的token加/解密算法和协议
比较常见的ajax跨域处理方式
简而言之:就是”一言不合就反馈,功成名就须尽人皆知”。
数据校验器示例写法
比较常见的nosql消息中间件
简而言之:正式表演前,请务必带装彩排一轮