SpringCloud PK K8s 谁更胜一筹

文章对比了SpringCloud和Kubernetes在微服务架构中的作用和优势。SpringCloud提供了丰富的Java库,适合Java开发人员,解决运行时问题,而Kubernetes作为一个多语言平台,解决更广泛的分布式系统挑战,包括部署、扩展和管理容器化应用。两者各有侧重,SpringCloud在开发友好性上占优,Kubernetes则在平台层面提供更全面的微服务支持。文章建议结合两者以获得更好的微服务体验。
摘要由CSDN通过智能技术生成

SpringCloud PK K8s 谁更胜一筹

Spring Cloud 和 Kubernetes 都声称自己是开发和运行微服务的最佳环境,但它们在本质上有很大的不同,解决的问题也不同。在本文中,我们将看看每个平台是如何交付基于微服务架构(MSA)的?它们擅长哪些领域?以及如何充分利用这两个领域在微服务的旅程中取得成功。

背景

最近我读了很多关于用 Spring Cloud 结合容器化构建微服务架构的文章。如果您还没有阅读它,那么您应该多看看,因为它全面概述了如何使用 Spring Cloud 创建一个简单的基于微服务的系统。为了构建一个可扩展且具有弹性的微服务系统,甚至可以扩展到数十个或数百个服务,必须在具有广泛构建时和运行时功能的工具集的帮助下对其进行集中管理和治理。使用 Spring Cloud 过程涉及到实现功能性服务(如统计服务、帐户服务和通知服务)和支持基础设施服务(如日志分析、配置服务器、服务发现、认证服务)。下面是描述这种使用 Spring Cloud 的 MSA 的图表:

来自Spring Cloud

这张图涵盖了系统的运行时方面,但没有涉及打包、持续集成、扩展、高可用性和自修复方面,这些方面在 MSA 世界中也非常重要。假设大多数 Java 开发人员都熟悉 Spring Cloud,在本文中,我们将进行比较,通过解决这些额外的问题来了解 Kubernetes 与 Spring Cloud 之间的关系。

微服务关注点

我们不需要逐个特性进行比较,而是来看看更广泛的微服务关注点,看看 Spring Cloud 和 Kubernetes 是如何解决这些问题的。当今 MSA 的一个优点是,它是一种架构风格,其优点和利弊都得到了很好的平衡。微服务支持强大的模块边界、独立部署和技术多样性,但它们的代价是开发分布式系统和显著的运营、成本开销。因此,这是一个关键的成功因素,关注周围的工具,将帮助您解决尽可能多的 MSA 关注。快速且轻松的开始很重要,但学习研究过程是漫长的,所以你需要足够耐心才能到达。

微服务框架解决问题

在上面的图表中,我们可以看到一个包含最常见的技术关注点的列表(我们不包括非技术关注点,例如组织结构、文化等等),这些都必须在 MSA 中解决。这是我个人的观点,不同的组织会有不同的看法,但在大多数情况下,它应该适用于每个人。

对比图

这两个平台非常不同,它们之间不存在直接的功能对等。如果我们将每个 MSA 关注点映射到用于在两种平台上解决它的技术/项目上,我们会得到下表。

Kubernetes和Spring Cloud对比图

从上表可以得出的主要结论是:

  • Spring Cloud 有一组丰富的集成良好的 Java 库,可以作为应用程序堆栈的一部分解决所有运行时问题。因此,微服务本身就有库和运行时代理来进行客户端服务发现、负载均衡、配置更新、指标检测等功能。但这些服务都是在 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 平台本身提供的统一编程模型,以及 Spring Boot 的快速应用程序开发能力,为开发人员提供了良好的微服务开发体验。例如,用很少的注解就可以完成配置中心服务,用很少的注解就可以让客户端库使用您的后台服务。
  • 有丰富的库可供选择,涵盖了大多数运行时问题。由于所有的库都是用 Java 编写的,所以它提供了多种特性、更大的控制和微调选项。
  • 不同的 Spring cloud 库彼此很好地集成在一起。例如,一个 Feign 客户端也能使用 Hystrix 来做断路器,使用 Ribbon 来做请求的负载。一切都是注解驱动的,易于开发,感觉就像 Java 开发人员的天堂。
