[中文] [English] 

论文

Go2架构

[CMMB云计算小组]

 

如果用过在线代理,就应该知道Go2代理。Go2代理从去年由云计算小组成员开发出来后,由于其代理速度快、性能稳定、良好的中文支持而迅速成为著名的在线代理应用。
 
如果不知道什么是在线代理,那也没关系。其实在线代理就是代理用户去取得网络信息。我们访问互联网,基本上都是通过浏览器直接访问网站的。但可 能有些人因为隐私(如不想暴露自己的ip给服务器)、可能是路由不可达等问题,不想或不能直接访问某网站,这时,就可以利用在线代理来访问了。使用在线代 理后,你的请求将先发送到在线代理服务上,再由在线代理服务转发给目标服务器,页面返回时,按原路返回。这样,你尽管没有直接访问目的服务器,却能通过在 线代理访问到其上的内容。
 
Go2应用的快速、稳定,其实是继承了google云计算平台GAE(Google application Engine,google应用引擎)的优点,并非是Go2本身程序写得特别好的缘故。当然,Go2的一些设计上的特点,对Go2的稳定好用方面也起到一定的影响。下面我们就分析了一下Go2的架构。
 
Go2并没有采用面向对象的OO设计思路,而是采用了面向过程的设计方法。整个过程是以流水线方式进行处理的(见下图)。流水线处理技术保证了Go2得以高效并发运作。虽然Go2有着众多的处理子系统,但得益于Python语言的高效开发能力,核心代码还不足两千行。
 
 
下面我们就逐个分析子系统的功能。
 
1.  IP识别器
 
根据用户访问的IP,识别出用户是那个国家的。Go2应用是面向全球的应用。Go2可以根据用户来自不同的国家而显示不同的语言页面。目前支持英文版和中文版。
 
2.  防火墙子系统
 
只要系统连上了互联网,各类攻击就会纷沓而至。而google的云计算平台本身是没有提供防火墙服务的,故需要自己建立一个简单的防火墙子系统。目前Go2的防火墙子系统的作用很简单,主要是防止Go2被持续的访问攻击、防止其它网站盗用Go2的网络资源(防盗链)。
 
3.  Url过滤器
 
Go2应用公布在互联网上,自然会有人使用它来做一些令人意想不到的东西。而Url过滤器则可以过虑掉部分低俗的网站地址。考虑到性能问题,Url过滤器做的比较简单,还不能过虑大多数网站。
 
4.  缓存子系统
 
当用户访问过一个页面后,如果该页面是可以缓存,Go2就将它缓存到缓存服务器中。缓存服务器是GAE提供的一个网络服务(memcache),可以高效地缓冲数据。经测试,使用缓存服务器后,用户访问速度提高了一倍。
 
5.  URL Fetch获取内容
 
经过以上流水操作到达这里后,Go2终于可以通过GAE 提供的url fetch服务来获取目的服务器上的页面了。通过的url fetch服务获取的页面内容和通过浏览器直接访问或获取的内容基本上是一致的。但由于GAE的url fetch服务使用了Google的一个巨大的页面缓存服务器,因此有时访问一些比较慢的网站时,你会发现,通过Go2访问比直接访问还快。
 
6.  Http解压器
 
一般来说GAE的url fetch服务获取到的页面是没有加密的页面数据。但有时url fetch返回的是经过gzip压缩的文件流,故需要在此进行解压。
 
7.  Uinicode编码转换器
 
到了这步,已表明页面已成功获取了。但Go2应用是面向全球的,而页面返回的编码格式是各不一样的,很多都是以前没有见过的。故Go2需要将编码都统一转换为unicode编码,以方便处理。
 
8.  中文识别及转换器
 
前面说过,使用在线代理的人有些是为了保护自己的隐私才使用在线代理的。故为了提高Go2的安全性,不被轻易的窃听,Go2对中文进行了简单加密处理。经过这样的处理后,也提高了Go2在互联网上的穿透能力。
 
9.  链接转换器
 
这是所有在线代理服务器的核心功能模块。如果不对页面上的链接(url)进行转换,用户是无法顺利浏览页面的。链接转换器就是给页面上的所有链 接(包括图片url等)穿上一件外套,告诉浏览器,这些链接请求,还是要送回到在线服务器来处理。在线服务器收到该请求后,把外套脱掉,得到原始的 url,再转发到目的服务器来获取数据。
 
10. 内容过滤器
 
Url过虑器是过虑url的。内容过滤器则是过虑页面内容的。对于一些低俗页面,可以在这里被过虑掉。由于性能上的考虑和技术实现的问题,目前的内容过滤器还有待完善。
 
11. 广告子系统
 
使用google的云计算平台是要付费的。目前Go2是通过广告来获取一些微薄的收入。因此通过一个简单可用的广告发布系统来发布广告就成为需要了。
 
12. 日志及性能监控器
 
Go2代码虽然很少,但因为大量使用了google提供的api,大量使用了正则表达式,稍微不小心,都会导致性能的急剧下降。故一个简单的性能监控器是必不可少的了。而性能数据的输出,则是通过日志系统完成的。需要调试时,就将性能监控器打开,平常则关闭掉。
 
Go2虽然有着很多子系统,但每个子系统都是简单的实现,故开发的代码少,Bug也少,功能也有限,界面也丑陋。但这些都无碍Go2成为著名的在线代理服务,这再一次验证了这句话:简单够用就好!
 
本文仅限技术探讨使用

注:以上文章版权归立信集团《沟通》所有,不得转载、引用。


Copyright © 2005-2009 www.mao2.com, All Rights Reserved. Contact email:chenbaiping#revenco.com