平台主张以最少的人工成本
获得最大的外链发布提权效果!

构建高效Web平台:网站架构设计指南

如何构建网站架构
众多人士对如何构建网站架构感到困惑,于是本期小编在此分享一些个人心得,期望对大家有所裨益。
策略/步骤
通常而言,除了现有的系统功能需求外,软件架构还需关注性能、可用性、伸缩性、扩展性和安全性这五个架构要素。
在架构设计流程中,需协调这五个要素之间的关系,以达成需求和架构目标,同时可通过评估这些架构要素来评价一个软件架构设计的优劣,判断其是否满足预期。
效能,效能是网站的关键指标,除非别无选择,否则用户难以忍受一个响应迟缓的网站。
一个打开迟缓的网站将导致严重的用户流失,很多时候网站效能问题是网站架构升级优化的触发点。
可以说效能是网站架构设计的一个关键方面,任何软件架构设计方案都必须考虑可能引发的效能问题。
在网站面临众多用户高并发请求的情况下,可以将多台应用服务器组成一个集群共同对外服务,提升整体处理能力,改善效能。在代码层面,也可以通过运用多线程、优化内存管理等手段提升效能。
评估网站效能有一系列指标,其中重要的有响应时间、TPS、系统效能计数器等,通过测试这些指标以确定系统设计是否达到目标。

何为网站架构
网站架构,通常认为是根据客户需求分析的结果,准确锁定网站目标群体,设定网站整体架构,规划、设计网站栏目及其内容,制定网站开发流程及顺序,以实现高效资源分配与管理的方案。其内容涵盖程序架构、呈现架构和信息架构三种表现形式。而步骤主要分为硬架构和软架构两个阶段。网络架构是现代网络学习和发展的一个基础技术。

中文名
网站架构
通常认为
根据客户需求分析的结果
规划
网站开发流程及顺序
内容
程序架构,呈现架构
高效
导航
软架构八个方案
硬架构
机房的选择
在选择机房时,根据网站用户的地域分布,可以选择网通或电信机房,但更多时候,可能双线机房才是合适的。大城市机房价格较高,从成本角度考虑,可以在一些中小城市托管服务器,例如北京的公司可以考虑将服务器托管在天津、廊坊等地,距离不远,但价格会更便宜。

带宽的大小
通常老板请我们构建网站时,会提出一些目标,如网站每天要能承受100万PV的访问量等。这时我们需要估算大概需要多大的带宽,计算带宽大小主要涉及两个指标(峰值流量和页面大小),我们不妨在计算前先做出必要的假设:
第一:假设峰值流量是平均流量的5倍。
第二:假设每次访问平均的页面大小是100K字节左右。
如果100万PV的访问量在一天内平均分布的话,折合到每秒大约12次访问,如果按平均每次访问页面的大小是100K字节左右计算的话,这12次访问总计大约就是1200K字节,字节的单位是Byte,而带宽的单位是bit,它们之间的关系是1Byte= 8bit,所以1200K Byte大致就相当于9600K bit,也就是9Mbps的样子,实际情况中,我们的网站必须能在峰值流量时保持正常访问,所以按照假设的峰值流量算,真实带宽的需求应该在45Mbps左右。
当然,这个结论是建立在前面提到的两点假设的基础上,如果你的实际情况和这两点假设有出入,那么结果也会有差别。

服务器的划分
先看我们都需要哪些服务器:图片服务器,页面服务器,数据库服务器,应用服务器,日志服务器等等。
对于访问量较大的网站而言,分离单独的图片服务器和页面服务器相当必要,我们可以用lighttpd来运行图片服务器,用apache来运行页面服务器,当然也可以选择其他,甚至,我们可以扩展成很多台图片服务器和很多台页面服务器,并设置相关域名,如img.domain和 www.domain,页面里的图片路径都使用绝对路径,如,然后设置DNS轮循,达到最初级的负载均衡。当然,服务器多了就不可避免的涉及一个同步的问题,这个可以使用rsync软件来搞定。
数据库服务器是重中之重,因为网站的瓶颈问题十有八九是出在数据库身上。一般的中小网站多使用MySQL数据库,不过它的集群功能似乎还没有达到稳定阶段,所以这里不做评价。一般而言,使用MySQL数据库的时候,我们应该搞一个主从(一主多从)结构,主数据库服务器使用innodb表结构,从数据服务器使用myisam表结构,充分发挥它们各自的优势,而且这样的主从结构分离了读写操作,降低了读操作的压力,甚至我们还可以设定一个专门的从服务器做备份服务器,方便备份。不然如果你只有一台主服务器,在大数据量的情况下,mysqldump基本就没戏了,直接拷贝数据文件的话,还得先停止数据库服务再拷贝,否则备份文件会出错。但对于很多网站而言,即使数据库服务仅停止了一秒也是不可接受的。如果你有了一台从数据库服务器,在备份数据的时候,可以先停止服务(slave stop)再备份,再启动服务(slave start)后从服务器会自动从主服务器同步数据,一切都没有影响。但是主从结构也是有缺点的,那就是主从结构只是降低了读操作的压力,却不能降低写操作的压力。

