炼数成金 门户 大数据 虚拟化 查看内容

Serverless与Kubernetes该如何选择?

2018-3-14 14:37| 发布者: 炼数成金_小数| 查看: 17239| 评论: 0|原作者: 迟剑锋 译|来自: Docker

摘要: 如果你徘徊在十字路口,需要外部帮助决策,本文列举了一些场景,可能有助于你做出选择。我经常被问到的一个问题是:构建云原生应用,我该使用Serverless还是Kubernetes?我认为两个选项各有利弊,选择哪个取决于你的 ...

管理 Java 测试 Hadoop Kubernetes 函数

如果你徘徊在十字路口,需要外部帮助决策,本文列举了一些场景,可能有助于你做出选择。

我经常被问到的一个问题是:构建云原生应用,我该使用Serverless还是Kubernetes?我认为两个选项各有利弊,选择哪个取决于你的需求。

下周Ansgar Schmidt和我就这个话题会有个对话。我们仍在修改我们的幻灯片,不过关于总结何时使用Kubernetes以及何时使用Serverless的那部分,我们已经完成了。


请注意我们是将Serverless和Kubernetes做比较,而非容器。因为利用开源Serverless平台OpenWhisk你也可以直接用Docker容器来构建函数。同样的,我们也不会拿一个很简单的Serverless函数和Kubernetes上一个很复杂的微服务应用来比较,但是双方有相似复杂度。

使用Serverless,当:
你有多变且不规则的工作量
一个本地网站就是一个很好的Serverless场景,它在夜间只有一点甚至没有流量。由于Serverless平台只针对你的代码运行时才使用到的资源计费,这就能明显的降低成本。应用越长时间不做事,Serverless平台成本低的概率就越大。

然而这不是说Serverless就意味着低成本,比如你的应用需要7X24小时都保持运行。它还有一些隐藏成本,比如API管理的一些额外消费,或者测试函数调用时的成本。

你首次开发且希望生产率更高
如果你既无Serverless,也无Kubernetes的开发经验,那么开发一个Hello World应用,让其运行在Serverless平台上是更容易的。当使用Kubernetes时,通常你必须花费一段时间去创建集群,配置Kubernetes以获取公网IP,然后才能部署你的第一个应用。而使用Serverless平台,你可以简单地使用云服务商提供的web工具,就能在几分钟之内启动应用。

然而,Serverless也不总是比Kubernetes容易。构建并管理一个有一系列函数的Serverless应用,比一个简单的只有一个容器的Kubernetes应用,可要难多了。事实上,对于更复杂的应用,Kubernetes可能更容易使用,因为Kubernetes平台更成熟(参考下文)。

你需要自带的自动伸缩能力
Serverless的其中一个强大的功能就是其自带的函数自动伸缩能力,开发人员无需做任何事情就能拥有该功能。Kubernetes当然也可以对Pod甚至节点使用自动伸缩功能,但是它需要一些配置,另外这个过程有点慢,因为它只在应用特定规则的时候才触发。

然而,Kubernetes相比某些Serverless平台,可能会提供更好的伸缩特性,因为它更成熟,并且提供了不同可用区(zones)之间的HA(high availability)能力,而这并非所有Serverless平台都提供。

使用Kubernetes,当:
你需要成熟的部署选项
我不知道是否有Serverless平台支持A/B测试,这是我认为构建云原生应用必须具备的一个关键能力。除此之外,Kubernetes对应用的监控能力也更成熟。例如,使用Istio,你可以看到微服务的执行时间,哪个服务调用了哪个服务,以及是否存在瓶颈。Serverless平台还没有真正意义上的这项功能,且只在最近才开始启动添加这类特性,来定义函数间的流向,比如亚马逊的Step Functions,以及OpenWhisk的 Composer。

然而,如果你的应用相当简单,例如只有一个函数来提供一个API,那么Serverless则是更好的选择,因为部署将更容易,且对单函数的监控能力,各个Serverless平台都已提供。

你需要最小的响应时延
使用Serverless平台,函数的首次调用会花费一定时间,因为代码需要初始化。例如,在OpenWhisk上,你可以使用Docker容器运行Java应用,它会花费一定时间来启动。如果你需要快速且可靠的响应时间,你应该使用Kubernetes。

像OpenWhisk这种Serverless平台,最近通过一系列缓存的使用,已明显提升了响应时延。在最初的冷启动之后,你不应该再看到这些很长的响应时间,目前的响应时间对你的应用来说已足够了。

你想要不带资源限制的高计算性能
Serverless平台典型地需要一些资源限制,例如函数不能使用超过512M的内存,运行时间不能超过5分钟。如果这些限制对你的应用来说太严格,那么你也需要使用Kubernetes。

然而,某些时候可能可以将应用拆成更小的函数。某些场景下甚至就希望这么做,例如将一个已有的单体应用迁移到云上。

最后的思考
我觉得观察这些技术今年会如何演进是非常有趣的。我已听说某些活动想使Kubernetes更易用,也有些活动想使Serverless更成熟。

原文链接:https://dzone.com/articles/when-to-use-serverless-when-to-use-kubernetes

欢迎加入本站公开兴趣群
软件开发技术群
兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流
QQ群:26931708

Hadoop源代码研究群
兴趣范围包括:Hadoop源代码解读,改进,优化,分布式系统场景定制,与Hadoop有关的各种开源项目,总之就是玩转Hadoop
QQ群:288410967 

鲜花

握手

雷人
1

路过

鸡蛋

刚表态过的朋友 (1 人)

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2018-9-21 23:16 , Processed in 0.151276 second(s), 24 queries .