一、前言

随着互联网的发展,人们的衣食住行渐渐的与互联网联系愈加紧密。在这种情况下,与我们生活密切相关的网络服务(微信、支付宝、QQ等)的实时性、稳定性、可靠性就愈加重要。下面我们就来介绍一些用于保证高并发服务的技术方案,从前端页面到后端存储依次介绍。

二、前端页面

通常情况下,用户访问网络服务通过APP(私有协议)、web网页(http/https)这些方式。这里我们就拿常见的http方式访问网络服务举例:用户通过点击某个链接或者浏览器输入相关URL来产生一个http请求,服务端收到请求后需要将相关的内容应答给用户,通常情况下一个完整的网页需要几十次的http请求才能完整的展示。如果一个诸如淘宝(双11)、京东(618)、12306(春运)的这样访问量巨大的网站,会生成大量的http请求,如果每次http请求的内容都去后台查询一遍并返回,这样不仅会造成延时过高,还有可能给后端造成巨大的压力。
  可能的解决方案
  1. 由于网页中的大部分内容都是静态的,所以可以将这些静态内容缓存到CDN,服务器的内存中,并优化http请求,通过合并http请求并将http应答的内容进行简单的gzip压缩,这样可以减少http请求的次数以及服务器I/O操作,同时也降低了网络开销。
  2. 对于绝大部分网站,用户都会有多次访问同一页面的情况,因此可以在用户第一次请求相关资源时,将那些不经常发生变化的内容(js、图片等)缓存到用户本地,以后每次访问这个页面时就只需访问那些变化的内容即可。
  3. 可能的话,尽量减少页面中图片特别是高清图片的使用。

三、网络接入

最简单的网站架构就是用户通过客户端、Web页面直接访问服务器,然后服务器返回给用户请求的内容。但是这种方式在大型网站上没法使用,因为单个服务器无法承受巨大的访问量,服务的可靠性极差。
  可能的解决方案
  1. 将业务拆分,部署到不同的机器上,根据业务的重要性以及调用频次来分配对应数量的资源,避免将压力打到同一台机器上。
  2. 业务服务器前端加一层代理,用来做负载均衡、服务可用性保障(keepalive、LVS、Nginx、一致性哈希等技术)。代理对后端业务服务器进行负载、可用性检查,然后将用户请求分发到负载低的机器上,另外代理也可以对请求进行简单的合法性检查。
  3. 购买或者自建CDN服务,搭建自有的DNS解析服务(避免中间人攻击),将用户请求解析到距离较近且负载较低的CDN节点,由CDN提供大部分的应答。使用CDN可以极大的降低主服务器的压力,而且对于一些DDos攻击也可以在CDN节点处进行相关的处理、清洗;同时也会遇到主服务器与CDN节点的数据同步问题,对于秒杀等场景,需要进行特殊处理。

四、业务处理

后端的业务服务器在拿到代理传过来的http请求数据时,对其进行鉴权、业务处理,然后将结果返回。对于一些峰值流量场景需要考虑(小米抢购、京东淘宝购物节秒杀等场景),这些会在短时间内出现大量请求,但是只有有限的商品供抢购,所以如果保证在超过平时几倍的流量下稳定的提供服务,就需要认证考虑了。
  可能的解决方案
  1. 高并发系统防止崩溃有三大利器:缓存、限流、降级。缓存就是将读写频繁的数据利用memcached、redis等缓存到内存中,然后定期持久化到硬盘;限流通常使用令牌桶算法来降低峰值流量,保证服务的稳定性;降级就是将一些不重要的服务临时下线,将资源提供给核心服务,保证核心服务的稳定。
  2. 对于限量秒杀的,可以采用 令牌桶+内存队列 的方式,按照1:1.2 给出排队或者售罄提示,避免用户反复刷新页面造成的请求量大量增加。
  3. 各个不同业务间通信需要考虑数据的乱序、丢失等问题,通常采用比较成熟的消息队列来进行消息(或数据)的传输,由消息队列来保证数据的顺序、完整以及唯一。

五、数据存储及处理

无论是电子商务网站、社交网站以及一些其他的网站,都需要对产生的数据进行存储。最简单的方式就是直接存储到MySQL、SQL server等这样的小型关系型数据库中,但是如果数据量大的话,关系型数据库就会遇到性能问题成为限制网站进一步发展的瓶颈,而且这些数据都是存储到磁盘上,磁盘的I/O性能也是需要关注的一点。
  可能的解决方案
  1. 对关系型数据库按照业务模型进行分库分表,变成分布式,减小锁的粒度,降低因为锁带来的性能损耗。
  2. 将数据格式转换成k-v形式存储,并采用redis等内存数据库对热点数据进行缓存并定期更新到后端数据库中,减少对后端数据库的访问。另外对于redis此类内存缓存,需要考虑高可用性的问题,避免因为设备异常导致数据丢失。通常采用两地三中心的方式来保证数据可靠性。
  3. 对于采用redis-cluster之类的分布式集群,需要考虑数据一致性问题。对于非核心数据可以采取最终一致性的解决方案,支付等核心数据需要单独隔离然后保障完整一致性。
  4. 对数据进行加密存储。(网易、CSDN等拖库时间血淋漓的教训)

