在互联网快速发展的背景下,特别是Web 2.0,网络上的数据内容呈几何级的增长,而其中增长最快并且最容易给技术架构带来挑战的就是数目庞大的小文件,如何来解决这种高并发,大流量,小文件,热点不集中的问题,经过我们大量研究,实践之后,总结出这种海量小文件,高并发所存在的关键问题和解决方案。

  我们先对比一下在Web 1.0的解决方案和Web 2.0的我们碰到的困难。

  Web 1.0解决方案:

  1、源数据量小,单台squid即可达到很高的命中率。

  2、请求量大,用lvs+squid或者dns轮询即可解决问题。

  3、squid服务器磁盘IO压力大,用超大内存做Cache。

  Web 2.0目前的瓶颈:

  1、源数据数量很大,导致squid hash table索引效率不高,Cache命中率低。

  为了提高对文件的访问效率,往往会在前端配置一个稍大容量的缓存。但由于小文件的数量极其庞大,应用对这些文件访问的随机性非常高,使得Cache命中率极低,缓存失去了应有的作用,导致应用需要直接到后端存储系统上读取数据,给存储系统带来了极大的压力。刚开始就是我们也采用了昂贵的高端存储系统NetApp,但是在用户高并发访问的情况下,存储系统经常出现长时间无响应的严重故障。

  2、源数据容量巨大,海量文件检索效率低,从而也导致单台squid命中率很低。

  有些频道数据容量会超过200T,单台squid只是杯水车薪,频繁的Cache置换更是加剧了Cache效率低下,再加上现有的存储系统无法有效管理海量小文件,并且在单个目录下存放文件的数量有一定的限制,一旦文件数到达了一定规模之后,文件的检索速度就急剧下降。我们只能通过多级目录来组织存放大量的小文件,随着目录深度的增加,文件的检索开销进一步增大,检索效率随之下降。

  3、大量的cache导致的磁盘IO问题。

  由于目前单台Cache容量已经达到上百G,文件系统瓶颈、磁盘IO问题也很快凸显。

  4、压力过大导致的hit ratio抖动。

  Cache删除,写操作达到一定的比例,同时如果压力较高,会导致hit ratio呈线性下降。即使Cache没down,但也因为命中率的下降而失去应有的作用。

  5、特殊集群下的单台失效问题。

  在类url hash的集群下,单台cache失效会导致hash rehash,那么整个集群的squid命中率都会被冲击。

  如何来解决这些问题,思路如下:

  1、优化squid hash table索引算法,需要修改源squid代码。

  2、Cache集群,用类url hash的方法,以增加Cache容量。

  ◆wccp: cisco的路由器均有此功能

  ◆carp: ISA,squid自身的7层调度协议

  ◆url hash: nginx haproxy等7层代理

  3、选择合适的文件系统

  XFS使用更多的内存来作为自己的高速缓存,以尽可能的延迟零散的写操作,尽可能的执行批量写操作。

  4、选择更合理的磁盘搭配策略,比如Raid策略或者单盘策略等

  Raid 5,10带来了不错的安全性,但是会导致磁盘IO效率低下,不做Raid的单盘性能最高,更适合单台服务器多squid进程模式。

  5、集群下的单台Cache失效的接管,以免单点故障,提高可用性。

  针对以上分析,我们大量尝试了开源的一些产品,像LVS,Nginx,Squid,XFS等。具体的软件组合和架构如下:

  (1)Web服务器的选择,目前,大多数Web服务器的处理能力有限,互联网广泛上使用的Web服务器如Apache,其并发能力往往在2000以下,这是由Web服务器自身的设计模式(如多进程,无IO缓存等)决定的。因此,在较大规模的访问情况下,通常会表现出用户访问网站慢,Web服务器负载高。为什么选择Nginx?use linux epoll, sendfile and aio to improve the performanc,我们主要利用的是Nginx的第三方模块ngx_http_upstream_hash_module做反向代理。部分代码如下:

  1. upstream img{
  2. server squid1:81;
  3. server squid2:81;
  4. hash $request_uri;
  5. hash_again 0; # default 0
  6. hash_method crc32; # default “simple”
  7. }
  8. server {
  9. listen 80;
  10. server_name images.gx.com;
  11. location / {
  12. proxy_pass http://img;

  (3)负载均衡软件,我们选择了LVS+HA,用DR模式。目前我们运行环境中的LVS(2.6的内核),普通很稳定。我们主要用Heartbeat+ldirectord。

  (4) 适合处理小文件的文件系统XFS。XFS最佳表现之一在于:象ReiserFS一样,它不产生不必要的磁盘活动。XFS设法在内存中缓存尽可能多的数据,并且,通常仅当内存不足时,才会命令将数据写到磁盘时。当它将数据清仓(flushing)到磁盘时,其它IO操作在很大程度上似乎不受影响。

  (5)其它优化

  在客户端和服务器做大量有效的缓存策略;用更小的并且可缓存的图片(单张图片尽量不要超过200K);尽量减少http请求;开起 keepalive减少tcp连接开销;优化tcp参数;起用多域名分域名策略;减少cookie影响等。

  (6)关于优化题外:大配置和架构没有问题的前提下,有money的话应该首选硬件优化方案而不是软件细节优化。

  整个架构如图

  后端存储垂直分割的规则如下(按00-ff散列):

  1. location ~ ^/[0-1][0-f]/ {
  2. proxy_pass http://192.168.3.12;
  3. }
  4. location ~ ^/[2-3][0-f]/ {
  5. proxy_pass http://192.168.3.11;
  6. }
  7. ……..

  以上这个架构的优化在于:

  ◆实现了高可用性,最大程度上防止单点,又保证架构的伸缩性。

  ◆在后端服务器中模拟url hash的算法来找到内容所在的squid,提高了命中率。

  ◆充分发挥机器的性能,架构可扩展性,层次分明。

  最后,很重要的二点:

  1)要通过性能分析和监控,来找到系统瓶颈的临界点和薄弱点。监控分析是一切优化的重点,要以数据事实来调整策略。

  2)架构的负荷如果已经超过设计负荷的5~10倍,就要考虑重新设计系统的架构,我们这里仅仅讨论某一阶段的架构设计。

