`

为什么云开发最终将成为编程新标准?

阅读更多
云开发是一个已经存在了很多年的概念,但在过去未能真正成为主流。


然而,由于云和软件即服务的宏观趋势的结合,以及技术的进步,如容器技术 Docker 和 Kubernetes,云开发现在有机会最终成为基于云的应用程序的新标准开发。






作者 | Daniel Thiry


以下为译文:

云开发,或者说基于云的开发,已经存在了好几年了。然而到目前为止,从未真正成为主流。

我认为,软件市场的一些变化可能会导致这种开发方式的复兴,甚至是最终的突破。

在我开始介绍这些之前,让我们来看一下云开发的含义。





什么是云开发?



云开发或基于云的开发有许多定义(我将交替使用这些术语)。

本文我将使用这个定义:云开发是一种软件开发方法,它使用云环境(而不是本地计算机)在实际的开发阶段执行未完成的软件。

这意味着你的软件在云中运行,它通常不会在你的本地计算机上运行。如果你开发的软件是在云环境中运行的,那么项目的临时环境、测试和生产环境也会在云上。

其他一些人将云开发定义为使用基于浏览器和在线的 IDE。虽然基于浏览器的编辑器通常链接到云环境来执行软件,但也可以使用本地编辑器并在云中执行软件(例如,使用 Visual Studio 的远程环境特性) ,这就是为什么我选择使用上面那种更广泛定义的原因。

来自 Kubernetes 和 CNCF 社区的另一个更近期的术语是“云原生开发”(cloud-native development) ,它也与我对云开发的定义有关,但是它是一个更普遍的概念,指的是“基于容器的、动态编排的、利用微服务架构的应用程序开发”。因此,它更关注开发什么,而不是如何开发。





云开发从未成为主流



云开发的想法并不新鲜。你可以在八年前的文章中就可以找到相关的讨论。

随着在线 IDEs(如  Cloud9 和 Eclipse Che)的出现,云开发经历了第一次人气飙升。这可能就是为什么有些人直接将这些工具与云开发这个术语联系起来的原因。这些基于浏览器的 ide 为你提供了在云中运行的工具和编辑器,可以通过普通浏览器(如 Google Chrome)直接访问。

由于源代码已经在云中编写,所以它通常也在连接的云环境中执行,这使得根据我的定义它成为实际的云开发。

还有一些额外的工具可以为这些环境提供执行软件所需的云计算资源,比如 Codenvy 或 Koding。总体而言,这些工具向用户承诺,无论计算机的计算能力有多强,用户都可以在任何计算机上编写软件,而且不需要任何设置。

上面提到的一些产品已经不再活跃,或者已经被收购,所以他们的工具现在被集成到其他产品中 —— 例如,Cloud9 现在是 AWS 的一部分 ,Codenvy 被 Red Hat 收购。

然而,这种面向开发者的工具从未被大规模采用,主要是因为它迫使用户转向一个功能并不是特别强大、与开发者习惯于本地开发的在线 IDE 不同的在线 IDE。此外,对于这种开发方式来说,现在可能还为时过早,甚至云计算本身也不像今天这样普遍。

那么,现在有啥变化吗?





为什么云开发现在有了突破?



商业环境已经发生了变化。

在过去的几年里,软件世界发生了很多变化,使得云开发变得更加顺理成章和简单:

使用云来运行软件已经成为常态。

如今,使用云来处理生产工作负载已经成为许多公司的标准。这种转变与软件即服务(Software-as-a-Service,SaaS)销售模式的出现有关,也是云开发必不可少的第一步—— 只有当生产负载在云中时,将开发运行时间转移到云中才有意义。因此,云计算的广泛采用也增加了云开发的潜在用户基础。

软件变得越来越复杂。

随着人工智能(AI)、机器学习(ML)和微服务的兴起,软件的复杂性以及运行这些软件所需的计算资源显著增加。由于本地计算机本身的计算能力有限,它们不能够运行用户想要开发的每一个软件。在某些情况下,这甚至可能使得在开发过程中不可避免地使用云。

软件已经独立于运行环境。

由于使用了 Docker 和 Kubernetes 等容器技术,软件现在通常被打包在可以在任何环境下运行的容器中,无论是云还是本地环境,只要基础技术是可用的。这意味着,如果你已经在生产负载中使用了 Kubernetes,并且使用了容器,那么从本地开发切换到基于云的开发将非常简单。

一些障碍已被扫除!

过去的一些挑战现在(至少部分)得到了解决,这使得云开发更具可行性:

网络传输。

如果你想在云中开发,你总是需要一个互联网连接来与云进行通信。幸运的是,在过去的几年里,人们的平均网络连接速度越来越快,而且 WiFi 无处不在。由于出于开发目的,通常只更改很小的源代码文件,因此在开发过程中不需要传输太多数据,所以现在的延迟通常是无关紧要的。

部署耗时。

如果你不使用在线 IDE,那么你的代码需要以某种方式转移到云中,并且你的应用程序还需要更新。特别是对于容器技术,新的解决方案例如 DevSpace 可以自动将你的变更传输到云中,并且不需要重新启动容器就可以更新你的应用程序。这样可以减少部署时间ーー因为你不需要为每个小变更重新编译运行所有代码,云开发就像是本地开发。

拥抱云的必要性。

调整遗留应用程序以便它能够在云环境中顺利运行可能 需要相当长的时间。尽管对于是否会有一个(完美的)工具可以将每个软件应用程序转换成完美的本地云应用程序仍然存在疑问,但考虑到云和 SaaS 的宏观趋势,对于越来越多的公司来说,转向云似乎是必要的。

控制云访问。

如果每个开发人员都与云进行交互,他们就需要以某种方式访问云。集中管理和控制这种访问可能是一个巨大的挑战,特别是对于较大的团队。然而,由于公共云解决方案,创建新的基于云的开发实例非常容易。甚至可以只使用一个实例,然后在开发人员之间共享访问权。例如,如果你正在使用 Kubernetes,每个开发人员都可以获得一个独立的名称空间,如果你将你的 Kubernetes 环境连接到 DevSpace Cloud,那么开发人员可以根据需要创建这个名称空间。

安全问题。

在开发过程中,在云中运行代码意味着从一开始,所有的源代码都在云中。这不一定是个问题 ーー 因为大多数公司已经在使用云中的代码库了。尽管如此,一些人可能担心有人可能未经授权访问你的开发机密。对他们来说,私有云可能是一个更好的解决方案。

云成本。

如果你使用的是公共云,你必须为你使用的资源付费。如果你的团队中的所有开发人员都需要自己的云环境,那么计算资源的成本可能会很快变得相当高。这是云开发的存在一个普遍问题,目前还不能完全解决,但是有一些方法可以降低成本。

使用容器技术,你甚至有机会在本地模拟云环境。为此,你可以使用 Docker Desktop 和 Docker Compose(或用于 Kubernetes、 minikube 和 DevSpace)在感觉像云环境的本地环境中工作。由于它是在本地运行的,所以你只消耗了计算机资源,而不需要支付任何额外的费用。





云开发的好处



因此,总的来说,条件已经变得更好了,使用云开发比以往任何时候都更容易。

现在的问题是你为什么要这么做。

无限的计算能力

尽管你的计算机只能为本地开发提供有限的资源,但使用云实际上可以提供无穷无尽的计算能力。

你还可能需要使用特定的硬件,否则就无法使用。在这里,尤其是 GPUs 至关重要,因为它们是许多人工智能和机器学习应用程序所需要的。

对于微服务应用程序,你可能需要大量的电力来启动和运行所有的服务,有时候这在本地是完全不可能的。在这种情况下,企业如果想继续有效地改进其应用程序,就只能转向云计算ーー这也是为了开发。

减少准备工作

不管运行环境如何,运行一个应用程序可能需要有很多步骤。

但是,如果使用云开发,团队中的一个人可以设置和配置所有东西,所有其他团队成员都可以直接启动。在 Kubernetes 的世界中,这可以通过诸如 Helm 和 DevSpace 等开源工具来实现,在这些工具中,你可以配置整个环境,然后必须将其部署到云环境中。

这种可复制性是云的一个主要优势,因为硬件或操作系统之间没有差异(除非你希望有不同的配置)。

它也非常灵活,你可以根据个人需要进行调整。此外,公共云供应商提供了一系列工具和构建模块ーー只要看看 Google Cloud 或 AWS 的服务就知道了。

加上可以用 CNCF landscape 描述的大量云应用程序和环境的开放源码项目,你可以非常快速地开始工作。

新的合作可能性和标准化

由于标准化(表示为云环境的共享配置文件),很容易在团队中复制 bug 并相互支持。

甚至可以让同事直接访问你的云环境来修复某些内容或分享你的工作成果。这可以带来更多的团队合作,形成一种新的团队合作形式,每个人都可以贡献自己的力量。

从任何地方访问

由于你的应用程序在开发过程中已经在云中运行,因此你不必总是使用具有非常特定设置的同一台计算机。

你可以随意切换本地硬件,这样当你的计算机出现故障需要更换时就更容易了。这也支持现代的工作文化,比如在家工作或者在外工作。

生活在 DevOps 文化中

在云中直接开发针对云的软件非常有意义,因为在应用程序的整个生命周期中始终使用非常类似的环境。

这可以减少将应用程序部署到生产环境后可能出现的错误和问题的数量。为此,基于云的开发将在你的团队中培养 DevOps 文化。





总结



云开发是一个已经存在了很多年的概念,但在过去未能真正成为主流。

然而,由于云和软件即服务的宏观趋势的结合,以及技术的进步,如容器技术 Docker 和 Kubernetes,云开发现在有机会最终成为基于云的应用程序的新标准开发。

即使可能不是每个人都会(在不久的将来)离开本地环境,它也可能在采用 DevOps 实践并希望开发真正的本地云应用程序的公司中得到广泛采用。

英文:Why Cloud Development Could (Finally) Become the New Standard
分享到:
评论

相关推荐

    C语言编程魔法书基于C11标准-6

    ⽽且所基于的编译器和开发环境也是⽐较新的Visual Studio Community 2017、GCC 5,以及Clang 3.8(Apple LLVM 8.0,基于Xcode 8)。 从适合读者阅读和掌握知识的结构安排上讲,本书分为“预备知识 篇”、“基础语法...

    Tcl_TK编程权威指南pdf

    你没有必要再去为自己的新应用程序发明一种命令语言,或是费力为自己的工具提供某种用户可编程特性。其实,你可以通过添加一个Tcl解释器,来将自己的应用程序组织成一组操作原语,并使用这些原语来构造最符合用户...

    KS BOS开发手册

    1.1 K/3 BOS概述 1.2 金蝶BOS(Business Operation System)——金蝶业务操作系统,它使用先进、...本文的读者为金蝶内部利用K/3开发新业务的研发人员、机构和合作伙伴的二次开发人员,以及K/3最终客户的自有开发人员。

    阿里巴巴java开发手册最新版

    所以本手册以Java 开发者为中心视角,划分为编程规约、异常日 志、MySQL 数据库、工程结构、安全规约五大块,再根据内容特征,细分成若干二级子 目录。根据约束力强弱及故障敏感性,规约依次分为强制、推荐、参考三...

    CodeIgniter:php敏捷开发框架web快速开发详解

    CI 能为你做什么? 什么是“框架”?CI 为什么能被称为框架? “开源”商业模式。 CI 的某些不足(是的,它并不完美)。 1.1 CodeIgniter 能为你做什么? 如果你已经是一位 PHPer,开发过 PHP 应用,...

    Access 2000中文版高级编程(part1)

    12.1 为什么使用数据访问页 358 12.1.1 理解数据访问页的结构化方式 359 12.1.2 浏览控件 361 12.1.3 数据访问页与窗体和报表的比较 362 12.1.4 哪类用户需要数据访问页 364 12.2 省时的数据访问页向导 364 ...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    Karen Morton及其团队在本书中提供了专业的方案:先掌握语言特性,再学习Oracle为提升语言效率而加入的支持特性,进而将两者综合考虑并在工作中加以应用。作者通过总结各自多年的软件开发和教学培训经验,与大家...

    校内API开发. pdf

    校内应用程序开发:.NET应用程序开发标准化 通过为你企业建立个公共应用结构框架来提高.NET应用开发效率 by Rao Chejarla (印度) 涉及技术:ADO.NET、ASP.NET 开发企业应用是个复杂过程你可以运用Microsoft .NET技术...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

     ·为帮助读者掌握编程技巧,提供了大量可运行的示例和练习 作译者  Ivor Horton是撰著Java、C和C++编程语言图书的杰出作家之一。大家一致认为,他的著作独具风格,无论是编程新手,还是经验丰富的编程人员,都...

    El Inputte for .NET---最新标准的输入界面控件

    继承了El Inputte (日本产品名为InputMan)多个版本的卓越性能的基础上,基于.NET Framework开发的新版本El Inputte for NET中文版即将隆重上市。 El Inputte 从1993年第一版开发完成以来,一直受到众多软件开发人员...

    Access+2000中文版高级编程

    12.1 为什么使用数据访问页 358 12.1.1 理解数据访问页的结构化方式 359 12.1.2 浏览控件 361 12.1.3 数据访问页与窗体和报表的比较 362 12.1.4 哪类用户需要数据访问页 364 12.2 省时的数据访问页向导 ...

    固定逻辑与可编程逻辑区别

    另一方面,可编程逻辑器件(PLD)是能够为客户提供范围广泛的多种逻辑容量、特性、速度和电压参数的标准成品部件 -- 而且此类器件可在任何时间改变,从而完成许多种不同的功能。   对于固定逻辑器件...

    C#微软培训资料

    <<page 1>> page begin==================== 目 目目 目 录 录录 ... 2000 年 6 月 22 日 不论对 Microsoft 还是对整个 IT 业界都将成为值得纪念的一天 这一天 微软公司正式推出了其下一代...

    现代软件工程习题及答案

    (3) 渐增型开发方法适合于知识型软件的开发,设计系统时对用户需求的认识开始不是很清楚的,需要在开发过程中不断认识、不断获得新的知识去丰富和完善系统。多数研究性质的试验软件,一般采用此方法。 变换型开发...

    PHP和MySQL Web开发第4版pdf以及源码

    5.4 理解为什么要定义自己的函数 5.5 了解基本的函数结构 5.5.1 函数命名 5.6 使用参数 5.7 理解作用域 5.8 参数的引用传递和值传递 5.9 使用Return关键字 5.9.1 从函数返回一个值 5.10 实现递归 5.10.1 ...

    c#学习笔记.txt

    看完了前面几段,我的朋友提出了不同的意见:C#不是Java的Clone,它只是长得有些像Java而已,其实面向对象、中间语言什么的也不是什么新玩意儿,非Sun独创,有文为证:华山论剑:C#对Java。另外他对我上一集中说...

Global site tag (gtag.js) - Google Analytics