其他分享
首页 > 其他分享> > 微服务的构建环境比较--Spring Cloud和Kubernetes

微服务的构建环境比较--Spring Cloud和Kubernetes

作者:互联网

背景

Spring Cloud 和 Kubernetes 都声称是开发和运行微服务的最佳环境,但它们本质上有很大不同,并且解决的问题也不尽相同。在本文中,我们将了解两个平台如何帮助搭建基于微服务的架构 (Microservice based architectures, MSA),它们各自擅长的领域,以及如何各取所长以便在微服务之旅中取得成功。

 

该图涵盖了系统运行时所涉及的很多方面,但没有涉及在 MSA 世界中非常重要的打包、持续集成、扩展、高可用性、自我修复。我们假定大多数 Java 开发人员都熟悉 Spring Cloud,在本文中,我们将通过分析这些额外的问题来对比看一看, Kubernetes 与 Spring Cloud 有什么区别和关联。

微服务的关注点

与其逐个功能进行比较,不如让我们站在更高的角度来看看,作为微服务应该关注的点, Spring Cloud 和 Kubernetes 又是如何解决这些问题的。 MSA 这种架构风格的优点和所做的取舍,今天已经被大家所熟知。微服务支持强大的模块边界、独立部署和技术多样性(Strong Module Boundaries, Independent Deployment, Technology Diversity),但代价就是需要开发分布式系统(Distribution)、保证最终一致性( Eventual Consistency)以及大量的运维开销(Operational Complexity)。因此,尽可能使用现成的工具是成功的关键因素之一,这些工具可以帮助你尽可能地解决 MSA 问题。采用MSA快速轻松的启动开发很重要,但从项目启动到最终发布的过程是漫长的,你需要做到以下几点才能真正利用好微服务。

还有很多当前没有想到的,重点是 - 上面这些通常都是良好的工程实践。 对于微服务,工程的标准必须非常高。

 

上图中的列表,包含必须在 MSA 中解决的最常见的技术问题(不包括非技术问题,例如组织结构、文化等)。这是我的观点,不同的组织会有所不同,但大多数情况下是适用的。

技术映射

这两个平台差异很大,它们之间没有直接的对等功能。如果我们将每个 MSA 的关注点映射到这两个平台中的解决方案,我们会得出下表。

 

上表的主要结论是:

微服务的要求

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

 

在某些情况下,两个项目使用不同的方法满足相同的要求,在某些领域,一个项目可能比另一个项目更强大。但也有一个甜蜜点,两个平台相互补充,可以互相结合以获得卓越的微服务体验。例如 Spring Boot 提供了用于构建单个 jar 应用程序包的 Maven 插件。结合 Docker 和 Kubernetes 声明式部署和调度功能,运行微服务变得轻而易举。类似地,Spring Cloud 具有应用程序内部库,用于使用 Hystrix(带有隔板和断路器模式)和 Ribbon(用于负载均衡)创建弹性、容错的微服务。但这还不够,当它与 Kubernetes 健康检查、进程重启和自动扩展功能相结合时,微服务将变成一个真正的健壮系统(反脆弱系统, antifragile system)。

优点和缺点

由于两个平台不能直接逐个比较,我们没有深入研究每个项目,而是总结了每个平台的优缺点。

Spring Cloud

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

优点

缺点

Kubernetes

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

优点

缺点

强强联合

正如你所看到的,这两个平台在某些领域都有优势,在其他领域有待改进。 Spring Cloud 是一个快速入门、开发人员友好的平台,而 Kubernetes 是 DevOps 友好的,具有陡峭的学习曲线,但涵盖了更广泛的微服务问题。以下是对这些要点的总结。

 这两个框架解决了不同范围的 MSA 问题,并且它们以完全不同的方式实现。 Spring Cloud 让开发人员能更轻松地解决问题,试图在 JVM 内部解决每个 MSA 的挑战,而 Kubernetes 则试图在平台上解决问题,让开发人员不必直面这些问题。 Spring Cloud 在 JVM 内部非常强大,而 Kubernetes 在管理这些 JVM 方面非常强大。因此,将它们结合起来并从两个项目的最佳部分中受益,感觉就像一个自然的过程。

 

通过这样的组合,Spring 提供了应用程序打包,Docker 和 Kubernetes 提供了部署和调度。 Spring 通过 Hystrix 线程池提供应用内隔板,Kubernetes 通过资源、进程和命名空间隔离提供隔板。 Spring 为每个微服务提供健康端点,Kubernetes 执行健康检查并将访问路由到健康的服务。 Spring 将配置外部化并更新配置,Kubernetes 将配置分发到每个微服务。这个列表不胜枚举。

 

上面是我最喜欢的微服务平台,怎么样?小孩子才做选择题,成年人当然是全都要。我喜欢 Spring 框架提供的开发人员体验。它都是注解驱动的,并且有涵盖各种功能需求的库。我也喜欢 Apache Camel(在这种情况下是 Spring Integration),因为它与应用程序级别的集成、连接器、消息传递、路由、弹性和容错有关。然后,对于与集群和管理多个应用实例有关的任何事情,我更喜欢 Kubernetes 的神奇功能。每当有功能重叠时,例如服务发现、负载平衡、配置管理,我都会尝试使用 Kubernetes。


 

 

标签:Java,Kubernetes,--,Spring,MSA,服务,Cloud
来源: https://blog.csdn.net/weixin_45987961/article/details/122500704