转载于:https://www.cnblogs.com/sxhlinux/p/7758358.html

案例学习——网站高并发处理相关技术相关推荐

  1. Nginx--大型网站高并发处理

    Nginx–>大型网站高并发处理 文章目录 **Nginx**-->**大型网站高并发处理** 一,产生背景 二,负载均衡(Load Balance) 2.1 高并发 2.2 负载均衡 2 ...

  2. 会议交流|大模型与图学习等知识图谱相关技术实践探索

    2021年,在疫情隔离和复杂国际形势的背景下,我们越发认识到重视核心基础技术,对保持国家独立自主发展的关键价值,互联网和科技行业也面临着新的挑战和变革机遇,新的AI技术正发挥越来越大的作用,AI技术本 ...

  3. 基于JSP的在线学习网站的设计与实现

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye2 摘 要 本文采用自顶向下的结构化的系统分析方法,阐述了一个功能全面的在线学习网站的开发过程.操 ...

  4. 基于JSP的在线学习网站 的设计与实现

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye2 摘    要 本文采用自顶向下的结构化的系统分析方法,阐述了一个功能全面的在线学习网站的开发过 ...

  5. php积极心理学交流学习网站 毕业设计源码100623

    摘要 心理测试在我国兴起还是近几年的事,由于对心理健康认识不足,观念陈旧,一些人虽然有心理问题或有心理疾病症状,但却想不到或不敢去心理测试.因为他们中有些人是不知道自己的这些问题是应该找心理医生呢还是 ...

  6. (附源码)php积极心理学交流学习网站 毕业设计 100623

    摘 要 心理测试在我国兴起还是近几年的事,由于对心理健康认识不足,观念陈旧,一些人虽然有心理问题或有心理疾病症状,但却想不到或不敢去心理测试.因为他们中有些人是不知道自己的这些问题是应该找心理医生呢还 ...

  7. (附源码)php积极心理学交流学习网站 毕业设计100623

    编号: 摘要 心理测试在我国兴起还是近几年的事,由于对心理健康认识不足,观念陈旧,一些人虽然有心理问题或有心理疾病症状,但却想不到或不敢去心理测试.因为他们中有些人是不知道自己的这些问题是应该找心理医 ...

  8. php积极心理学交流学习网站 毕业设计-附源码100623

    摘 要 心理测试在我国兴起还是近几年的事,由于对心理健康认识不足,观念陈旧,一些人虽然有心理问题或有心理疾病症状,但却想不到或不敢去心理测试.因为他们中有些人是不知道自己的这些问题是应该找心理医生呢还 ...

  9. (附源码)springboot在线学习网站 毕业设计 751841

    spring boot在线学习网站 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻 ...

  10. 【建议收藏】18个适合程序员的在线学习网站,每个我都帮您试过了!

    关注"Java后端技术全栈" 回复"000"获取大量电子书 学如逆水行舟,不进则退! 程序员是最需要学习的群体之一! 学习的方法多种多样, 学习的渠道也是丰富多 ...

最新文章

  1. 【基本操作】主席数统计区间不同颜色个数
  2. js----map和对象的区别
  3. logback 常用配置详解(二) appender
  4. 疯狂html5+css3+javascript讲义 pdf_成为一名优秀的HTML5前端工程师需要掌握哪些技能?...
  5. python模块化编程_什么是模块,Python模块化编程(入门必读)
  6. JMeter(五)--检查点
  7. minecraft java_minecraft java版本下载
  8. c语言程序设计支持win10,win tc 64位下载-wintc C语言编译器64位下载 1.9.1 win10兼容版 - 河东下载站...
  9. 2019足协超级杯花落苏州 开幕战上演“京沪对决”
  10. android 如何解锁屏幕,2解锁屏幕破裂Android手机的方法(自由方式)
  11. 阿里P8详谈:软件开发和软件测试的职业寿命问题?
  12. 大学计算机学科入门培训,大学计算机基础培训总结
  13. 计算机文件保存方式,Word文档的三种保存方式
  14. 在移动端打开 Google 的网页快照
  15. python :脚本运行出现语法错误:IndentationError:unexpected indent(缩进问题)
  16. Pandas基础-利用python进行数据分析
  17. 金蝶实习(十一)——简单的二次开发
  18. 2019多校第一场 HDU6578 - Blank(DP,思维,滚动数组优化空间)
  19. Android 12 Watchdog(1) 介绍与启动
  20. Java实现短信验证码--(完整教程)

热门文章

  1. 再见!热血活力的深圳
  2. 在碾压中找到自己,提升自己的思考能力
  3. 语言 蜗牛爬树问题_育儿小知识:睡前聊天,也会提升孩子的语言能力!
  4. 计算机知识选择题库,计算机基础知识篇选择题库
  5. java url解码_如何从REST WebService 调用中解码路径参数
  6. supersocket缓冲区_SuperSocket学习进展
  7. java udp多线程服务器_UDP服务端多线程-----
  8. #脚本实现宠物动作行为_短视频剧情创作方法有哪些?爆款短视频的标配,只需88个脚本模板...
  9. 目标检测的数据增强 -- 代码实现
  10. Python:matplotlib绘制条形图