Web站点架构设计考虑的因素

转自http://blog.csdn.net/moshengtan/article/details/8990052

1    Web负载均衡

1.1 - 使用商业硬件实现

最经常使用的F5 与citrix netscaler。比方12306前端的web好像用的就是F5 的BIGIP。假设公司资金足够的话,相对使用开源软件来说理方便。
长处:维护方便,性能稳定
缺点:费用太高

1.2 - 使用开源软件

可选择使用lvs或者nginx做web应用的负载均衡。
Lvs工作在tcp 协议4层下,而nginx工作在tcp协议7层下。4层和7层区别举个实际样例:member.app.com,shop.app.com域名对外仅仅有一 个ip,通过lvs指向后台10.0.0.1-10.0.0.10 这10台机器。你必须在这10台机器上都配置好member.app.com和shop.app.com的站点内容。这10台server都承载着 member.app.com和shop.app.com的前端请求,假设哪天你发现member.app.com的请求大于shop.app.com的 请求。想把shop.app.com请求仅仅限定在10.0.0.1-10.0.0.5 这5台机器上,而member.app.com还是指向10.0.0.1-10.0.0.10这10台机器。你请必须将member.app.com和 shop.app.com域名又一次指向不同的ip来实现。而通过nginx则能够实现改动配置文件就可以实现。不必将member.app.com和 shop.app.com域名指向不同的外网ip.
相对lvs来说,nginx所能实现的功能也比較多。只是相对于稳定和性能上来说还是lvs性能好一些。
长处:免费,开源。性能稳定。
缺点:维护配置成本高

1.3 - 使用windows自带的互载均衡软件

Windows2003 的server都自带有NLB来实现。实现机制类似于lvs,无法做到以上nginx七层协议。使用windows实现是通过广播方式将请求发向同一网段的全部 ip。假设通过NLB实现,最好将同一组NLB的server划分在同一个vlan下。以防止广播到其他的ip上,添加交换机的流量。
长处:免费(仅仅要有windows就自带了),配置方便。不用添加单独server。
缺点:数据广播方式实现,须要配置vlan解决。


1.4 - 总结

相 对上面三种方式实现的互载均衡都有各自长处。假设小型windows站点server,採用windows下的nlb实现还是不错的选择。不用添加单独的服务 器。大型以上站点建议还是採用硬件(F5 big-ip)或开源下的lvs和nginx来实现。个人还是比較便向于nginx来实现,方便动态的对web的server进行调整。

2   静态站点

静态站点相对来说存储静态网页内容(html,js,css,jpg,png)和用户上传文件及图片。

2.1 - 静态域名划分

相 对静态站点来说建议将css,jpg,png及用户上传文件放在和主站点不同的域名上。不是指二级域名,是一级域名。如主站点用 www.website.com ,而css,jpg,png及用户上传文件使用file.imageswebsite.com域名。这样优点主要是能够降低主域名的cookies发送到 不须要使用cookies的文件server上。能够起到加快用户訪问和降低server流量作用。比方:将用户的登入信息cookies写入到 website.com域名下,每当浏览器请求website.com域名下(包含二级域名)的不论什么网址都会将cookies信息发送请求的网址信息头 上。将不须要訪问用户cookies的文件放在不同的域名下,将不会发送cookies信息。 大家有兴趣能够用firebug进行监控查看。

2.2 - 静态站点的缓存

2.2.1 - 使用CDN