缺点
  • Spring Cloud 的一个主要优点同时也是它的缺点——它仅限于 Java。MSA 的一个强大动机是在需要时能够改变技术栈、库甚至语言。这些对 Spring Cloud 来说是不可能的。如果你想消费 Spring Cloud/Netflix OSS 基础设施服务,比如配置管理、服务发现、负载均衡,这个解决方案并不能完美解决。Netflix Prana 项目实现了 sidecar 模式,以在 HTTP 上公开基于 Java 的客户端库,使用非 java 语言编写的应用程序可能存在于 Netflix 生态系统中,但它不是很优雅。此外,自从我写了这篇文章以来,Pivotal 还宣布了一个名为 SteelToe 的新项目,它允许使用 net 客户端的服务发现和配置 Java 服务调用。
  • Java 开发人员有太多的责任去关心和处理 Java 应用程序。每个微服务都需要运行各种客户端,以进行配置检索、服务发现和负载平衡。设置这些很容易,但这并不会隐藏构建时间和对环境的运行时依赖关系。例如,我可以很容易地创建一个带有@EnableConfigServer 注解的配置服务器,但这只是一个简单的方法。每次我想运行一个微服务时,我都需要启动配置服务器并运行它。对于受控环境,我必须考虑使配置服务器高度可用,因为它可以由 Git 或 Svn 支持,所以我需要为它共享文件系统。类似地,对于服务发现,我需要首先启动 Eureka 服务器。对于受控环境,我需要在每个 AZ 上使用多个实例对其进行多副本部署等等。作为一名 Java 开发人员,除了实现所有功能性服务之外,我还必须构建和管理一个重要的微服务平台。
  • 仅仅 Spring Cloud 在微服务领域的应用范围就比较局限,为了获得完整的微服务体验,您还需要考虑自动部署、调度、资源管理、进程隔离、自愈、构建管道等问题。就此而言,我认为将 Spring Cloud 单独与 Kubernetes 进行比较是不公平的,更公平的比较应该是将 Spring Cloud + Cloud Foundry(或 Docker Swarm)与 Kubernetes 进行比较。但这也意味着,要想获得完整的端到端微服务体验,Spring Cloud 必须辅之以 Kubernetes 之类的平台。

Kubernetes

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

优点
  • Kubernetes 是一个多语言的通用容器管理平台,能够运行本地云和传统的容器化应用程序。它提供的服务,如配置管理、服务发现、负载平衡、指标收集、日志聚合,都可以被各种语言使用。这允许在组织中拥有一个平台,可以被多个团队使用(包括使用 Spring 框架的 Java 开发人员),并服务于多种目的:应用程序开发、测试环境、构建环境(用于运行源代码控制系统、构建服务)
  • 与 Spring Cloud 相比,Kubernetes 解决了更广泛的 MSA 问题。除了提供运行时服务外,Kubernetes 还允许您提供环境、设置资源约束、RBAC、管理应用程序生命周期、支持自动伸缩和自愈(行为几乎像一个抗脆弱的平台)。
  • 我忍不住要提到 Kubernetes 技术是基于谷歌 15 年的研发和管理容器的经验。此外,它拥有近 1000 名提交者,是 Github 上最活跃的开源社区之一。
缺点
  • Kubernetes 支持多种语言,因此它提供的服务是通用的,并没有针对不同的平台或者语言进行优化,比如针对 JVM 的 Spring Cloud。例如,配置作为环境变量或文件系统传递给应用程序。它没有 Spring Cloud Config 提供配置自动更新功能特性。
  • Kubernetes 并不是一个专注于开发者的平台。它的目的是让有 DevOps 意识的 It 人员使用。因此,Java 开发人员需要学习一些新概念,并以开放的心态学习解决问题的新方法。尽管使用 MiniKube 启动 Kubernetes 实例的开发人员非常容易,但是手动安装高可用的 Kubernetes 集群会带来很大的操作成本。
  • Kubernetes 仍然是一个相对较新的平台,它仍然在积极开发和成长。因此,每个版本都会增加很多新特性,可能很难跟上。好消息是,它设计思想超前,而且 API 是可扩展和向后兼容的。

两者完美结合

