对于一个大型门户网站而言,拥有良好的伸缩性至关重要。无论是在纵向还是横向,伸缩性的关键在于如何实现合理的分割。这一原则应当在架构设计时就纳入考虑。以下内容将从多个角度探讨如何实现有效的分割。
可以将大型网站拆分为多个小型网站:假如一个网站涵盖多个功能,我们可以考虑将其拆为几个小模块,每个模块都可以是一个独立的网站。这样一来,我们可以灵活地将这些网站部署到不同的服务器上。
我们可以实现静态和动态文件的分离:把静态文件和动态文件分开做成两个网站,因为静态网站和动态网站对服务器的压力差别很大。前者可能较重视IO,而后者可能较重视CPU。在选择硬件时,我们可以有所侧重;而且,静态和动态内容的缓存策略也不一样,通常情况下,会有独立的文件或图片服务器。
可以根据功能进行分割:例如,某个模块是负责上传,而上传操作占用时间较多,若与其他应用混在一起,可能会导致服务器瘫痪。此外,安全和非安全的模块也需要分别处理,还需考虑未来购买SSL的可能性。
也可以考虑借助第三方的服务器,如搜索和报表服务,如Google搜索和报表服务,自身创建的可能无法比过他人的,并且,可以省下服务器带宽。
文件本质上也是数据库,它的IO流量可能超过数据库本身,这相当于纵向层次的访问,上传的文件或图片一定要和WEB服务器区分开来。
对于涉及到数据库访问的动态页面,可以使用中间层(也被称为应用层或逻辑层)访问数据库(配置在独立的服务器上)这样能带来的好处是缓存和灵活性。
这样虽然可以实现负载均衡,但如果分割的话,用同样的10台机器肯定能够接受更多的访问量,同时也可以降低硬件需求。尝试使每台服务器都不会空闲,但也不过于繁忙,并合理地进行组合、调整和扩充,这将提高系统的伸缩性。考虑分割的好处包括灵活性、伸缩性、隔离性以及安全性等。