大型网站系统架构的演进(三)如何提高网站的高可用和高性能

随着网站的业务越来越多,网站的服务就变的很重要,假设某天你的服务器挂了,会不会是一个天大的灾难呢?而且这种事情发生的概率还不小,断电了,服务器硬盘坏了,内存坏了等等,都会使你的系统挂掉,而且高并发的访问有时候也会使系统资源耗尽,然后导致服务器宕机,那么解决方案呢,那就是集群,将相同的系统分别放到不同的web服务器或者硬件服务器,这样其中一个挂掉了,网站还可以正常运营。

Web应用集群

首先我们应该对web前置做集群,我们的方案是用Haproxy做http协议层的负载均衡,后端部署多个web前置,当然也可以用LVS,负载均衡效率更高,请参考我的另一篇博文:LVS实现负载均衡http://www.cnblogs.com/tangyanbo/p/4305589.html,这篇文章讲的是mysql的负载均衡,当然做web应用的集群原理是一样的,当然还有其他的一些中间件,如Ngnix也是可以的,关于负载均衡的中间件我会另起博客详细讲解的。

各种集群方案的性能问题

理解ip负载均衡和数据链路层负载均衡,需要熟悉tcp/ip协议。

反向代理负载均衡

典型的反向代理中间件有Haproxy和Ngnix,请求转发在http协议层面,其优点是和反向代理服务器功能集成在一起,部署简单,缺点是需要在中间件做http的转发,工作在应用层,且请求和响应都要经过反向代理服务器,容易成为性能瓶颈。

系统架构图:

Ip层负载均衡

通过修改请求目标地址进行负载均衡

具体实现:LVS

优点:ip负载均衡在内核完成ip转发,较反向代理性能要好,但请求和响应都要经过仍然要经过ip负载均衡服务器,因此吞吐量的瓶颈会出现在ip负载均衡服务器的网卡上。

系统架构图:

数据链路层负载均衡

通过修改mac地址来完成请求的转发,负载均衡数据分发过程中不修改IP地址,只修改目的mac地址,通过配置真实服务器集群所有机器虚拟IP和负载均衡IP地址一致,从而达到不修改数据包的源地址和目的地址就可以进行数据分发的目的,由于实际处理请求的真实服务器IP和数据请求目的IP一致,不需要通过负载均衡服务器进行地址转换,可将响应数据包直接返回给用户浏览器,避免负载均衡服务器网卡宽带成为瓶颈。

系统架构图:

Session问题

Web应用一般都是需要保持用户会话的,因此做集群之后会出现问题,默认情况下,客户端请求是被均匀的分发到后端服务器的,那么同一个会话的两次请求可能会被分配到不同的服务器,那么session就会丢失。

如何解决这个问题呢?

方案1:session复制

就是将1台服务器的session复制到其它所有的服务器上,这样无论访问哪台服务器,都会得到用户的session

该方案的缺点

当服务器的数量比较大时,session同步将会变得相当耗时

方案2:session粘滞

就是用户请求一个服务器之后,同一个会话的其它请求,都会被分配到这台服务器,session粘滞的功能由负载均衡中间件完成。

该方案的优点,解决了session复制的性能问题

该方案的缺点,由于用户的会话被保存到单一的服务器,就容易出现单点故障。

那么有没有更好的解决方案呢?

方案3:session服务器

部署一个专门的服务,保存用户session,同时在web服务器本地也保存一份,当本地没有或者失效时,去访问session服务器,当然session服务器就成了单点,当用户量大的时候也容易宕机,这时可以做一个session服务器集群,做主备同步备份,这样就达到了较好的效果,具体实现可以用redies,memcached等缓存中间件。

系统架构图:

结语:负载均衡至少有2个优点

1. 多点部署,解决了单点故障问题,提高了网站的可用性

2. 能通过利用更多的硬件资源提高系统性能

时间: 2024-10-14 00:43:40

大型网站系统架构的演进(三)如何提高网站的高可用和高性能的相关文章

大型网站系统架构的演进目录

大型网站系统架构的演进(一) 大型网站系统架构的演进(二)分布式模块之间的通信 大型网站系统架构的演进(三)如何提高网站的高可用和高性能

大型网站系统架构的演进(四)http层负载均衡之haproxy实践篇(一)

