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.html3.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站点架构设计考虑的因素的更多相关文章
- 千万PV级别WEB站点架构设计
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog.51cto.com/353572/1369762 高性能与多 ...
- 前后端分离之Web前端架构设计
架构设计:前后端分离之Web前端架构设计 在前面的文章里我谈到了前后端分离的一些看法,这个看法是从宏观的角度来思考的,没有具体的落地实现,今天我将延续上篇文章的主题,从纯前端的架构设计角度谈谈前后端分 ...
- Web信息架构——设计大型网站(第3版)(久负盛名经典再现,信息架构设计领域基石之作!)
Web信息架构——设计大型网站(第3版)(久负盛名经典再现,信息架构设计领域基石之作!) [美]]Peter Morville(彼得·莫维尔) Louis Rosenfeld(路易斯·罗森菲尔德) ...
- 关于Django Web应用架构设计开发的几个问题
1.关于分层,做过传统JEE应用的同学肯定知道JEE应用会分很多个设计层.根据传统Web应用架构设计一般从上到下分这么几个层(太懒了,不画图了):Web前端层.Web后端交互层.业务层.基础数据设施层 ...
- Web信息架构:设计大型网站(第3版) [美]Peter Morville 中文PDF扫描版
新版Web信息架构设计大型网站针对新技术做了全面更新——搭配新颖范例.全新场景及最佳实践信息——但是,其焦点依然放在基础原理上.其结构严谨,图文并貌,内容涵盖了信息架构基本原理和实践应用的方方面面. ...
- 大型 web 前端架构设计-面向抽象编程入门
https://mp.weixin.qq.com/s/GG6AtBz6KgNwplpaNXfggQ 大型 web 前端架构设计-面向抽象编程入门 曾探 腾讯技术工程 2021-01-04 依赖反转 ...
- 架构设计:前后端分离之Web前端架构设计
在前面的文章里我谈到了前后端分离的一些看法,这个看法是从宏观的角度来思考的,没有具体的落地实现,今天我将延续上篇文章的主题,从纯前端的架构设计角度谈谈前后端分离的一种具体实现方案,该方案和我原来设想有 ...
- 5、web站点架构模式简介及Nginx
LB Cluster: 提升系统容量的方式: scale up:向上扩展 scale out:向外扩展 LVS工作在内核中,本身的数量不受套接字数量限制,利用LVS做调度器,优化得当的话,并发数量可以 ...
- .Net站点架构设计(八)測试
.Net站点架构时间(八)測试 一般而言.总体測试策略是:先针对部分系统进行性能及压力測试,得到各部分的峰值处理性能:再模拟总体流程測试,此时倒不用依照峰值跑,重点測试总体业务流程及业务预期负荷. 在 ...
随机推荐
- curl获取http请求的状态码
$curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); //设置头文件的信息作为数据流输出 curl_setopt($curl, CUR ...
- delphi中DLL编程详解
10.1 Windows的动态链接库原理 动态链接库(DLLs)是从C语言函数库和Pascal库单元的概念发展而来的.所有的C语言标准库函数都存放在某一函数库中,同时用户也可以用LIB程序创建自己的函 ...
- ubuntu下使用C语言开发一个cgi程序
主要步骤是: 1. 开发一个C程序(在标准输出中输出HTML字符串) 2. 复制到apache2的cgi-bin目录去 3. 在httpd.conf中开启cgi功能(我似乎没用到,也可以使用cgi) ...
- JSP 表单request内容
1. 表单request内容的获取 2. request.setCharacterEncoding("utf-8")对request内容进行编码 3. fullformreques ...
- IIC协议及其对ACK应答信号的处理
1,SCL一直由Master控制,SDA依照数据传送的方向,读数据时由Slave控制SDA,写数据时由Master控制SDA.当8位数据传送完毕之后,应答位或者否应答位的SDA控制权与数据位传送时相反 ...
- 在Hibernate中分别使用JDBC和JTA事务的方法
在Hibernate中使用JDBC事务 Hibernate对JDBC进行了轻量级的封装,它本身在设计时并不具备事务处理功能.Hibernate将底层的JDBCTransaction或JTATransa ...
- Android中SharedPreferences使用方法介绍
一.Android SharedPreferences的简介 SharedPreferences是一种轻型的Android数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用 ...
- 「Poetize7」Freda的访客
描述 Description 小猫们看到蛋糕比饼干大之后,普遍认为蛋糕比饼干要好>.<.所以,如果Freda 给了第i 只小猫蛋糕且这个小猫是第一个吃到蛋糕的,那么就必须给第i+2,i+4 ...
- jquery禁用右键、文本选择功能、刷新
//禁用右键.文本选择功能.刷新 $(document).bind(“contextmenu”,function(){return false;}); $(document).bind(“select ...
- Linux Shell编程(1)——shell编程简介
Shell是一个命令解释器.它不仅是操作系统内核与用户之间的绝缘层,同时也是一种功能相当强大的编程语言.一个Shell程序,通常称为脚本,它是一个由系统调用,命令工具,软件包和已编译的二进制包&quo ...