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

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

无服务器的潜在上升空间

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

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

潜在的缺点

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

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

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

栈中的下一层即为无服务器系统编写代码的可用框架。您可以自己编写、或者扩展一些中间件来处理这个问题,但有很多开源项目提供了工具来简化这一过程。其中一个项目是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”度量,从而使伸缩操作相对简单。

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

时间: 2024-10-09 06:14:05

如何在Rancher上运行无服务器应用程序的相关文章

如何在Rancher上运行Elasticsearch

Elasticsearch是当前最流行的大数据集分析平台之一,对于日志聚合.商业智能以及机器学习等各类用例而言,Elasticsearch都是一个很有用的工具.Elasticsearch基于 REST的简单的API,使得创建索引.添加数据和进行复杂的查询变得非常简单,这也是它大受欢迎的一大原因.但是,在你开始构建数据集和运行查询之前,您需要设置一个Elasticsearch集群,这可能会有点难.现在我们来看看Rancher Catalog是如何让配置一个可扩展.高可用的Elasticsearch

如何在yarn上运行Hello World(二)

在之前的一篇文章我们介绍了如何编写在yarn集群提交运行应用的AM的yarnClient端,现在我们来继续介绍如何编写在yarn集群控制应用app运行的核心模块 ApplicationMaster. 首先,介绍下我们要在yarn集群上运行的应用程序 HelloWorld. 这个应用很简单,就是一个主函数,启动的时候打印一句话表明应用已经启动,结束的时候打印一句话表明应用运行结束. 现在我们要用AM把这个应用在YARN集群上运行起来. 上篇文章我们写到 用 YarnClient 提交了 应用到YA

vs2012+ winform+.net4.0发布如何在xp上运行

今天在英文版vs2013打包发布4.0(非4.0 client)的winform时,遇到了在xp上无法运行的情况,.net framework 4.0在xp上已安装.在打包前,winform工程,即菜单中的Project下的工程属性里,Application选项中的Target framework选择的是.NET Framework 4,整个工程运行之后,然后使用bin->DEBUG目录下的exe,使用setup factory打包成安装包,结果在xp在安装之后(.net framework在安

在Android上运行Java和C程序

在linux上运行java程序,直接用javac编译,再用java启动虚拟机运行就行了.但是在Android上,由于虚拟机和pc端的不同,所以操作方法也是不一样的.下面介绍Android上运行Hello world! 一.单个java文件编译运行 1.在Ubuntu虚拟机上将Hello.java编译成Hello.class文件 2.在Ubuntu上的Android编译环境下生成Hello.jar文件 # dx --dex --output=Hello.jar Hello.class 注意这里的d

如何在mac上运行vue项目

使用终端安装Vue运行环境 1.安装 Homebrew Homebrew 是osx下面最优秀的包管理工具,没有之一.先在终端查看是否已安装brew brew -v 如果返回 Homebrew 的版本号 例如:Homebrew 1.3.6 那么恭喜你,可以跳过这一步,如果没有,那就乖乖执行第一步. /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)&quo

如何在windows上搭建ftp服务器

FTP(File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件.目前有很多软件都能实现这一功能,然而windows自带的IIS就可以帮助你搭建FTP服务器.下面就告诉大家详细的步骤. 注:本文我以windows8为例,在配置之前先将电脑的防火墙关闭. 关闭防火墙的步骤我在这里简单说下: 打开“控制面板”->在控制面板窗口中,找到“系统与安全”,点击->在系统与安全窗口中,找到“Windows防火墙”,点击->在Windows防火

在树莓派上运行dotNet core console 程序

---恢复内容开始--- 微软的dotNet Core 已经发布很长时间了,现在最新的版本是2.0.2 发现大家对dotNet Core 在service & micro service上的文章不少.不过本地程序却少的可怜. 作为CS端坚守的dotneter  我觉得应该做点什么,让误入dotNet CS端的小盆友们不要再无助下去. 好了身家,三围,银行卡号已经交代清楚,下来我们进入正题,看看如何在armhf设备上run起来一个dotNet Core的Console Application. 首

倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何在同一台PC上运行多个TwinCAT程序

右击桌面右下角的TC2图标,切换到PLC Configuration,然后在Plc Settings中设置数量为4(TC2最多可以运行的数量是4个),然后点击Apply ? 可能需要输入登录用户名和密码,点击完成 ? 点击激活配置重启TC2 System Manager ? 在具体程序中点击Online,Choose Run-Time System,可以选择四个PLC中的一个 ? 为了显示区别,另外做一个PLC程序,选择另一个端口(也可以设置不同的扫描周期) ? 从执行结果可以分析,这两套PLC

如何用Rancher在AWS上运行Kubernetes

众所周知,亚马逊有EC2容器服务,它是亚马逊用于运行Docker容器的解决方案.不过我觉得EC2容器服务不怎么好用,所以现在我要在AWS上测试Rancher和Kubernetes. Kubernetes是一个用以自动化部署.弹性伸缩以及管理容器化应用程序的开源系统.Rancher是一个可用于企业内部的完整的容器管理和运行平台,它提供企业级的访问控制和容器编排. Rancher环境部署 第一步,我会按默认的向导创建一个新的虚拟私有云,这个虚拟私有云是为Rancher准备的.接下来的事情就是创建一个