NEWS
科技新闻
您当前位置:华帅SEO > 站长资讯 > 科技新闻 > 正文
双11不宕机,高并发系统的基本原理(一):服务器集群
作者:华帅技术部  更新时间:2019-11-15 23:03:26

对于一个互联网人来说,“双11”是什么?

是在家拼团抢券,清空滴血的购物车?还是在公司加班熬夜,抢救垂死的服务器?

那几天早上叫醒你的,是“你有一个快递”的温馨提醒,还是“公司网站又宕机”的惊天噩耗?

为了下次能够更好地参与这个“千亿大项目”,今天我们就来全面了解一下,如何打造一个非常健壮的、双11不会宕机的高并发系统。

本文主要面向初级技术人员、产品运营等非技术人员,以及CEO和高管。我们用尽量通俗易懂的语言,普及一些技术原理和常用名词,同时也分享一些广泛适用的技术思想。

从一台服务器说起

早年的互联网圈有一句玩笑话:“某某某扛着一台服务器去创业了”。

其实很多网站,还真就是从一台服务器起步的。

双11不宕机,高并发系统的基本原理(一):服务器集群

 

那个时候扁扁的机架式服务器还没普及,所谓“扛着去创业”的服务器,说不定就是自己打游戏那台高配PC。

我们知道,绝大部分互联网系统都是由应用程序、数据库、资源文件三部分组成。因为刚创业没钱,只有一台服务器,所以我们把它们都安装(部署)在一起。

双11不宕机,高并发系统的基本原理(一):服务器集群

部署在一台服务器上的小型网站

应用程序通常包括页面展示(前端)和业务处理(后端),它们的任务是响应用户对网站的访问,响应结果就是浏览器里看到的一个个页面。而页面中展示的数据,以及用户提交的信息,都保存在数据库里面集中管理。至于资源文件,一般常见的就是页面上显示的图片。

这种只有一台服务器的系统,能干多少事情呢?

我们衡量一个网站的性能,主要是看它能承受的访问量并发量

访问量,就是每天有多少人(UV)看了我们的网站多少次(PV)

并发量,是说同一时间(秒),有多少人同时在看(请求)我们的网站。

而性能的瓶颈和上限则是“并发峰值”。

举例来说,我们的网站有1万注册用户,但平时每天最多只有1000个人会来看(访问量UV=1000),凑巧在同一秒钟同时发出访问请求的,最多100人(并发=100)。但是到了双11那天,有可能1万个人同时参加秒杀活动。也就是突然出现了1万的并发峰值,如果服务器最多承受200、1000并发,那肯定就会宕机了。

并发峰值就是我们网站的性能上限,这个上限首先首先取决于服务器的硬件配置,包括CPU、内存、硬盘和网络带宽等。所以当网站跑不动的时候,我们首先想到的就是升级服务器,加更多的内存,换更快更大的硬盘,或者换一台CPU更多、更强的新机器。

光升级硬件不一定够,而且也不能无限升级,所以必须同时优化软件性能和程序效率。这里面牵涉的因素就很多了,使用哪种数据库?用什么开发语言?代码写的好不好?这些都有很大的影响。

传统的网站开发,基本上分成PHP、ASP/C#、Java三大阵营。其中老旧的ASP已经被淘汰,先天不足的C#也逐渐没落,做大企业平台出身的Java成了业界主流,但在只有少量服务器的情况下,轻量化的PHP往往是首选

双11不宕机,高并发系统的基本原理(一):服务器集群

PHP阵营一般采用LAMP架构

LAMP开源架构,也就是服务器运行Linux操作系统,用Apache作为网页服务端,用MySQL作为数据库,用PHP开发网站程序,全部都是免费的开源软件。这个组合现在仍然被广泛使用,只是由Nginx取代了Apache的位置。

虽然程序员们绞尽脑汁优化代码,但终究不可能突破硬件性能的上限。单台服务器的极限,最多也就是几十万PV、几百个并发。随着业务量的快速增长,那台孤零零的服务器是坚持不了多久的。

服务器性能不足的常见现象:CPU使用率经常飙到100%,硬盘马达嘎叽嘎叽的疯狂转动,也还是来不及读写数据,用户打开网站页面的时候,经常会没有响应。

单打独斗不行,我们自然就要“打群架”,所以赶快掏钱,多买几台服务器来分担压力。

不过问题没有那么简单, 要让多台服务器一起工作,并不只是把机器连起来那么简单。

如果把原来那台服务器的数据库、程序、文件都复制到新服务器上,这就变成了两个一模一样的网站系统,它们之间会互相冲突。例如用户上一秒在A看价格,下一秒在B下单,数据就完全乱套了,这样显示是不行的。

要加服务器,我们先要把系统拆开,分成几个不同的部分。

简单的系统分离

系统就是前面说的应用程序、数据库和资源文件,原本都在一台服务器上,现在我们分开放在三台服务器上。

双11不宕机,高并发系统的基本原理(一):服务器集群

各系统之间通过内部网络通讯

分离之后,我们就可以针对各个系统的特点,调整每台服务器的配置,达到最优的性能。

其中数据库对磁盘读写能力要求极高,所以必须配备高速硬盘阵列,并辅以尽可能多的内存。而应用程序则最依赖CPU运算能力,所以尽量用高频、多核的高端CPU。而资源文件则需要大容量的高速硬盘。

将资源文件分离出来,独立一台服务器,主要是针对电商、社交之类的平台,因为用户会不断上传,所以图片和其他文件的数量会非常庞大,而且增长迅速。如果这方面的需求不突出,可以只给数据库单独一台服务器,少量的资源文件与应用程序共用一台。

