红帽公司一直在通过 Fabric8 Funktion 项目探索服务器端无服务器(即 FaaS)。我们早就应该对这个主题认真对待了。从今天开始,我们将所有库转换为服务。这将是一个为期多年的努力,但我们对此做出承诺。

我们深思熟虑并认真考虑了从哪个服务开始。在我们的性能实验室中,我们发现服务器端无服务器函数中最慢和最昂贵的部分是 CPU 分支预测错误。在服务器端无服务器方法中,你希望尽可能在 CPU 周期内挤压尽可能多的操作。任何预测错误都有巨大的后果,并扼杀我们在类似 vert.x 这样的库中投入的所有机械同情努力。

在我们的实验中,我们发现最佳解决方案是去除服务器端无服务器函数中的 if 分支。我们自豪地介绍 IF as a ServiceIFaaS(发音为 aye face)。你的代码从

user = retrieveUserProfile();
if ( user.isCustomer() ) {
    displayAds();
}
user.extractRevenu();

变为

user = retrieveUserProfile();
if ( user.isCustomer(), "displayAdFunction" );
user.extractRevenu();

我们已经在过去一年中使用了它,并从 javac 编译器中分叉出来,将每个 if 分支转换为适当的 if 服务调用。但我们也完全重新塑造了我们的代码编写方式,将所有 if 原语与其服务调用等效项进行替换。这太棒了,因为它还解决了制表符与空格问题:我们的代码中不再有任何缩进。一举两得!我无法强调我们团队在减少对制表符这些家伙的每个 pull request 的斗争中所获得的发展速度有多快。

这个外部 if 服务的优点是,你可以添加一个边车代理来缓存和模拟分支预测,并在 OpenShift 上进行水平扩展。与 CPU 这样的硬编码和嵌入式系统相比,这是一个巨大的好处。我们通常每天根据用户需求更改分支实现 3 到 5 次。

常见问题解答

“else”也是一个函数吗?

“else”不是MVP的一部分,但我们已经在实验室中使其工作。我们目前正在努力实现“for”循环,特别是嵌套循环。我们遇到了HTTP错误310:重定向过多的问题。

我在哪里可以下载它?

您不能下载它,它是一个服务模拟。请访问<ifaas.io>。

我可以在Go语言中使用它吗?

Google没有接受我们的拉取请求。我们有一个名为NoGo的分叉。

定价模式是什么?

基本的if服务将是,也将继续是免费的。我们正在为专业和企业计划开发增值服务。


返回顶部