`
lxy2330
  • 浏览: 460094 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

图片服务器的hash架构

 
阅读更多


如图,这是一个最简洁的架构。

在这个架构里,负载均衡器都可以省了,用最为廉价的dns来替代,dns的优点就是廉价,不用维护,也不愁性能和稳定,还可以跨机房多用几条带宽作分流。另外,在图片服务中,可以选择用另一个域名做dns。优点是主站中的任何cookie等header不会带到图片服务中,省了不少上传流量和服务器可能有的处理时间;缺点是多花了点域名的钱。目前门户都喜欢用这办法,小站用的话,用另一个域名还附带有一个特别的优点:因为部分域名服务商允许添加的二级域名有限,所以用别的域名可以节约有限的域名资源。dns这一块也可以用泛域名,不过貌似国内的泛域名支持不是特别的稳定,有些网站的泛域名,在linux下不能解析windows就正常,比较奇怪,我也没法解释。

在这个架构里我总共开了36个域名,但是一时没有那么多机器,所以有一些域名指向同一台机器。一般来说,一个刚上线的项目,放一台机也未尝不可,但是链接(包括域名)一定要固定下来,不然以后调整会非常痛苦。

域名的事情还是比较简单的,只要照着填写web表单就完成了,配置四台nginx服务器当然也是非常简单的,因为不需要什么特殊的功能,所以四台机用同一个配置,写一个root根目录和expires就完成了。expires可以大胆地配置一年expires 1y,或10y甚至expires max都没什么问题,因为假如客户端认为图片有误,他会按F5刷新,F5会跳过expires向服务器发送if-modified-since头,和服务器的源文件修改时间对比,假如一样,服务器返回一个304表示没有更新,否则会重新下载该图。

在这个架构里难处在于分发和管理图片,所以hash结构比较适合于在论坛、博客等用web浏览器上传的场合使用。用浏览器上传图片后,只需要用动态语言创造一个hash的文件地址,保存在上传机器上,然后使用rsync分发到四台图片服务器就可以了。在我这个架构里分了36个字母和数字,是给md5编码用的,md5图片存档地址可类似/7/5/2/23AE809DDACAF96AF0FD78ED04B6A265E05AA257.jpg,这样这张图片就会分配到这个架构的第4台机器。有些系统的图片是用当前时间或自动ID算出来的,hash结构可为图片ID%100叫求余数,相应的dns配置为纯数字就可以了,hash办法可以很多样,最紧要就是图片量要分得均匀,点击量不均匀倒是其次。删除的时候也不难办,给定一个图片地址,就很容易知道它在哪台机器,然后在这个地址写一个空文件,用rsync同步到图片服务器。

假如不是web浏览器上传的图片,而是用ftp上传的,就不适合使用这个架构,强行使用这个架构的话头还是自己的疼啊,可以使用这个架构试试,不久的将来我会再写一个最简单的架构。hash架构也有一个要命的缺点,就是这几台机器的硬盘虽然都不容易满,但是都快满的时候(它们一般是同时满的),就得为每台机都增加硬盘空间或增加一倍的服务器。

在这个最简单的hash架构上,没有设计任何保护措施,所以有一台服务器硬盘损毁,会造成1/4的图片无法访问;同时也先不讨论数据备份的问题。简单有简单之美,复杂的事情留待高人解决。

--------------------------------------------------------------------------------
分享到:
评论

相关推荐

    图片服务器的hash架构剖析

    url hash架构对url进行一次hash算法,然后通过hash结果找到对应的服务器。因为针对单一个url的hash结果是一样的,所以理论上这个url会被永久分配到固定的一台服务器上。另外因为经过了hash算法,所以分配url就很均匀...

    图片服务器的url hash架构.docx

    图片服务器的url hash架构.docx

    图片服务器的hash架构剖析PPT学习教案.pptx

    图片服务器的hash架构剖析PPT学习教案.pptx

    大型网站高并发解决方案分析之图片服务器分离架构

    因此很多网站都会将图片存储从网站中分离出来,另外架构一个或多个服务器来存储图片,将图片放到一个虚拟目录中,而网页上的图片都用一个URL地址来指向这些服务器上的图片的地址,这样的话网站的性能就明显提高了,...

    网站架构技术

    大型网站架构演化 大型网站软件系统的特点 大型网站架构演化发展历程 初始阶段 应用服务和数据服务分离 使用缓存改善网站性能 缓存类型 本地缓存 分布式缓存 缓存产品 redis 业界...

    论文研究-一个网络文件存储系统TNS关键技术.pdf

    设计并实现了TNS网络文件存储系统,该系统基于多服务器存储架构,分别由用户服务器、索引服务器、数据服务器、共享服务器、管理服务器和登录服务器组成,为多用户服务,采用一致性Hash实现负载均衡,支持在客户端...

    nginx+squid广州技术沙龙资料2009

    2009年资料包括: 图片服务器的hash架构剖析.ppt nginx和squid配合搭建的web服务器.ppt 等...

    Java思维导图xmind文件+导出图片

    redis Cluster数据分布算法之Hash slot redis使用常见问题及性能优化思路 redis高可用及高并发实战 缓存击穿、缓存雪崩预防策略 Redis批量查询优化 Redis高性能集群之Twemproxy of Redis 数据存储 MongoDB ...

    Java基于Netty的websocket微服务架构即时聊天即时通信APP源码,仿微信APP

    基于Redis GeoHash 数据结构实现检索用户「附近的人」 基于Docker搭建FastDFS存储服务器并实现对应接口 基于策略模式+工厂模式解除WebSocket的信息处理类的耦合 基于SpringCloud使用Nacos + Getway + OpenFeign实现...

    hashtopolis:Hashcat包装器,用于分布式哈希破解

    Hashtopolis Hashtopolis是一种用于将hashcat任务分发到多台计算机的多平台客户端-服务器工具。 Hashtopolis发展的主要目标是可移植性,健壮性,多用户支持和多组管理。 该应用程序包含两个部分: 代理多个客户端...

    使用Netty基于WebSocket的微服务架构即时通信APP ,根据场景实现了:基础聊天、附近的人、个人信息编辑等功能

    基于Redis GeoHash 数据结构实现检索用户「附近的人」 基于Docker搭建FastDFS存储服务器并实现对应接口 基于策略模式+工厂模式解除WebSocket的信息处理类的耦合 基于SpringCloud使用Nacos + Getway + ...

    nginx-goodies-nginx-sticky-module-ng-s12451asdasd

    目前的项目网站架构中使用了F5和nginx,F5用来做负载均衡,nginx只用作反向代理服务器。最近应客户的要求准备去掉F5,使用软负载。大家都知道nginx抗并发能力强,又可以做负载均衡,而且使用nginx对我们目前的网站...

    HashCode:Google#Hash Code 2017挑战赛

    随着越来越多的人观看在线视频(以及这些视频的大小增加),优化视频服务基础架构以可靠,快速地处理请求至关重要。 这通常涉及放置缓存服务器,该服务器存储流行视频的副本。 当用户请求特定视频时,可以由靠近...

    Redis安装配置详解.pdf

    它通常被称为数据结构服务器,因为值(value)可以是 字符串(string)、哈希(Hash)、列表(list)、集合(sets)、有序集合(sorted sets)等类型。它被广泛用于缓存、消息代理、分布式锁等领域,是分布式架构中不可或缺的...

    php.rar_web轮询

    高负载WEB服务器架构 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器 ,如果后端服务器down掉,能自动剔除。 2.ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以...

    gt-sports:一个简单的GraphQL&REST服务器,使用GT Sport的汽车。

    这是当前的架构: type Query { solution: Solution cars: [GTSport] exotics: [GTSport] groups: [String] makes: [String] colors(count: Int!): [String] hash(count: Int!): [String

    一致性hash和solr千万级数据分布式搜索引擎中的应用

    比如我们使用mysql、nginx等开源软件,通过架构和低成本服务器也可以搭建千万级用户访问量的系统。新浪微博、淘宝网、腾讯等大型互联网公司都使用了很多开源免费系统搭建了他们的平台。所以,用什么没关系,只要能够...

Global site tag (gtag.js) - Google Analytics