负载均衡设备经过多年的发展,已实现了多次华丽的转身,从负载均衡交换机到现在的应用交付控制器(ADC),已褪掉了负载均衡的廉价外衣,展现给客户的是一台高性能,多功能,技术含量超然的流量管理设备。尽管越来越多的用户会选用专用的ADC设备,但仍有部分用户觉得群集软件更简单实用,更贴近企业的应用部署,到底这两种解决方案各自有怎样的特点,这里分享一下个人的观点。
ADC是传统的网络负载均衡的升级与扩展,现在更多的是应用交付平台,其综合了负载均衡、协议优化、SSL流量加速、HTTP智能压缩与缓存、高级路由等多种技术手段,这方面的代表有A10/F5/RADWARE等;而群集软件的代表有windows的NLB, linux开源的的LVS,著名应用开发商BEA的weblogic cluster等。
1)功能实现
为排除应用服务器的单点故障,把应用服务器的数量由单台增加至两台或以上,不再是以往主备的方式。当一台服务器发生故障,其余正常的服务器立即接替并承接流量,一方面减少了故障迁移的等待时间,另一方面多台服务器同时工作,流量均分,不会导致部分服务器使用频繁,资源利用更充分,更安全。即使在突发大流量的情况下,也能轻松应对。
除了流量得到均衡分发,对服务器的健康检测也必不可少,这样才能保证在服务器出现异常时能被及时发现并规避。
现在的应用访问往往不是单连接的应用,连接之间存在关联,就如访问电子商务网站时,商品选取后放入购物车,继续选取或直接下单,然后完成支付的流程,这些交互的过程都必须保证客户端账户的唯一性,不然交易就会失败。这里要说的也是负载均衡或群集中的一个基本功能——会话保持。
同样都能实现上述的功能,无论是专业的ADC设备或是群集软件,而且这些也是用户最基本能使用上的,所以用户往往给这两种方式划上了等号,真的没区别么?。。。。。。
2)负载均衡的效果
群集软件的负载均衡算法一般来说比较少,如随机、轮询等,还有一些智能的相对高级一点的算法,如weblogic cluster的基于性能的负载均衡的轮循(Weight-based round-robin)、根据参数值调用(Parameter-based routing)。而专业的ADC设备提供的算法则更为丰富,分别有静态算法的轮询、比率,还有动态算法的最少连接数、最快响应时间、IP+PORT hash、URL switching等。在一些应用较为复杂的场景,专业ADC的内容引擎还能将数据包拆解,根据数据包的内容中的关键字进行流量分发,这方面的佼佼者有A10和F5。
同样的,对于服务器的健康检查,在实现机制和效果上也会不同。每一个群集的服务,在服务器实例中都会有一个instance,即一个replica,这些replicas集合在一起形成一个replica-aware stub。这些stubs负责客户端与相关的服务器段对象的通信,当客户端请求该service时,实际上是向stub发出请求,stub负责检测服务器实例的状态。对于群集中相互有通信的服务器实例,会检测它们之间的IP套接口是否打开,如果检测失败,则验证为失败,其关联服务也会从JNDI命名树中删除;而在无对等通信的情况下,通过监测各对等服务器的心跳广播包也能检测群集服务器实例的状态。
专业的ADC设备不依赖于服务器之间的心跳,而是采用自身的检测机制,实时对服务器发出侦听包。对于服务器IP进行ping检测,对于服务端口建立TCP握手或发UDP的检测报文。检测报文虽然不大,但如果服务器数量多的时候,大量的探测包会相当考验发送端的性能,专业的ADC采用专用的进程以及专用的硬件资源(CPU)来处理,效果自然比群集软件要好。
再说一点,群集软件不是对所有的协议都能支持,如weblogic server只能对部分类型的对象进行群集:Servlet、JSP、EJB、RMI(远程方法调用)对象、JMS(Java 消息服务)目标、JDBC(Java 数据库连接);专业的ADC则不会有这样的限制,只要是标准的协议,ADC都能支持。
3)session复制
一些客户对于容灾切换提出很高的要求,当服务器发生故障进行切换,原保存的会话信息不会丢失。软件群集有很好的解决办法,如weblogic 会有三种方式保持其会话信息:in memory;文件保持;DB保持。其中用的最多的是第一种内存复制,但这种方式用于非复制持久性存储,当停止并重新启动 WebLogic Server 时,这些信息都会丢失。
专业的ADC设备也能实现灵活的会话保持,只是相对复杂一些,需要通过内容引擎在服务器回包的会话信息找到并保持到下一次客户端带来访问,而且ADC不支持服务器间的内容复制。
4)实现环境
不难看出,群集软件对操作系统和装载软件的server的资源都有很强的依赖性。要实现群集,各服务器实例的软件版本必须一致,包括操作系统以及补丁程序,不然总会出现一些不可预知的稳定性问题。群集服务器之间常用广播相互感知,所以也要求部署在同一个子网,这给业务的扩展也带来一定的难度。专业的ADC设备则有很好的可扩展性,只要服务器能正常提供服务,而且IP路由可达,ADC就能实现管理。
5)安全性
大部分群集软件依赖于底层的操作系统,这些公版的OS并没有做太多的安全限制,需要专业人士人为的去定制策略,或是借助第三方的防火墙软件来保证系统的安全。需知道,不同公司开发的软件在同时运行时总会有兼容性的问题产生,这给软件群集的部署带来极大的麻烦,当遇到各自的版本升级,新的风险也随之出现。而作为专业的ADC设备,OS是不公开的,即使采用了开源的OS,也是经过研发部门的多番评测,已将不必要的进程或服务关闭,展示给客户的只是一个操作界面,也不涉及OS底层的修改,更不用借助第三方软件为其保驾护航。
6)性能
性能是专业ADC设备的绝对优势,硬件资源经过调优,只为应用交付的功能所使用,“专业的人干专业的事”。如现在大多采用CPU多核并行运算的技术,内嵌的SSL加速、HTTP智能压缩、DDoS的防护等专用芯片,更是大大提升了处理性能,这些都是群集软件不能相比的。
个人看来,软件群集和专业的ADC各有优势,在市场上只会是在占有份额上存在差别,而不会出现完全替代另一方的情况。当企业规模不大,应用较为单一,只是简单的流量分发和容灾切换,这时采用软件群集就能满足。而当企业发展到相当的规模,功能和性能的要求也上升到另一个高度,这时专业的ADC就必不可少了。总之一句,最适合客户的才是最好的。