大型网站IT技术架构

1、Varnish 反向代理服务器(外网client向内网server请求资源)

模式:

代理缓存,外网client在varnish找不到请求的资源,varnish会向上游的apache请求资源,然后传给client,并同时缓存该资源;

旁路缓存,外网client在varnish找不到请求的资源,varnish将client的请求路由到上游的apache,client取得资源后将该资源返回给varnish;

最近公司做活动推广,流量暴增,后端服务器压力山大,导致用户的请求响应时间延长,客户因此抱怨声音很大。
  为尽快解决问题,在安排人员不断优化后端代码的同时,考虑在nginx前增加varnish缓存层,只透传部分动态请求过去,直接减少后端服务器的压力。
  在实际使用中,真正感受到了varnish服务器强大的威力!在不断的调优缓存命中率后,后端服务器cpu直接从80%降到了20%,再大的并发前端也可以直接消化,后端服务器表示毫无压力。有了这玩意,可以再也不用在后台写定时任务,不断重新生成静态页面了,直接丢缓存里完事!此外,varnish还支持一种叫“神圣模式”,在后端服务器报错返回500的时候,varnish还能继续优先返回过去缓存的内容,为用户屏蔽部分错误,这东东有时真算是救命稻草啊。
  但同时,也趟了n多的坑,varnish中的VCL语言太过强大和灵活,稍微运用不好就会中枪。而网上公开的大多数varnish配置文件都是一大抄,根本无法直接用于生产。在研究了几天,翻阅了大量各种资料后,才总算把遇到的问题都解决了。

Varnish需要在多台服务器上缓存数据,就需要Varnish映射所有的URL到一台后端的web server。

varnish基本配置:

  1. backend webserver {
  2. .host = "127.0.0.1";
  3. .port = "80";
  4. .connect_timeout = 4s;
  5. .first_byte_timeout = 5s;
  6. .between_bytes_timeout = 20s;
  7. }

该块配置用于定义一台Varnish默认访问的后端服务器,当Varnish需要从后端服务器获取数据时,就会访问自己的80端口。

当然Varnish也可以定义多台后端web服务器实现负载均衡的目的。(或者设置一台web server,该web server是一个VIP,即 service IP,后台挂着一个web cluster)

.connect_timeout定义的是等待连接后端的时间

.first_byte_timeout定义的是等待从backend传输过来的第一个字节的时间

.between_bytes_timeout 定义的是两个字节的间隔时间

当然还可以增加一个backend,用于访问本机的8090端口,假设通过该端口提供图片服务(图片服务器)

  1. backend img {
  2. .host = "127.0.0.1";  (该IP也可以是VIP,执行后端的图片缓存服务器)
  3. .port = "8090";
  4. }

匹配img的URL时,需把请求发送到上面定义的backend img,其他的请求发送到backend webserver。

  1. sub vcl_recv {
  2. if (req.url ~ "^/img/") {
  3. set req.backend = img;
  4. } else {
  5. set req.backend = webserver.
  6. }
  7. }

在企业的生产环境,varnish可以配置多台,公网上用一个VIP接收client的请求,负载均衡设备(Citrix的Netscaler,F5的BIG-IP,国产的开源软件LVS)将请求VIP的连接通过某种负载均衡策略(URL Hash,round-robin等)分发到后端的varnish 服务资源池。

当然,也可以用多个VIP(该VIP都对应同一个域名),每个VIP后面挂相同的varnish 服务资源池,或者不同的varnish 服务资源池。

比如Citrix的Netscaler,可以在上面配置vip-1对应10台varnish,vip-2对应10台相同的varnish,也可以vip-2对应不同的varnish。

时间: 2024-10-10 05:40:18

大型网站IT技术架构的相关文章

大型网站优化技术(一)

存储瓶颈第一篇 1 大型网站定义 首先我们要思考一个问题,什么样的网站才是大型网站,从网站的技术指标角度考虑这个问题人们很容易犯一个毛病就是认为网站的访问量是衡量的指标,懂点 行的人也许会认为是网站在单位时间里的并发量的大小来作为指标,如果按这些标准那么像hao123这样的网站就是大型网站了,如下图所示: 其实这种网站访问量非常大,并发数也非常高,但是它却能用最为简单的Web技术来实现:我们只要保持网站的充分的静态化,多部署几台服务器,那么就算地球上所有人都用它,网站也能正常运行. 大型网站是技

Mysql在大型网站的应用架构演变(转)

原文: Mysql在大型网站的应用架构演变 本文已经被多处转载,包括CSDN推荐以及码农周刊等等,阅读数超过5w+,回流到我博客流量的还是比较少,不过这不重要, 后续会分享更多技术,尽量试图把自己理解的东西描述出来(很多时候自己的理解是90分,可是描述出来就只有60分了) CSDN的转载 :http://www.csdn.net/article/2014-06-10/2820160 伯乐在线的转载: http://blog.jobbole.com/70844/ 当然还有大量转载没有写明出处的..

