Hulk 图床是支持 360 公司绝大部分业务的图片服务,支持多种图片处理功能,如:裁剪、压缩、滤镜、pHash 计算、人脸识别、格式转换、gif 首帧提取……等等,支持的业务线包括:搜索、图搜、新闻、信息流、广告……等等,每天 CDN 回源图床后端 150+ 亿 PV。

图床业务逻辑相对简单,抽象看就是:上传和下载,这里简单分享图床这两个模块的架构以及图片的上传和下载时所经历的服务。

1. 上传模块(Davinci)


【Davinci 架构图】

业务上传图片到图床逻辑大致如下:

  1. SDK 上传
    通过 SDK (或者业务自己构造 HTTP 请求)将图片 POST 到 Davinci 上传接口 ,接口域名解析的 VIP 均衡到后端 Nginx (80 端口)。

  2. Nginx:80 转发
    Nginx 80 通过 upstream,将请求通过负载均衡,均衡给后端处理的服务(Nginx 8360) 。

  3. 排队等待上传处理
    后端服务将上传任务进行排队,等待 Gearman 异步服务进行队列消费和任务调度,同时给该上传请求返回任务 ID,用于查询处理结果。

  4. 图片初始处理和存储
    Gearman worker 异步对图片进行处理,比如压缩、初始裁剪、人脸识别等,并将图片以及图片处理后的元信息落地存到 Cassandra。将任务 ID 对应的处理结果,存在 Redis,用于提供用户查询。

  5. 获取上传结果
    通过 <iii> 中获取的任务 ID,获取图片上传和处理结果。

PS: 图床同时也支持同步上传、回调通知的方式,将图片上传结果反馈给业务方。

2. 下载模块(Picasso)


【Picasso 架构图】

用户通过 URL 请求图床的一张图片,大致流程如下:

  1. 图片 URL 请求
    图片 URL 根据图床域名 CNAME 配置,请求到 CDN 节点。如果所请求的 CDN 节点已缓存过该图片,则直接返回数据。

  2. CDN 回源
    如果 中没命中 CDN 缓存,将会回源到图床后端(Nginx 80 端口)。

  3. 图床后端缓存(Varnish)
    为了减少图床后端的计算压力,图片请求回源到图床后端时,并不是直接到存储集群读图片、处理图片,而是先通过 varnish 前端缓存服务,如果 varnish 缓存命中,则直接响应图片数据。

  4. Varnish 缓存没命中
    如果 varnish 缓存没命中,则转发给 Nginx 8360 端口,进而转发给 PHP fast-cgi 进行图片读取和响应。

  5. 图片处理
    在 <iii> 中读取了图片数据,会在 Nginx (8360)这层的 filter 模块进行处理,处理规则是在图片 URL 的参数中指定。比如:指定裁剪宽高、滤镜、黑白、人脸裁剪、gif 首帧提取等等,这个 filter 模块主要是使用了开源的 GraphicsMagick 进行图片处理,静态编译到 Nginx。

  6. 响应处理后的数据
    通过 Nginx (8360)这层模块的处理,得到符合 URL 指定规则的图片,最后响应并缓存到 CDN 节点。

以上就是图床上传和下载模块的处理逻辑。

