本文针对分布式系统中的镜像处理的痛点,提出了两个潜在的可能的解决方案,一为Google Function与Serverless,二为Imageup微服务,相对而言,可能第二种解决方案更加适合目前的场景。
将多个正在运行的节点挂载到同一个永久性存储中是不可能的——这是很好的理由,如果它不适用于某些供应商/商店,则在写入期间您将不得不担心数据损坏。
存储和为磁盘上的(百万、十亿、万亿量级的)镜像提供服务和自治服务并不那么好玩,并且容易出错。 您也可能无法像Google一样快速提供服务。
镜像处理(调整大小、裁剪和自动定向)是资源密集型的。 在分布式系统中,您希望节点具有最大的吞吐量。

我想讨论这个解决方案,因为镜像处理是Serverless的常见用例。 Google Function(AWS Lambda也可以考虑,但我们专注于Google这里——同样的想法)是在某些情况下处理此问题的好方法。总体思路如下:
创建一个端点以接收完整的镜像并发送至商店。
一旦上传到了bucket,创建一个后台函数[1]来处理镜像。
相应地更新持久化存储并发送表示处理完成的其它任何冒烟信号。
应用程序必须处理上传文件到存储bucket,这需要您与Google的GCP库和授权机制对接。当你处理很多上传时,这可能是一个瓶颈。或者,您可以创建一个新的公共Lambda端点来接受镜像,但是您还必须处理应用程序级别的身份验证(如果需要的话)。
如果您想知道处理过的镜像何时准备就绪,您必须创建端点以使用流程中的各种更新消息。
一般的想法是:
创建一个端点来处理必要的认证和要上传的文件。
将文件与大小同步地流式传输到imageup并接收相应的远程镜像阵列以准备服务。
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
相关链接:
https://cloud.google.com/functions/docs/writing/background
https://github.com/LevInteractive/imageup
https://github.com/LevInteractive/imageup/blob/master/examples/k8s/imageup-deployment.yml#L6
https://github.com/LevInteractive/imageup/blob/master/docs/api.md
5月18日正式上课,点击阅读原文链接即可报名。