云计算视频教程:Linux大型网站高并发架构及自动化运维

随着互联网技术的不断进步和发展,对运维人员提出了更高的要求和挑战,如何才能将运维工作自动化,提升工作的效率?让大家学完后可以具备企业真正的大型网站搭建能力以及自动化运维的实战能力.在企业中运用zabbix监控企业数据,第一时间了解服务的运行状态,通过nginx+lvs+keeplived在企业中根据公司业务做七层负载以及四层负载. 下面给大家分享一下Linux大型网站高并发架构及自动化运维的学习内容: 01-初识ansible 02-ansible-Ad-Hoc-重点模块学习 03-ansibl

Mysql在大型网站的应用架构演变

原创文章,转载请注明: 转载自http://www.cnblogs.com/Creator/本文链接地址: Mysql在大型网站的应用架构演变 写在最前: 本文主要描述在网站的不同的并发访问量级下,Mysql架构的演变 可扩展性 架构的可扩展性往往和并发是息息相关,没有并发的增长,也就没有必要做高可扩展性的架构,这里对可扩展性进行简单介绍一下,常用的扩展手段有以下两种Scale-up :  纵向扩展,通过替换为更好的机器和资源来实现伸缩,提升服务能力Scale-out : 横向扩展,  通过加节

中大型移动互联网公司技术架构选择(转载)

原文地址:http://2014.54chen.com/blog/2014/03/05/ihaveadream/ 总体思考 总结这些年经验,进行构架演进的方向选择时,大致要做到下面的目标: 可快速开发部署 (五分钟写出来一个经过测试的hello world并可访问/调用,并可在公网访问) 天然可扩展(业务层无状态,尽可能全部放到最后) 自动化(内存不足了,除了报警,应该自动加点机器进去; 新的项目,基础代码应该都不用写,自动生成即可) 框架化(公共层面的东西尽可能框架化,一层类似日志.count

静态资源文件自动压缩并替换成压缩版本(大型网站优化技术)

原文:静态资源文件自动压缩并替换成压缩版本(大型网站优化技术) 这一次,我总结和分享一项大型网站优化技术,那就是在项目中自动压缩静态资源文件(css.js),并让网站自动加载压缩后的资源文件.当然,这项技术在雅虎35条前端优化建议里也有记载,但它那只是给出一个理论的方案而已,并且采用的是外部压缩工具去压缩,而在我的项目中,是直接通过自己的程序自动化去压缩所有css.js文件,然后让页面直接加载所压缩后的资源,接下来直接进入主题. 本次实验使用的是PHP脚本语言,版本是PHP5.6,是在LINUX

减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术)

原文:减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术) 在网站开发过程中,对于页面的加载效率一般都想尽办法求快.那么,怎么让才能更快呢?减少页面请求 是一个优化页面加载速度很好的方法.上一篇博文我们讲解了 “利用将小图标合成一张背景图来减少HTTP请求”,那么,这一篇博文将讲解  “ 将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片”. 一.为何选择将图片转成二进制并生成Base64编码,可以在网页中通过url查看

减少HTTP请求之合并图片详解(大型网站优化技术)

原文:减少HTTP请求之合并图片详解(大型网站优化技术) 一.相关知识讲解 看过雅虎的前端优化35条建议,都知道优化前端是有多么重要.页面的加载速度直接影响到用户的体验.80%的终端用户响应时间都花在了前端上,其中大部分时间都在下载页面上的各种组件:图片,样式表,脚本,Flash等等. 减少组件数必然能够减少页面提交的HTTP请求数.这是让页面更快的关键.减少页面组件数的一种方式是简化页面设计.但有没有一种方法可以在构建复杂的页面同时加快响应时间呢?嗯,确实有鱼和熊掌兼得的办法. 这里我们就拿雅

大型网站图片服务器架构的演进(转)

在主流的Web站点中,图片往往是不可或缺的页面元素,尤其在大型网站中,几乎都将面临“海量图片资源”的存储.访问等相关技术问题.在针对图片服务器的架构扩展中,也会历经很多曲折甚至是血泪教训(尤其是早期规划不足,造成后期架构上很难兼容和扩展). 本文将以一个真实垂直门户网站的发展历程,向大家娓娓道来. 构建在Windows平台之上的网站,往往会被业内众多技术认为很“保守”,甚至会有点.很大部分原因,是由于微软技术体系的封闭和部分技术人员的短视造成的(当然,主要还是人的问题).由于长期缺乏开源支持,所