CDN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中添加一层新的网络架构,将站点的内容公布到最接近用户的网络"边缘",使用户能够就近取得所需的内容,解决 Internet网络拥挤的状况,提高用户訪问站点的响应速度。从技术上全面解决因为网络带宽小、用户訪问量大、网点分布不均等原因所造成的用户訪问站点响应速度慢的问题。 (也就是一个server的内容,平均分部到多个server上,server智能识别,让用户获取离用户近期的server,提快速度

假设资金同意,可使用商业的CDN服务。仅仅需将域名指向CDN服务商指定的server就可以对静态站点使用CDN加速。国内常见的CDN网宿、蓝讯、帝盟等。

2.2.2 - 自己搭建CDN

假设你在全国各机房都有server也能够自己搭建CDN服务。
使用硬件(F5 big-ip),依据用户请求的ip,将用户指到近期的idc机房server上。然后在各idc机房server上使用squid做反向代理从源server读取静态站点,对站点内容和用户上传图片的缓存。从而实现内容的加速。

3   动态站点

             动态站点相对静态站点来说,和用户的交互性多。开发动态站点的技术相对来说也是多种多样(asp.net,php,jsp等)。

3.1 - 域名划分

动态站点域名建议依据功能点,使用二级域名来进行划分。比方一个电子商务站点,包含会员,商城,订单,支付,管理后台等。
会员 member.website.com
商城 shop.website.com
订单 Order.website.com
支付 pay.website.com
管理后台 manager.website.com
原则上动态域名下仅仅存动态程序,动态站点用到的css,图片都应该在静态域名的图片server(file.imageswebsite.com)上。为动态域名下程序降低流量和请求。
动态站点使用二级域名来划分功能有个优点能够实现cookies信息的共享。全部二级域名仅仅须要将cookies信息写入website.com域名下,在其他的xxx.website.com域名下都能正常读取。从而为实如今各个动态域名上的统一认证而方便。

3.2 - 文件上传及显示

因为我们动态站点是多台部署,当用户上传文件时我们不能像单台server那样存在本地server上(其他server无法读取)。而是须要将用户文件做一个集中的存放地方。

3.2.1 - 存放在数据库

全部webserver,将用户的上传文件保存在数据库中。统一从数据库中读取和写入。
最不推荐方式。相对来说数据库的资源是最昂贵的,用来存用户文件是最浪费了。另外,当用户数据越来越大时,对dba来说是一个最痛苦的问题。不方便做缓存及文件分发同步。

3.2.2 - 存放在文件server

写入
a)在文件server上安装ftpserver。然后各webserver,通过模拟ftpclient。通过server的内网,将文件上传到文件server上。( C#模拟ftp方式,大家能够下载discuz nt源代码查看,里面有实现方式。)
b)通过windows内局域网的共享目录,各webserver模拟windows用户訪问共享文夹写入到文件server上。

读取
对文件的读取,假设是非公开的文件,还是通过原有写文件server的方式读取。
假设是公开性的文件,如分图片。在文件server上建方个web站点做为数据源,将根文件夹指到用户上传的文件夹。然后通过文章上述 “静态站点缓存”方式,对用户上传文件站点做cdn的分发和缓存。从而对用户上传文件进行加速訪问。

3.3 - 动态站点内容更新

因为动态站点的分布式部署,从而导致一个站点的更新须要同步到其他的server上。建议提供一台专门的測试webserver,每次更新将文件上传到測试server上。 測试通过后,再通过同步软件,将更新的站点文件同步到其他的webserver上。可使用rsync实现文件同步,有linux和windows版的。 Windows安装rsync认为麻烦也能够用 卧天同步王等相关软件来实现。

3.4 - 动态站点缓存技术

Memcached
Linux和windows下都有相应的client和服务端。假设对性能要求高建议安装linux下的服务端性能高些。client能够用.net,php进行调用。

开发相关缓存服务
大家也能够依据自己业务的须要,开发自己的分布式缓存服务。缓存算法经常使用LRU算法,经常使用排序在最前面。缓存服务相关算法介绍
http://www.blogjava.net/DL88250/archive/2011/01/21/343327.html
在.net下能够通过 remoting进行分部式缓存的开发。

分布式的缓存大家能够參考
http://wenku.baidu.com/view/0d0ef4ea81c758f5f61f67d9.html

3.5 - 配置文件

一般我们的应用程的配置文件都是放在当前程序文件夹下。因为我们web应用程序是分开部署,假设一个配置节点内容改动。就须要同步到其他的server上。另外一般程序都在初始化读取配置内容。假设在程序执行中改动了配置仅仅有又一次启动程序进行更新。这就出现了一个配置同步的问题。

