面对峰值响应冲击,解决高并发的三大策略

当前在互联网+的大潮下,众所周知淘宝、京东这些交易系统每天产生的数据量都是海量的,每天的交易并发也是惊人的,尤其是“双11”、“6.18”这些活动,对系统的峰值响应提出了非常高的要求,所以对系统架构也就有了很要的要求。

在写这篇博客的前2天,听说某系统在25人的用户量下就宕机了,实在让人震惊,所以捋了下互联网交易系统我们可以采取哪些技术来解决互联网平台下大数据量高并发的问题。

首先根据架构分层把不同技术进行了一些分类,如下图:

互联网技术架构分层策略图

接下来我会逐一解释各个技术的大概原理和思路,供大家参考和学习:

一、互联网层

1、负载均衡

负载均衡英文名称为Load Balance,意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

比如Nginx是一款可以通过反向代理实现负载均衡的服务器,把流量导向不同的服务器;现在的云平台都提供了负载均衡服务,不过需要单独付费,比如阿里的SLB。

2、内容分发网络(CDN)

内容分发网络基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。

通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。

其目的,是使用户可就近取得所需内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度。这个不需要单独去实现,可以用现成的产品去做,比如: Akamai(好些,比较贵),Verizon EdgeCast(便宜些),ChinaCach;如果是云平台基本上都提供了这个服务,不过也需要付费的,比如阿里云基于自己的CDN加速提供了不同形式的加速;比如基于P2P技术的PCDN,增强防护DDoS、CC、Web应用攻击的SCDN以及全站加速。

二、Web服务器层

1、Session→Cookie

传统的B/S架构都是把用户会话放到Session里面,在在线用户量不高的情况下没啥问题,但是对于现在互联网采取了分布式或者微服务架构,就很难单独去维护Session了,因为Session会分布在不同的服务器上,会话的同步会面临着很大的问题。所以一种方式是把Session的维护拿到Cookie里去做,不依赖于某台或多台服务器,同时也减少了服务器的开销。当然,也可以利用内存缓存服务器来统一存储Session信息,有的内存缓存服务器还能把内存数据持久化到磁盘来提高可用性和可恢复性,就不会有同步问题了。

2、Static page

动态页面静态化,为什么又要把动态网页以静态网页的形式发布呢?一个很重要的原因就是搜索引擎;另一个重要原因就是提高程序性能。

很多大型网站,进去的时候看它页面很复杂,但是加载也没有耗费多长时间,原因在于先于用户获取资源或数据库数据,进而通过静态化处理,生成静态页面。所有人都访问这一个静态页面,而静态化处理的页面本身的访问速度要较动态页面快很多倍,因此程序性能会有大大的提升。使用场景是那些经常需要访问但是数据不经常更新的时候。这种情况就是时候将动态页面静态化了,比如淘宝的宝贝信息页面,页面动态部分可以用AJAX加载进来,比如月销多少笔。

3、Cache

缓存,Web服务层的缓存依赖于下面三个方面:

  • 浏览器端的缓存,比如CSS/JS等;
  • 在CDN这类技术当中做大量页面缓存来提高就近访问速度;
  • 自己搭建内存缓存服务器对频率访问比较高的页面进行缓存,比如首页等。

4、Gzip

利用浏览器能自动进行Gzip解压缩的原理对访问页面和资源(含图片、JavaScript、CSS等)进行Gzip压缩,减少文件大小,以此来提高网络加载速度。

5、One file

原理是把多个需要加载的内容合成一个文件,减少加载次数和网络连接时间,提高访问效率,比如把小图标集合合成一个大图片,把CSS/JavaScript 合成到一个文件里面。

6、Cluster

集群和传统的高性能计算机技术相比,计算机集群通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,它们可以被看作是一台计算机。

集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下,集群计算机比单个计算机(比如工作站或超级计算机)性能价格比要高得多,大多数集群采用主从式来管理集群节点,比如Websphere Cluster。

和常见的分布式的不同点在于:集群是同一个业务部署在多个服务器上;分布式是一个业务分拆成多个子业务,或者本身就是不同的业务,部署在不同的服务器上。

