扩展Web站点为成千上万的并发用户提供亚秒级响应时间是各网站所面临的挑战,在Web的最初时期,网站由一个Web服务器组成,并将HTML格式的文件存放于其硬盘上,初期增长的挑战是尽快把HTML文件转换成HTTP消息并管理大量的网络连接,页缓存和服务器集群是应对这种挑战的有力手段。 不幸的是,Web的扩张超过了这种技术所能应付的能力,现在,B2C站点的流量已经说明了这一点,而B2B市场和应用服务供应商(ASP)也正在迅速证明这点。在这三种情况中,Web作为后台支撑系统的一个界面,肯定这些站点仍会采用大量以HTML文件存放的静态内容。但是,这些站点的主要价值在于根据应用服务器、打包应用和数据库中业务处理状态动态生成的Web页面。 实时分类、电子拍卖、Internet经纪、供应链和远程IT服务均极大地依赖随时向用户展示动态过程的能力,建立这种视图也带来了两个新的瓶颈,使对用户的响应时间会高达几秒。首先,从网格后台支撑系统获取所要的当前数据并将其格式化成HTML格式时需要时间;其次,后台支持系统为提供所要的数据而必须的计算也需要时间,为了向全体用户提供一个一致的当前视图,同一站点的全部Web服务器必须访问同一支撑系统,使得支持系统成为整个网站的阻塞点(瓶颈)。 如果每个用户都要求后台支—撑系统进行不同的计算,那么解决方案只能是采用最强大的硬件。但是,动态数据通常满足80—20规则,即80%的用户请求只访问20%的数据,因此,动态Web站点可以通过消除大量的冗余计算来取得均衡,对生成的内容进行动态缓存便是其中的一个解决方案。动态Web缓存所面临的问题是在支撑系统数据改变时要保证用户获取更新后的内容。 普思软件公司在动态缓存领域的探索几乎已有十年,现在的Dynamai产品系列是其多年经验结晶。利用Dynamai动态Web缓存,Web站点消除了动态内容增长的瓶颈,而对其已有的应用体系却没有什么影响,而且,拥有专利的事件和依赖性确定技术保证了缓存内容的实时更新。
动态Web站点性能 一般来讲,影响Web站点性能的两个重要方面,即计算成本和用户满意度。 站点性能差意味着要购买功能更强的服务器或更高速的网络连接,性能差也意味着有更多的用户会不满意而不再用它,计算成本极大地影响着网站的整个运行成本,而用户流量则决定了网站的收入,站点性能差会对赢利产生极大的负面效应。 Web站点的性能极大地取决于站点的结构、用户数。计算环境一样的两个站点由于体系结构不同会有很大的性能差异,因此,关于动态Web站点的问题就变成了:什么样的体系结构能最有效地利用计算资源?对这个问题的回答要首先弄清动态Web站点的本质及其对计算资源的使用。很幸运,对目前的Web管理员来说,不需要重新设计其现有的系统结构。
动态Web内容是什么? 静态的内容由文本、图像和多媒体组成,在用户每次单击相应连接保持不变,动态的内容则是用户每次单击相应连接时由Web服务器用程序生成的网页组成。动态内容有两个视图:经验视图和结构视图。用户视图根据其用浏览器访问网站时的经历来预测动态内容,记录每个用户不同的经历和同一个用户在不同时间的浏览情况,从用户观点看,动态内容根据用户标识号、预先输入的参数(如想跟踪的股票)或外源参数(如当前股票价格)等生成。因此,任何提供个性化内容、实时处理过程监视或提供交互式服务的Web站点都提供动态内容,每个经验就是客户访问这些站点的内容,还包括亚秒级的响应时间。 结构视图反映了站点管理员的活动,当使用硬件、配置网络和安装软件来提供服务时,从管理员的角度,提供动态内容要求把Web服务器连到另一个系统,在Web服务器上安装软件来从其它系统获取数据,在Web服务器上配置软件来将响应转变格式化成HTML格式。典型的连到Web服务器上的系统包括应用服务器、打包应用和数据库,典型的请求协议包括ODBC、DCOM和Java RMI,一般服务器端的HTML格式化软件包括Parl CGI脚本,Active Server Pages (ASP)和Java Server Pages(JSP),结构的复杂会引起性能问题。
动态内容为何成为问题? 经验视图为动态内容提供了动机,结构视图提示了为什么动态内容成为了问题,典型的静态Web站点结构,其服务内容直接从硬盘取得,内容源从Internet上某处经过1次“旅行”。一个动态Web站点,从数据库直接生成实时动态内容,现在内容源从Internet上经过二次“旅行”,从应用服务器生成实时动态内容(由应用服务器访问数据库)的动态Web站点。内容源从Internet上经过了三次“旅行”,每一步均引入了某种程序的延迟,增加了Web站点的响应时间。 对传统的网络而言,增加延迟并不是唯一的问题,还有一个问题是在尖峰负载下内容的不足,负载是随时改变的,管理员必须设计站点以便满足用户在尖峰负载下对网络的要求,但尖峰负载的增长比站点总体流量增加更快。 不幸的是,当系统存在一个高度敏感的部件时,尖峰负载的突然增长被组合了,当峰值超过整个环节的阀值时,响应时间会突然增加。通常对这个问题的解决方案是安装一个功能更加强大的部件或创建一个多部件集群。图2a显示了静态Web站点的集群策略,在这种情况下,因为每个Web服务器均有一份所有内容的相同拷贝,所以这种策略能起作用。图2b显示了这种策略用于动态Web站点的一个企图。这种情况下,因为最后单个的数据库必须满足每一次的动态请示,所以这种策略并不成功。 形成数据库集群的效果并不与建立Web服务器集群有一样的效果,因为数据库代表了也许随时会变成一致的数据视图,同一个数据库的几份拷贝会难以表现为一致的视图。因为每一个会接收不同的请求,如果某个用户的请求改变了一个数据库,但另一个数据库响应随后其它的请求,用户在交互中就失去了正确性,所以记录动态内容的数据库成了整个网络站点的一个瓶颈,如果尖峰访问增长到数据库记录的饱和点,那么网站就会陷入瘫痪。
Dynamai的实时动态内容缓存 Dynamai是把动态内容带给用户并能减少后台支撑系统负载的产品,它能保证内容的更新,也不需要对站点体系作重大改变。在静态内容的缓存上,有许多解决方案,这些传统的解决方案对经常访问的页面在内存中提供缓存以避免磁盘访问,任何站点管理员均可在已有的站点中添加缓存,如图3所示。 通过缓存提高性能而不改变网站结构是重要的一环,传统的缓存技术通常在一定时间后刷新缓存内容。显然,对于动态内容,这种方法变得无效,因为数据的变化比缓存刷新更快。 但是,静态内容缓存解决方案的存在可以避免不必要的动态数据请求,如果对于静态内容,其访问硬盘的速度太慢,那么想像一下,对于动态内容,需要两个网络“旅程”,并且由两个不同的系统层来处理,情况会有多糟呢?Dynamai技术可以和传统网络缓存提供同样的性能,而且对系统体系影响甚小。实时动态内容缓存这个创新使得Dynamai能处理动态内容,这是一种独有的依赖事件的模型,使站点管理员或网络供应商能做到:(1)标识可以缓存的动态内容;(2)声明会引起内容变化的事件;(3)当事件发生时通知缓存。
消除内容热点 Dynamai位于网络Web服务器前端,并负责解释HTTP请求(如图4),如果一个请求所要的内容已经在Dynamai的缓存中,就简单地还回内容,如果请求的内容不在Dynamai的缓存中,就把请求转送到Web服务器,Web服务器响应时,Dynamai便缓存其内容。如果一个请求的内容不能缓存,便把请求传送给Web服务器而忽略响应。站点管理员可以配置Dynamai以便缓存任何内容:动态的和静态的。已有静态缓存解决方案的网站只要把Dynamai配置成不管所有静态内容即可。 从Dynamai缓存中返回内容从而提高性能的潜力是十分巨大的,如果内容缓存在内存中,响应时间小于1毫秒,如果内容缓存于硬盘上,响应时间也小于10毫秒,如果设有缓存,Web服务器必须用一个网络“旅程”通过直接连到数据库来获取数据,或者通过应用服务器连接数据库,这时需要两个网络“旅程”来获取数据。每一个网络“旅程”均要时间来构造网络消息,建立连接、传输消息、消息解包、处理消息,然后再对消息作出响应,在良好的条件下,总计要花费50毫秒时间,对于两个“旅程”,总计会达到100毫秒,所以缓存动态内容可以使响应时间缩短5至100倍,根据Persistence客户的实际经验表明,使用其中间层缓存技术,服务性能可提高100倍。 但是,动态缓存的好处不仅仅是改善响应时间。记住,在尖峰负载下,还有一个数据库记录的过载问题。假设,一个网站在高峰期间,每秒收到1万次动态内容请求,如果设有缓存,每次用户请求均要转化为数据库访问,这意味着另有1万次事务处理的负载,而如果Dynamai响应了其中50%的请求,这样就相当于使数据库能处理的负载翻了一番,在某些情况下,客户使用Persistence的中间层缓存技术可以有90%以上的请求由缓存来响应,使数据库能处理的负载提高了10倍。
标识缓存内容 当然在缓存内容时会有一些开销,如果缓存的内容用户不再访问,就会浪费掉许多有价值的存储空间。因此,使用Dynamai提高性能的第一步是标识缓存内容,好的方法有3个特征:代表了站点流量的主要部分;用户访问很多而相应变化较少;构成了处理的瓶颈。
现在来考虑一下一个简单的拍卖站点情况,这个站点由Web服务器集群组成,单一的数据库,有5种类型的页面: ·主页:这是站点的主页,主页顶部是每天变化的拍卖物品类别的连接,其余部分是所有拍卖物品按字母顺序列出的清单。 ·分类页面:在主页上单击类别的连接,就会把用户带到相应物品的分类页面,这里列出了该类物品中现在可以竞拍的所有物品清单。 ·物品页面:在分类页面中单击特定的物品(连接)就进入特定的物品页面,这个页面对物品有更详细的介绍和目前的竞价情况。 ·竞价页面:每个物品的页面中均有一个连接使用户可以参加竞价,这个页面用SSL加密,当有用户名和口令后就可以参加竞价。 ·生成/更拍卖页面:每一个分类页面中均有一个连接可以让出卖者在该类下生成一个拍卖页面,这个页面也用SSL加密保护,有用户名和口令后,允许输入该物品的所有必须的信息。 在寻求缓存的可能性时,首先不考虑SSL加密的竞价页面和生成/更新拍卖页面,因为每一个用户连接均有特定的关键字,缓存这个内容没有意义,也不考虑主页,因为它要一天才有变化,对这个页面标准的静态缓存解决方案就足够了。 这样就只剩下了分类页面和物品页面,分类页面展示了清晰的缓存条件。每一个分类页面均是站点流量的主要组成。如果有10个类别并且每类都有指向其它页的连接,则可以预期,大约10%的用户交互会引向某个特定的分类页面。物品页面的情况也一样,因为参加拍卖的物品也许多达10万种,用户交互方式进入每个物品页面的机率就很小了。每个类别只有在新的拍卖活动开始或老的拍卖活动结束时才会发生改变,可能会有几分钟,而在这个时间内,已有几百个用户观看了页面。物品页面在某人进行竞拍后就发生改变,如果每次拍卖平均接受10次竞价,那么这些页面的变化速度比分类页面快10倍,在这个时间里,可能仅有很少几个人观看页面,最后,要生成一个分类页面很费事,因为这要搜寻整个数据库以寻找该类的全部拍卖活动,而产生物品页面仅涉及数据库中的一行。 我们定义分类页面作为要缓存的内容,因为他们很好地符合缓存的三个特点,对于物品页面,情形并不明显,如果缓存物品页面,也许会节省10%到20%的物品页面生成时间,但这是否能抵得上缓存的维护开销?这是一个经验问题,应该实现分类缓存然后计算性能曲线,接着再做物品页面缓存,看性能是否有显著改善,也许我们会发现缓存中命中的物品只涉及到极少数几类—流量最多最为流行的几类,对于这些类,每个物品的页面在改变前会接到50到100次点击,这种情况下,应该对这些类别中的物品进行缓存。
保证内容的更新 一但确定要对拍卖站点的分类页面进行缓存,就要处理如何命名这些页面不会变得陈旧无效,逻辑上,可以看出当类别内拍卖物品改变时,该页面就成为过时无效,当这种变化发生时,必须通知缓存,解决这个问题是Dynamai的关健创新。Dynamai可以让站点管理员声明内容对象依赖的事件,接下来必须标识事件,说明那类URL要依赖这个事件,在拍卖站点这个例子中,计划缓存分类页面,并已知类别内一个物品的拍卖状态变化会引起分类页面的改变,所以我们在Dynamai配置文件中声明一类事件来描述类别内物品的变化。对于尚未开发站点软件的管理员,Dynamai提供了另一种依赖说明机制,称为基于脚本的依赖,在这个方式下,开发人员可以在生成内容的脚本内声明内容的依赖性。
Dynamai遍布网络 Dynamai也能把站点级或服务级缓存扩展到Internet“边界”,ISP为各个站点管理员提供网络连接和基础设施。一般,他们也涉及把那些站点的用户连入Internet,他们提供大型机构的访问,或者是单个用户的访问,也许还与其他ISP有协议提供此类服务,由于他们涉及到Internet的两边,使得其有机会把缓存的动态内容推近用户。图5显示了网络边界中Dynamai的情况。 每一个ISP提供服务的站点均有自己的站点缓存,其位于Internet的“服务器端”,ISP维护着一个边界缓存集群,其位于Internet的“客户端”,每一个站点缓存均为相应的边界缓存提供依赖服务,站点缓存通过可靠的消息传输协议如TIBCO的TIB/Rendezvous发送缓存的动态数据和通知边界缓存的事件。一旦缓存从站点取得动态数据,用户便会明显感觉到响应时间的改善,ISP会看到支撑系统流量的显著降低,站点管理员会看到系统负荷的显著下降,实现了双赢。 ISP和站点管理者都能从Dynamai中获益,一旦用服务级缓存提高了客户网站的能力,可以利用Dynamai把缓存扩展到Internet边界,更为接近用户,对等和交换协议将使许多供应商把缓存集合起来作为Internet的一大成分,可以极大地延长现用体系结构的寿命。 最成功商业Web站点受到用后台支撑系统中数据生成动态内容能力的影响。动态生成内容使Web从一种电子出版技术转变为全面综合性交互媒体和网络应用平台,但是这种转变已使各个站点和整个Internet受到了巨大的压力,网站采用动态内容越多,就越有吸引力,有更多的用户,在有望获得收获的同时,对Web服务器和后台支撑系统的负荷呈几何级数增加。
|