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

640?wxfrom=5&wx_lazy=1

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


分布式的思想状态

640?wxfrom=5&wx_lazy=1


当创建分布式系统时,镜像处理开始变得不那么简单。在最初的系统伸缩中,它可能成为应用程序中真正的痛点,为什么?
  • 将多个正在运行的节点挂载到同一个永久性存储中是不可能的——这是很好的理由,如果它不适用于某些供应商/商店,则在写入期间您将不得不担心数据损坏。

  • 存储和为磁盘上的(百万、十亿、万亿量级的)镜像提供服务和自治服务并不那么好玩,并且容易出错。 您也可能无法像Google一样快速提供服务。

  • 镜像处理(调整大小、裁剪和自动定向)是资源密集型的。 在分布式系统中,您希望节点具有最大的吞吐量。


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

640


640

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

我想讨论这个解决方案,因为镜像处理是Serverless的常见用例。 Google Function(AWS Lambda也可以考虑,但我们专注于Google这里——同样的想法)是在某些情况下处理此问题的好方法。总体思路如下:
  1. 创建一个端点以接收完整的镜像并发送至商店。

  2. 一旦上传到了bucket,创建一个后台函数[1]来处理镜像。

  3. 相应地更新持久化存储并发送表示处理完成的其它任何冒烟信号。


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

  • 如果您想知道处理过的镜像何时准备就绪,您必须创建端点以使用流程中的各种更新消息。


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


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

640


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

640

Kubernetes集群中的Imageup
一般的想法是:
  1. 创建一个端点来处理必要的认证和要上传的文件。

  2. 将文件与大小同步地流式传输到imageup并接收相应的远程镜像阵列以准备服务。


640

request ->payload


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

从这里开始,您将能够与应用程序中的Imageup进行交互。 对于我们来说,它来自于使用下面链接的接口模块的node.js应用程序。 有关更多信息,请查看下面的imageup API[4]以及相关资源。
  • Docker仓库,https://hub.docker.com/r/levinteractive/imageup/

  • Kubernetes实现样例,https://github.com/LevInteractive/imageup/tree/master/examples/k8s

  • Imageup的Github仓库,https://github.com/LevInteractive/imageup

  • Imageup的node.js接口,https://github.com/LevInteractive/imageup/blob/master/examples/node/imageup.js


相关链接:
  1. https://cloud.google.com/functions/docs/writing/background

  2. https://github.com/LevInteractive/imageup

  3. https://github.com/LevInteractive/imageup/blob/master/examples/k8s/imageup-deployment.yml#L6

  4. https://github.com/LevInteractive/imageup/blob/master/docs/api.md


原文链接:https://blog.stackahoy.io/image-processing-go-microservice-df423d1b8ddd


Kubernetes快速入门实战培训

640?


本次培训内容包括:容器介绍、容器网络、Kubernetes架构基础介绍、安装、设计理念、架构详解、设计原则、常用对象、监控方案、Kubernetes高阶设计和实现、微服务、实践案例分享等, 点击了解具体培训内容
640?5月18日正式上课,点击阅读原文链接即可报名。

猜你喜欢

转载自blog.csdn.net/m2l0zgssvc7r69efdtj/article/details/80288399
今日推荐