大型站点的前期规划


从低成本、高性能和高扩张性的角度来说说站点的规划:HTML静态化、图片server分离、数据库集群和库表散列、缓存……

一个小型的站点。比方个人站点,能够使用最简单的html静态页面就实现了,配合一些图片达到美化效果,全部的页面均存放在一个文件夹下,这种站点对系统架构、性能的要求都非常easy,随着互联网业务的不断丰富,站点相关的技术经过这些年的发展,已经细分到非常细的方方面面。尤其对于大型站点来说,所採用的技术更是涉及面非常广。从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了非常高的要求。已经不是原来简单的html静态站点所能比拟的。

大型站点架构。比方门户站点的架构。在面对大量用户訪问、高并发请求方面。主要的解决方式集中在这样几个环节:使用高性能的server、高性能的数据库、高效率的编程语言、还有高性能的Web容器。可是除了这几个方面,还没法根本解决大型站点面临的高负载和高并发问题。

上面提供的几个解决思路在一定程度上也意味着更大的投入,而且这种解决思路具备瓶颈,没有非常好的扩展性。以下我从低成本、高性能和高扩张性的角度来说说我的一些经验。

1、HTML静态化

事实上大家都知道。效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的站点上的页面採用静态页面来实现,这个最简单的方法事实上也是最有效的方法。可是对于大量内容而且频繁更新的站点,我们无法所有手动去挨个实现,于是出现了我们常见的信息公布系统CMS,像我们常訪问的各个门户站点的新闻频道,甚至他们的其它频道,都是通过信息公布系统来管理和实现的,信息公布系统能够实现最简单的信息录入自己主动生成静态页面。还能具备频道管理、权限管理、自己主动抓取等功能。对于一个大型站点来说,拥有一套高效、可管理的CMS是不可缺少的。

除了门户和信息公布类型的站点,对于交互性要求非常高的社区类型站点来说,尽可能的静态化也是提高性能的必要手段,将社区内的帖子、文章进行实时的静态化,有更新的时候再又一次静态化也是大量使用的策略,像Mop的大杂烩就是使用了这种策略。网易社区等也是如此。

同一时候,html静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询可是内容更新非常小的应用。能够考虑使用html静态化来实现,比方论坛中论坛的公用设置信息,这些信息眼下的主流论坛都能够进行后台管理而且存储再数据库中,这些信息事实上大量被前台程序调用,可是更新频率非常小,能够考虑将这部分内容进行后台更新的时候进行静态化。这样避免了大量的数据库訪问请求。

2、图片server分离

大家知道,对于Webserver来说。无论是Apache、IIS还是其它容器,图片是最消耗资源的,于是我们有必要将图片与页面进行分离,这是基本上大型站点都会採用的策略。他们都有独立的图片server,甚至非常多台图片server。

这种架构能够减少提供页面訪问请求的server系统压力,而且能够保证系统不会由于图片问题而崩溃,在应用server和图片server上,能够进行不同的配置优化。比方apache在配置ContentType的时候能够尽量少支持,尽可能少的 LoadModule,保证更高的系统消耗和运行效率。

3、数据库集群和库表散列

大型站点都有复杂的应用,这些应用必须使用数据库,那么在面对大量訪问的时候,数据库的瓶颈非常快就能显现出来,这时一台数据库将非常快无法满足应用,于是我们须要使用数据库集群或者库表散列。

在数据库集群方面,非常多数据库都有自己的解决方式,Oracle、Sybase等都有非常好的方案。经常使用的MySQL提供的Master/Slave也是类似的方案,您使用了什么样的DB,就參考对应的解决方式来实施就可以。

上面提到的数据库集群因为在架构、成本、扩张性方面都会受到所採用DB类型的限制,于是我们须要从应用程序的角度来考虑改善系统架构,库表散列是经常使用而且最有效的解决方式。我们在应用程序中安装业务和应用或者功能模块将数据库进行分离。不同的模块相应不同的数据库或者表。再依照一定的策略对某个页面或者功能进行更小的数据库散列,比方用户表,依照用户ID进行表散列,这样就行低成本的提升系统的性能而且有非常好的扩展性。sohu的论坛就是採用了这种架构。将论坛的用户、设置、帖子等信息进行数据库分离。然后对帖子、用户依照板块和ID进行散列数据库和表,终于可以在配置文件里进行简单的配置便能让系统随时添加一台低成本的数据库进来补充系统性能。

4、缓存

缓存一词搞技术的都接触过,非常多地方用到缓存。

站点架构和站点开发中的缓存也是非常重要。这里先讲述最主要的两种缓存。

高级和分布式的缓存在后面讲述。

架构方面的缓存,对Apache比較熟悉的人都能知道Apache提供了自己的缓存模块。也能够使用外加的Squid模块进行缓存,这两种方式均能够有效的提高Apache的訪问响应能力。


原文地址:https://www.cnblogs.com/mfrbuaa/p/5337922.html