转载于:https://www.cnblogs.com/wangbin/archive/2010/12/12/1903925.html

海量文件或数据 导致高并发,高流量处理方案相关推荐

  1. 高并发大流量秒杀方案思路

    概念:什么是秒杀 秒杀场景一般会在电商举行一些活动或者节假日在12306网站上抢票时遇到.对于网站中一些稀缺或者特价的产品,电商网站一般会在约定的时间对其进行限量销售,因为这些产品的特殊性,会吸引大量 ...

  2. 高并发高流量网站架构详解--转载

    原文地址:http://www.ha97.com/818.html Web2.0的兴起,掀起了互联网新一轮的网络创业大潮.以用户为导 向的新网站建设概念,细分了网站功能和用户群,不仅成功的造就了一大批 ...

  3. 高并发高可用的 架构实践

    一. 设计理念 1.     空间换时间 1)     多级缓存,静态化 客户端页面缓存(http header中包含Expires/Cache of Control,last modified(30 ...

  4. 构建高并发高可用的电商平台架构实践 转载

    2019独角兽企业重金招聘Python工程师标准>>> 构建高并发高可用的电商平台架构实践 转载 博客分类: java 架构 [-] 一 设计理念 空间换时间 多级缓存静态化 索引 ...

  5. 构建高并发高可用的电商平台架构实践 转自网络

    从各个角度总结了电商平台中的架构实践,由于时间仓促,定了个初稿,待补充完善,欢迎大家一起交流. 转载请声明出处: 作者:杨步涛 关注分布式架构.大数据.搜索.开源技术 QQ:306591368 技术B ...

  6. 高并发高流量网站架构[转]

    2019独角兽企业重金招聘Python工程师标准>>> Web2.0的兴起,掀起了互联网新一轮的网络创业大潮.以用户为导向的新网站建设概念,细分了网站功能和用户群,不仅成功的造就了一 ...

  7. 高并发 高负载 网站系统架构

    高并发 高负载 网站系统架构 注:我看到这篇文章写的太好了,可以没法转到CSDN上我就COPY了,看到下面激烈的评论,我也一并COPY了.不过还是要谢谢哪位作者了.这样的文章很少. 转自:http:/ ...

  8. 高并发高负载网站系统架构

    我在CERNET做过拨号接入平台的搭建,而后在Yahoo&3721从事过搜索引擎前端开发,又在MOP处理过大型社区猫扑大杂烩的架构升级等工作,同时自己接触和开发过不少大中型网站的模块,因此在大 ...

  9. 大型高并发高负载网站的系统架构

    转载请保留出处:俊麟 Michael's blog (http://www.toplee.com/blog/?p=71) Trackback Url : http://www.toplee.com/b ...

  10. 构建高并发高可用的电商平台架构实践

    问题导读: 1.如何构建高并发电商平台架构 2.哈希.B树.倒排.bitmap的作用是什么? 3.作为软件工程师,该如何实现读写? 4.如何实现负载均衡.反向代理? 5.电商业务是什么? 6.基础中间 ...

最新文章

  1. JavaScript学习笔记——JS中的变量复制、参数传递和作用域链
  2. c语言中fflushstdin作用,C语言fflush(stdin)函数是什么意思,在什么情况下用它
  3. [ZZOJ#31]类欧几里得
  4. session一致性架构设计
  5. 美团门票公布清明假期数据:单日入园人次超200万
  6. cpython知乎_Numpy为什么可以用C语言写?
  7. PostgreSQL【模式Schema】
  8. vue中使用友盟统计,统计到每个路由
  9. 【泛型,数据结构,List接口,Set接口】
  10. 关于物联网模组fota远程升级的说明
  11. 聊天机器人php源码,(2)聊天机器人API
  12. Mac运行exe的几种方法,欢迎补充!
  13. Android集成GMS服务及GMS认证方案
  14. Jetson TX2刷机(Jetpack4.2.0)
  15. 手把手教你启用多可文档的数据备份
  16. LSTM结构理解与python实现
  17. 解决iphone插上mac电脑充电不停的断开和链接问题
  18. ajax--异步请求
  19. 在字符串中找出连续最长的数字串
  20. 记录关于CodeWarrior的在64位win7上安装时遇到的问题及解决办法

热门文章

  1. AT2164 AGC006C Rabbit Exercise
  2. Spring Cloud微服务实战:手把手带你整合eurekazuulfeignhystrix(附源码)
  3. 一、Java语言基础(3)_流程语句——控制循环结构语句
  4. 火狐与Chrome浏览器的移动端调试模式(手机页面、自适应)
  5. 实验吧_登陆一下好吗(骚注入)你真的会PHP吗?(代码审计)
  6. noip2009 普及组
  7. 在控制台远程连接mysql数据库时,出现ERROR 2049 (HY000)错误
  8. 访问共享文件时切换默认的访问账号
  9. NSURLSession学习笔记(二)Session Task
  10. 搭建 WPF 上的 UI 自动化测试框架