Nginx负载均衡的实现(科普篇)
Nginx负载均衡
双十一将至,一年一度的剁手活动再次进入预热阶段,每秒数亿次的点击量的背后是如何运作的,可有小伙伴思考过?创作初衷:一方面为科普一下BAT(现MAT)互联网巨头如何去应对大流量访问,另一方面巩固一下时隔两年之久的高并发知识,距上次更新博文也将近一个月了,失踪人口回归,为你带来莫名奇妙的知识,内容量比较大,为方便食用,初步估计九个篇幅分三次更新,预计11.8号前结篇,娱乐科普,部分概念含糊的地方,望海涵,也欢迎大牛评论补充
一、Nginx产生背景
我们在日常生活中会遇见的一些问题
- 大学选课,报名系统(手动狗头,不吐槽)
- 12306 网站
- 双11购物狂欢节
- 过年过节游戏炸服
上述场景产生的主要有 2 大原因:
1.巨大流量
2.单台服务器资源和能力有限
在海量并发的环境下,用户每一次请求服务器,都需要创建大量线程,每一次线程都必须分配资源(CPU、内存、带宽、磁盘 IO 等),当资源不足的时候就会使得服务器宕机而无法提供服务。
那么如何保证网站在流量峰值时能够顺利运作???
下拉继续食用
二、Nginx负载均衡
在阐述负载均衡之前先解释一下高并发的概念。
2-1、高并发
见名知意,高(大量的),并发就是可以使用多个线程或者多个进程,同时处理(就是并发)不同的操作。简而言之就是每秒内有多少个请求同时访问。
2-2、负载均衡(Load Balance)
负载均衡:将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】,也是分布式系统架构设计中必须考虑的因素之一。
2-3、tomca并发图
使用过 tomcat 做过并发测试的伙伴应该知道其负载,当每秒 300 个请求同时访问tomcat 时,tomcat 已经开始承受不住,出现波动,那么大型网站是如何处理高并发的呢?
以下是高并发场景下,实现负载均衡的一个分布式架构图。常见互联网分布式架构,分为客户端层、反向代理 nginx 层、站点层、服务层、数据层。只需要实现“将请求/数据均匀分摊到多个操作单元上执行”,就能实现负载均衡。
@Author:lanyy699
三、Nginx背景初探
3-0、时代背景
没有听过Nginx?那么一定听过它的"同行"Apache吧,Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过HTTP协议提供各种网络服务。然而,这些服务器在设计之初受到当时环境的局限,例如当时的用户规模,网络带宽,产品特点等局限并且各自的定位和发展都不尽相同。这也使得各个WEB服务器有着各自鲜明的特点。
Apache的发展时期很长,而且是毫无争议的世界第一大服务器。它有着很多优点:稳定、开源、跨平台等等。它出现的时间太长了,它兴起的年代,互联网产业远远比不上现在。所以它被设计为一个重量级的。它是不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。
这些都决定了Apache不可能成为高性能WEB服务器,轻量级高并发服务器Nginx就应运而生了。
3-1、Nginx详细概述
Nginx 是一款轻量级的使用C语言开发的Web反向代理服务器【后面有介
绍】及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师
Igor Sysoev 在为Rambler Media工作期间所开发,Nginx作为WEB服务器一直为Rambler Media提供出色而又稳定的服务。其特点是占有内存少,并发能力强,nginx 的并发能力确实在同类型的网页服务器中表现非常好。其后Igor Sysoev将Nginx代码开源,并且赋予*软件许可证。
- 2004 年 10 月 4 日 第一个公开版本 0.1.0 发布。其将源代码以类 BSD 许可证的形式发布,高度的模块化和*软件许可证使得第三方模块层出不穷(ps:开源改变世界)
- 官方测试 nginx 能够支撑 5万并发链接,并且 CPU、内存等资源消耗却非常低,运行非常稳定。
- Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris,AIX,Mac OS等操作系统上
3-2、Nginx用武之地
Nginx是一款*的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。
@Author:lanyy699