2周前 (07-25)  微服务 |   抢沙发  23 
文章评分 0 次,平均分 0.0
[收起] 文章目录

无论明天会发生什么,云原生是目前软件行业最大的趋势之一。此外,它已经改变了我们对开发、部署和操作软件产品的思考方式。

但究竟什么是云原生呢?

云原生的不同定义

Cloud native不仅仅是注册云提供商并使用它运行现有应用程序。云原生影响应用程序的设计、实现、部署和操作。

Pivotal是一家提供流行Spring框架和云平台的软件公司,它将云本机描述为:

“Cloud native是一种构建和运行应用程序的方法,可以充分利用云计算模型的优势。”

云原生计算基金会(Cloud Native Computing Foundation)是一个旨在创建和推动采用云原生编程范式的组织,它将云原生定义为:

云原生计算使用开源软件堆栈:

  • –集装箱化。每个零件(应用、过程等)都包装在自己的容器中。这有利于再现性、透明度和资源隔离。
  • –动态协调。主动调度和管理容器以优化资源利用率。
  • –面向微服务。应用程序分为微服务。这大大提高了应用程序的整体灵活性和可维护性。

这两个定义相似,但从稍微不同的角度来看主题,您可以将定义总结为:

“一种将软件应用程序构建为微服务并在容器化和动态编排的平台上运行的方法,以利用云计算模型的优势。”

老实说:“利用云计算模型的优势”听起来很棒。但是,如果你是云原生计算的新手,你可能仍然想知道这是关于什么的。您可能还想知道它如何影响您实现软件的方式。至少当我第一次读到云原生计算时,我是这样想的。

让我们看看不同的部分。

容器

容器的基本思想是将软件和执行它所需的一切打包到一个可执行包中,例如Java虚拟机、应用服务器和应用程序本身。然后在虚拟化环境中运行该容器,并将包含的应用程序与其环境隔离开来。

这种方法的主要优点是应用程序变得独立于环境。另一个好处是,该容器具有很高的便携性。您可以轻松地在开发、测试或生产系统上运行相同的容器。如果应用程序设计支持水平扩展,则可以启动或停止容器的多个实例,以根据当前用户需求添加或删除应用程序的实例。

Docker项目是当前最流行的容器实现。人们经常交替使用Docker和container这两个术语。请记住,Docker项目只是容器概念的一个实现,将来可能会被取代。

如果你想试试Docker,你应该从免费社区版开始。您可以在本地桌面上安装Docker。这允许您开始构建自己的容器定义,并将第一个应用程序部署到容器中。完成后,您可以将容器移交给负责质量保证的同事,然后将其部署到生产中。

您不再需要担心应用程序是否可以在测试或生产环境中工作,或者是否需要更新某些依赖项。容器包含应用程序所需的一切,您只需启动它。

