Virtual Server
Virtual Server
什么是Virtual Server
Virtual Server是一个基于服务器集群的可扩展高可用的服务。VS的集群的结构对端用户是不可见的,对用户来说,他们只是在与一台高性能的VS进行交互,结构可参考下图;
真正的服务器和负载均衡(load balancers)可以通过高速LAN进行连接(interconnected)或者通过地理分离的广域网相连(geographically dispersed WAN)。LB可将请求(requests)分发到不同的服务器节点,并且为集群创建单一IP地址的多个并行服务。请求分发(request dispatching)可以使用IP负载均衡技术或者应用层负载均衡技术。服务的伸缩是通过在后台增减集群节点达到的。高可用性则是通过监测节点的故障并适时重置达到。
为什么使用Virtual Server
随着互联网的发展,互联网之间的流量随之大大增加。服务器的负载可能会在短时间内迅速上升,特别是一些受欢迎的站点。为了克服服务器的过载问题,一般有两种解决方案。一种是升级服务器的性能,但是升级过程复杂花费高。另一种是增加服务器的数量,例如创建一个可扩展的网络服务器集群。当负载增加,我们可以为集群增加一个或更多节点以满足需求,这种方式可扩展性更高且性价比更好。
服务器集群一般有以下几种构成方式;
基于DNS的负载均衡集群
DNS集群应该是最简单的网络服务器集群的构建方法之一。它运用DNS来解析域名并分发请求到不同的服务器。当DNS服务受到一个DNS请求,它会基于转发策略返回其中一个IP地址。这些策略包括轮询,随后的用户可以基于本地缓存在指定的TTL中将请求转发到相同的服务器。
但是由于代理缓存的特点和DNS系统的阶级,它非常容易导致在服务器之间的动态负载不均衡, 因此非常不利于服务掌控峰值负载。域名解析的TTL值很难调优,当TTL很小时,DNS流量很高,DNS服务很容易成为瓶颈,当TTL很高则会导致动态负载失衡。即使TTL设置为零、转发的粒度为每个host,不同的用户接入类型也会导致动态失衡,因为有些人会向站点请求很多页,而有些人只是简单浏览然后离开。更重要的是,这种方式不是很可靠,当一个节点失效,代理可以发现问题却无法解决。
基于调度的负载均衡集群
调度单元被用来在服务器集群中分发负载,因此多个并行的服务可以被视为是单一IP地址的虚拟服务,用户在使用服务的过程中不会感知到集群中的节点。与基于DNS的负载均衡相比,调度可以将请求分为更小的粒度,例如每个连接。节点故障可以被遮盖(masked),服务管理因此变得更加简单,而且管理员可以在任意时间加入或抽出一个或多个节点,而不会中断服务的使用。
负责均和可以由两种层面实现,应用层和IP层。举例来讲,Reverse-proxy和pWEB是应用层的负载均衡。他们转发HTTP请求到集群中不同的网页服务器,当拿到结果后再回传给代理。由于处理和回复HTTP的开销很高,当季军节点增加到5个或以上时,应用层的负载均衡方式会成为新的瓶颈。而IP层的负载均衡,由于开销小,可以管理25深圳100个节点。
原理
如今,虚拟服务的实现主要有3中方式。分别是通过NAT、IP tunneling 、直连。
VS/NAT | VS/TUN | VS/DR | |
---|---|---|---|
server | any | tunneling | non-arp device |
server network | private | LAN/WAN | LAN |
server number | 10~20 | high | high |
server gateway | load balancer | own router | own router |
NAT
NAT的优势在于,服务器可以运行在任何操作系统上,只要他们能支持TCP/IP协议即可,服务器可以使用私有IP地址,而且load balancer只需要IP地址就可以。
劣势在于NAT的扩展性比较差。当节点数大于20,Load balancer可能会成为瓶颈。这是因为请求和回复的包(packets)都需要由LB重写,假设TCP包的瓶颈长度为536 Bytes,瓶颈重写时延约为60us,那么LB 的最大吞吐量为8.93 MBytes/s。假设一个服务器的平均吞吐量为400Kbytes/s,LB可以管理22个服务器。
IP Tunneling
在TUN中,LB只是将用户的请求分发到不同的服务器,而服务器直接向用户发送回复。因此LB可以管控更多的请求,使用TUN可以极大的增加服务器的节点数。最大的吞吐量可以达1Gbps。
TUN适合搭建高性能的虚拟服务。它非常适合做虚拟代理,因为当代理服务器收到请求后会直接接入互联网获取信息后直接回传给用户。
它的劣势是,TUN必须基于Linuex。
Direct Routing
与TUN相似,LinuexDirector只处理client-to-server这半程,回复包可以直接返回给代理。这可以大大增强可扩展性。
与TUN相比,它的开销更小但是需要节点在同一个物理片区。
- 点赞
- 收藏
- 关注作者
评论(0)