本文共 1445 字,大约阅读时间需要 4 分钟。
什么时候该用无服务器,什么时候该用Kubernetes构建云原生应用程序?
一个好的无服务器应用场景应该是在夜间没有太多或者完全没有流量。由于无服务器平台仅在代码运行期间收费,因此可以显著降低成本。较大的应用程序不执行任何操作,无服务器便宜的可能性越大。
但是,这并不意味着无服务器就可以降低成本,如果应用程序全天候运行,可能存在一些隐性成本,比如管理API造成的额外成本和测试函数的调用成本。
就听而言,无服务器和Kubernetes好像已经非常成熟;但就实践而言,二者还有很多成长空间,研发人员也并未达到人人普及的程度。如果既没有无服务器也没有Kubernetes经验,那么,在无服务器平台运行Hello World应用程序应该更容易。
因为无服务器只需将精力集中在代码上即可,使用Kubernetes则通常需要等待一段时间来创建集群,配置Kubernetes以获取公共IP地址,然后再部署容器。使用无服务器平台,只需使用云提供商的Web工具即可在几分钟内上手。
这种难易程度也是变化的,无服务器并不总比Kubernetes更容易。使用一堆函数构建和管理无服务器应用程序比只有一个容器的简单Kubernetes应用程序更难。实际上,将Kubernetes用于更复杂的应用程序可能更容易,因为该平台更成熟。
无服务器计算最强大的功能之一是自动可扩展性,开发人员无需采取任何措施就可利用此功能。使用Kubernetes,研发人员还可使用pod甚至节点自动可扩展性,但需要一些配置并且速度稍慢,因为只有在某些规则适用时才会触发此过程。
但是,Kubernetes可能提供比某些无服务器平台更好的可扩展性,因为Kubernetes更加成熟,并且在不同区域之间提供HA(高可用性),这并非所有无服务器平台都提供。
A/B测试可能是构建云原生应用程序的关键功能,但无服务器平台并不具备这一点,Kubernetes则可以。此外,Kubernetes应用程序的监控功能更加成熟。例如,使用Istio可以看到微服务的执行时间,服务调用情况以及是否存在问题。无服务器平台因其自身的最大优势就是不需要操心基础设施,所以研发人员可做的操作也十分有限。
如果应用程序相当简单,只有一个函数提供API,则无服务器可能是更好的选择,因为部署会更容易,并且各种无服务器平台都可提供对单个函数的监控。
使用无服务器平台时,由于需要初始化代码,因此第一次调用函数需要花费一些时间。比如,在OpenWhisk中使用Docker容器,容器需要时间才能启动Java应用程序。如果需要快速可靠的响应时间,则可以使用Kubernetes。
通过应用缓存,无服务器平台对响应时间做了改善。第一次冷启动后,不必再花费较长响应时间启动第二次,这可能足以满足应用需求。
无服务器平台通常具有某些资源限制,比如,功能不能超过512 MB的RAM,不能超过5分钟。如果这些限制对应用程序来说过于严格,则需要使用Kubernetes。有时也会在较小的功能中分解应用程序,比如,将现有单片应用程序移到云中。
无服务器计算和Kubernetes对应不同的应用场景,也有着各自的缺点。如果是初学者,建议从无服务器计算开始,毕竟Kubernetes的配置过程相对繁琐。如果是企业用户,追求高性能计算、更优性能并希望运行大规模应用程序,Kubernetes依旧是最佳选择。
参考链接:
转载地址:http://mxwux.baihongyu.com/