当前位置: 首页 > news >正文

wordpress 安全漏洞龙岗网站建设网站排名优化

wordpress 安全漏洞,龙岗网站建设网站排名优化,wordpress 克隆插件,合肥网页设计工资Web2.0的兴起#xff0c;掀起了互联网新一轮的网络创业大潮。以用户为导向的新网站建设概念#xff0c;细分了网站功能和用户群#xff0c;不仅成功的造就了一大批新生的网站#xff0c;也极大的方便了上网的人们。但Web2.0以用户为导向的理念#xff0c;使得新生的网站有… Web2.0的兴起掀起了互联网新一轮的网络创业大潮。以用户为导向的新网站建设概念细分了网站功能和用户群不仅成功的造就了一大批新生的网站也极大的方便了上网的人们。但Web2.0以用户为导向的理念使得新生的网站有了新的特点——高并发高流量数据量大逻辑复杂等对网站建设也提出了新的要求。     本文围绕高并发高流量的网站架构设计问题主要研究讨论了以下内容     首先在整个网络的高度讨论了使用镜像网站CDN内容分发网络等技术对负载均衡带来的便利及各自的优缺点比较。然后在局域网层次对第四层交换技术包括硬件解决方案F5和软件解决方案LVS进行了简单的讨论。接下来在单服务器层次本文着重讨论了单台服务器的Socket优化硬盘级缓存技术内存级缓存技术CPU与IO平衡技术即以运算为主的程序与以数据读写为主的程序搭配部署读写分离技术等。在应用层本文介绍了一些大型网站常用的技术以及选择使用该技术的理由。最后在架构的高度讨论了网站扩容容错等问题。 本文以理论与实践相结合的形式结合作者实际工作中得到的经验具有较广泛的适用性。 1 引言 1.1 互联网的发展 最近十年间互联网已经从一个单纯的用于科研的用来传递静态文档的美国内部网络发展成了一个应用于各行各业的传送着海量多媒体及动态信息的全球网络。从规模上看互联网在主机数、带宽、上网人数等方面几乎一直保持着指数增长的趋势2006年7月互联网上共有主机439286364 台WWW 站点数量达到 96854877个 1。全球上网人口在2004 年达到 7 亿 2900万 2中国的上网人数在 2006 年 12 月达到了约 1亿3700 万3。另一方面互联网所传递的内容也发生了巨大的变化早期互联网以静态、文本的公共信息为主要内容而目前的互联网则传递着大量的动态、多媒体及人性化的信息人们不仅可以通过 互联网阅读到动态生成的信息而且可以通过它使用电子商务、即时通信、网上游戏等交互性很强的服务。因此可以说互联网已经不再仅仅是一个信息共享网络而已经成为了一个无所不在的交互式服务的平台。 1.2 互联网网站建设的新趋势 互联网不断扩大的规模日益增长的用户群以及web2.04的兴起对互联网网站建设提出了新的要求: 高性能和高可扩展性。2000 年 5 月访问量排名世界第一统计数据来源5的Yahoo 6声称其日页浏览数达到 6 亿 2500 万即每秒约 30000 次HTTP 请求(按每个页面浏览平均产生 4 次请求计算) 。这样大规模的访问量对服务的性能提出了非常高的要求。更为重要的是互联网受众的广泛性使得成功的互联网服务的访问量增长潜力和速度非常大因此服务系统必须具有非常好的可扩展性以应付将来可能的服务增长。 支持高度并发的访问。高度并发的访问对服务的存储与并发能力提出了很高的要求当前主流的超标量和超流水线处理器能处理的并发请求数是有限的因为随着并发数的上升进程调度的开销会很快上升。互联网广域网的本质决定了其访问的延迟时间较长因此一个请求完成时间也较长按从请求产生到页面下载完成 3 秒计算 Yahoo 在 2000 年 5 月时平均有 90000 个并发请求。而且对于较复杂的服务服务器往往要维护用户会话的信息例如一个互联网网站如果每天有 100 万次用户会话每次 20分钟的话那平均同时就会有约 14000 个并发会话。 高可用性。互联网服务的全球性决定了其每天 24 小时都会有用户访问因此任何服务的停止都会对用户造成影响。而对于电子商务等应用暂时的服务中止则意味着客户的永久失去及大量的经济损失例如 ebay.com71999 年 6 月的一次 22小时的网站不可访问对此网站的 380万用户的忠诚度造成巨大影响使得 Ebay 公司不得不支付了近500万美元用于补偿客户的损失而该公司的市值同期下降了 40 亿美元8。因此关键互联网应用的可用性要求非常高。 1.3 新浪播客的简介 以YouTube9为代表的微视频分享网站近来方兴未艾仅2006年一年国内就出现近百家仿YouTube的微视频分享网站10试图复制YouTube的成功模式。此类网站可以说是Web2.0概念下的代表网站具有Web2.0网站所有典型特征高并发高流量数据量大逻辑复杂用户分散等等。新浪11作为国内最大的门户网站在2005年成功运作新浪博客的基础上于2006年底推出了新浪播客服务。新浪播客作为国内门户网站中第一个微视频分享服务的网站依靠新浪网站及新浪博客的巨大人气资源在推出后不到半年的时间内取得了巨大的成功同类网站中上传视频数量第一、流量增长最快、用户数最多12所有这些成绩的取得的背后是巨大的硬件投入良好的架构支撑和灵活的应用层软件设计。 2.1 镜像网站技术 镜像网站是指将一个完全相同的站点放到几个服务器上分别有自己的URL这些服务器上的网站互相称为镜像网站13。镜像网站和主站并没有太大差别或者可以视为主站的拷贝。镜像网站的好处是如果不能对主站作正常访问如服务器故障网络故障或者网速太慢等仍能通过镜像服务器获得服务。不便之处是更新网站内容的时候需要同时更新多个服务器需要用户记忆超过一个网址或需要用户选择访问多个镜像网站中的一个而用户选择的不一定是最优的。在用户选择的过程中缺乏必要的可控性。 在互联网发展的初期互联网上的网站内容很少而且大都是静态内容更新频率底。但因为服务器运算能力低带宽小网速慢热门网站的访问压力还是很大。镜像网站技术在这种情况下作为一种有效解决方案被广泛采用。随着互联网的发展越来越多的网站使用服务器端脚本动态生成内容同步更新越来越困难对可控性要求越来越高镜像技术因为不能满足这类网站的需要渐渐的淡出了人们的视线。但有一些大型的软件下载站因为符合镜像网站的条件——下载的内容是静态的更新频率较低对带宽速度要求又比较高如国外的SourceForge http://www.SourceForge.net著名开源软件托管网站Fedorahttp://fedoraproject.orgRedHat赞助的Linux发行版国内的华军软件园http://www.onlinedown.net天空软件站http://www.skycn.com等还在使用这项技术图1。   在网站建设的过程中可以根据实际情况将静态内容作一些镜像以加快访问速度提升用户体验。 2.2 CDN内容分发网络     CDN的全称是Content Delivery Network即内容分发网络。其目的是通过在现有的互联网中增加一层新的网络架构将网站的内容发布到最接近用户的网络“边缘”使用户可以就近取得所需的内容分散服务器的压力解决互联网拥挤的状况提高用户访问网站的响应速度。从而解决由于网络带宽小、用户访问量大、网点分布不均等原因所造成的用户访问网站响应速度慢的问题14。     CDN与镜像网站技术的不同之处在于网站代替用户去选择最优的内容服务器增强了可控制性。CDN其实是夹在网页浏览者和被访问的服务器中间的一层镜像或者说缓存浏览者访问时点击的还是服务器原来的URL地址但是看到的内容其实是对浏览者来说最优的一台镜像服务器上的页面缓存内容。这是通过调整服务器的域名解析来实现的。使用CDN技术的域名解析服务器需要维护一个镜像服务器列表和一份来访IP到镜像服务器的对应表。当一个用户的请求到来的时候根据用户的IP查询对应表得到最优的镜像服务器的IP地址返回给用户。这里的最优需要综合考虑服务器的处理能力带宽离访问者的距离远近等因素。当某个地方的镜像网站流量过大带宽消耗过快或者出现服务器网络等故障的时候可以很方便的设置将用户的访问转到另外一个地方图2。这样就增强了可控制性。 CDN网络加速技术也有它的局限性。首先因为内容更新的时候需要同步更新多台镜像服务器所以它也只适用于内容更新不太频繁或者对实时性要求不是很高的网站其次DNS解析有缓存当某一个镜像网站的访问需要转移时主DNS服务器更改了IP解析结果但各地的DNS服务器缓存更新会滞后一段时间这段时间内用户的访问仍然会指向该服务器可控制性依然有不足。 目前国内访问量较高的大型网站如新浪、网易等的资讯频道均使用CDN网络加速技术图3虽然网站的访问量巨大但无论在什么地方访问速度都会很快。但论坛邮箱等更新频繁实时性要求高的频道则不适合使用这种技术。 ChinaCache的服务节点全球超过130个 其中中国节点超过80个 覆盖全国主要6大网络的主要省份15。 2.3 应用层分布式设计 新浪播客为了获得CDN网络加速的优点又必须避免CDN的不足在应用层软件设计上采取了一个替代的办法。新浪播客提供了一个供播放器查询视频文件地址的接口。当用户打开视频播放页面的时候播放器首先连接查询接口通过接口获得视频文件所在的最优的镜像服务器地址然后再到该服务器去下载视频文件。这样用一次额外的查询获得了全部的控制性而这次查询的通讯流量非常小几乎可以忽略不计。CDN中由域名解析获得的灵活性也保留了下来由接口程序维护镜像网站列表及来访IP到镜像网站的对应表即可。镜像网站中不需要镜像所有的内容而是只镜像更新速度较慢的视频文件。这是完全可以承受的。 2.4 网络层架构小结 从整个互联网络的高度来看网站架构努力的方向是明确的让用户就近取得内容但又要在速度和可控制性之间作一个平衡。对于更新比较频繁内容由于难以保持镜像网站之间的同步则需要使用其他的辅助技术。 3 交换层架构 3.1 第四层交换简介 按照OSI16七层模型第四层是传输层。传输层负责端到端通信在IP协议栈中是TCP和UDP所在的协议层。TCP和UDP数据包中包含端口号port number它们可以唯一区分每个数据包所属的协议和应用程序。接收端计算机的操作系统根据端口号确定所收到的IP包类型并把它交给合适的高层程序。IP地址和端口号的组合通常称作“插口Socket”。 第四层交换的一个简单定义是它是一种传输功能它决定传输不仅仅依据MAC地址(第二层网桥)或源/目标IP地址(第三层路由)而且依据IP地址与TCP/UDP (第四层) 应用端口号的组合Socket17。第四层交换功能就像是虚拟IP指向实际的服务器。它传输的数据支持多种协议有HTTP、FTP、NFS、Telnet等。 以HTTP协议为例在第四层交换中为每个服务器组设立一个虚拟IPVirtue IPVIP每组服务器支持某一个或几个域名。在域名服务器DNS中存储服务器组的VIP而不是某一台服务器的真实地址。 当用户请求页面时一个带有目标服务器组的VIP连接请求发送给第四层交换机。第四层交换机使用某种选择策略在组中选取最优的服务器将数据包中的目标VIP地址用实际服务器的IP地址取代并将连接请求传给该服务器。第四层交换一般都实现了会话保持功能即同一会话的所有的包由第四层交换机进行映射后在用户和同一服务器间进行传输18。 第四层交换按实现分类分为硬件实现和软件实现。 3.2 硬件实现 第四层交换的硬件实现一般都由专业的硬件厂商作为商业解决方案提供。常见的有Alteon19F520等。这些产品非常昂贵但是能够提供非常优秀的性能和很灵活的管理能力。Yahoo中国当初接近2000台服务器使用了三四台Alteon就搞定了21。鉴于条件关系这里不展开讨论。 3.3 软件实现 第四层交换也可以通过软件实现不过性能比专业硬件稍差但是满足一定量的压力还是可以达到的而且软件实现配置起来更灵活。软件四层交换常用的有Linux上的LVSLinux Virtual Server它提供了基于心跳heart beat的实时灾难应对解决方案提高了系统的鲁棒性同时提供了灵活的VIP配置和管理功能可以同时满足多种应用需求22。 4 服务器优化 4.1 服务器整体性能考虑 对于价值昂贵的服务器来说怎样配置才能发挥它的最大功效又不至于影响正常的服务这是在设计网站架构的时候必须要考虑的。常见的影响服务器的处理速度的因素有网络连接硬盘读写内存空间CPU速度。如果服务器的某一个部件满负荷运转仍然低于需要而其他部件仍有能力剩余我们将之称为性能瓶颈。服务器想要发挥最大的功效关键的是消除瓶颈让所有的部件都被充分的利用起来。 4.2 Socket优化 以标准的 GNU/Linux 为例。GNU/Linux 发行版试图对各种部署情况都进行优化这意味着对具体服务器的执行环境来说标准的发行版可能并不是最优化的23。GNU/Linux 提供了很多可调节的内核参数可以使用这些参数为服务器进行动态配置包括影响 Socket 性能的一些重要的选项。这些选项包含在 /proc 虚拟文件系统中。这个文件系统中的每个文件都表示一个或多个参数它们可以通过 cat 工具进行读取或使用 echo 命令进行修改。这里仅列出一些影响TCP/IP 栈性能的可调节内核参数24 /proc/sys/net/ipv4/tcp_window_scaling “1”1表示启用该选项0表示关闭下同 启用 RFC25 132326 定义的 window scaling要支持超过 64KB 的窗口必须启用该值。 /proc/sys/net/ipv4/tcp_sack “1”启用有选择的应答Selective Acknowledgment通过有选择地应答乱序接收到的报文来提高性能这样可以让发送者只发送丢失的报文段对于广域网通信来说这个选项应该启用但是这也会增加对 CPU 的占用。 /proc/sys/net/ipv4/tcp_timestamps “1” 以一种比重发超时更精确的方法参阅 RFC 1323来启用对 RTT 的计算为了实现更好的性能应该启用这个选项。 /proc/sys/net/ipv4/tcp_mem “24576 32768 49152” 确定 TCP 栈应该如何反映内存使用每个值的单位都是内存页通常是 4KB。第一个值是内存使用的下限。第二个值是内存压力模式开始对缓冲区使用应用压力的上限。第三个值是内存上限。超过这个上限时可以将报文丢弃从而减少对内存的使用。 /proc/sys/net/ipv4/tcp_wmem “4096 16384 131072” 为自动调优定义每个 socket 使用的内存。第一个值是为 socket 的发送缓冲区分配的最少字节数。第二个值是默认值该值会被 wmem_default 覆盖缓冲区在系统负载不重的情况下可以增长到这个值。第三个值是发送缓冲区空间的最大字节数该值会被 wmem_max 覆盖。 /proc/sys/net/ipv4/tcp_westwood “1” 启用发送者端的拥塞控制算法它可以维护对吞吐量的评估并试图对带宽的整体利用情况进行优化对于 WAN 通信来说应该启用这个选项。 与其他调优努力一样最好的方法实际上就是不断进行实验。具体应用程序的行为、处理器的速度以及可用内存的多少都会影响到这些参数对性能作用的效果。在某些情况中一些认为有益的操作可能恰恰是有害的反之亦然。因此需要逐一试验各个选项然后检查每个选项的结果最后得出最适合具体机器的一套参数。 如果重启了 GNU/Linux 系统设置的内核参数都会恢复成默认值。为了将所设置的值作为这些参数的默认值可以使用 /etc/rc.local 文件在系统每次启动时自动将这些参数配置成所需要的值。 在检测每个选项的更改带来的效果的时候GNU/Linux上有一些非常强大的工具可以使用 ping 这是用于检查主机的可用性的最常用的工具也可以用于计算网络带宽延时。 traceroute 打印连接到特定网络主机所经过的一系列路由器和网关的路径路由从而确定每个 hop 之间的延时。 netstat 确定有关网络子系统、协议和连接的各种统计信息。 tcpdump 显示一个或多个连接的协议级的报文跟踪信息其中包括时间信息可以使用这些信息来研究不同协议的报文时间。 Ethereal 以一个易于使用的图形化界面提供 tcpump 报文跟踪的信息支持报文过滤功能。 iperf 测量 TCP 和 UDP 的网络性能测量最大带宽并汇报延时和数据报的丢失情况。 4.3 硬盘级缓存 硬盘级别的缓存是指将需要动态生成的内容暂时缓存在硬盘上在一个可接受的延迟时间范围内同样的请求不再动态生成以达到节约系统资源提高网站承受能力的目的。Linux环境下硬盘级缓存一般使用Squid27。 Squid是一个高性能的代理缓存服务器。和一般的代理缓存软件不同Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。它接受来自客户端对目标对象的请求并适当地处理这些请求。比如说用户通过浏览器想下载即浏览一个web页面浏览器请求Squid为它取得这个页面。Squid随之连接到页面所在的原始服务器并向服务器发出取得该页面的请求。取得页面后Squid再将页面返回给用户端浏览器并且同时在Squid本地缓存目录里保存一份副本。当下一次有用户需要同一页面时Squid可以简单地从缓存中读取它的副本直接返回给用户而不用再次请求原始服务器。当前的Squid可以处理HTTP FTP GOPHER SSL和WAIS等协议。 Squid默认通过检测HTTP协议头的Expires和 Cache-Control字段来决定缓存的时间。在实际应用中可以显式的在服务器端脚本中输出HTTP头也可以通过配置apache的 mod_expires模块让apache自动的给每一个网页加上过期时间。对于静态内容如图片视频文件供下载的软件等还可以针对文件类型扩展名用 Squid 的 refresh_pattern 来指定缓存时间。 Squid 运行的时候默认会在硬盘上建两层hash目录用来存储缓存的Object。它还会在内存中建立一个Hash Table用来记录硬盘中Object分布的情况。如果Squid配置成为一个Squid集群中的一个的话它还会建立一个 Digest Table(摘要表)用来存储其它 Squid 上的Object摘要。当用户端想要的资料本地硬盘上没有时可以很快的知道应该去集群中的哪一台机器获得。在硬盘空间快要达到配置限额的时候可以配置使用某种策略默认使用LRULeast Recently Used-最近最少用删除一些Object从而腾出空间2829。 集群中的Squid Server 之间可以有两种关系第一种关系是Child 和 Parent。当 Child Squid Server 没有资料时会直接向 Parent Squid Server 要资料然后一直等直到 Parent 给它资料为止。 第二种关系是Sibling 和 Sibling。当 Squid Server 没有资料时会先向 Sibling 的 Squid Server 要资料如果 Sibling 没资料就跳过它向 Parent 要或直接上原始网站去拿。 默认配置的Squid没有经过任何优化的时候一般可以达到 50% 的命中率30图4。如果需要还可以通过参数优化拆分业务优化文件系统等办法使得Squid达到 90% 以上的缓存命中率。 Squid处理TCP连接消耗的服务器资源比真正的HTTP服务器要小的多当Squid分担了大部分连接网站的承压能力就大大增强了。 蓝线表示Squid的流量绿色部分表示Apache流量 4.4 内存级缓存 内存级别的缓存是指将需要动态生成的内容暂时缓存在内存里在一个可接受的延迟时间范围内同样的请求不再动态生成而是直接从内存中读取。Linux环境下内存级缓存Memcached31是一个不错的选择。 Memcached是danga.com运营Live Journal32的技术团队开发的一套非常优秀的分布式内存对象缓存系统用于在动态系统中减少数据库负载提升性能。和 Squid 的前端缓存加速不同它是通过基于内存的对象缓存来减少数据库查询的方式改善网站的性能而其中最吸引人的一个特性就是支持分布式部署也就是说可以在一群机器上建立一堆 Memcached 服务每个服务可以根据具体服务器的硬件配置使用不同大小的内存块这样理论上可以建立一个无限大的基于内存的缓存系统。 Memcached 是以守护程序方式运行于一个或多个服务器中随时接受客户端的连接操作客户端可以由各种语言编写目前已知的客户端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等[附录1]。客户端首先与 Memcached 服务建立连接然后存取对象。每个被存取的对象都有一个唯一的标识符 key存取操作均通过这个 key 进行保存的时候还可以设置有效期。保存在 Memcached 中的对象实际上是放置在内存中的而不是在硬盘上。Memcached 进程运行之后会预申请一块较大的内存空间自己进行管理用完之后再申请一块而不是每次需要的时候去向操作系统申请。Memcached将对象保存在一个巨大的Hash表中它还使用NewHash算法来管理Hash表从而获得进一步的性能提升。所以当分配给Memcached的内存足够大的时候Memcached的时间消耗基本上只是网络Socket连接了33。 Memcached也有它的不足。首先它的数据是保存在内存当中的一旦服务进程重启进程意外被关掉机器重启等数据会全部丢失。其次Memcached以root权限运行而且Memcached本身没有任何权限管理和认证功能安全性不足。第一条是Memcached作为内存缓存服务使用无法避免的当然如果内存中的数据需要保存可以采取更改Memcached的源代码增加定期写入硬盘的功能。对于第二条我们可以将Memcached服务绑定在内网IP上通过Linux防火墙进行防护。 4.5 CPU与IO均衡 在一个网站提供的所有功能中有的功能可能需要消耗大量的服务器端IO资源像下载视频播放等而有的功能则可能需要消耗大量的服务器CPU资源像视频格式转换LOG统计等。在一个服务器集群中当我们发现某些机器上CPU和IO的利用率相差很大的时候例如CPU负载很高而IO负责很低我们可以考虑将该服务器上的某些耗CPU资源的进程换成耗IO的进程以达到均衡的目的。均衡每一台机器的CPU和IO消耗不仅可以获得更充分的服务器资源利用而且还能够支持暂时的过载遇到突发事件访问流量剧增的时候 实现得体的性能下降(Graceful performance degradation)34而不是立即崩溃。 4.6 读写分离 如果网站的硬盘读写性能是整个网站性能提升的一个瓶颈的话可以考虑将硬盘的读写功能分开分别进行优化。在专门用来写的硬盘上我们可以在Linux 下使用软件RAID-0磁盘冗余阵列0级35。RAID-0在获得硬盘IO提升的同时也会增加整个文件系统的故障率——它等于RAID中所有驱动器的故障率之和。如果需要保持或提高硬盘的容错能力就需要实现软件RAID-14或5它们能在某一个甚至几个磁盘驱动器故障之后仍然保持整个文件系统的正常运行36但文件读写效率不如RAID-0。而专门用来读的硬盘则不用如此麻烦可以使用普通的服务器硬盘以降低开销。 一般的文件系统会综合考虑各种大小和格式的文件的读写效率因而对特定的文件读或写的效率不是最优。如果有必要可以通过选择文件系统以及修改文件系统的配置参数来达到对特定文件的读或写的效率最大化。比如说如果文件系统中需要存储大量的小文件则可以使用 ReiserFS37来替代Linux操作系统默认的ext3系统因为ReiserFS是基于平衡树的文件系统结构尤其对于大量文件的巨型文件系统搜索速度要比使用局部的二分查找法的ext3快。 ReiserFS里的目录是完全动态分配的因此不存在ext3中常见的无法回收巨型目录占用的磁盘空间的情况。ReiserFS里小文件 4K可以直接存储进树小文件读取和写入的速度更快树内节点是按字节对齐的多个小文件可共享同一个硬盘块节约大量空间。ext3使用固定大小的块分配策略也就是说不到4K的小文件也要占据4K的空间导致的空间浪费比较严重38。但ReiserFS对很多Linux内核支持的不是很好包括2.4.3、2.4.9 甚至相对较新的 2.4.16如果网站想要使用它就必须要安装与它配合的较好的2.4.18内核——一般管理员都不是很乐意使用太新的内核因为在它上面运行的软件都还没有经过大量的实践测试也许有一些小的bug还没有被发现但对于服务器来说再小的bug也是不能接受的。ReiserFS还是一个较为年轻的发展迅速的文件系统它相对于ext3来说有一个很大的缺陷就是每次ReiserFS文件系统升级的时候必须完全重新格式化整个磁盘分区。所以在选择使用的时候需要权衡取舍39。 5 应用程序层优化 5.1 网站服务器程序的选择 经统计40当前互联网上有超过50%的网站主机使用Apache41服务器程序。 Apache是开源界的首选Web服务器因为它的强大和可靠而且适用于绝大部分的应用场合。但是它的强大有时候却显得笨重配置文件复杂得让人望而生畏高并发情况下效率不太高。而轻量级的Web服务器Lighttpd42却是后起之秀基于单进程多路复用技术其静态文件的响应能力远高于 Apache。 Lighttpd对PHP的支持也很好还可以通过Fastcgi方式支持其他的语言比如Python等。虽然Lighttpd是轻量级的服务器功能上不能跟Apache比某些复杂应用无法胜任但即使是大部分内容动态生成的网站仍免不了会有一些静态元素比如图片、JS脚本、CSS等等可以考虑将Lighttpd放在Squid的前面构成 Lighttpd-Squid-Apache的一条处理链Lighttpd在最前面专门处理静态内容的请求把动态内容请求通过 Proxy模块转发给Squid如果Squid中有该请求的内容且没有过期则直接返回给Lighttpd。新请求或者过期的页面请求交由Apache 中的脚本程序来处理。经过Lighttpd和Squid的两级过滤Apache需要处理的请求大大减少减少了Web应用程序的压力。同时这样的构架便于把不同的处理分散到多台计算机上进行由Lighttpd在前面统一分发。 在这种架构下每一级都是可以进行单独优化的比如Lighttpd可以采用异步IO方式Squid可以启用内存来缓存Apache可以启用MPMMulti -Processing Modules多道处理模块等并且每一级都可以使用多台机器来均衡负载伸缩性好。 著名视频分享网站YouTube就是选择使用Lighttpd作为网站的前台服务器程序。 5.2 数据库选择 MySQL43是一个快速的、多线程、多用户和健壮的SQL数据库服务器支持关键任务、重负载系统的使用是最受欢迎的开源数据库管理系统是Linux下网站开发的首选。它由MySQL AB开发、发布和提供支持。 MySQL数据库能为网站提供 高性能。MySQL支持海量快速的数据库存储和读取。还可以通过使用64位处理器来获取额外的一些性能因为MySQL在内部里很多时候都使用64位的整数处理。 易用性。MySQL的核心是一个小而快速的数据库。它的快速连接快速存取和安全可靠的特性使MySQL非常适合在互联网站上使用。 开放性。MySQL提供多种后台存储引擎的选择如MyISAM Heap InnoDBBerkeley Db等。缺省格式为MyISAM。 MyISAM 存储引擎与磁盘兼容的非常好44。 支持企业级应用。MySQL有一个用于记录数据改变的二进制日志。因为它是二进制的这一日志能够快速地将数据的更改从一台机器复制replication到另一台机器上。即使服务器崩溃这一二进制日志也能够保持完整。这一特性通常被用来搭建数据库集群以支持更大的流量访问要求30图5。   MySQL也有一些它自身的缺陷如缺乏图形界面缺乏存储过程 还不支持触发器参照完整性子查询和数据表视图等但这些功能都在开发者的TO-DO列表当中。这就是开源的力量你永远可以期待更好。 国外的Yahoo!国内的新浪搜狐等很多大型商业网站都使用MySQL 作为后台数据库。对于一般的网站系统无论从成本还是性能上考虑MySQL应该是最佳的选择。 5.3 服务器端脚本解析器的选择 目前最常见的服务器端脚本有三种ASP(Active Server Pages)JSP(Java Server Pages)PHP (Hypertext Preprocessor)4546。 ASP全名Active Server Pages以及它的升级ASP.NET是微软公司出品的一个WEB服务器端的开发环境利用它可以产生和运行动态的、交互的、高性能的WEB服务应用程序。ASP采用脚本语言VBScriptC#作为自己的开发语言。 但因为只能运行在Windows环境下这里我们不讨论它。 PHP是一种跨平台的服务器端的嵌入式脚本语言。它大量地借用CJava和Perl语言的语法并耦合PHP自己的特性使WEB开发者能够快速地写出动态生成页面。它支持目前绝大多数数据库。PHP也是开源的它的发行遵从GPL开源协议你可以从 PHP官方站点(http://www.php.net)自由下载到它的二进制安装文件及全部的源代码。如果在Linux平台上与MySQL搭配使用PHP是最佳的选择。 JSP是Sun公司推出的新一代站点开发语言是Java语言除Java应用程序和Java Applet之外的第三个应用。Jsp可以在Serverlet和JavaBean的支持下完成功能强大的站点程序。作为采用Java技术家族的一部分以及Java 2企业版体系结构的一个组成部分JSP技术拥有Java技术带来的所有优点包括优秀的跨平台性高度可重用的组件设计健壮性和安全性等能够支持高度复杂的基于Web的应用。 除了这三种常见的脚本之外在Linux下我们其实还有很多其他的选择PythonGoogle使用Perl等如果作为CGI调用那么可选择范围就更广了。使用这些不太常见的脚本语言的好处是它们对于某些特殊的应用有别的脚本所不具有的优势不好的地方是这些脚本语言在国内使用的人比较少当碰到技术上的问题的时候能找到的资料也较少。 5.4 可配置性 在大型网站开发过程中不管使用什么技术网站的可配置性是必须的。在网站的后期运营过程中肯定会有很多的需求变更。如果每一次的需求变更都会导致修改源代码那么这个网站的开发可以说是失败的。 首先也是最重要的一点功能和展示必须分开。PHP和JSP都支持模板技术如PHP的 SmartyPhplibJSP的JSTLJSP Standard Tag Library等。核心功能使用脚本语言编写前台展示使用带特殊标签的HTML不仅加快了开发速度而且方便以后的维护和升级47。 其次对于前台模板一般还需要将页面的头尾单独提取出来页面的主体部分也按模块或者功能拆分。对CSSJS等辅助性的代码也建议以单独的文件形式存放。这样不仅方便管理修改而且还可以在用户访问的时候进行缓存减少网络流量减轻服务器压力。 再次对于核心功能脚本必须将与服务器相关的配置内容如数据库连接配置脚本头文件路径等与代码分离开。尤其当网站使用集群技术CDN加速等技术的时候每一台服务器上的配置可能都会不一样。如果不使用配置文件则需要同时维护几份不同的代码很容易出错。 最后应该尽量做到修改配置文件后能实时生效避免修改配置文件之后需要重启服务程序的情况。 5.5 封装和中间层思想 在功能块层次如果使用JSP基于纯面向对象语言Java的面向对象思想类似数据库连接会话管理等基本功能都已经封装成类了。如果使用PHP则需要在脚本代码中显式的封装将每一个功能块封装成一个函数一个文件或者一个类。 在更高的层次可以将网站分为表示层逻辑层持久层分别进行封装做到当某一层架构发生变化时不会影响到其他层。比如新浪播客在一次升级的时候将持久层的数据库由原来的集中式改为分布式架构因为封装了数据库连接及所有操作[附录2]做到了不修改任何上层代码平稳的实现了过渡。近来流行的MVC架构将整个网站拆分成Model模型/逻辑、View视图/界面、Controller控制/流程三个部分而且有很多优秀的代码框架可供选择使用 像JSP的StructsSpringPHP的php.MVC Studs 等。使用现成的代码框架可以使网站开发事半功倍。 6 扩容、容错处理 6.1 扩容 一个大型网站在设计架构的时候必须考虑到以后可能的容量扩充。新浪播客在设计时充分地考虑了这一点。对于视频分享类网站来说视频存储空间消耗是巨大的。新浪播客在主存储服务器上采用配置文件形式指定每一个存储盘柜上存储的视频文件的ID范围。当前台服务器需要读取一个视频的时候首先通过询问主存储服务器上的接口获得该视频所在的盘柜及目录地址然后再去该盘柜读取实际的视频文件。这样如果需要增加存储用的盘柜只需要修改配置文件即可前台程序丝毫不受影响。 新浪播客采用MySQL数据库集群在逻辑层封装了所有的数据库连接及操作。当数据库存储架构发生改变的时候如增加一台主库将某些数据表独立成库增加读取数据用的从库等都只需要修改封装了的数据库操作类上层代码不用修改。 新浪播客的前台页面服务器使用F5公司的硬件第四层交换机网通电信分别导向不同的虚拟IP每一个虚拟IP后面又有多个服务器提供服务。当访问流量增大的时候可以很方便往虚拟IP后面增加服务器分担压力。 6.2 容错 对于商业性网站来说可用性是非常重要的。7*24的访问要求网站具有很强的容错能力。错误包括网络错误服务器错误以及应用程序错误。 2006年12月27日台湾东部外海发生里氏7.6级地震造成途径台湾海峡的多条海底电缆中断导致许多国外网站像MSN NBA Yahoo英文主站等国内无法访问但也有例外以Google为代表的在国内建设有分布式数据节点的很多网站却仍然可以访问。虽然说地震造成断网是不可抗原因但如果在这种情况下网站仍然可以访问无疑能给网站用户留下深刻的印象。这件事情给大型商业网站留下的教训是网站需要在用户主要分布区域保持数据存在以防止可能的网络故障。 对于服务器错误一般采取冗余设计的方法来避免。对于存储服务器主要是负责写入的服务器可以使用RAID冗余磁盘阵列对于数据库主要是负责写入的主库可以采用双主库设计30对于提供服务的前台则可以使用第四层交换的集群由多台服务器同时提供服务不仅分担了流量压力同时还可以互相作为备份。 在应用层程序中也要考虑“用户友好”的出错设计。典型例子如HTTP 404 出错页面程序内部错误处理错误返回提示等尽可能的做到人性化。 7 总结及展望 7.1 总结 对于一个高并发高流量的网站来说任何一个环节的瓶颈都会造成网站性能的下降影响用户体验进而造成巨大的经济损失。在全互联网层面应该使用分布式设计缩短网站与用户的网络距离减少主干网上的流量以及防止在网络意外情况下网站无法访问的问题。在局域网层面应该使用服务器集群一方面可以支撑更大的访问量另一方面也作为冗余备份防止服务器故障导致的网站无法访问。在单服务器层面应该配置操作系统文件系统及应用层软件均衡各种资源的消耗消除系统性能瓶颈充分发挥服务器的潜能。在应用层可以通过各种缓存来提升程序的效率减少服务器资源消耗图6。另外还需要合理设计应用层程序为以后的需求变更扩容做好准备。 在每一个层次都需要考虑容错的问题严格消除单点故障做到无论应用层程序错误服务器软件错误服务器硬件错误还是网络错误都不影响网站服务。 7.2展望 当前Linux环境下有著名的LAMPLinuxApacheMySQLPHP/PERL/PYTHON网站建设方案但只是针对一般的中小网站而言。对于高并发高流量的大型商业网站还没有一个完整的性价比高的解决方案。除去服务器硬盘带宽等硬件投资外还需要花费大量的预算和时间精力在软件解决方案上。 随着互联网的持续发展Web2.0的兴起在可以预见的未来里互联网的用户持续增多提供用户参与的网站不断增加用户参与的内容日益增长越来越多的网站的并发量访问量会达到一个新的高度这就会促使越来越多的个人公司以及研究机构来关注高并发高流量的网站架构问题。就像Web1.0成就了无数中小网站成就了LAMP一样Web2.0注定也会成就一个新的高效的成本较低的解决方案。这个方案应该包括透明的第三方CDN网络加速服务价格低廉的第四层甚至更高层网络交换设备优化了网络性能的操作系统优化了读写性能分布式高可靠的文件系统揉合了内存硬盘等各个级别缓存的HTTP服务器更为高效的服务器端脚本解析器以及封装了大部分细节的应用层设计框架。 技术的进步永无止境。我们期待互联网更为美好的明天。
http://www.pierceye.com/news/587942/