简单地说,分布式是以缩短单个任务的执行时间来提升效率,而集群则是通过提高单位时间内执行的任务数来提升效率。

三、应用服务器或者业务服务器层

1、Distributed/分布式|SC/服务中心|微服务|Decouple/解耦

分布式系统是支持分布式处理的软件系统,是由通信网络互联的多处理机体系结构上执行任务的系统。简单来说,分布式处理就是多台相连的计算机各自承担同一工作任务的不同部分,在人的控制下同时运行,共同完成同一件工作任务。包括分布式操作系统、分布式程序设计语言及其编译系统、分布式文件系统、分布式数据库系统、分布式调度系统等。这常常伴随需要做负载均衡、熔断和限流等;还得考虑是全量计算还是增量计算等。

所以随着分布式的发展,微服务架构就变得越来越流行,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持,围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单,所以业务的解耦和拆分的就变得越来越重要。

现在随着容器(Docker)的发展让分布式、微服务变得更加灵活和容易,也让现在支持大数据量高并发提供了很好的基础设施。

2、Cache

这一层的缓存主要是对高频数据进行缓存,比如对中间计算结果进行缓存,而且是基于内存缓存居多,比如Memcached和Redis,有的还提供缓存持久化,比如Redis。在分布式计算中经常要对批量数据进行缓存预读取以提高计算速度。

3、同步转异步/MQ

同步转异步的思路一方面不让进程或者线程阻塞在顺序执行里,从而加快程序的执行,就像Node.js用异步和Java用同步做相同计算测试,好多时候速度Node.js比Java还快,不信大家可以试试,像双11的抢购都是采用了异步机制。

另一方面不让用户一直等在那里,用户可以继续做别的事情,等异步执行完毕通知用户。这里面大量用到了消息队列(MQ),流行的产品很多,最早的WebsphereMQ,到现在的Kafka、RabbitMQ,有些甚至和流行的开源框架紧密集成,比如RabbitMQ和SpringBoot。

四、数据访问、文件访问、内部网络访问层

1、读写分离

因为在大数据量并发情况下,读的操作频率远远超过写操作,所以通过读写分离来提高读的速度,其思路是让主数据库(master)处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库(slave)处理SELECT查询操作,下面是淘宝最早的时候采用的读写分离策略:

读写分离示意图

2、DB Cluster

集群就不再做过多说明,数据库集群是利用至少两台或者多台数据库服务器,构成一个虚拟单一数据库逻辑映像,像单数据库系统那样,向客户端提供透明的数据服务。其目的还是为了增加数据吞吐量,提高数据库性能,满足大数据量下对数据的读写速度要求。

阿里云的RDS云数据库就继承了上述2大特征,外面看来是一个MySQL集群,提供统一的透明访问,而在内部就自动实现了读写分离,为高性能数据库存储提供了很大便利。

3、分布式存储(DAS/NAS/SAN)

三种分布式存储方案,大家可自行百度,各种介绍比较比较多,这里不再赘述,比如阿里的OSS存储也是一种分布式存储。

4、Cache

缓存无处不在,连CPU都有二级缓存,在数据访问这一层,可以根据你的数据需要充分利用缓存技术来提供读写速度,比如对要求不是特别实时的大数据进行预统计分析,然后缓存下来做报表等,这个时候直接从缓存里读取即可,提高统计速度。

5、NoSQL,Key/Value

NoSQL,泛指非关系型的数据库。随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其自身的特点(高可扩展性、分布式计算、低成本、架构的灵活性、半结构化数据,没有复杂的关系)得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。其数据库类型有列存储、文档存储、Key/Value存储、对象存储和图存储等。

参考:

http://www.runoob.com/mongodb/nosql.html

看看有哪些优势,劣势,特征以及相关的产品。

6、Split/分割,Partition/分区

表分区是DB对于非常大的表进行优化的一种有效方法,是根据数据库定义不同的分区策略决定的,比如取模、时间和哈希等,是非常有效的一种手段,在很多情况下比表分割更有效。