官方文档(https://docs.docker.com/)向您展示了如何在系统上运行Docker,并提供了良好的入门指南。

编排

将具有所有依赖项的应用程序部署到容器中只是第一步。它解决了您以前遇到的部署问题,但如果您想充分受益于云平台,您将面临新的挑战。

根据系统的当前负载启动其他节点或关闭正在运行的应用程序节点并不容易。您需要:

  • 监视您的系统
  • 触发容器的启动或关闭
  • 确保所有必需的配置参数都已就位
  • 平衡活动应用程序实例之间的负载
  • 在容器之间共享身份验证机密

手动完成所有这些都需要很大的努力。此外,它对系统负载的意外变化反应太慢。你需要有合适的工具来自动为你做这一切。构建了不同的编排解决方案,以自动化对意外变化的反应,其中包括Docker Swarm、Kubernetes、Apache Mesos和Amazon的ECS。

微服务

现在我们已经拥有了所有的基础设施和管理,是时候谈谈cloud native给系统架构带来的变化了。云原生应用程序构建为一个微服务系统。

这种架构风格的总体思想是实现一个由多个相对较小的应用程序组成的系统。这些被称为微服务,它们共同提供系统的整体功能。每个微服务只实现一个功能,具有定义良好的边界和API,并由一个相对较小的团队开发和操作。

这种方法有几个好处:

微服务的好处

首先,实现和理解提供一个功能的较小应用程序要容易得多,而不是构建一个无所不能的大型应用程序。这种方法加快了开发速度,使服务更容易适应变化或新的需求。你不必太担心一个看似很小的变化会带来意想不到的副作用。此外,它允许您专注于手头的开发任务。

扩缩容

微服务还允许您更高效地扩展。当我谈到容器时,我说您可以简单地启动另一个容器来处理用户请求的增加。我们称之为水平缩放。基本上,您可以对每个无状态应用程序执行相同的操作,与其大小无关。只要应用程序不保持任何状态,您就可以将用户的下一个请求发送到任何可用的应用程序实例。

即使你可以用单片应用程序或微服务系统进行类似的扩展,但扩展微服务系统通常要便宜得多。你只需要扩展得到大量负载的微服务。只要系统的其余部分可以处理当前负载,就不需要添加其他服务的任何额外实例。

缩放与单片应用程序完全不同。如果你需要增加一个功能的容量,你需要开始一个完整的整体的新实例。这看起来可能没什么大不了的,但在云环境中,您需要为硬件资源的使用付费。即使你只使用了整块石的一小部分,你仍然需要为其他未使用的部分获取额外的资源。

正如你所见,微服务可以让你更高效地使用云资源,并减少你的云提供商每月的账单。

微服务带来的挑战

和往常一样,你不会免费获得建筑风格的好处。微服务消除了服务本身的一些复杂性,并提供了更好的可扩展性,但您现在正在构建一个分布式系统。这在系统层面上增加了更多的复杂性。

什么是Cloud-Native云原生?

为了尽量减少这种额外的复杂性,请尽量避免微服务之间的任何依赖关系。如果这是不可能的,那么您需要确保依赖服务能够找到彼此并有效地实现它们的通信。您还需要处理速度慢或不可用的服务,以便它们不会影响整个系统。

系统的分布式特性也使得在生产中监视和管理系统变得更加困难。现在,您需要监视一个微服务系统,而不是几个独石,对于每个服务,可能有几个并行运行的实例。

构建微服务

您不需要使用特定的框架或技术堆栈来构建微服务,但这使它变得更容易。特定的框架和技术堆栈提供了许多经过良好测试的现成功能,可以在生产环境中使用。

在Java世界中,有很多不同的选项可用,包括流行的Spring Boot和Eclipse Microprofile。

正如您可能从其名称中猜到的那样,Spring Boot将著名的Spring框架与其他几个框架和库集成在一起,以应对微服务架构的额外挑战。

Eclipse Microprofile遵循相同的思想,但使用Java EE。多个Java EE应用服务器供应商共同提供一组规范和多个可互换的实现。

总结

云原生计算的思想和概念引入了一种实现复杂、可扩展系统的新方法。即使你没有在云平台上托管应用程序,这些新想法也会影响你未来开发应用程序的方式。

容器使分发应用程序变得更加容易。在开发过程中使用容器在团队成员之间共享应用程序或在不同环境中运行应用程序。执行所有测试后,您可以轻松地将同一容器部署到生产环境中。

微服务为构建系统提供了一种新的方式,但也带来了新的挑战,并将注意力转移到每个组件的设计上。微服务改进了封装,并允许您实现可维护的组件,您可以快速适应新的需求。

如果您决定在生产中使用容器来运行微服务系统,则需要一个编排解决方案来帮助您管理系统。

无论是否流行,cloud native都根据项目需求为软件产品提供灵活的解决方案。事实上,许多公司都使用微服务来实现其软件产品。

 

除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/2713.html

关于

发表评论

表情 格式

暂无评论

登录

忘记密码 ?

切换登录

注册