教你如何使用 Docker 构建 Serverless(无服务器应用程序)?
隔三差五会涌现出一波波技术热潮,扬言要淘汰前一代技术。现在一种名为“无服务器”(serverless)的用来编写应用程序的技术成为了一个热议话题。其想法是,将你的应用程序部署成一系列函数,它们需要运行时按需调用。你不需要为管理服务器而担心,这些函数具有你所需要的扩展性,因为它们按需调用、并在集群上运行。
但是无服务器并不意味着没有Docker――实际上,Docker就是无服务器系统。你可以使用Docker容器来隔离这些函数,然后在Swarm上按需运行。无服务器这种技术可用来构建分布式应用程序,而Docker正是在上面构建这种应用程序的完美平台。
从服务器到无服务器
那么,我们可以如何编写诸如此类的应用程序呢?不妨举一个例子:一个由5个服务组成的投票应用程序:
这包括:
两个web前端
后台处理选票的worker节点
处理选票的消息队列
数据库
选票的后台处理是个很理想的目标,适合转换成无服务器架构。在投票应用程序中,我们可以运行像这样的一点代码,以便运行后台任务:
import dockerrun
client = dockerrun.from_env()
client.run("bfirsh/serverless-record-vote-task", [voter_id, vote], detach=True)
worker节点和消息队伍可以换成在Swarm上按需运行的Docker容器,该容器可以根据需要自动扩展。
我们甚至可以消除那两个Web前端。我们可以把它们换成处理单一HTTP请求的Docker容器,由负责为每一个HTTP请求启动Docker容器的轻量级HTTP服务器来触发。繁重任务现在由长时间运行的HTTP服务器转移到了按需运行的Docker容器,那样它们就能自动扩展,以处理负载。
我们新的架构看起来就像这样:
红色方框是不断运行的服务,绿色方框是按需运行的Docker容器。这个应用程序拥有的需要管理的长时间运行的服务比较少;就其性质而言,可以自动扩展,以响应需求(扩展能力取决于你Swarm4的规模!)。
那么,我们可以用它来做什么呢?
这方面有三种实用的方法可以用在应用程序中:
在你的代码中运行函数,作为按需运行的Docker容器。
使用Swarm在集群上运行这些东西。
从容器运行容器,为此只需传递Docker API套接字。
如果结合这些方法,这为你如何设计应用程序的架构提供了无限的可能性。运行后台工作就是系统顺畅运行的一个典例,不过另外一大批场景也有可能,比如说:
启动容器,以处理面向用户的HTTP请求,这可能由于延迟长而不切实际。然而,你可以编写一个负载均衡系统,知道如何通过在Swarm上运行容器来自动扩展自己的Web前端。
MongoDB容器可以反省Swarm的结构,并启动正确的片段和副本。
下一步
我们已拥有了所有这些全新的工具和抽象机制来构建应用程序,而我们触及的仅仅是它们的皮毛而已。我们仍在构建应用程序,好像我们拥有长期以来存在的服务器那样,而不是着眼于这种未来:我们拥有的Swarm可以在基础设施的任何地方按需运行代码。
但愿本文让你大致了解了可以构建什么样的应用程序,但是我们也需要你的帮助。我们拥有能够开始构建这种应用程序需要的所有基本面,但是它仍处于发展阶段――我们需要更好的工具、代码库、示例应用程序、说明文档等内容。
这个GitHub资源库(https://github.com/bfirsh/serverless-docker)附有链接,它们指向诸多工具、代码库、例子和博文。如果你想进一步了解,不妨浏览一下。要是你有什么好的链接,欢迎贡献,那样我们就能开始一起探讨这个话题。
请参与进来,祝应用程序构建愉快!
云头条编译|未经授权谢绝转载
相关阅读:
Serverless Computing 是公共云的下一站吗?
值得关注的五大 Serverless Computing(无需管理服务器) 框架