如何在Rancher上运行无服务器应用程序

最近,系统设计中较新颖的概念之一要属“无服务器架构”理念。毫无疑问, 这有点夸张, 由于确实有服务器参与其中, 但这意味着咱们能够以不一样的方式看待服务器。git

无服务器的潜在上升空间

想象一下,一个简单的基于Web的应用程序,处理来自HTTP客户端的请求。而不是让一些程序运行时等待请求到达,而后调用一个函数来处理它们,若是咱们能够按需启动运行每一个函数,而后将其丢弃,那会怎样?咱们不须要担忧能够接受链接的运行的服务器数量,或者在伸缩时处理复杂的配置管理系统以构建应用程序的新实例。此外,咱们还将减小诸如内存泄漏、分段错误等状态管理的常见问题。github

或许最重要的一点是,这种按需调用函数的方法将容许咱们伸缩每一个函数,以匹配请求数并对它们并行处理。每一个“客户”都将得到一个专门的流程来处理他们的请求,而流程数只会受到您处理的计算能力的限制。当与一个大型云提供商耦合,其可用的计算大大超过您的使用量,此时无服务器就有可能移除大量的复杂性,从而伸缩应用程序。golang

潜在的缺点

诚然, 在为每一个请求构建进程时, 仍存在增长的滞后时间的挑战。无服务器永远不会像预先分配的进程和内存那样样快;然而,问题不在于它是否更快, 而在于它是否足够快。从理论上讲, 咱们会接受无服务器的延迟, 由于咱们会获得回报。然而, 这一权衡需创建在对手头的状况进行仔细评估的基础上。docker

使用Rancher和开源工具实现无服务器

Docker为咱们提供了不少工具来实现这个无服务器的概念,并在最近的DockerCon上给出了很好的演示。Rancher将这些能力最大化了。由于咱们的平台承担您的容器基础架构的管理,因此只需操做一个API便可添加和删除计算容量。经过软件定义栈的这部分能力,支持用户实现全面的应用程序自动化。json

栈中的下一层即为无服务器系统编写代码的可用框架。您能够本身编写、或者扩展一些中间件来处理这个问题,但有不少开源项目提供了工具来简化这一过程。其中一个项目是Iron.io的Iron功能。我在Rancher上作了一个快速的POC,发现它很容易使用。使用这些compose文件能够在Rancher中快速启动该设置。服务器

要使用这些文件,请将repo中的docker-compose.yml和rancher-compose.yml文件复制并粘贴到Rancher UI的“Add Stack(添加栈)”部分。或者从Rancher CLI中,简单地运行“rancher up”(确保设置如下环境变量:RANCHER_URL,RANCHER_ACCESS_KEY,RANCHER_SECRET_KEY)。微信

栈启动时,您应该能够在Rancher UI中看到。此外,您能够经过单击栈中第一个项目(“API - lb”)旁边的“i”图标,查找 Iron Functions API端点和UI的URL。架构

输入图片说明 部署完成后运行无服务器栈负载均衡

输入图片说明 找到您的IronFunctions端点的URL框架

一旦您运行栈,请按照Iron.io的Github repo上的“Write a Function(编写一个函数)”的说明进行操做。您可能须要一些时间来适应,由于这须要您在编写应用程序时稍做改变。将不会有任何共享的状态供您的函数引用,而库之类的东西利用起来可能会又困难又昂贵。在个人例子中,我从Iron.io中选择了一个简单的golang函数:

package main

import (
"encoding/json"
"fmt"
"os"
)

type Person struct {
Name string
}

func main() {
p := &Person{Name: "World"}
json.NewDecoder(os.Stdin).Decode(p)
fmt.Printf("Hello %v!", p.Name)
}

下一步是将函数部署到咱们在Rancher中设置的Iron函数的实例中。为了使这更容易尝试,我编写了一个为您执行全部步骤的脚本。参照这个repo中的README。一旦部署了函数,您应该可以在UI中看到它,而后就能够试着用它了:

输入图片说明 IronFunctions的Dashboard

输入图片说明 你的正在执行的函数的结果

从Rancher内部,您能够根据您的需求扩张或缩减员工人数。Rancher会把它们放在一个主机上,并将它们链接到一个负载均衡器上。根据最佳实践指南,您能够简单地根据“wait_time”度量,从而使伸缩操做相对简单。

若您也想过用这种方式构建应用程序,我以为本文的教程会是一个颇有用的尝试。若是您对此有任何意见或反馈,不要犹豫,联系咱们!咱们一如既往地期待听到您的反馈!

欢迎关注Rancher官方微信公众号(RancherLabs),获取第一手技术干货推送;欢迎添加客服微信(RancherLabsChina)为好友,加入Rancher官方技术交流群,获取免费技术支持,与数千Docker/Rancher使用者互动。

9月27日,北京海航万豪酒店,容器技术大会Container Day 2017即将举行。

CloudStack之父、海航科技技术总监、华为PaaS部门部长、恒丰银行科技部总经理、阿里云PaaS工程总监、民生保险CIO······均已加入豪华讲师套餐!

11家已容器落地企业,15位真·云计算大咖,13场纯·技术演讲,结合实战场景,聚焦落地经验。免费参会+超高规格,详细议程及注册连接请戳 输入图片说明