分离数据库是不用修改程序代码的,只需要编辑一下配置文件中的数据库连接参数,把数据库服务器的地址从本机改成另一台机器的IP。

进行系统分离之后,如果网站原来的整体性能是“1”,那么现在至少是“2”,压力得到了极大缓解。

不过互联网行业讲究“速度至上”,访问量和并发量增长非常之快,只扩大一倍并不能坚持很久。而且每个系统都只有一台孤零零的服务器,任意一台出了故障,整个网站就完蛋了。

单点故障”是致命的架构缺陷,意思是当系统中某一点失效,就会让整个系统无法运作。对于一个合格的高并发系统来说,避免单点故障是基本原则之一。

所以我们必须要增加更多的服务器。

多台服务器的集群

现在我们的系统有数据库、应用程序、资源文件三台服务器,如果继续加服务器该怎么做?

在这三台服务器里面,通常压力最大是应用程序,因为它是用户来访问的时候最先碰到的,相当于打仗的时候守阵地的步兵。步兵打仗首先靠人多,所以我们要先给应用程序“加人”。

双11不宕机,高并发系统的基本原理(一):服务器集群

多台应用服务器同时使用一台数据库

为什么不给数据库加服务器? 因为数据必须独一无二,而程序是重复运行的。所以应用程序加服务器最简单,基本上就是把程序拷贝过去新的服务器而已。

现在我们增加了应用程序服务器,但还必须先解决两个关键的问题:

  • 当用户访问网站的时候,实际使用的是哪一个服务器呢?
  • 当其中一台服务器发生故障,怎样让用户不再访问它呢?

这时候,我们会用到一种叫做“负载均衡”的网络技术。

简单的说,负载均衡就是在所有服务器的前面,增加一个网络设备,这个设备先接收用户的网络请求,然后进行平均分发。具体原理,就是一个登记着现在有哪些服务器(IP)的名单,名单中同时还记录了每个服务器现在有多忙,然后当有新的用户请求进来的时候,根据这份名单,优先把请求转发给最闲的那台服务器。

双11不宕机,高并发系统的基本原理(一):服务器集群

负载均衡的原理

这样,我们就可以让所有服务器同时工作,而且每台都充分发挥作用了。

假设一台服务器能应对1000并发,我们现在用10台服务器进行负载均衡,理论上就可以应对1000x10=10,000并发,性能提升了10倍。

负载均衡有专用的硬件设备:负载均衡交换机

你可能经常听到网络工程师说“F5“,那不是一个偶像团体,也不是快捷键,而是一种负载均衡交换机的型号。

双11不宕机,高并发系统的基本原理(一):服务器集群

F5就是负载均衡交换机的代名词

负载均衡交换机价格昂贵,尤其是F5,一台几乎抵得上十台普通服务器。所以一般用“软负载均衡”更加经济实惠,方法是找一台普通的服务器,运行一个软件来模拟负载均衡交换机,常用的软件有LVS、Nginx、HAProxy等。

有了负载均衡,我们的系统就具备了最基本的可伸缩高可用特性。

简单来说,就是能做到在增加、减少、替换服务器的过程中,保持系统的正常运行,网站和服务不需要暂停,用户也几乎完全感知不到。而且这个过程中,我们不需要修改程序代码

双11不宕机,高并发系统的基本原理(一):服务器集群

负债均衡集群的动态扩容和故障替换

这种应用服务器的集群化,使得我们在“程序跑不动”的时候,可以随时增加服务器进行扩容。

比如双11来了,我们要增加新服务器,就可以先把新机器都装好系统和程序,然后联网调试,这个过程中用户还不会访问到新的服务器。当一切准备就绪之后,只要简单地修改一下负载均衡交换机的服务器名单,新服务器就立刻“入列服役”了。

同时,当集群中的某台服务器出现故障的时候,我们可以在不影响网站正常运行的同时,完成服务器的撤换。

要撤掉或替换某台服务器,首先从交换机名单中把那一台的IP地址删掉,让它“出列”,这样用户访问就不会再分发到这台服务器,而是由其他服务器分担。之后我们再不慌不忙地断开网络、备份数据、搬走机器。如果要维护或替换,就按照上面增加服务器的方式,准备好后“归队”就行了。

小结

通过系统分离和负载均衡,我们在不改程序的前提下,把服务器从一台变成了多台。

如果程序代码优化得好、服务器配置合理,这种架构的极限差不多是一千万PV或几千并发,对于创业初期的平台来说基本上够用了。

不过这种负载均衡的集群技术,只能解决“程序跑不动”的问题,却没法解决“数据库扛不住”的问题。

由于数据必须保证一致性,数据库不能像应用程序一样,通过负载均衡直接组成集群,所以大多数情况下,数据库服务器都是处于“单打独斗”的状态。当那台唯一的数据库服务器,性能达到了上限的时候,即使增加再多的应用服务器,也不会有什么作用。

数据库扛不住,就没法支撑更大的业务量,也许还没熬到下一次双11,我们就已经死得很难看了。

所以接下来的课题就是:如何突破单台数据库的性能瓶颈?

由于篇幅的关系,我们今天先讲到这里,敬请期待下一篇《拯救数据库》!

NEWS站长资讯
  • 公司名称:合肥华帅SEO技术信息服务有限公司
    售后电话:15862658116
    Q  Q:1701743642
    邮  箱:dshuai0557@163.com
    地  址:合肥市肥东县燎原路与香石路交叉口5855号
    seo.caifuqn.com @ 2012-2028 合肥华帅SEO技术信息服务有限公司 , 皖ICP备11014979号 , 技术支持:润鸿网络|猪八戒|威腾互联|一团网|卢松松|搜爱外链|老铁商城|A5