转自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系统逻辑架构图

Web站点架构设计考虑的因素的更多相关文章

  1. 千万PV级别WEB站点架构设计

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog.51cto.com/353572/1369762 高性能与多 ...

  2. 前后端分离之Web前端架构设计

    架构设计:前后端分离之Web前端架构设计 在前面的文章里我谈到了前后端分离的一些看法,这个看法是从宏观的角度来思考的,没有具体的落地实现,今天我将延续上篇文章的主题,从纯前端的架构设计角度谈谈前后端分 ...

  3. Web信息架构——设计大型网站(第3版)(久负盛名经典再现,信息架构设计领域基石之作!)

    Web信息架构——设计大型网站(第3版)(久负盛名经典再现,信息架构设计领域基石之作!) [美]]Peter Morville(彼得·莫维尔)  Louis Rosenfeld(路易斯·罗森菲尔德) ...

  4. 关于Django Web应用架构设计开发的几个问题

    1.关于分层,做过传统JEE应用的同学肯定知道JEE应用会分很多个设计层.根据传统Web应用架构设计一般从上到下分这么几个层(太懒了,不画图了):Web前端层.Web后端交互层.业务层.基础数据设施层 ...

  5. Web信息架构:设计大型网站(第3版) [美]Peter Morville 中文PDF扫描版

    新版Web信息架构设计大型网站针对新技术做了全面更新——搭配新颖范例.全新场景及最佳实践信息——但是,其焦点依然放在基础原理上.其结构严谨,图文并貌,内容涵盖了信息架构基本原理和实践应用的方方面面. ...

  6. 大型 web 前端架构设计-面向抽象编程入门

    https://mp.weixin.qq.com/s/GG6AtBz6KgNwplpaNXfggQ 大型 web 前端架构设计-面向抽象编程入门 曾探 腾讯技术工程 2021-01-04   依赖反转 ...

  7. 架构设计:前后端分离之Web前端架构设计

    在前面的文章里我谈到了前后端分离的一些看法,这个看法是从宏观的角度来思考的,没有具体的落地实现,今天我将延续上篇文章的主题,从纯前端的架构设计角度谈谈前后端分离的一种具体实现方案,该方案和我原来设想有 ...

  8. 5、web站点架构模式简介及Nginx

    LB Cluster: 提升系统容量的方式: scale up:向上扩展 scale out:向外扩展 LVS工作在内核中,本身的数量不受套接字数量限制,利用LVS做调度器,优化得当的话,并发数量可以 ...

  9. .Net站点架构设计(八)測试

    .Net站点架构时间(八)測试 一般而言.总体測试策略是:先针对部分系统进行性能及压力測试,得到各部分的峰值处理性能:再模拟总体流程測试,此时倒不用依照峰值跑,重点測试总体业务流程及业务预期负荷. 在 ...

随机推荐

  1. Linux 系统命令及其使用详解(大全)

    (来源: 中国系统分析员) cat cd chmod chown cp cut 1.名称:cat 使用权限:所有使用者 使用方式:cat [-AbeEnstTuv] [--help] [--versi ...

  2. CentOS中vsftp安装、配置、卸载

    1. 安装VSFTP 1 [root@localhost ~]# yum -y install vsftpd 2. 配置vsftpd.conf文件 [root@localhost ~]# vi /et ...

  3. underscorejs-shuffle学习

    2.21 shuffle 2.21.1 语法 _.shuffle(list) 2.21.2 说明 返回一个随机乱序的list副本数组, 使用 Fisher-Yates shuffle 来进行随机乱序. ...

  4. Bootstrap_Javascript_选项卡

    选项卡Tabs是Web中一种非常常用的功能.用户点击或悬浮对应的菜单项,能切换出对应的内容. 一 . 结构分析 Bootstrap框架中的选项卡主要有两部分内容组成: 选项卡组件(也就是菜单组件),对 ...

  5. pycharm常用快捷键与设置

    pycharm高频率使用的快捷键 Ctrl+Shift+F10 运行当前的页面 Ctrl + / 注释(取消注释)选择的行 Ctrl+Shift+F 高级查找 Shift + Enter 开始新行 T ...

  6. vs2013update4 vs-mda-remote cordova真机测试ios 解决里面一个坑

    sudo npm install -g vs-mda-remote --user=你的用户名 此步骤为安装vs-mda-remote,如果安装成功 执行vs-mda-remote –secure fa ...

  7. iOS触摸事件处理--备用

    主要是记录下iOS的界面触摸事件处理机制,然后用一个实例来说明下应用场景. 一.处理机制 界面响应消息机制分两块,(1)首先在视图的层次结构里找到能响应消息的那个视图.(2)然后在找到的视图里处理消息 ...

  8. linux中bin和xbin下可执行程序的区别

    /bin下的都是Linux最基础的,所有用户都可以使用的外部命令 /sbin下的都是只有超级用户root才能使用的.管理Linux系统的外部命令 /usr/bin以及/usr/local/bin下的都 ...

  9. BZOJ 3872 Ant colony

    Description There is an entrance to the ant hill in every chamber with only one corridor leading int ...

  10. BZOJ 1046 上升序列

    Description 对于一个给定的S={a1,a2,a3,…,an},若有P={ax1,ax2,ax3,…,axm},满足(x1 < x2 < … < xm)且( ax1 < ...