通用图床服务架构解析(百万级回源/天)相关推荐

  1. JAXA行业微服务架构解析

    引言: 对于微服务,每个人都有自己的理解,与互联网企业的大量落地相比,微服务在传统金融行业还没有普及,这首先是传统金融行业线上系统需求更新和版本迭代没有互联网公司那么频繁:其次是技术能力约束了新技术的 ...

  2. C++轻量级微服务_从微服务架构解析信源新一代“金融e采”产品

    金融电采,信源信息 信源信息从事电子化采购软件开发已经有15个年头,进行金融保险类采购系统的开发也已经有十多年了. 信源信息针对金融领域客户量身定做的"金融e采"产品线,以前瞻的技 ...

  3. 布道微服务_02微服务架构解析

    文章目录 Pre 微服务架构下的基本组件 服务描述 注册中心 服务框架 服务监控 服务追踪 服务治理 总结 Pre 布道微服务_01单体到服务化的演进 我们聊了什么时候应该进行服务化,以及服务化拆分的 ...

  4. 读书笔记第四讲:《百万级并发商品服务架构解密》丁鸣亮

    本文是读书笔记第四讲:网易考拉海购商品中心2017年商品中心架构,百万级并发商品服务 架构解密,作者:丁鸣亮 文章目录 1.前言:电商平台的商品服务 2.考拉:商品服务的"黑历史" ...

  5. Mobvista亿级流量背后的云服务架构支撑

    Mobvista联合创始人.技术VP黄伟坚接过我的名片时,兴奋地说:"我们在北京也有办事处".这也让我能深切的感受到其作为Mobvista一员的骄傲.成立于2013年的Mobvis ...

  6. 百度直播消息服务架构实践

    导读:直播业务的核心功能有两个,一个是实时音视频推拉流,另一个是直播间消息流的收发.本文主要介绍百度直播服务内的消息服务系统的设计实践和演化. 第三期百度架构师「周一见」活动火热进行中,文末有惊喜福利 ...

  7. SOA和微服务架构的区别?

    知乎用户 289 人赞同了该回答 谢多人邀请,其实前面几位的回答已经差不多了,在这里仅谈下自己的简单总结. 微服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多 ...

  8. SOA和微服务架构的区别

    SOA和微服务架构的区别? 1 条评论 分享 默认排序按时间排序 10 个回答 203赞同 反对,不会显示你的姓名 知乎用户 大型电信行业SOA实施经验,SOA规划咨询,- 203 人赞同 谢多人邀请 ...

  9. 微服务架构深度解析与最佳实践

    微服务架构深度解析与最佳实践 微服务架构的概念,现在对于大家应该都不陌生,无论使用 Apache Dubbo.还是 Spring Cloud,都可以去尝试微服务,把复杂而庞大的业务系统拆分成一些更小粒 ...

最新文章

  1. BZOJ 2156 「国家集训队」星际探索(最短路)【BZOJ计划】
  2. Google Android开发精华教程
  3. presto-server-0.198集群安装
  4. Google电子地图基础及应用
  5. Java编程比C编程好吗?《精通Unix下C语言与项目实践》读书笔记(15)
  6. 会员系统用php框架,代码基地会员中心的PHP签到系统结合thinkphp框架
  7. webmagic抓取实例
  8. css实现背景全透明样式
  9. 1949年-2021年历史县级行政区划分布数据 中国行政村边界数据、乡镇街道边界、行政区划边界
  10. ShaderForge-霓虹漩涡
  11. Flixel引擎学习笔记
  12. 2020年4大安全会议及论文
  13. 【Unity】 HTFramework框架(三十九)UI的数据驱动模式,MVVM
  14. 表情宝宝(v3.1)——一个表情包管理软件
  15. windows,打印机无打印任务,仍不断打印
  16. 全国计算机注册时密码为什么老是错误,电脑密码正确却显示密码错误怎么办
  17. python绘图报错
  18. bal插口_调音台上的英文缩写都是什么意思 调音台上面那几个插口是什么作用...
  19. Sqlmap 22.05.22.02
  20. 怎么写好一份数据分析报告

热门文章

  1. DLL load failed while importing _cvxcore解决办法
  2. Unity 最新UnityWebRequest下载,同时显示下载进度,和 显示网速,今天贴出来和大家分享
  3. 世界坐标系(WCS)和用户坐标系UCS
  4. 服务器怎么导入皮肤文件,Malody皮肤导入的详细技巧
  5. 操作系统磁盘调度算法相关习题
  6. 理想电压源的内阻是0,理想电流源的内阻是无穷大
  7. 方叫兽教你如何正确的赚钱
  8. Unity Game Cloud
  9. C语言学习笔记1——零散基础知识
  10. 计算机映像缺失磁盘如何修复,重装Win10系统找不到硬盘的解决方法