使用 Cache Farms 和 Read Pools 提高 Web 应用的伸缩性

阅读数:127 2007 年 11 月 14 日

话题:数据库架构语言 & 开发

Michael Nygard 是一位作家和 No Fluff Just Stuff 公司的演讲者,他最近发表了一篇文章,讨论了两种提高 web 应用的性能和伸缩性的方法: Cache Farms 和 Read Pools。

Cache Farms 的思想是在一个集群中的所有应用节点共享一个外部的缓存而不是每个节点维护自己的缓存。这样可以减少冗余并减少使用应用服务器的堆空间:

通过从应用服务器进程中移出缓存,你可以从多个实例中访问相同的缓存,减少重复。把那些缓存对象从应用服务器的堆空间中除去,可以让堆空间变小,同时减少了垃圾收集时间。如果你使用分布式的外部缓存,那么你可以减少更多重复。

Read Pools 利用了大多数数据驱动的应用执行读操作远多于写操作的特点。通过在一套专门的只读的复制的数据库上执行读操作,减轻了写数据库操作的负担:

你如何建立一个读缓冲池?很简单!Read Pools 仅仅使用了数据库自己内建的复制功能。基本上,你只需要配置写控制器,把它的归档日志(或者你的数据库对他们的称谓)转移到读操作缓冲池数据库。

Michael 指出读操作缓冲池数据库的更新也许不是实时的,这依赖于你所使用的数据库,但是这也许是一个完美的可以接受的平衡。MySQL 用户可以利用使用MySQL-Proxy 分离读 / 写的特征来实现读操作缓冲。

Michael 的总结如下:

对于可伸缩性而言,有一个互为对照的答案:“在 web 层和应用层向外扩充(Scale out),在数据层向上扩充(Scale up)。”我希望这句话可以启示大家找到其他提高性能和容量的方法。(译者注:Scale out,指向系统中增加多个节点,比如向分布式系统中添加一台服务器;Scale up,指向系统中的一个节点中增加资源,通常包括给一台计算机增加 CPU 或者内存,也可以指扩充所运行线程的数量。译自Wikipedia

查看英文原文Scaling Web Applications using Cache Farms and Read Pools
译者简介曹云飞,西安交通大学计算机软件硕士。现就职于Ethos,热衷于新技术的钻研,软件架构与敏捷开发,目前从事 Home Control 方面的工作。参与 InfoQ 中文站内容建设,请邮件至china-editorial[at]infoq.com