创建云原生应用程序,需要注意什么?

img

云原生软件开发,是利用云运营模型(Cloud Operating Model)在现代分布式环境中构建和运行可扩展的应用程序。随着用于设计和创建应用程序的云原生技术的不断发展,我们遇到的问题也越来越多,因此在本文中,我将和大家一起分享创建云原生应用程序的注意事项。

1. 从微服务架构开始

每个应用程序都有自己的资源需求、内在特征和依赖关系。因此,在进行云原生应用程序的开发和优化时,首先要考虑这些特性。

从头开始设计云原生应用实际上非常简单,但实际工作中从头开始构建新应用程序的情况很少发生。我们大多数的组织目前仍然处于过渡过程中—-正在考虑将数以千计的单体应用程序转换为现代分布式应用程序。

同时,无论我们采用哪种云迁移策略,我们都需要让应用程序功能及其代码必须被分割成多个逻辑单元,使其成为微服务架构及其模式。

你可能会问,是否值得这样做?在许多情况下,答案是肯定的;创建云原生应用程序所产生的价值远远超过了在时间和金钱上的投资。这是因为:

  • 云原生应用程序的,具备传统单体应用程序无法实现的可扩展性。
  • 使用 DevOps 或敏捷原则设计的应用程序,具有更快的发布周期。
  • 云原生应用程序本质上是灵活的,这为采用机器学习、人工智能、无服务器计算等新技术打开了大门。
  • 云原生有助于提供更快、更稳定和更可靠的应用程序,客户也可以体验到显著的好处。

企业拥有更快的开发周期或更快的部署应用程序的能力后,也为更灵活、更有创新能力和更好的客户解决方案奠定了基础。所有这些无疑会对客户忠诚度产生积极影响,增加企业的销售额,并降低运营成本等。

因此,微服务是云原生应用程序的基础。同时,基于容器可以将微服务的整个运行时环境及其所有依赖项、库、二进制文件等打包到一个可管理的逻辑单元中,然后可以按需传输、克隆、存储或使用应用服务。

从开发人员的角度来看,微服务和容器的结合符合12-Factor 方法论–旨在解决程序员在开发现代云原生应用程序时面临的最常见问题。

遵循 12-Factor 方法论的好处数不胜数。以下是其中一些:

  • 可以将基本代码和应用程序的配置分开,以方便应用程序的维护和开发。
  • 基于基础设施即代码 (IaC) 原则,有助于自动化部署。
  • 将核心应用程序与其他支持服务分开,允许应用程序代码库按照自己的节奏迭代。
  • 通过 API 广泛使用无状态进程,允许每个微服务与其他微服务隔离,从而提高效率和安全性。

2. 拥抱一切即代码

通过上文,我们已经知道了使用微服务对于现代应用程序至关重要。然而,在云原生开发中采用开箱即用的自动化实践也同样重要。最终目标应该是实现 一切即代码 (EaC) 。你可以想象 EaC 是基础设施即代码 (IaC) 的演变,它包含基础设施、平台和应用程序代码库。这种方法允许软件和硬件共享关键优势,例如:

  • 各级或不同版本控制的实施
  • 改善部门间的协作
  • 组件的模块化
  • 有助于DevOps的实施
  • 易于在所有开发级别实施自动化
  • 通过及时更新系统,防止潜在攻击来增强安全性

通过使用持续集成和持续交付 (CI/CD) 工具在各个级别实现自动化,可能是云原生应用程序最重要的价值。不仅这些好处、还有可扩展性、快速开发周期、增强的安全性、灵活性和更低的运营成本。

根据最近的调查,容器和云原生平台的攻击每天超过 16,00 次,这个惊人的数字进一步强调了通过自动化实施增强应用安全的重要性。此外,CI/CD流程中的左移方法支持在软件开发生命周期的早期阶段进行安全测试,以帮助及时发现和解决问题。

3. API优先方法

传统上,开发人员更关注代码优先而不是 API 优先的方法进行开发,这可能不适用于今天的现代应用程序开发。如果开发人员从 API 开发开始,然后在此基础上构建软件产品,这种方法将帮助开发人员节省大量工作/时间,同时为现代分布式应用程序奠定基础。

如前所述,12-Factor 方法论也指出,应用程序的设计应该通过职能单一原则将每个功能作为微服务运行。然后,各个微服务通过 API 来有效地相互通信。

从微服务应用程序的日益普及来看,API 也变得越来越重要,开发人员需要将 API 视为他们的一等公民。

用户界面发出的调用和来自其他应用程序的调用都可以看作是 API 的简单使用者。总而言之,它的好处有:

  • 降低故障风险并使系统更具可扩展性
  • 改进的开发者体验
  • 更快的开发过程并加快投产速度
  • 降低开发成本

简而言之,通过使用 API不仅可以促进用户和应用程序之间的通信,而且还促进内部流程的通信和自动化。

结论

在本文中,我建议采用微服务架构和基于广义上的一切作为代码的实现,有助于云原生应用程序的自动化、流程可见性和团队间的协作。

译文链接: https://thenewstack.io/architectural-considerations-for-creating-cloud-native-applications/

K8S中文社区微信公众号

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址