文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

部署微服务:Spring Cloud pk Kubernetes

2024-12-02 13:49

关注

本文转载自微信公众号「新钛云服」,作者徐磊 翻译。转载本文请联系新钛云服录公众号。

Spring Cloud和Kubernetes都声称是开发和微服务的最佳运行环境,但它们本质上非常不同。在本文中,我们将了解他们如何帮助交付基于微服务的架构 (MSA),它们擅长哪些领域,以及如何利用自身优势在微服务之旅中取得两全其美的结果。

使用 Spring Cloud 创建一个基于微服务的系统需要一些什么?

为了构建一个可扩展且具有弹性的微服务系统,该系统支持增长到数十或数百个服务,必须借助具有广泛构建时间和runtime功能的工具集对其进行集中管理和治理。使用 Spring Cloud,这涉及实现功能服务(例如统计服务、帐户服务和通知服务)和支持基础设施服务(例如日志分析、配置服务器、服务发现、身份验证服务)。使用 Spring Cloud 描述此类 MSA 的图表如下:

该图涵盖了系统的运行时方面,但没有涉及封装、CICD、扩展、高可用性和自我修复,这些在 MSA 中也非常重要。假设大多数 Java 开发人员都熟悉 Spring Cloud,在本文中,我们将通过解决这些问题来绘制一个平衡点,看看 Kubernetes 与 Spring Cloud 之间的关系。

微服务问题

与其逐个进行功能比较,不如让我们来看看更广泛的微服务关注点,看看 Spring Cloud 和 Kubernetes 如何处理这些问题。

关于 MSA 的好处在于,它是一种具有易于理解和权衡的架构风格 。微服务支持强大的模块边界,具有独立部署和技术多样性。它们是以开发分布式系统和大量运营开销为代价的。一个关键的成功因素是专注于能够帮助您尽可能多的解决 MSA 问题。使启动过程快速而简单很重要。

在上图中,我们可以看到一个列表,其中包含必须在 MSA 中解决的最常见的技术问题。

Spring Cloud 和 Kubernetes 这两个平台非常不同,它们之间没有直接的功能对等。如果我们将每个 MSA 关注点映射到用于在两个平台中解决它的技术,我们会得出下表。

上表的主要结论是:

Spring Cloud 拥有一组丰富的、集成良好的 Java 库,可以将所有runtime问题作为应用程序堆栈的一部分来解决。因此,微服务本身有库和runtime代理来进行客户端服务发现、负载平衡、配置更新、指标跟踪等。单例集群服务和批处理作业等模式也在 JVM 中进行管理。

Kubernetes 是多语言的,不仅针对 Java 平台,而且以通用方式解决所有语言的分布式计算挑战。它为平台级别和应用程序堆栈之外的配置管理、服务发现、负载平衡、跟踪、度量、单例、计划作业提供服务。该应用程序不需要任何用于客户端逻辑的库或代理,并且可以用任何语言编写。

在某些领域,两个平台都依赖类似的第三方工具。例如,ELK 和 EFK 堆栈、跟踪库等。例如 Hystrix 和 Spring Boot,在这两种环境中同样有用。在某些领域,两个平台是互补的,可以组合在一起,以创建更强大的解决方案( KubeFlix和 Spring Cloud Kubernetes就是这样的例子)。

为了展示每个项目的范围,这里有一张表格,其中包含端到端的 MSA 要求,从底部的硬件到顶部的 DevOps 和自助服务体验,以及它们之间的关系到 Spring Cloud 和 Kubernetes 平台。

在某些情况下,两个项目使用不同的方法满足相同的要求,并且在某些领域,一个项目可能比另一个项目更强大。但也有一个好处,两个平台相互补充,可以结合互补,以获得卓越的微服务体验。

例如,Spring Boot 提供了用于构建单个jar应用程序包的Maven插件。结合 Docker 和 Kubernetes 的声明式部署和调度功能,运行微服务变得轻而易举。

同样,Spring Cloud 具有应用程序内库,用于使用 Hystrix和Ribbon创建弹性、容错的微服务。但这还不够,当它与Kubernetes 的健康检查结合时,进程会重新启动,