正如你所看到的,这两个平台在某些领域都有优势,并在其他领域有所改进。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,因为它在应用程序级别上集成连接器、消息传递、路由、弹性和容错等功能。然后可以解决对于集群管理多个应用程序实例有关的任何事情,我更喜欢神奇的 Kubernetes 能力。每当有功能重叠时,比如服务发现、负载均衡、配置管理,我当然会尝试使用 Kubernetes 提供的能力。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微服务是什么?微服务是用于构建应用程序的架构风格,一个大的系统可由一个或者多个微服务组成,微服务架构可将应用拆分成多个核心功能,每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作和出现故障的时候不会相互影响。为什么要用微服务?单体架构下的所有代码模块都耦合在一起,代码量大,维护困难,想要更新一个模块的代码,也可能会影响其他模块,不能很好的定制化代码。微服务中可以有java编写、有Python编写的,他们都是靠restful架构风格统一成一个系统的,所以微服务本身与具体技术无关、扩展性强。大型电商平台微服务功能图为什么要将SpringCloud项目部署到k8s平台?SpringCloud只能用在SpringBoot的java环境中,而kubernetes可以适用于任何开发语言,只要能被放进docker的应用,都可以在kubernetes上运行,而且更轻量,更简单。SpringCloud很多功能都跟kubernetes重合,比如服务发现,负载均衡,配置管理,所以如果把SpringCloud部署到k8s,那么很多功能可以直接使用k8s原生的,减少复杂度。Kubernetes作为成熟的容器编排工具,在国内外很多公司、世界500强等企业已经落地使用,很多中小型公司也开始把业务迁移到kubernetes中。kubernetes已经成为互联网行业急需的人才,很多企业都开始引进kubernetes技术人员,实现其内部的自动化容器云平台的建设。对于开发、测试、运维、架构师等技术人员来说k8s已经成为的一项重要的技能,下面列举了国内外在生产环境使用kubernetes的公司: 国内在用k8s的公司:阿里巴巴、百度、腾讯、京东、360、新浪、头条、知乎、华为、小米、富士康、移动、银行、电网、阿里云、青云、时速云、腾讯、优酷、抖音、快手、美团等国外在用k8s的公司:谷歌、IBM、丰田、iphone、微软、redhat等整个K8S体系涉及到的技术众多,包括存储、网络、安全、监控、日志、DevOps、微服务等,很多刚接触K8S的初学者,都会感到无从下手,为了能让大家系统地学习,克服这些技术难点,推出了这套K8S架构师课程。Kubernetes的发展前景 kubernetes作为炙手可热的技术,已经成为云计算领域获取高薪要掌握的重要技能,在招聘网站搜索k8s,薪资水平也非常可观,为了让大家能够了解k8s目前的薪资分布情况,下面列举一些K8S的招聘截图: 讲师介绍:  先超容器云架构师、IT技术架构师、DevOps工程师,曾就职于世界500强上市公司,拥有多年一线运维经验,主导过上亿流量的pv项目的架构设计和运维工作;具有丰富的在线教育经验,对课程一直在改进和提高、不断的更新和完善、开发更多的企业实战项目。所教学员遍布京东、阿里、百度、电网等大型企业和上市公司。课程学习计划 学习方式:视频录播+视频回放+全套源码笔记 教学服务:模拟面试、就业指导、岗位内推、一对一答疑、远程指导 VIP终身服务:一次购买,终身学习课程亮点:1. 学习方式灵活,不占用工作时间:可在电脑、手机观看,随时可以学习,不占用上班时间2.老师答疑及时:老师24小时在线答疑3. 知识点覆盖全、课程质量高4. 精益求精、不断改进根据学员要求、随时更新课程内容5. 适合范围广,不管你是0基础,还是拥有工作经验均可学习:0基础1-3年工作经验3-5年工作经验5年以上工作经验运维、开发、测试、产品、前端、架构师其他行业转行做技术人员均可学习课程部分项目截图   课程大纲 k8s+SpringCloud全栈技术:基于世界500强的企业实战课程-大纲第一章 开班仪式老师自我介绍、课程大纲介绍、行业背景、发展趋势、市场行情、课程优势、薪资水平、给大家的职业规划、课程学习计划、岗位内推第二章 kubernetes介绍Kubernetes简介kubernetes起源和发展kubernetes优点kubernetes功能kubernetes应用领域:在大数据、5G、区块链、DevOps、AI等领域的应用第三章  kubernetes中的资源对象最小调度单元Pod标签Label和标签选择器控制器Replicaset、Deployment、Statefulset、Daemonset等四层负载均衡器Service第四章 kubernetes架构和组件熟悉谷歌的Borg架构kubernetes单master节点架构kubernetes多master节点高可用架构kubernetes多层架构设计原理kubernetes API介绍master(控制)节点组件:apiserver、scheduler、controller-manager、etcdnode(工作)节点组件:kube-proxy、coredns、calico附加组件:prometheus、dashboard、metrics-server、efk、HPA、VPA、Descheduler、Flannel、cAdvisor、Ingress     Controller。第五章 部署多master节点的K8S高可用集群(kubeadm)第六章 带你体验kubernetes可视化界面dashboard在kubernetes中部署dashboard通过token令牌登陆dashboard通过kubeconfig登陆dashboard限制dashboard的用户权限在dashboard界面部署Web服务在dashboard界面部署redis服务第七章 资源清单YAML文件编写技巧编写YAML文件常用字段,YAML文件编写技巧,kubectl explain查看帮助命令,手把手教你创建一个Pod的YAML文件第八章 通过资源清单YAML文件部署tomcat站点编写tomcat的资源清单YAML文件、创建service发布应用、通过HTTP、HTTPS访问tomcat第九章  kubernetes Ingress发布服务Ingress和Ingress Controller概述Ingress和Servcie关系安装Nginx Ingress Controller安装Traefik Ingress Controller使用Ingress发布k8s服务Ingress代理HTTP/HTTPS服务Ingress实现应用的灰度发布-可按百分比、按流量分发第十章 私有镜像仓库Harbor安装和配置Harbor简介安装HarborHarbor UI界面使用上传镜像到Harbor仓库从Harbor仓库下载镜像第十一章 微服务概述什么是微服务?为什么要用微服务?微服务的特性什么样的项目适合微服务?使用微服务需要考虑的问题常见的微服务框架常见的微服务框架对比分析第十二章 SpringCloud概述SpringCloud是什么?SpringCloudSpringBoot什么关系?SpringCloud微服务框架的优缺点SpringCloud项目部署到k8s的流程第十三章 SpringCloud组件介绍服务注册与发现组件Eureka客户端负载均衡组件Ribbon服务网关Zuul熔断器HystrixAPI网关SpringCloud Gateway配置中心SpringCloud Config第十四章 将SpringCloud项目部署到k8s平台的注意事项如何进行服务发现?如何进行配置管理?如何进行负载均衡?如何对外发布服务?k8s部署SpringCloud项目的整体流程第十五章 部署MySQL数据库MySQL简介MySQL特点安装部署MySQL在MySQL数据库导入数据对MySQL数据库授权第十六章 将SpringCLoud项目部署到k8s平台SpringCloud的微服务电商框架安装openjdk和maven修改源代码、更改数据库连接地址通过Maven编译、构建、打包源代码在k8s中部署Eureka组件在k8s中部署Gateway组件在k8s中部署前端服务在k8s中部署订单服务在k8s中部署产品服务在k8s中部署库存服务第十七章 微服务的扩容和缩容第十八章 微服务的全链路监控什么是全链路监控?为什么要进行全链路监控?全链路监控能解决哪些问题?常见的全链路监控工具:zipkin、skywalking、pinpoint全链路监控工具对比分析第十九章 部署pinpoint服务部署pinpoint部署pinpoint agent在k8s中重新部署带pinpoint agent的产品服务在k8s中重新部署带pinpoint agent的订单服务在k8s中重新部署带pinpoint agent的库存服务在k8s中重新部署带pinpoint agent的前端服务在k8s中重新部署带pinpoint agent的网关和eureka服务Pinpoint UI界面使用第二十章 基于Jenkins+k8s+harbor等构建企业级DevOps平台第二十一章 基于Promethues+Alert+Grafana搭建企业级监控系统第二十二章 部署智能化日志收集系统EFK 
Spring Cloud是一个用于构建分布式系统的开发工具包,它提供了一系列的组件和工具,用于简化分布式系统的开发和部署。而Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。 当Spring CloudKubernetes结合使用时,可以实现更高级别的服务治理和部署管理。具体来说,Spring Cloud可以利用Kubernetes的强大功能来管理和调度应用程序的容器实例,实现自动化的容器部署、伸缩和故障恢复。同时,Spring Cloud还可以通过与Kubernetes的集成,实现服务注册与发现、负载均衡、断路器等分布式系统的核心功能。 在使用Spring Cloud依赖Kubernetes时,你需要引入相应的依赖,并进行配置。具体步骤如下: 1. 引入Spring Cloud Kubernetes依赖: 在你的项目中,添加以下依赖到你的构建文件(如pom.xml)中: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-kubernetes</artifactId> </dependency> ``` 2. 配置Kubernetes相关信息: 在你的应用程序配置文件(如application.yml)中,添加以下配置信息: ```yaml spring: cloud: kubernetes: enabled: true ``` 3. 使用Kubernetes相关功能: 通过Spring Cloud Kubernetes提供的注解和工具类,你可以使用Kubernetes的功能,例如服务注册与发现、配置管理等。具体使用方法可以参考Spring Cloud Kubernetes的文档和示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值