flhshlcxa 2013-12-05
Swiftiply 是一个用于Web应用程序后端未知的集群代理,它专门为支持来自Web框架的HTTP流量而设计。与Pen(http://siag.nu/pen/)不 同的是,Swiftiply并不打算作为一个通用的TCP协议负载均衡器。与HAProxy(http://haproxy.1wt.eu/)不同的是, 它不是一个高度可配置的通用代理。
那它的优点呢?它是一个快速的有针对性的集群代理。返回来比较Switiply和HAProxy,Switiply的可靠性要优于HAProxy(通过运行于Mongrel服务器的IOWA,Rails,Merb和Ramaze后端进程的测试)。
Swiftiply与传统的代理服务器运作方式不同。在Swiftiply中,后端进程是Swiftiply服务器的客户端,它保证socket连接至Swiftiply。该体系主要的一个的优点是:后端进程可随意进行启动和停止而无需通知代理服务器。明显的缺点是:这并不是后端通常期望的行为。
因为Mongrel是大多数Ruby框架的首选部署方法, 所以Swiftiply包含一个Mongrel已被修改成为swiftiply客户端的版本(在swiftcore/swiftiplied_mongrel.rb中可找到)。它对所有现存的Mongrel处理程序是透明的。
此外,作为swiftiplied_mongrel的旁系分支,还存在另一个版本的swiftiplied_mongrel.rb文件,你可以在 swiftcore/evented_mongrel.rb中看到。这是一个用EventMachine处理网络流量的Mongrel,它将会在事件而不 是线程模式的基础上建立一个Mongrel。对很多应用程序来说,在事件模式的基础上运行可以比在线程模式下提供更大的吞吐量,尤其当并发请求发生的时 候。
这是因为,在先到先服务的基础上,事件模式会在不经过线程的情况下高效地处理请求。相较于线程模式下的单个、无并发模式的Mongrel而言,对于典型的Rails应用,这意味着请求将被更加轻巧、快速地处理。尤其在有冰法请求的情况下,区别将更加明显。
框架支持
Swiftcore IOWA ( IOWA框架 )
IOWA 的存在时为了支持程序在事件和集群模式下运行。
Rails
Swiftiply为 mongrel_rails提供了一个名叫 _REPLACEMENT_的环境变量,通过使用这个变量,应用可被告知是在事件模式还是 Swiftiply(将Swiftiply用作HTTP代理服务器)模式下运行。
为了在事件模式下运行应用程序,你需要手动设置EVENT环境比那辆。在类Unix系统中:
env EVENT=1 mongrel_rails
在 Swiftiply模式下运行:
env SWIFTIPLY=1 mongrel_rails
因为Swiftiply在后台与服务器建立连接,因此他们都会在同一个端口发生。这点很重要,因为每个后端进程都会因为同样的端口号而产生冲突。为了解决这个问题,我们提供了一个帮助脚本swiftiply_mongrel_rails。它只是对mongrel_rails进行了一层简单的封装,让一个应用在合适的PID队列中可以开启、关闭N个后端。
Merb
在这里,merb(只用到了其主干部分)的存在也是为了支持Rails。
Ramaze
框架包含了一组为Ramaze准备的适配器,让其可以在事件模式或Swiftiply模式下运行。它们分别被安装在:
ramaze/adapter/evented_mongrel.rb
ramaze/adapter/swiftiplied_mongrel.rb
其他框架
Swiftiply同样在Camping和Nitro框架上做过测试。现阶段,Swiftiply并不直接支持这两个框架,但在未来推出的版本中会逐渐解决这个问题。
配置
Swiftiply仅有唯一的配置文件,该文件规定了其监听连接的端口以及是否应该调用daemonize()函数。随后,它提供了一个MAP结构的数 据,里面包含了连入信息的名称和网络流量经过的代理服务器的地址和端口。输出的地址和端口也就是网站的后台将会连入的地方。
例:
cluster_address: swiftcore.org
cluster_port: 80
daemonize: true
map:
- incoming:
- swiftcore.org
- www.swiftcore.org
outgoing: 127.0.0.1:30000
default: true
- incoming: iowa.swiftcore.org
outgoing: 127.0.0.1:30010
- incoming: analogger.swiftcore.org
outgoing: 127.0.0.1:30020
- incoming:
- swiftiply.com
- www.swiftiply.com
- swiftiply.swiftcore.org
outgoing: 127.0.0.1:30030