比如,有一个代码表使用分区表把100万纪录分在10个分区中(ID每从1到10万为一个分区),那样写查询语句的时候,只要给出查询条件中所需要的代码,DB自动会定位到对应的分区进行查询,大大降低的查询时间。

而采用表分割那必须先根据查询的代码指定所要查询的表,才能找到相应的记录,是由DBA或架构师根据业务需要来定义如何分割的。表分割分为水平分割和垂直分割:

  • 水平分割:根据一列或多列数据的值把数据行放到两个独立的表中;
  • 垂直分割:把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中。

7、BGP

边界网关协议,主要用于互联网AS(自治系统)之间的互联,BGP的最主要功能在于控制路由的传播和选择最好的路由。中国网通与中国电信都具有AS号(自治系统号),全国各大网络运营商多数都是通过BGP协议与自身的AS号来互联的。

使用此方案来实现双线路需要在CNNIC(中国互联网信息中心)申请IDC自己的IP地址段和AS号,然后通过BGP协议将此段IP地址广播到移动,网通、电信等其它的网络运营商,使用BGP协议互联后移动。网通与电信的所有骨干路由设备将会判断到IDC机房IP段的最佳路由,以保证移动、网通和电信用户的高速访问。现在不少的云平台都支持BGP。

五、总结

“缓存”、“异步”和“分”是互联网大数据量高并发下架构策略中用的最多的3种策略,从上面各个技术层面,“分”也是占据了大多数技术的核心思想,所以考虑的时候要多想想分哪里、如何分,另外很多业务场景还得想想怎么合。

原文发布于微信公众号 - Linyb极客之路(gh_c420b2cf6b47)

原文发表时间:2018-08-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java进阶干货

大型分布式网站架构技术总结:高性能+高可用+可扩展+可伸缩架构

集群:一个应用/模块/功能部署多份(如:多台物理机),通过负载均衡共同提供对外访问。

3153
来自专栏杨建荣的学习笔记

平台设计中的脚本管理

前期揉入了一些功能,因为主要是面向基础功能,所以进度略慢,如果要想一下子有种井喷的效果,那就是脚本化和流程化大显身手的时候了。 如果尽可能减少开发和业务同学之间...

4064
来自专栏FreeBuf

魔兽世界中招:一条命令行就能劫持你的游戏!

最近出现了一种涉及社工技术的新型游戏攻击骗局,攻击者利用了魔兽世界(World of Warcraft,WoW)游戏插件中一个隐藏的功能。 新型攻击 想象一下这...

4628
来自专栏逍遥剑客的游戏开发

Nebula3中的Visibility系统

1702
来自专栏张善友的专栏

MongoDB 2.6.2 发布

NoSQL数据库MongoDB推出了全新一代产品MongoDB 2.6.2,该版本全面强化核心服务器,提供全新的自动化工具与重要的企业功能,宣称是MongoDB...

2077
来自专栏数据之美

网站数据统计分析之二:前端日志采集是与非

在上一篇《网站数据统计分析之一:日志收集原理及其实现》中,咱们详细的介绍了整个日志采集的原理与流程。但是不是这样在真实的业务环境中就万事大吉了呢?事实往往并非如...

5217
来自专栏腾讯研究院的专栏

常见的几种数据层容灾架构比较分享

陈守志 腾讯公司平台运营开发组 一、关于容灾   关于容灾主题,这里罗列对比了几种常见的容灾案例: ?   相对接入层、应用层容灾而言,数据层的容灾相对...

5425
来自专栏携程技术中心

干货 | 高吞吐消息网关的探索与思考

作者简介 刘惊惊,唯品会业务架构部高级架构师。主要负责用户线,营销线的业务架构,也参与库存系统的重构改造。 一、背景介绍 唯品会是一家立足于“全球精选,正品特卖...

3504
来自专栏FreeBuf

经验分享 | 企业如何做好安全基线配置

一、为什么要做基线配置管理 一个组织在不同的时期部署了不同的业务系统,承载业务系统的是不同的操作系统和支持系统。业务系统在运行期间,基本上很少做操作系统的升级或...

5435
来自专栏通信云团队

开发一款即时通讯App,从这几步开始

1.3K5

扫码关注云+社区

领取腾讯云代金券