网站高并发&高可用处理

1.三大问题

  • 高并发:多个进程或线程同时访问同一资源会产生并发问题;
  • 高可用
  • 大数据量

2.解决方案

初级解决方案:

系统或服务器级别的解决方案:

  • 增大服务器的CPU;
  • 增加内存条;
  • 增加硬盘个数,对硬盘做Raid5;
  • 换掉免费的Tomcat,使用商用weblogic;
  • 增加到二块网卡;
  • 聘请系统架构师优化Linux内核;

应用级别解决方案:

  • 网页HTML静态化(需要CMS项目支持);
  • 图片服务器分离;
  • 缓存(常用解决方案);
  • 镜像(下载较多);

增加服务器。服务器增加伴随着新的问题:

  1. 用户访问IP多了怎么解决?
  2. 数据库出现瓶颈怎么办?

解决IP多:

(1)DNS。循环复用DNS。

    虽然循环复用DNS是一个普遍使用的在web服务器上负载平衡的解决方案,但是,该方式有它自身的缺陷。循环复用DNS将传入的IP请求映射到定义的一系列循环形式的服务器。一旦发生服务器故障,循环复用DNS继续把请求发送到这个故障服务器,一直到把该服务器从DNS中移走为止。这样许多用户必须等到DNS连接超时以后才能成功地访问目标网站。

(2)采用负载均衡技术(终极解决方案)

    由于目前现有的网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器设备根本无法承担。在此情况下,如果扔掉现有设备去做大量的硬件升级,这样将造成现有资源的浪费,而且如果再面临下一次业务量的提升时,这又将导致再一次硬件升级的高额成本投入,甚至性能再卓越的设备也不能满足当前业务量增长的需求。

    针对此情况而衍生出来的一种廉价有效透明的方法以扩展现有网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性的技术就是负载均衡。

负载均衡种类:

(1)一种是通过硬件来进行解决的,常见的硬件有NetScaler、F5、Radware和Array等商用的负载均衡器,但是它们是比较昂贵的;

(2)一种是通过软件来进行解决的,常见的软件有LVS、Nginx、apache等,它们是基于Linux系统并且开源的负载均衡策略。

Nginx:反向代理服务器。被动等待,等待用户来访问我们的服务器。作为tomcat服务器的代理服务器,真正的服务器是tomcat,在tomcat前面加了Nginx。

LVS:Linux Virtual Server,linux虚拟服务器。在Linux内核2.6中,它已经成为内核的一部分。                

为什么选择LVS?

(1)抗负载能力强,因为LVS工作方式的逻辑非常之简单,而且工作在网络4曾仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑,内存和CPU基本无消耗;

(2)配置性低,这通常是一大劣势,但同时也是一大优势,因为没有太多可配置的选项,所以除了增减服务器,并不需要经常去触碰它,大大减少了人为出错的几率;

(3)工作稳定,因为其本身抗负载能力很强,所以稳定性高,各种LVS都有完整的双机热备方案;

(4)无流量。LVS仅仅分发请求,而流量并不从它本身出去,所以可以利用它这点来做一些线路分流之用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响;

(5)基本上能支持所有应用,因为LVS工作在4层,所以它可以对几乎所有应用做负载均衡,包括HTTP、数据库、聊天室等。

效率最高的负载均衡技术:

    调度器的实现技术中,IP负载均衡技术是效率最高的,IP虚拟服务器软件(IPVS)是在linux内核中实现的。

IPVS软件实现了三种IP负载均衡技术

1VS/NAT

2 VS/TUN

3 VS/DR

Virtual Server via Network Address Translation(VS/NAT)  
    通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端真实服务器;真实服务器的响应报文通过调度器时,报文源地址被重写再返回给客户,完成整个负载调度过程。 

    但通常在流量比较大的情况下会造成调度器的瓶颈。因为服务数据的返回必须通过调度器出去。

Virtual Server via IP Tunneling(VS/TUN)  
    采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器 把请求报文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。

    但是目前支持TUN 只有Linux系统。

Virtual Server via Direct Routing(VS/DR)  
    VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术 可极大地提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一 块网卡连在同一物理网段上。也就是说,在这种结构中,数据从外部到内部真实服务器的访问会通过调度器进来,但是真实服务器对其的应答不是通过调度器出去。 即在大多数情况下,真实服务器可以通过各自的网关或者专用的网关对数据进行外发,从而降低调度器负载。 

调度算法:

1:轮叫调度(Round-Robin Scheduling
2: 加权轮叫调度(Weighted Round-Robin Scheduling
3:最小连接调度(Least-Connection Scheduling
4:加权最小连接调度(Weighted Least-Connection Scheduling
5:基于局部性的最少链接(Locality-Based Least Connections   Scheduling
6:带复制的基于局部性最少链接(Locality-Based Least   Connections with Replication Scheduling
7:目标地址散列调度(Destination Hashing Scheduling
8:源地址散列调度(Source Hashing Scheduling
9:最短预期延时调度(Shortest Expected Delay Scheduling
10:不排队调度(Never Queue Scheduling
  对应: rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq

你可能感兴趣的:(数据库)