kubernetes-handbook/cloud-native/cloud-native-programming-la...

3.5 KiB
Raw Blame History

云原生编程语言

以下内容来自Joe Duffy的博客Hello, Pulumi!。他说这些是为了说明为什么要创造Pulumi在此我引用它说明为什么会有云原生编程语言。

对于每一个serverless函数来说我都要写几十行的JSON或者YAML配置。要链接到一个API端点我还要学习晦涩的概念执行一系列复制-粘贴的低级工作。如果我想在本机上运行一个小的集群的话那么Docker还是很棒的但是如果要在生产上使用的话那么就要手动管理etcd集群配置网络和iptables路由表还有一系列与我的应用程序本身不相干的事情。不过Kubernetes的出现至少让我可以配置一次下次就可以跨云平台重用但这还是会分散开发人员的精力。

我认为我还算一个经验丰富的工程师已经在软件行业从业20年了但是当我想要将自己的代码部署到云中的时候我感觉自己就像是个傻子。真是太令人悲哀了如果我掌握了这些能力那么是世界就会出触手可及。我总是在淌这浑水处理云的复杂性而我真正想做的是花时间来创造业务价值。

关于编程的许多方面都经历了类似的转变过程:

  • 在80年代初我们使用汇编语言对微处理器进行了编程。最终编译器技术进步了我们可以同时处理多种常见的架构。像FORTRAN和C这样的Low-level的编程语言开始兴起。
  • 在90年代初期我们直接针对低级别操作系统原语进行编程无论是POSIX系统调用还是Win32 API并进行手动内存和资源管理。最终语言运行时技术和处理器速度提升到了可以使用更高级别语言的状态如Java。除了动态语言之外这种趋势已经加速如JavaScript统治了Web。
  • 在21世纪初期我们的编程模型中的共享内存并发性最好是原始的我花了很多时间在这个问题上。现在我们简单地假设OS具有高级线程共享、调度和异步IO功能以及编程到更高级别的API例如任务和承诺。

我相信云软件也在进行类似的转变。从构建单一应用程序到构建真正的云优先分布式系统,我们正处在一场巨变中。然而,当海啸发生之前,人们几乎不知道它正在发生。

从上面的角度来看使用“配置”情况是有道理的。在虚拟机的早期我们利用现有的应用程序并将它们扔在栅栏上以便有人添加一点INI或XML粘合剂让它们在虚拟机内部运行以实现更灵活的管理。随着我们将这些相同的虚拟机“提升并转移到云中”这种配置方法一直伴随着我们。这将我们带到了大致正确的边界。

使用这种相同类型的配置表示基于容器的微服务、serverless和细粒度托管服务之间的关系导致了异常的复杂性。将应用程序转变为分布式系统应该是事后的想法。事实证明云覆盖了您的架构和设计。表达架构和设计的最好的方式是使用代码使用真正的编程语言编写抽象重用和优秀的工具。

早些时候Eric和我采访了几十个客户。我们发现开发人员和DevOps工程师都普遍感到幻灭。我们发现了极端的专业化即使在同一个团队中工程师也不会使用同一种语言。最近几周我已经听到了这个消息我期待有一天会出现NoYAML运动。