3.5.1 - 通过同步软件实现

类似动态站点内容更新一样,使用rsync或都同步软件对配置文件进行同步。当UAT环境配置改动后,手工或定时将文件同步。应用程序定时从配置文件里更新配置。

3.5.2 - 通过配置服务实现

自己开发配置服务程序,提供接口给各个应用程序读取配置方式。配置服务程序和各应用通过 tcp方式实时实现配置内容读取。

3.5.3 - 通过数据库实现

将配置内容写入数据库,各应用程序通过读取数据库配置实现。各应用程序初始化从数据库中读取配置内容,读取完毕后每隔固定时间从数据库中更新内容到本地。

4   网页性能

4.1 - 网页压缩

静态站点压缩能够通过反向代理squid进行配置。经常使用浏览器都支持gzip网页格式的压缩。
动态站点的话,各平台的 webserver都有提供网页压缩的配置选项。基本上大家上google搜一搜都攻克了。

4.2 - 网页client缓存

在webserver上设置静态网页文件的 Last-Modified和ETag 。假设server上文件没有更新,则不发送新的内容到client。

4.3 - 网页开发内容调整

a)将多个js文件或css文件合并同一个文件。以降低http的请求。每一个浏览器对同一时间下,同一域名下的http请求有连接限制。
b)将css文件样式放在网页文件内容的头部,js文件放在网页文件的底部。让浏览先载入css文件,以便第一时间向用户展示界面。
c)网页小icon能够合并成同一个大的文件icon,以降低http的请求。通过CSS Sprites 实现单个文件的显示。
d)在firefox下安装 YSlow 对网页进行性能载入測试,依据測试建议对网页内容进行优化。

5   数据库

建立数据库时,有一个数据库预分配空间。建议初始分大一些,这样优点避免了在插入数据时达到数据库分配的空间。数据库自己主动分配数据库空间影响数据库插入的性 能。另外,数据库的自己主动增长建议按详细大小增长,比方2G依据你自己估计的大小。防止过快达到数据库上限导至系统频繁为库分配空间。

5.1 - 数据库规划

Web 站点经常使用数据mysql,mssql,oracle,当然还有其他的一些数据库。基本上这三种数据库都有自己的优缺点。Mysql免费开源,mssql和 oracle都是商业软件。oracle用于大型企业数据库较多,一般电信银行用的oracle多些。而mssql相对来说少。从dba专业上来说 oracle相比mssql性能好些,当然价格也贵。从近期几年mssql已经在慢慢追上。数据库也能够考虑nosql类数据库,mongodb、 Redis等。另外开源的PostgreSQL据说也不错,有空大家能够看一看(http://bbs.chinaunix.net/thread- 1688208-1-1.html)

5.2 - 数据库划分

依据业务应用来进行划分数据库。如我们上面的电子商务站点我们能够分为member,shop二个库。Member存储用于会员信息,shop库存储商品,订单,支付信息。

5.3 - 表划分

建议对大数据进行表的划分,划分规则可按记录数,记录时间,记录的hash值进行划分。
假设资金同意的话,能够考虑上存储设备。对数据性能的提升是巨大的。

6   server监控

这里所说的server监控仅仅是针对webserver的执行状态的监控。比方网络流量,cpu,内存,硬盘负载。server监控常见通过SNMP协议进行,在linux 和 windows下都通用。针对server监控我这推荐使用cacti软件进行。server上都配置有双网卡,一个内网,一个外网。在内网卡上添加snmp协议,然 后在cacti 中添加须要监控的server。给cacti 个外网ip就能够通过web界面进行查看server的状态了。Cacti软件的介绍和配置大家能够上网搜搜,这里就不做介绍了。Cacti还能够监控server上 执行进程,假设进程停止执行能够发出报警邮件。

7   Web系统逻辑架构图

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。