前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MinIO对象存储的网关架构设计

MinIO对象存储的网关架构设计

作者头像
飞雪无情
发布2020-09-15 09:40:03
3.7K0
发布2020-09-15 09:40:03
举报
文章被收录于专栏:飞雪无情的博客

MinIO是一个非常轻量的对象存储服务,它只有一个二进制文件即可运行,快速的构建分布式的对象存储集群,适合存储大容量的非结构化数据,比如图片、日志文件等这些。

MinIO除了可以作为对象存储服务外,还可以作为网关,也就说MinIO的后端可以NAS系统、HDFS分布式文件系统或者S3、Google对象存储这样的第三方云存储系统。有了MinIO网关,就可以为Google对象存储这些后端系统添加S3兼容的API,便于管理和移植,因为S3 API已经是对象存储界事实上的标准。

当然MinIO网关不止具备S3兼容API功能,还有其他功能,比如缓存,这篇文章主要介绍MinIO网关的架构设计。

什么是网关

在讲MinIO网关之前,先看下什么是网关,这里我摘录维基百科上的定义:

网关(英语:Gateway)是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。

是的,对于客户端来说,你完全感知不到你在访问一个网关。从设计模式来讲,网关就像一个外观模式,它封装了下层的各种服务,统一聚合包装后为客户端提供服务;从API上来讲,它是更高级别的API,是面向客户端的API,一般是HTTP协议,而被网关封装的下层服务可能是不同编程语言开发的各种服务,这些服务的协议也可能各不相同。

为什么需要网关

网关的核心是一种转换,比如把RCP协议转为HTTP协议,多个服务聚合一个API,数据格式的转换,统一API风格等等,其目的是更好的为客户端提供服务。如果没有网关,你的客户端就会直面那些底层服务,这些底层服务五花八门,API协议各种各样,风格也各不相同,这对于客户端来说,是非常痛苦的。

因为多了这一层网关,所以它可以做的事情也不止于转换了。你可以在网关这一层做限流、熔断、日志监控、授权等,因为它们都是和具体业务无关的,可以提前放到网关这一层来做,省去了每个底层服务重复做的成本。

MinIO网关

MInIO网关的出现也是类似的原因,它可以让你的旧存储系统可以很方便的具备S3 兼容API,这样你的旧存储系统就不用再多余开发,就有了标准的对象存储API,便于迁移以及使用方入门。

如果你们的旧存储系统是公有云,那么更好,你只需使用MinIO架设一个网关,就可以让你的用户使用S3 兼容的API访问你们的公有云服务了。这样做的好处就是你可以拉来更多的用户,为什么这么说呢?比如以前你去谈客户的时候,客户说你们的云对象存储是便宜,性能也好,但是你们提供的API不是S3 API,导致客户端如果迁移成本很大,那么现在有了MinIO网关,客户简单到只需要换个endpoint就可以了,就可以直接迁移到你们的云存储服务。

除了自建的存储系统外,如果你们以前使用Google对象存储这类第三方对象存储服务,那么也可以使用MinIO作为网关,一来可以统一S3 API,二来可以用MinIO做缓存,减少第三方对象存储的访问,节约成本。

你还可以启动多个MinIO网关代理同一个存储服务,比如共享的NAS系统,这样就可以构建分布式的网关,同时结合缓存功能,提供更强大的并发访问能力。

(MinIO 网关)

以上是MinIO官方的网关示意图,基本上也能看明白MinIO网关的意思。这个图有点旧,目前MinIO支持的网关和图中的不一样,目前支持的网关如下:

  1. AWS S3
  2. Google Cloud Storage
  3. NAS
  4. HDFS
  5. Microsoft Azure Blob Storage

MinIO网关架构图

上面的官方的示意图是基于网络连接的,没有网关的内部实现,我基于MinIO网关的具体实现画了一个架构图,对于了解MinIO的网关会更有帮助。

(MinIO网关架构图)

从以上架构可以看出,从终端发起的S3 API都是通过网关这一层的 S3 API Router提供的,通过S3 API Router统一了后端的API,也就是提供了统一的S3 兼容API。

S3 API Router的具体实现又是通过ObjectLayer这一层实现的,ObjectLayer是个接口,它定义了MinIO对象存储服务针对对象操作的所有API。ObjectLayer接口不止每个具体的网关会实现(比如GCS),MinIO本身作为存储服务器也会实现,这样对于对象的操作通过ObjectLayer接口就统一了(面向接口编程),具体的实现可以定义来实现不同的功能,比如MinIO 单点存储、分布式存储(纠删模式)、各个具体的网关存储,都是接口ObjectLayer的具体实现。

当每个具体的网关( 比如GCS)实现了ObjectLayer接口后,它对于具体后端存储的操作就是通过各个第三方存储SDK实现了。以GCS网关为例,终端通过S3 APi获取存储桶列表,那么最终的实现会通过GCS SDK访问GCS服务获取存储桶列表,然后包装成S3标准的结构返回给终端。

小结

MinIO网关是一个非常好的功能,它为S3 APi成为了事实上的标准也做出了不少贡献。除了MinIO网关的架构设计,它的源代码设计也非常好,可以很容易的添加一个新网关,便于我们进行二次开发,下一篇继续再讲MinIO网关的具体源代码分析实现。

本文为原创文章,转载注明出处

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年9月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是网关
  • 为什么需要网关
  • MinIO网关
  • MinIO网关架构图
  • 小结
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档