为了适应更大的规模,可能只剩下最后这招了:横向/纵向分割数据库。所谓横向分割数据库,就是把不同的表保存到不同的数据库服务器上,比如说用户表保存在A数据库服务器上,文章表保存在B数据库服务器上,当然这样的分割是有代价的,最基本的就是你没法进行LEFT JOIN之类的操作了。所谓纵向分割数据库,一般是指按照用户标识(user_id)等来划分数据存储的服务器,比如说:我们有5台数据库服务器,那么“user_id% 5+ 1”等于1的就保存到1号服务器,等于2的就保存到2号服务器,以此类推,纵向分隔的原则有很多种,可以视情况选择。不过和横向分割数据库一样,纵向分割数据库也是有代价的,最基本的就是我们在进行如COUNT, SUM等汇总操作的时候会麻烦很多。综上所述,数据库服务器的解决方案一般视情况往往是一个混合的方案,以其发挥各种方案的优势,有时候还需要借助memcached之类的第三方软件,以便适应更大访问量的要求。

为了迎合更广阔的规模,或许唯有采取以下策略:横向/纵向拆分数据库。所谓横向拆分数据库,即把各异的表存放到不同的数据库服务器上,例如用户表存放在A数据库服务器上,文章表存放在B数据库服务器上。当然,这种拆分是有成本的,最根本的便是无法执行LEFT JOIN等操作。所谓纵向拆分数据库,通常是指依据用户标识(user_id)等来划分数据存储的服务器,例如:若拥有5台数据库服务器,则“user_id% 5+ 1”等于1的存入1号服务器,等于2的存入2号服务器,以此类推。纵向分隔的原则有很多种,可依据实际情况进行选择。然而,与横向拆分数据库相同,纵向拆分数据库也存在成本,最根本的便是我们在执行COUNT、SUM等汇总操作时会遇到诸多不便。综上所述,数据库服务器的解决方案通常需根据实际情况,往往是一个混合的方案,以便发挥各种方案的优势。有时,还需要借助memcached等第三方软件,以适应更大访问量的需求。

若专门设立应用服务器来运行PHP脚本,那是最为理想的。这样,我们的页面服务器只需保存静态页面即可,可给应用服务器设置一些诸如app.domain之类的域名,以与页面服务器区分开来。对于应用服务器,我更倾向于使用prefork模式的apache,配备必要的xcache等PHP缓存软件,加载模块要尽量少,除了mod_rewrite等必要的模块,其他不必要的东西全部舍弃,尽量减少httpd进程的内存消耗。而那些图片服务器、页面服务器等静态内容,则可以使用lighttpd或tux来处理,充分发挥各种服务器的特点。

如果条件允许,独立的日志服务器也是必要的。一般小网站的做法都是将页面服务器和日志服务器合并在一起,在凌晨访问量不大时,通过cron运行前一天的日志计算。然而,如果你使用awstats等日志分析软件,对于百万级访问量而言,即使按天归档,也会消耗大量时间和服务器资源进行计算。因此,分离独立的日志服务器还是有好处的,这样不会影响正式服务器的工作状态。

软架构
框架的选择
PHP框架有很多选择,如:CakePHP、Symfony、Zend Framework等。至于应该使用哪一个并没有唯一的答案,需根据团队成员对各个框架的了解程度而定。很多时候,即使没有使用框架,也能写出优秀的程序,例如Flickr据说就是用Pear+Smarty等类库编写的。因此,是否使用框架,使用哪个框架,一般不是最重要的,重要的是我们的编程思想中要有框架的意识。

逻辑的分层

以上所转载内容均来自于网络,不为其真实性负责,只为传播网络信息为目的,非商业用途,如有异议请及时联系btr2020@163.com,本人将予以删除。速发外链网 » 构建高效Web平台:网站架构设计指南

分享到: 生成海报