中大型网站的架构是如何演变的?( 三 )


别着急首先了解下LVS:
LVS的英文全称是linux Virtual Server,即Linux虚拟服务器 。它是由国防科大毕业的章文嵩博士开展的一个开源项目,在Linux内存2.6版本中已经成为内核的一部分 。LVS主要用于多服务器的负载均衡,工作在七层模型中的第四层-网络层,可以实现高性能,高可用的服务器集群技术,并且可把许多低性能的服务器组合在一起形成一个超级服务器,它的配置非常简单,有多种负载均衡的方法,而且稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果,另外它的可扩展性也非常好 。
那么这种解释能解决疑惑吗?当然不能,且看下面:
由于LVS属于内核级别的优化,而且工作在网络层,当做为负载均衡服务器的Nginx和LVS处理相同的请求时,所有的请求和响应流量都会经过Nginx,但是使用LVS时,仅请求流量经过LVS的网络,响应流量由后端服务器的网络返回,这样的话,如果有大量的请求出现,那因为带宽问题,LVS的效率就会有显著的表现,Nginx的瓶颈也就出现了 。
但是仅仅使用LVS作为负载均衡的话,一旦后端接受到请求的服务器出了问题,那么这次请求就失败了 。但是如果在LVS的后端在添加一个Nginx(或者多个),让Nginx做动静分离和反向代理,每个Nginx后端再有几台应用服务器,那么结合两者的优势,既能避免单Nginx的流量集中瓶颈,又能避免单LVS时请求失败的问题,何乐而不为呢?
2.KeepAlived实现HA高可用
KeepAlived从字面意思上来讲就是保持活着,比如说我们两台tomcat服务器就是两个小伙伴,两个小伙伴商量着,要不然咱们一个人干活一个人歇着,但是时长的要互相询问一句:“老铁?你累吗?还能行不?”,如果这个时候他回复还行,那么我就安心玩我的就行了,但是如果他一直没搭理我,怎么问怎么不应声,那它应该是累了,你是不是需要把他的活接过来啊,没人干肯定不行 。
严肃点哈,KeepAlived技术其实主要就是通过发送心跳包的方式,在每台服务器之间进行状态侦查,如果发现有宕机或者停止运行的服务器,立刻让闲置服务器运行起来实现主备复制和转移,当然这其中还需要一种容错技术来将系统运行的状态恢复到本应该有的状态,避免因为某台服务器的宕机影响执行的结果 。
 
四、CDN内容分发网络+Varnish服务器集群 

中大型网站的架构是如何演变的?

文章插图
 
随着个人博客用户量的不断提升,我们的项目虽然已经可以应付的了这么多用户量了,但是略微还有点慢,又或者有点卡,而且还有一个问题,中国的网络环境一般都是南方多用电信网络,北方多用移动联通的网络,电信的网络访问联通的网络明显能感觉的出来会特别卡,如果我们的博客放到了北方的联通网络上,而大量的用户来自于南方,对用户来讲岂不是很痛苦,每次访问的时候下载一些静态资源都会特别的慢,时间久了,可能会损失大量的用户,如何解决这些卡、慢的问题呢,下面再来看几种优化技术:
1.CDN内容分发网络
CDN内容分发网络其实就是构建在网络之上的内容加速器,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率 。
也就是说,如果我们系统中有一个jquery.min.js,直接放在我们北方的网通服务器上,南方的用户下载会特别的慢,但是如果我们直接用某个高速CDN服务器上的jquery资源引入,那用户下载的速度岂不是会快速提高,用户体验也会变得更好 。
2.Varnish服务器集群
Varnish这个词很多人都很陌生,其实它就是一个HTTP加速器和反向代理服务器,也是为了优化方案而引入的技术,这种技术一般被应用在Nginx后面,在tomcat的前面,主要用来优化Nginx的动静分离功能 。
之前提到将html、js这些静态的资源都放置到Nginx服务器中,java、jsp等文件放置到tomcat服务器中,这样能够更好的分摊tomcat服务器的压力,但是这个地方还有优化的空间,想一想是否在开发过程中存在一些jsp文件、java文件基本上是不变的,也就是说不管怎么调用,这些东西短期内都是固定的,那我们能不能把这些文件也提出来,让Nginx直接调用以降低tomcat服务器压力呢?答案是可以的,直接将一些短期内不变得文件配置进Varnish服务器中即可 。
 
五、数据库读写分离 


推荐阅读