其实要设计一个高可用、高负载的系统还是有一定的规矩可循的,其手段无外乎向上扩展(Sacle Up 硬件扩展)或者向外扩展(Scale Out 软件扩展),这两种方案在某一阶段时期,会显著改善网站的性能,但不久之后,问题依旧。本文参考网上相关资料,试图提供一个可行的 "有限" 解决方案。
早期
1. 对业务应用进行垂直分割,将不同的业务边界划分出来。程序员常说的 "多层体系" 只是纵向解决了不同编程层次的划分,相对于业务而言,并没有做出什么处理。现在 SOA 大行其道,除了人们认识到面向服务带来的互联、扩展性以外,它也将不同服务的变化区分开来,各自拥有独立的实现和存储机制。每个服务使用不同的数据库或数据表,从一定程度上减轻了以往单个数据库频繁造成的 "锁" 和 I/O 瓶颈问题。
2. 将网站系统中的动态内容和静态资源分离出来,使用单独的更加高效的服务器(诸如 Apache + Linux)提供静态信息。多数情况下,流量的极大部分来源于图片、视频等,用多台服务器同时提供页面显示除了可以提高页面响应和现实速度外,同时他将流量分解到多台服务器上。另外,我们应该避免使用动态解析 (ASPNET_ISAPI.dll / HttpModule / HttpHandler) 来处理静态数据的过滤和路径重写。
3. 使用缓存机制,包括使用诸如 ASP.NET Cache、PageCache、创建静态页面等手段。设计良好的缓存机制能极大提高系统性能和响应速度。
4. 使用 64 位数据库系统。SQL Server 2005 在 64 位系统上可以使用更多的内存(最高64GB),而且在多 CPU 下也拥有更好的性能。有了更大的内存,我们甚至可以将某些常用且极少变化的表(比如分类目录表等)设置为内存表以提高响应速度。
5. 关闭操作系统的某些安全设置,比如 Windows 2003 预防 DDOS 攻击的一些设置,也可以避免一些意外的访问瓶颈。
运行期
6. 建立多数据库体系。使用单个或多个用于数据更新的数据库服务器,然后利用数据库的复制和订阅功能同步到其他多台专门用于显示的数据库服务器上,这样可以有效减少因为更新带来的数据库访问等待。当然,这种体系并不适用所有的业务。
7. 对大数据表进行分区。现在的主流数据库基本都支持数据表分区功能,我们可以横向分区,将不同时期的数据存放到多个分区表中;也可以纵向分区,将不常用的字段放到其他分区表中。分区表并不会影响到我们的开发模式,无须对代码进行调整,但数据表尺寸从 TB 减小到 GB 所带来的好处是无法忽略的。
8. 使用负载均衡等手段提升性能。包括DNS负载均衡、代理服务器负载均衡、地址转换网关负载均衡、协议内部支持负载均衡、NAT负载均衡、反向代理负载均衡等,负载均衡作为最常用的上扩手段,其效果也非常明显。
9. 使用 SAN 等专用的存储系统来提高 I/O 性能。SAN 使用光纤通道连接多个存储设备,可以改善多个服务器硬盘之间使用网线传输数据的性能问题。此外,SAN 还可以动态调整存储容量,更加有利于系统备份和恢复。
10. 电力备份。如果是自主机房,除了配置 UPS 电源外,最好拥有独立的发电设备。当然,对中小型网站而言,这过于奢侈了些。
早期
1. 对业务应用进行垂直分割,将不同的业务边界划分出来。程序员常说的 "多层体系" 只是纵向解决了不同编程层次的划分,相对于业务而言,并没有做出什么处理。现在 SOA 大行其道,除了人们认识到面向服务带来的互联、扩展性以外,它也将不同服务的变化区分开来,各自拥有独立的实现和存储机制。每个服务使用不同的数据库或数据表,从一定程度上减轻了以往单个数据库频繁造成的 "锁" 和 I/O 瓶颈问题。
2. 将网站系统中的动态内容和静态资源分离出来,使用单独的更加高效的服务器(诸如 Apache + Linux)提供静态信息。多数情况下,流量的极大部分来源于图片、视频等,用多台服务器同时提供页面显示除了可以提高页面响应和现实速度外,同时他将流量分解到多台服务器上。另外,我们应该避免使用动态解析 (ASPNET_ISAPI.dll / HttpModule / HttpHandler) 来处理静态数据的过滤和路径重写。
3. 使用缓存机制,包括使用诸如 ASP.NET Cache、PageCache、创建静态页面等手段。设计良好的缓存机制能极大提高系统性能和响应速度。
4. 使用 64 位数据库系统。SQL Server 2005 在 64 位系统上可以使用更多的内存(最高64GB),而且在多 CPU 下也拥有更好的性能。有了更大的内存,我们甚至可以将某些常用且极少变化的表(比如分类目录表等)设置为内存表以提高响应速度。
5. 关闭操作系统的某些安全设置,比如 Windows 2003 预防 DDOS 攻击的一些设置,也可以避免一些意外的访问瓶颈。
运行期
6. 建立多数据库体系。使用单个或多个用于数据更新的数据库服务器,然后利用数据库的复制和订阅功能同步到其他多台专门用于显示的数据库服务器上,这样可以有效减少因为更新带来的数据库访问等待。当然,这种体系并不适用所有的业务。
7. 对大数据表进行分区。现在的主流数据库基本都支持数据表分区功能,我们可以横向分区,将不同时期的数据存放到多个分区表中;也可以纵向分区,将不常用的字段放到其他分区表中。分区表并不会影响到我们的开发模式,无须对代码进行调整,但数据表尺寸从 TB 减小到 GB 所带来的好处是无法忽略的。
8. 使用负载均衡等手段提升性能。包括DNS负载均衡、代理服务器负载均衡、地址转换网关负载均衡、协议内部支持负载均衡、NAT负载均衡、反向代理负载均衡等,负载均衡作为最常用的上扩手段,其效果也非常明显。
9. 使用 SAN 等专用的存储系统来提高 I/O 性能。SAN 使用光纤通道连接多个存储设备,可以改善多个服务器硬盘之间使用网线传输数据的性能问题。此外,SAN 还可以动态调整存储容量,更加有利于系统备份和恢复。
10. 电力备份。如果是自主机房,除了配置 UPS 电源外,最好拥有独立的发电设备。当然,对中小型网站而言,这过于奢侈了些。
标签:
高负载
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
内蒙古资源网 Copyright www.nmgbbs.com
暂无“设计高可用和高负载的网站系统的几个注意事项”评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。