系统cpu负载比较高:高负载系统架构设计

  个小型网站WebSite比如个人网站WebSite可以使用最简单html静态页面就实现了配合些图片达到美化效果所有页面均存放

  在个目录下这样网站WebSite对系统架构、性能要求都很简单随着互联网业务不断丰富网站WebSite相关技术经过这些年发展

  已经细分到很细方方面面尤其对于大型网站WebSite来说所采用技术更是涉及面非常广从硬件到软件Software、编程语言、数据库、WebServer、防火墙等各个领域都有了很高要求已经不是原来简单html静态网站WebSite所能比拟

  大型网站WebSite比如门户网站WebSite在面对大量用户访问、高并发请求方面基本解决方案集中在这样几个环节:使用高性能服务器、高性能数据库、高效率编程语言、还有高性能Web容器但是除了这几个方面还没法根本解决大型网站WebSite面临高负载和高并发问题

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

  1、HTML静态化

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

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

  同时html静态化也是某些缓存Cache策略使用手段对于系统中频繁使用数据库查询但是内容更新很小应用可以考虑使用html静态化来实现比如论坛中论坛公用设置信息这些信息目前主流论坛都可以进行后台管理并且存储再数据库中这些信息其实大量被前台但是更新频率很小可以考虑将这部分内容进行后台更新时候进行静态化这样避免了大量数据库访问请求

  2、图片服务器分离

  大家知道对于Web服务器来说不管是Apache、IIS还是其他容器图片是最消耗资源于是我们有必要将图片和页面进行分离这是基本上大型网站WebSite都会采用策略他们都有独立图片服务器甚至很多台图片服务器这样架构可以降低提供页面访问请求服务器系统压力并且可以保证系统不会图片问题而崩溃在应用服务器和图片服务器上可以进行区别配置优化比如apache在配置ContentType时候可以尽量少支持尽可能少LoadModule保证更高系统消耗和执行效率

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

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

  在数据库集群方面很多数据库都有自己解决方案Oracle、Sybase等都有很好方案常用MySQL提供Master/Slave也是类似方案您使用了什么样DB就参考相应解决方案来实施即可

  上面提到数据库集群由于在架构、成本、扩张性方面都会受到所采用DB类型限制于是我们需要从应用角度来考虑改善系统架构库表散列是常用并且最有效解决方案我们在应用中安装业务和应用或者功能模块将数据库进行分离区别模块对应区别数据库或者表再按照策略对某个页面或者功能进行更小数据库散列比如用户表按照用户ID进行表散列这样就能够低成本提升系统性能并且有很好扩展性sohu论坛就是采用了这样架构将论坛用户、设置、帖子等信息进行数据库分离然后对帖子、用户按照板块和ID进行散列数据库和表最终可以在配置文件中进行简单配置便能让系统随时增加台低成本数据库进来补充系统性能

  4、缓存Cache

  缓存Cache词搞技术都接触过很多地方用到缓存Cache网站WebSite架构和网站WebSite开发中缓存Cache也是非常重要这里先讲述最基本两种缓存Cache高级和分布式缓存Cache在后面讲述

  架构方面缓存Cache对Apache比较熟悉人都能知道Apache提供了自己缓存Cache模块也可以使用外加Squid模块进行缓存Cache这两种方式均可以有效提高Apache访问响应能力

  网站WebSite开发方面缓存CacheLinux上提供Memory Cache是常用缓存Cache接口可以在web开发中使用比如用Java开发时候就可以MemoryCache对些数据进行缓存Cache和通讯共享些大型社区使用了这样架构另外在使用web语言开发时候各种语言基本都有自己缓存Cache模块和思路方法PHP有PearCache模块Java就更多了.net不是很熟悉相信也肯定有

  5、镜像

  镜像是大型网站WebSite常采用提高性能和数据安全性方式镜像技术可以解决区别网络接入商和地域带来用户访问速度差异比如ChinaNet和EduNet的间差异就促使了很多网站WebSite在教育网内搭建镜像站点数据进行定时更新或者实时更新在镜像细节技术方面这里不阐述太深有很多专业现成解决架构和产品可选也有廉价通过软件Software实现思路比如Linux上rsync等工具

  6、负载均衡

  负载均衡将是大型网站WebSite解决高负荷访问和大量并发请求采用终极解决办法

  负载均衡技术发展了多年有很多专业服务提供商和产品可以选择我个人接触过些解决思路方法其中有两个架构可以给大家做参考

  硬件 4层交换

  第 4层交换使用第 3层和第 4层信息包报头信息根据应用区间识别业务流将整个区间段业务流分配到合适应用服务器进行处理 第 4层交换功能就象是虚IP指向物理服务器它传输业务服从协议多种多样有HTTP、FTP、NFS、Telnet或其他协议这些业务在物理服务器基础上需要复杂载量平衡算法在IP世界业务类型由终端TCP或UDP端口地址来决定在第 4层交换中应用区间则由源端和终端IP地址、TCP和UDP端口共同决定



  在硬件 4层交换产品领域些知名产品可以选择比如Alteon、F5等这些产品很昂贵但是物有所值能够提供非常优秀性能和很灵活管理能力Yahoo中国当初接近2000台服务器使用了 3 4台Alteon就搞定了

  软件Software 4层交换

  大家知道了硬件 4层交换机原理后基于OSI模型来实现软件Software 4层交换也就应运而生这样解决方案实现原理不过性能稍差但是满足定量压力还是游刃有余有人说软件Software实现方式其实更灵活处理能力完全看你配置熟悉能力

  软件Software 4层交换我们可以使用Linux上常用LVS来解决LVS就是Linux Virtual Server他提供了基于心跳线heartbeat实时灾难应对解决方案提高系统鲁棒性同时可供了灵活虚拟VIP配置和管理功能可以同时满足多种应用需求这对于分布式系统来说必不可少

  个典型使用负载均衡策略就是在软件Software或者硬件 4层交换基础上搭建squid集群这种思路在很多大型网站WebSite包括搜索引擎上被采用这样架构低成本、高性能还有很强扩张性随时往架构里面增减节点都非常容易这样架构我准备空了专门详细整理下和大家探讨

  对于大型网站WebSite来说前面提到每个思路方法可能都会被同时使用到我这里介绍得比较浅显具体实现过程中很多细节还需要大家慢慢熟悉和体会有时个很小squid参数或者apache参数设置对于系统性能影响就会很大希望大家起讨论达到抛砖引玉的效



Tags:  信息系统架构 系统架构 系统架构设计 系统cpu负载比较高

延伸阅读

最新评论

发表评论