一种可能的大型网站负载均衡架构

高访问量的网站怎样才能应对大量的网站访问?这是一种可能的网站架构设计方案

  • 负载场景

    双十一时,怎么样的网站架构才能使网站能够抵抗每秒上亿的访问量呢?

通常使用的方案就是不要将鸡蛋放在一个篮子里,从访问请求开始到操作数据库再到数据返回,每一步都是可扩容的。在每一步中将访问流量均分到不同的处理节点上,来进行负载均衡。

下面是一种可能的简单的负载均衡方案,用于讲解一般情况下的高并发状况。

  • 负载均衡

访问流程:以用户访问baidu.com为例

1、域名解析

当用户访问baidu.com这个网站时,域名解析服务器将会将其解析成对应的IP,例如为123.123.123.123,相当于访问baidu.com和访问123.123.123.123效果是一样的。

2、LVS分配请求

123.123.123.123只是一个外网IP,这里会使用VIP虚拟IP技术将外网IP映射到内部LVS主机上。LVS作为负载均衡调度器,将请求动态地分配到某台主机上。LVS主机不只一个,当一个宕机之后,另一个自动切换使用。

3、nginx反向代理

一台主机相当于一台服务器,通常运行了一个nginx和多个tomcat实例,而nginx通常作为负载均衡和反向代理服务器使用。当访问该主机的80端口时,就相当于访问nginx服务器,而nginx又会将该请求转发到tomcat运行的8080/8081端口。这样,就将请求真正的交给了处理请求的服务器。
在这里,主机和tomcat实例都可以动态扩容,当请求变大时,增加几台主机即可应对即将到来的流量。

4、tomcat处理请求

tomcat才是真正处理请求的服务器软件,要返回哪些东西全在这里出来。可我们有很多个tomcat在运行,也许你登录请求是主机1的tomcat处理,而下次搜索请求是主机4的tomcat在处理。怎么才能使他们协调呢?这就需要tomcat是与请求无关的,程序员不能在tomcat中保存数据,数据可以集中存放到mysql数据库或者Redis中。

5、数据库保存数据

所有重要的数据基本都存放在数据库中,而数据库也并不是只有一个,而是主从数据库同时工作,实时同步的,将数据保存到多个数据库中。

6、结果返回

tomcat在数据库中拿到数据之后,进行业务处理,然后将数据返回给nginx再返回给客户。
而有些静态资源,如图片、js、css可以放在nginx中静态缓存而不需要再从tomcat中取,加快数据返回。
有时也会将静态资源放在CDN中,CDN在很多地区都有服务器,当我们需要某张图片时,会从最近的服务器中取,使网站打开速度加快,同时也分担了业务服务器的压力。