相关文章:

  • 长沙建网站需要多少钱夹江移动网站建设
  • 淄博网站制作高端网站后台任务
  • 营销型网站源码成都网站建设seo
  • 天津网上商城网站建设专业的猎头公司
  • 西平县住房城乡建设局网站西部数码网站管理助手3.0
  • 承德市网站建设WordPress电影资源分享下载站
  • 专注于网络推广及网站建设wordpress离线发布功能
  • 营销型网站案例提高wordpress打开速度
  • 怎么样做一个网站自己个人网站后台怎么做
  • 源码站免费找客户网站
  • idc空间商网站源码知名的网站建设
  • 什么叫网站降权建设网站租服务器
  • 网站后台模板怎样使用站长平台
  • 写一个app需要多少钱龙岩seo包年系统排行榜
  • 科技公司企业网站建设手机360网站seo优化
  • 做翻译 英文网站黑色时尚橱柜网站源码
  • wordpress 主机要求珠海百度推广优化
  • 台山网站建设哈尔滨网站建设收费
  • 卖主机 服务器的网站wordpress自动标签内联
  • 28创业商机网seo在线优化技术
  • 建设银行网站查询余额世界杯球队最新排名
  • 网站对联广告做戒指网站的logo照片
  • 网站开发 项目计划书网页设计产品介绍页面的制作
  • 专做正品 网站青岛 网站制作
  • wordpress建站镜像杭州网站开发公司排名
  • 网站都需要什么类别网站首页seo关键词布局
  • 泰安千橙网站建设北京活动策划公司黄页
  • 网页网站模板北京市工商注册网上服务系统
  • 企业网站建设报价明细表免费ppt模板下载哪个网站好
  • 佛山做公司网站全球域名