“即服务”理念再延伸——以微服务形式实现镜像处理


【编者的话】本文针对分布式系统中的镜像处理的痛点,提出了两个潜在的可能的解决方案,一为Google Function与Serverless,二为Imageup微服务,相对而言,可能第二种解决方案更加适合目前的场景。

分布式的思想状态

当创建分布式系统时,镜像处理开始变得不那么简单。在最初的系统伸缩中,它可能成为应用程序中真正的痛点,为什么?
1.jpg

  • 将多个正在运行的节点挂载到同一个永久性存储中是不可能的——这是很好的理由,如果它不适用于某些供应商/商店,则在写入期间您将不得不担心数据损坏。
  • 存储和为磁盘上的(百万、十亿、万亿量级的)镜像提供服务和自治服务并不那么好玩,并且容易出错。 您也可能无法像Google一样快速提供服务。
  • 镜像处理(调整大小、裁剪和自动定向)是资源密集型的。 在分布式系统中,您希望节点具有最大的吞吐量。


潜在的解决方案1:Google Function与Serverless

2.png

Kubernetes集群与数据库服务和Google Function的接口

我想讨论这个解决方案,因为镜像处理是Serverless的常见用例。 Google Function(AWS Lambda也可以考虑,但我们专注于Google这里——同样的想法)是在某些情况下处理此问题的好方法。
总体思路如下:
  1. 创建一个端点以接收完整的镜像并发送至商店。
  2. 一旦上传到了bucket,创建一个后台函数来处理镜像。
  3. 相应地更新持久化存储并发送表示处理完成的其它任何冒烟信号。


这很好,因为这是核心应用程序的重任,并且具有很大的扩展性。但是,有一些缺点——这可能不会影响你:
  • 应用程序必须处理上传文件到存储bucket,这需要您与Google的GCP库和授权机制对接。当你处理很多上传时,这可能是一个瓶颈。或者,您可以创建一个新的公共Lambda端点来接受镜像,但是您还必须处理应用程序级别的身份验证(如果需要的话)。
  • 如果您想知道处理过的镜像何时准备就绪,您必须创建端点以使用流程中的各种更新消息。


正如你所看到的,由于所有的移动组件,这可能会变得复杂,特别是如果你的应用程序需要任何级别的用户身份验证。这对我们来说并不理想。

潜在的解决方案2:Imageup微服务

Imageup是一个可复制的基于http的微服务,可以在您的网络中秘密运行。 它是用Go编写的,并且使用了非常快速的Imaging库。 这允许以同步方式发送、处理和检索镜像的远程唯一URL。
3.png

Kubernetes集群中的Imageup

一般的想法是:
  1. 创建一个端点来处理必要的认证和要上传的文件。
  2. 将文件与大小同步地流式传输到imageup并接收相应的远程镜像阵列以准备服务。


4.png

request -> payload
metadata: 
name: imageup-service 
annotations:
cloud.google.com/load-balancer-type: "Internal"

从这里开始,您将能够与应用程序中的Imageup进行交互。 对于我们来说,它来自于使用下面链接的接口模块的node.js应用程序。 有关更多信息,请查看下面的imageup API以及相关资源。


原文链接:Image Processing as a Microservice (翻译:胡震)

0 个评论

要回复文章请先登录注册