![FONK:一个面向K8S的无服务器LAMP技术栈](https://static001.infoq.cn/resource/image/d0/d6/d0a4ed783bf0478dbb1b4222a534e0d6.jpg)
正文
关于无服务器,有一种说法我听过很多次:“无服务器是一种自找麻烦的解决方案”。
当一项新技术破坏了人们习惯的工作流程时,就会出现类似的防御性声明。这种声明也是在告诉无服务器社区里的所有人,无服务器的学习曲线有多陡峭。
如果人们理解了无服务器,他们就不会说出这么负面的话。因此,我提出了一个问题:如何驯服无服务器的学习曲线?
我给出的答案是一个 Web 应用程序。让我来解释一下。
Guestbook:一个无服务器 Web 应用示例
去年春天,我第四次听到开头那句话。所以我问自己,“你能用无服务器构建的最简单的东西是什么?人们可以把它与自己已经知道的东西联系起来。”
我认为,我可以向人们展示他们可以如何做他们现在正在做的事情,只是以更简单的方式,以此来展示无服务器的价值。
因此,我构建了一个 Web 应用示例,称之为 Guestbook。
使用 Web 应用降低无服务器学习曲线
就是每个人都知道的 LAMP 技术栈。
![](https://static001.geekbang.org/resource/image/3b/04/3bd289a48795259b1e84f9d93d189d04.jpg)
它很简单,并且提供了可选的组件,这可以说明它为什么在过去 20 多年里如此流行。我们甚至在 Kubernetes(K8S)的学习曲线中看到了它的影响:
![](!%5Bhttp://fonk-apps.io/Guestbook-Traditional.jpg%5D(https://static001.geekbang.org/resource/image/49/a9/494b6cb65459226e241e7473a221a5a9.jpg))
Guestbook是大多数人在第一次学习 Kubernetes 时最先部署的应用程序之一,尽管它使用 NoSQL 服务器代替了 MySQL,但仍然是基本的 LAMP 结构。
对于无服务器而言这是指什么?
有鉴于此,降低无服务器学习曲线的一种方法是向人们展示如何用更少的代码和配置构建同样复杂的 Web 应用程序。
使用 AWS 构建,则该 Web 应用程序如下所示:
![](https://static001.geekbang.org/resource/image/a3/9e/a33c1b535e55f357f120df16034cc19e.jpg)
虽然这只需要大约一半的代码和配置,但它也把你锁定在 AWS 中。
如果你可以创建一个类似 LAMP 的设计模式,但使用 K8S 上的无服务器概念来确保可移植性,那会怎么样?
![](https://static001.geekbang.org/resource/image/94/fd/949219e11ec85a09e6e6bab1b0e8a0fd.jpg)
FONK:一个面向 K8S 的无服务器 LAMP 技术栈
AWS 体系结构的组件分别是函数即服务(FaaS)运行时、对象存储和 NoSQL 服务器。
如果你在任何超过 3000 star 的 GitHub 项目或其他流行开源组件上使用了五个 FaaS 运行时之一,那么整个技术栈就可以像下面这样安装在 K8S 上:
![](https://static001.geekbang.org/resource/image/df/20/df547704850ce79b7ae3078190525420.jpg)
把它们都放在一起,就可以得到一个简洁的无服务器设计模式缩写:
![](https://static001.geekbang.org/resource/image/ea/b2/eaa601394e18dcfd67b6d8635738f8b2.jpg)
(我把这个动物图标归功于我的女儿,她说:“FONK 听起来就像是鹅说的话。”)
基于 FONK 实现 Guestbook
今年 9 月,我和一些朋友试着推出了fonk-apps.io,这是一个开源项目,目标是降低人们的无服务器学习曲线。它提供了各种语言的简单 Web 应用程序示例。
为了让人们更容易地从本地 K8S 过渡,这些 Web 应用程序中的第一个示例就是 Guestbook。以下是我们的早期进展:
![](https://static001.geekbang.org/resource/image/b5/65/b5e142c505c326f41f640f2e5a8b8365.jpg)
只有 Create 和 List 函数的 Guestbook 是自然而然的第一选择,不过,我们的计划是让这个应用程序变得更加复杂。我们希望添加待办(完整 CRUDL 操作)、博客(经过身份验证的 CUD、公共 RL)和论坛(经过身份验证的 CRUDL)。
更长远来看,内置一些 CI/CD 功能,包括列测试自动化或跨行性能基准测试,这会很酷。
FaaS 运行时比较
在构建第一组示例的过程中,我们学到了很多比较 FaaS 运行时的知识。
从开发人员体验的角度来看,以下是一些早期研究结果:
![](https://static001.geekbang.org/resource/image/f8/e9/f8d1f062395fe85d2ac39745c53342e9.jpg)
基于 K8S 运行时上的某些 FaaS 开发,其体验和本地 K8S 开发类似;它公开了函数将在其上运行的镜像的一些内部结构。其他的则更接近于屏蔽了镜像细节的 AWS Lambda 模型。
在这个领域,谷歌的 Knative 是那只重达 800 磅的大猩猩,它在 GitHub 上还没有达到 3000 星的门槛,过了这个门槛,我们就提供 Guestbook 示例。但是,我们正密切关注它的进展,因为它很可能会实现这一目标。
来,一起玩!
一旦开始实施这个想法,我们认为最好有一个以它为中心的社区。所以,我们试着让整件事成为成为一件有吸引力的事。
虽然并不是所有基于 K8S 运行时的 FaaS 都支持无服务器框架,但是 Kubeless 和 OpenWhisk 做得非常好。一个简单的入门方法是从头到尾做一个完整的示例:
我们很感激您的 GitHub 之星,但是,我们更希望看到一个新的 FaaS 运行时/语言组合 PR。
你可以检出我们在 GitHub 上的FONK项目,自己尝试一些例子。或者,你可以提出任何 FaaS/语言组合请求,我们会构建所有可能的 Guestbook!
查看英文原文:https://serverless.com/blog/introducing-fonk/
评论 2 条评论