Spring Cloud

Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具,例如配置管理、服务发现、路由等。它构建在 Netflix OSS库之上,用Java编写,供Java开发人员使用

优点:

缺点:

Spring Cloud 的主要优点之一也是它的缺点——它仅限于 Java。MSA的一个强大动机是能够在需要时交换技术堆栈、库甚至语言。这在 Spring Cloud中是不可能的。如果你想使用SpringCloud/Netflix OSS基础服务,比如配置管理、服务发现或者负载均衡,解决方案并不优雅。

Java 开发人员需要关心和处理 Java 应用程序的问题太多。每个微服务都需要运行各种客户端来进行配置检索、服务发现和负载均衡。设置它们很容易,但这并不会隐藏构建时和runtime对环境的依赖。例如,开发人员可以使用EnableConfigServer创建一个 Config Server,但这只是一种方式。每次开发人员想要运行单个微服务时,他们都需要启动并运行配置服务器。对于受控环境,开发人员必须考虑使Config Server高可用,并且它支持Gi或Svn,因此他们需要一个共享文件系统。同样,对于服务发现,开发者需要先启动一个 Eureka服务器。

Spring Cloud 本身在微服务旅程中的范围较短,开发人员还需要考虑自动化部署、调度、资源管理、进程隔离、自愈、构建管道等,以获得完整的微服务体验。在这一点上,我认为将Spring Cloud单独与Kubernetes进行比较是不公平的,而在 Spring Cloud + Cloud Foundry(或 Docker Swarm)和 Kubernetes之间进行比较更公平 。但这也意味着,要获得完整的端到端微服务体验,Spring Cloud必须辅以Kubernetes本身这样的应用平台。

Kubernetes

Kubernetes 是一个开源系统,用于自动化部署、扩展和管理容器化应用程序。它是多语言的,并提供用于配置、运行、扩展和管理分布式系统。

优点:

Kubernetes 是一个多语言和语言不可知的容器管理平台,能够运行云原生和传统容器化应用程序。它提供的服务,例如配置管理、服务发现、负载均衡、指标收集和日志聚合,可以被多种语言使用。这允许在组织中拥有一个平台,可供多个团队(包括使用Spring的Java开发人员)使用并服务于多种用途:应用程序开发、测试环境、构建环境(运行源控制系统、构建服务器、工件存储库)等。

与 Spring Cloud 相比,Kubernetes 解决了更广泛的 MSA 问题。除了提供runtime服务,Kubernetes 还允许您配置环境、设置资源约束、RBAC、管理应用程序生命周期、启用自动扩展和自我修复。

Kubernetes 技术基于谷歌 15 年的研发和管理容器的经验。是Github上最活跃的开源社区之一。

缺点:

Kubernetes 是多语言的,因此,它的服务和原语是通用的,没有针对不同的平台(如 Spring Cloud for JVM)进行优化。例如,配置作为环境变量或挂载的文件系统传递给应用程序。它没有Spring Cloud Config 提供的花哨的配置更新功能。

Kubernetes 不是面相开放人员的平台。它旨在供具有DevOps意识的IT人员使用。因此,Java 开发人员需要学习一些新概念并学习解决问题的新方法。尽管使用MiniKube启动 Kubernetes 实例非常容易,但手动安装高可用的 Kubernetes 集群会产生大量的操作开销。

Kubernetes 仍然是一个相对较新的平台,并且仍在积极开发和成长中。因此,每个版本都添加了许多新功能,而且 API 是可扩展和向后兼容的。

两全其美

这两个框架都解决了不同范围的 MSA 问题,而且它们以根本不同的方式来解决。

Spring Cloud试图解决 JVM 内部的MSA挑战,而 Kubernetes试图通过在平台级别解决问题来让开发人员解决问题。

Spring Cloud在JVM内部非常强大,而Kubernetes在管理这些 JVM 方面非常强大。因此,将它们结合起来并取其精华去其糟粕。

个人最喜欢的微服务堆栈

一张图足以涵盖,请看图:

 

原文:https://dzone.com/articles/deploying-microservices-spring-cloud-vs-kubernetes

 

来源: 新钛云服 内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