方案 上篇文章讲到了负载均衡的相关理论知识,这篇文章我打算讲讲实践方法以及实践中遇到的问题 方案:haproxy http层负载均衡 安装一个haproxy服务,两个web服务 haproxy:192.168.1.227:80 web1 http://192.168.1.226:8081/login web2 http://192.168.1.246:8888/login web服务自行准备,文章中就不说了 负载均衡算法为轮询调度 会话保持实现方式为cookie识别,插入cookie 优点: 1

大型网站系统架构的演进(一)(转)

前言 写这篇文章的目的是想用来帮助自己思考和理清头绪,以及如何从一个简单的网站架构演进发展成一个大型网站架构,主要侧重在技术方面 简单的网站 由于我没有做过php,那么就以jsp为例,jsp做网站前端,以电子商务网站为例,描述一个简单的网站架构 前端 jsp+css+js 后端 java ssh Web容器 tomcat 数据库 mysql 开发人员,美工1个,前端一个,java一个 部署方案为: 一台服务器,部署tomcat和mysql 架构图如下: 应用和数据库分布式部署 那么网站运行一段时

阿里P9架构师讲解从单机至亿级流量大型网站系统架构的演进过程

阶段一.单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件.此时我们使用一个容器,如tomcat.jetty.jboos,然后直接使用JSP/servlet技术,或者使用一些开源的框架如maven+spring+struct+hibernate.maven+spring+springmvc+mybatis:最后再选择一个数据库管理系统来存储数据,如mysql.sqlserver.oracle,然后通过JDBC进行数据库的连接和操作. 把以上的所有软件都装载同一台机器上,应用跑起来

P9架构师讲解从单机至亿级流量大型网站系统架构的演进过程

阶段一.单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件.此时我们使用一个容器,如tomcat.jetty.jboos,然后直接使用JSP/servlet技术,或者使用一些开源的框架如maven+spring+struct+hibernate.maven+spring+springmvc+mybatis:最后再选择一个数据库管理系统来存储数据,如mysql.sqlserver.oracle,然后通过JDBC进行数据库的连接和操作. 把以上的所有软件都装载同一台机器上,应用跑起来

大型网站系统架构的演进(二)分布式模块之间的通信

上一篇文章中讲到了分布式部署之后,各个模块要通过网络进行通信,那么如何通信,用什么协议呢? 可选的方案有http tcp/ip(socket)等 http短连接通信方案 基于http协议,xml报文传输 客户端具体框架为httpclient,服务端为struts2 客户端和服务端的通信在内网 该方案我们实行过一段时间,发现存在性能问题,首先是短连接,在并发量较大的时候,开启大量的tcp连接,这样连接资源容易耗尽,客户端首先成为瓶颈,tps上不去. 我总结的几点原因: 1.每次通信都重新开启新的t

大型网站系统架构实践(六)深入探讨web应用集群Session保持

原理 在第三,四篇文章中讲到了会话保持的问题,而且还遗留了一个问题,就是会话保持存在单点故障, 当时的方案是cookie插入后缀,即haproxy指负责分发请求,应用服务自行保持用户会话,如果应 用服务器宕机,则session会丢失. 现在来温习下解决方案 方案1:session复制 原理 就是将1台服务器的session复制到其它所有的服务器上,这样无论访问哪台服务器,都会得到用户 的session 优点 不存在单点故障问题 缺点 当服务器的数量比较大时,session同步将会变得相当耗时 方

大型网站系统架构演化之路

前言 一.最开始的网站架构 二.应用.数据.文件分离 三.利用缓存改善网站性能 四.使用集群改善应用服务器性能 五.数据库读写分离和分库分表 六.使用CDN和反向代理提高网站性能 七.使用分布式文件系统 八.使用NoSql和搜索引擎 九.将应用服务器进行业务拆分 十.搭建分布式服务 小结 前言 一个成熟的大型网站(如淘宝.天猫.腾讯等)的系统架构并不是一开始设计时就具备完整的高性能.高可用.高伸缩等特性的,它是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式.技术架构.设计

(转载)大型网站系统架构演化之路

前言 一个成熟的大型网站(如淘宝.天猫.腾讯等)的系统架构并不是一开始设计时就具备完整的高性能.高可用.高伸缩等特性的,它是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式.技术架构.设计思想也发生了很大的变化,就连技术人员也从几个人发展到一个部门甚至一条产品线.所以成熟的系统架构是随着业务的扩展而逐步完善的,并不是一蹴而就:不同业务特征的系统,会有各自的侧重点,例如淘宝,要解决海量的商品信息的搜索.下单.支付,例如腾讯,要解决数亿用户的实时消息传输,百度它要处理海量的搜索