大型网站平台优化方案_第1页
大型网站平台优化方案_第2页
大型网站平台优化方案_第3页
大型网站平台优化方案_第4页
大型网站平台优化方案_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 平台优化方案 大型网站 在面对大量用户访问 高并发请求方面 基本的解决方案集中 在这样几个环节 使用高性能的服务器 高性能的数据库 高效率的编程语言 还有高性能的Web容器 但是除了这几个方面 还没法根本解决大型网站面临的 高负载和高并发问题 上面提供的几个解决思路在一定程度上也意味着更大的投入 并且这样的 解决思路具备瓶颈 没有很好的扩展性 下面我从低成本 高性能和高扩张性 的角度来说说我的一些经验 1 1 HTML 静态化 由于效率最高 消耗最小的就是纯静态化的html页面 所以尽可能使网站 上的页面采用静态页面来实现 这个最简单的方法其实也是最有效的方法 但 是对于大量内容并且频繁更新的网站 无法全部手动去挨个实现 于是出现了 常见的信息发布系统CMS 信息发布系统可以实现最简单的信息录入自动生成静 态页面 还能具备频道管理 权限管理 自动抓取等功能 对于一个大型网站 来说 拥有一套高效 可管理的CMS是必不可少的 除了门户和信息发布类型的网站 对于交互性要求很高的社区类型网站来 说 尽可能的静态化也是提高性能的必要手段 将社区内的帖子 文章进行实 时的静态化 有更新的时候再重新静态化也是大量使用的策略 如Mop的大杂烩 就是使用了这样的策略 网易社区等也是如此 同时 html静态化也是某些缓存策略使用的手段 对于系统中频繁使用数 据库查询但是内容更新很小的应用 可以考虑使用html静态化来实现 比如论 坛中论坛的公用设置信息 这些信息目前的主流论坛都可以进行后台管理并且 存储在数据库中 这些信息其实大量被前台程序调用 但是更新频率很小 可 以考虑将这部分内容进行后台更新的时候进行静态化 这样避免了大量的数据 库访问请求 1 2 图片服务器分离 对于Web服务器来说 不管是Apache IIS还是其他容器 图片是最消耗资 源的 于是有必要将图片与页面进行分离 这是基本上大型网站都会采用的策 略 他们都有独立的图片服务器 甚至很多台图片服务器 这样的架构可以降 低提供页面访问请求的服务器系统压力 并且可以保证系统不会因为图片问题 而崩溃 在应用服务器和图片服务器上 可以进行不同的配置优化 比如 apache在配置ContentType的时候可以尽量少支持 尽可能少的 LoadModule 保证更高的系统消耗和执行效率 1 3 CPU 与 IO 均衡 在一个网站提供的所有功能中 有的功能可能需要消耗大量的服务器端IO 资源 像下载 视频播放等 而有的功能则可能需要消耗大量的服务器CPU资源 像视频格式转换 LOG统计等 在一个服务器集群中 当发现某些机器上CPU和 IO的利用率相差很大的时候 例如CPU负载很高而IO负责很低 可以考虑将该服 务器上的某些耗CPU资源的进程换成耗IO的进程 以达到均衡的目的 均衡每一 台机器的CPU和IO消耗 不仅可以获得更充分的服务器资源利用 而且还能够支 持暂时的过载 遇到突发事件 访问流量剧增的时候 实现得体的性能下降 Graceful performance degradation 而不是立即崩溃 1 4 读写分离 如果网站的硬盘读写性能是整个网站性能提升的一个瓶颈的话 可以考虑 将硬盘的读 写功能分开 分别进行优化 在专门用来写的硬盘上 我们可以 在Linux下使用软件RAID 0 磁盘冗余阵列0级 RAID 0在获得硬盘IO提升的 同时 也会增加整个文件系统的故障率 它等于RAID中所有驱动器的故障率 之和 如果需要保持或提高硬盘的容错能力 就需要实现软件RAID 1 4或5 它们能在某一个 甚至几个 磁盘驱动器故障之后仍然保持整个文件系统的正 常运行 但文件读写效率不如RAID 0 而专门用来读的硬盘 则不用如此麻烦 可以使用普通的服务器硬盘 以降低开销 一般的文件系统 会综合考虑各种大小和格式的文件的读 写效率 因而 对特定的文件读或写的效率不是最优 如果有必要 可以通过选择文件系统 以及修改文件系统的配置参数来达到对特定文件的读或写的效率最大化 比如 说 如果文件系统中需要存储大量的小文件 则可以使用ReiserFS来替代Linux 操作系统默认的ext3系统 因为ReiserFS是基于平衡树的文件系统结构 尤其 对于大量文件的巨型文件系统 搜索速度要比使用局部的二分查找法的ext3快 ReiserFS里的目录是完全动态分配的 因此不存在ext3中常见的无法回收巨型 目录占用的磁盘空间的情况 ReiserFS里小文件 4K 可以直接存储进树 小文件读取和写入的速度更快 树内节点是按字节对齐的 多个小文件可共享 同一个硬盘块 节约大量空间 ext3使用固定大小的块分配策略 也就是说 不到4K的小文件也要占据4K的空间 导致的空间浪费比较严重 但ReiserFS对 很多Linux内核支持的不是很好 如果网站想要使用它 就必须要安装与它配合 的较好的内核 ReiserFS还是一个较为年轻的 发展迅速的文件系统 它相对 于ext3来说有一个很大的缺陷就是 每次ReiserFS文件系统升级的时候 必须 完全重新格式化整个磁盘分区 所以在选择使用的时候 需要权衡取舍 1 5 数据库集群和库表散列 大型网站都有复杂的应用 这些应用必须使用数据库 那么在面对大量访 问的时候 数据库的瓶颈很快就能显现出来 这时一台数据库将很快无法满足 应用 于是需要使用数据库集群或者库表散列 在数据库集群方面 很多数据库都有自己的解决方案 Oracle Sybase等 都有很好的方案 常用的MySQL提供的Master Slave也是类似的方案 使用了什 么样的DB 就参考相应的解决方案来实施即可 上面提到的数据库集群由于在架构 成本 扩张性方面都会受到所采用DB 类型的限制 于是需要从应用程序的角度来考虑改善系统架构 库表散列是常 用并且最有效的解决方案 在应用程序中安装业务和应用或者功能模块将数据 库进行分离 不同的模块对应不同的数据库或者表 再按照一定的策略对某个 页面或者功能进行更小的数据库散列 比如用户表 按照用户ID进行表散列 这样就能够低成本的提升系统的性能并且有很好的扩展性 如sohu的论坛就是 采用了这样的架构 将论坛的用户 设置 帖子等信息进行数据库分离 然后 对帖子 用户按照板块和ID进行散列数据库和表 最终可以在配置文件中进行 简单的配置便能让系统随时增加一台低成本的数据库进来补充系统性能 1 6 缓存 网站架构和网站开发中的缓存也是非常重要 架构方面的缓存 Apache 提供了自己的缓存模块 也可以使用外加的Squid模块进行缓存 这两种方式均 可以有效的提高Apache的访问响应能力 网站程序开发方面的缓存 Linux上提 供的Memory Cache是常用的缓存接口 可以在web开发中使用 比如用Java开发 的时候就可以调用MemoryCache对一些数据进行缓存和通讯共享 另外 在使用 web语言开发的时候 各种语言基本都有自己的缓存模块和方法 1 6 1 硬盘级缓存硬盘级缓存 硬盘级别的缓存是指将需要动态生成的内容暂时缓存在硬盘上 在一个可 接受的延迟时间范围内 同样的请求不再动态生成 以达到节约系统资源 提 高网站承受能力的目的 Linux环境下硬盘级缓存一般使用Squid cache 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摘要 当用户端想要 的资料本地硬盘上没有时 可以很快的知道应该去集群中的哪一台机器获得 在硬盘空间快要达到配置限额的时候 可以配置使用某种策略 默认使用 LRU Least Recently Used 最近最少用 删除一些Object 从而腾出空间 集群中的Squid Server 之间可以有两种关系 第一种关系是 Child 和 Parent 当 Child Squid Server 没有资料时 会直接向 Parent Squid Server 要资料 然后一直等 直到 Parent 给它资料为止 第二种关系是 Sibling 和 Sibling 当 Squid Server 没有资料时 会先向 Sibling 的 Squid Server 要资料 如果 Sibling 没资料 就跳过它向 Parent 要或直接 上原始网站去拿 默认配置的Squid 没有经过任何优化的时候 一般可以达到 50 的命中率 如果需要 还可以通过参数优化 拆分业务 优化文件系统等办法 使得Squid 达到 90 以上的缓存命中率 Squid处理TCP连接消耗的服务器资源比真正的 HTTP服务器要小的多 当Squid分担了大部分连接 网站的承压能力就大大增强 了 1 6 2 内存级缓存内存级缓存 内存级别的缓存是指将需要动态生成的内容暂时缓存在内存里 在一个可接 受的延迟时间范围内 同样的请求不再动态生成 而是直接从内存中读取 Linux环境下内存级缓存Memcached是一个不错的选择 Memcached是开发的一套非常优秀的分布式内存对象缓存系统 用于在动态系统中减少数据库负载 提升性能 和 Squid 的前端缓存加速不同 它是通过基于内存的对象缓存来减少数据库查询的方式改善网站的性能 而其 中最吸引人的一个特性就是支持分布式部署 也就是说可以在一群机器上建立 一堆 Memcached 服务 每个服务可以根据具体服务器的硬件配置使用不同大小 的内存块 这样 理论上可以建立一个无限大的基于内存的缓存系统 Memcached 是以守护程序方式运行于一个或多个服务器中 随时接受客户端 的连接操作 客户端可以由各种语言编写 目前已知的客户端 API 包括 Perl PHP Python Ruby Java C C 等等 客户端首先与 Memcached 服务建立 连接 然后存取对象 每个被存取的对象都有一个唯一的标识符 key 存取操 作均通过这个 key 进行 保存的时候还可以设置有效期 保存在 Memcached 中的对象实际上是放置在内存中的 而不是在硬盘上 Memcached 进程运行之 后 会预申请一块较大的内存空间 自己进行管理 用完之后再申请一块 而 不是每次需要的时候去向操作系统申请 Memcached将对象保存在一个巨大的 Hash表中 它还使用NewHash算法来管理Hash表 从而获得进一步的性能提升 所以当分配给Memcached的内存足够大的时候 Memcached的时间消耗基本上只 是网络Socket连接的时间了 Memcached也有它的不足 首先它的数据是保存在内存当中的 一旦服务进 程重启 进程意外被关掉 机器重启等 数据会全部丢失 其次Memcached以 root权限运行 而且Memcached本身没有任何权限管理和认证功能 安全性不足 第一条是Memcached作为内存缓存服务使用无法避免的 当然 如果内存中的数 据需要保存 可以采取更改Memcached的源代码 增加定期写入硬盘的功能 对 于第二条 我们可以将Memcached服务绑定在内网IP上 通过Linux防火墙进行 防护 1 7 镜像 镜像是大型网站常采用的提高性能和数据安全性的方式 镜像的技术可以 解决不同网络接入商和地域带来的用户访问速度差异 比如ChinaNet和EduNet 之间的差异就促使了很多网站在教育网内搭建镜像站点 数据进行定时更新或 者实时更新 镜像网站具体是指将一个完全相同的站点放到几个服务器上 分别有自己 的URL 这些服务器上的网站互相称为镜像网站 镜像网站和主站并没有太大差 别 或者可以视为主站的拷贝 镜像网站的好处是 如果不能对主站作正常访 问 如服务器故障 网络故障或者网速太慢等 仍能通过镜像服务器获得服 务 不便之处是 更新网站内容的时候 需要同时更新多个服务器 需要用户 记忆超过一个网址 或需要用户选择访问多个镜像网站中的一个 而用户选择 的 不一定是最优的 在用户选择的过程中 缺乏必要的可控性 在互联网发展的初期 互联网上的网站内容很少 而且大都是静态内容 更新频率底 但因为服务器运算能力低 带宽小 网速慢 热门网站的访问压 力还是很大 镜像网站技术在这种情况下作为一种有效解决方案 被广泛采用 随着互联网的发展 越来越多的网站使用服务器端脚本动态生成内容 同步更 新越来越困难 对可控性要求越来越高 镜像技术因为不能满足这类网站的需 要 渐渐的淡出了人们的视线 但有一些大型的软件下载站 因为符合镜像网 站的条件 下载的内容是静态的 更新频率较低 对带宽 速度要求又比较 高 如国外的SourceForge http www SourceF 著名开源软件托 管网站 Fedora http fedoraproject org RedHat赞助的Linux发行版 国内的华军软件园 天空软件站 等 还在使用这项技术 在网站建设的过程中 可以根据实际情况 将静态内容作一些镜像 以加快 访问速度 提升用户体验 在镜像的细节技术方面 有很多专业的现成的解决 架构和产品可选 也有廉价的通过软件实现的思路 比如Linux上的rsync等工 具 1 8 CDN 内容分发网络 CDN的全称是Content Delivery Network 即内容分发网络 其目的是通过 在现有的互联网中增加一层新的网络架构 将网站的内容发布到最接近用户的 网络 边缘 使用户可以就近取得所需的内容 分散服务器的压力 解决互 联网拥挤的状况 提高用户访问网站的响应速度 从而解决由于网络带宽小 用户访问量大 网点分布不均等原因所造成的用户访问网站响应速度慢的问题 CDN与镜像网站技术的不同之处在于网站代替用户去选择最优的内容服务 器 增强了可控制性 CDN其实是夹在网页浏览者和被访问的服务器中间的一层 镜像或者说缓存 浏览者访问时点击的还是服务器原来的URL地址 但是看到的 内容其实是对浏览者来说最优的一台镜像服务器上的页面缓存内容 这是通过 调整服务器的域名解析来实现的 使用CDN技术的域名解析服务器需要维护一个 镜像服务器列表和一份来访IP到镜像服务器的对应表 当一个用户的请求到来 的时候 根据用户的IP 查询对应表 得到最优的镜像服务器的IP地址 返回 给用户 这里的最优 需要综合考虑服务器的处理能力 带宽 离访问者的距 离远近等因素 当某个地方的镜像网站流量过大 带宽消耗过快 或者出现服 务器 网络等故障的时候 可以很方便的设置将用户的访问转到另外一个地方 这样就增强了可控制性 图2 CDN原理示意图 CDN网络加速技术也有它的局限性 首先 因为内容更新的时候 需要 同步更新多台镜像服务器 所以它也只适用于内容更新不太频繁 或者对实时 性要求不是很高的网站 其次 DNS解析有缓存 当某一个镜像网站的访问需要 转移时 主DNS服务器更改了IP解析结果 但各地的DNS服务器缓存更新会滞后 一段时间 这段时间内用户的访问仍然会指向该服务器 可控制性依然有不足 目前 国内访问量较高的大型网站如新浪 网易等的资讯频道 均使用 CDN网络加速技术 虽然网站的访问量巨大 但无论在什么地方访问 速度都会 很快 但论坛 邮箱等更新频繁 实时性要求高的频道 则不适合使用这种技 术 1 9 负载均衡 负载均衡将是大型网站解决高负荷访问和大量并发请求采用的常用解决办 法 1 9 1 负载均衡主要应用技术负载均衡主要应用技术 1 1 DNSDNS负载均衡负载均衡 最早的负载均衡技术是通过DNS来实现的 在DNS中为多个地址配置同一个 名字 因而查询这个名字的客户机将得到其中一个地址 从而使得不同的客户 访问不同的服务器 达到负载均衡的目的 DNS负载均衡是一种简单而有效的方 法 但是它不能区分服务器的差异 也不能反映服务器的当前运行状态 2 2 代理服务器负载均衡 代理服务器负载均衡 使用代理服务器 可以将请求转发给内部的服务器 使用这种加速模式显 然可以提升静态网页的访问速度 然而 也可以考虑这样一种技术 使用代理 服务器将请求均匀转发给多台服务器 从而达到负载均衡的目的 3 3 地址转换网关负载均衡 地址转换网关负载均衡 支持负载均衡的地址转换网关 可以将一个外部IP地址映射为多个内部IP 地址 对每次TCP连接请求动态使用其中一个内部地址 达到负载均衡的目的 4 4 协议内部支持负载均衡 协议内部支持负载均衡 除了这三种负载均衡方式之外 有的协议内部支持与负载均衡相关的功能 例如HTTP协议中的重定向能力等 HTTP运行于TCP连接的最高层 5 5 NATNAT负载均衡负载均衡 NATNAT NetworkNetwork AddressAddress TranslationTranslation 网络地址转换 网络地址转换 简单地说就是将一个IP地址转换为另一个IP地址 一般用于未经注册的内 部地址与合法的 已获注册的Internet IP地址间进行转换 适用于解决 Internet IP地址紧张 不想让网络外部知道内部网络结构等的场合下 6 6 反向代理负载均衡 反向代理负载均衡 普通代理方式是代理内部网络用户访问internet上服务器的连接请求 客 户端必须指定代理服务器 并将本来要直接发送到internet上服务器的连接请求 发送给代理服务器处理 反向代理 Reverse Proxy 方式是指以代理服务器来 接受internet上的连接请求 然后将请求转发给内部网络上的服务器 并将从 服务器上得到的结果返回给internet上请求连接的客户端 此时代理服务器对 外就表现为一个服务器 反向代理负载均衡技术是把将来自internet上的连接 请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处理 从而 达到负载均衡的目的 7 7 混合型负载均衡在有些大型网络 混合型负载均衡在有些大型网络 由于多个服务器群内硬件设备 各自的规模 提供的服务等的差异 我们 可以考虑给每个服务器群采用最合适的负载均衡方式 然后又在这多个服务器 群间再一次负载均衡或群集起来以一个整体向外界提供服务 即把这多个服务 器群当做一个新的服务器群 从而达到最佳的性能 我们将这种方式称之为 混合型负载均衡 此种方式有时也用于单台均衡设备的性能不能满足大量连接 请求的情况下 1 9 2 负载均衡的分类负载均衡的分类 1 1 软 软 硬件负载均衡硬件负载均衡 软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一 个或多个附加软件来实现负载均衡 如DNS Load Balance CheckPoint Firewall 1 ConnectControl等 它的优点是基于特定环境 配置简单 使用灵 活 成本低廉 可以满足一般的负载均衡需求 软件解决方案缺点也较多 因为每台服务器上安装额外的软件运行会消耗 系统不定量的资源 越是功能强大的模块 消耗得越多 所以当连接请求特别 大的时候 软件本身会成为服务器工作成败的一个关键 软件可扩展性并不是 很好 受到操作系统的限制 由于操作系统本身的Bug 往往会引起安全问题 硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备 这种设备我们通常称之为负载均衡器 由于专门的设备完成专门的任务 独立 于操作系统 整体性能得到大量提高 加上多样化的负载均衡策略 智能化的 流量管理 可达到最佳的负载均衡需求 负载均衡器有多种多样的形式 除了作为独立意义上的负载均衡器外 有 些负载均衡器集成在交换设备中 置于服务器与Internet链接之间 有些则以 两块网络适配器将这一功能集成到PC中 一块连接到Internet上 一块连接到 后端服务器群的内部网络上 一般而言 硬件负载均衡在功能 性能上优于软件方式 不过成本昂贵 2 2 本地 本地 全局负载均衡全局负载均衡 负载均衡从其应用的地理结构上分为本地负载均衡 Local Load Balance 和全局负载均衡 Global Load Balance 也叫地域负载均衡 本地负载均衡是 指对本地的服务器群做负载均衡 全局负载均衡是指对分别放置在不同的地理 位置 有不同网络结构的服务器群间作负载均衡 本地负载均衡能有效地解决数据流量过大 网络负荷过重的问题 并且不 需花费昂贵开支购置性能卓越的服务器 充分利用现有设备 避免服务器单点 故障造成数据流量的损失 其有灵活多样的均衡策略把数据流量合理地分配给 服务器群内的服务器共同负担 即使是再给现有服务器扩充升级 也只是简单 地增加一个新的服务器到服务群中 而不需改变现有网络结构 停止现有的服 务 全局负载均衡主要用于在一个多区域拥有自己服务器的站点 为了使全球 用户只以一个IP地址或域名就能访问到离自己最近的服务器 从而获得最快的 访问速度 也可用于子公司分散站点分布广的大公司通过Intranet 企业内部 互联网 来达到资源统一合理分配的目的 全局负载均衡有以下的特点 A 实现地理位置无关性 能够远距离为用户提供完全的透明服务 B 除了能避免服务器 数据中心等的单点失效 也能避免由于ISP专线故 障引起的单点失效 C 解决网络拥塞问题 提高服务器响应速度 服务就近提供 达到更好的 访问质量 1 10 硬件四层交换 第四层交换使用第三层和第四层信息包的报头信息 根据应用区间识别业 务流 将整个区间段的业务流分配到合适的应用服务器进行处理 第四层交 换功能就象是虚 IP 指向物理服务器 它传输的业务服从的协议多种多样 有 HTTP FTP NFS Telnet或其他协议 这些业务在物理服务器基础上 需要复 杂的载量平衡算法 在IP世界 业务类型由终端TCP或UDP端口地址来决定 在 第四层交换中的应用区间则由源端和终端IP地址 TCP和UDP端口共同决定 在硬件四层交换产品领域 有一些知名的产品可以选择 比如Alteon F5 等 这些产品很昂贵 但是物有所值 能够提供非常优秀的性能和很灵活的管 理能力 Yaho

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论