微服务的构建环境比较--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快速轻松的启动开发很重要,但从项目启动到最终发布的过程是漫长的,你需要做到以下几点才能真正利用好微服务。

  • 基本监控、仪表、健康检查

  • 分布式日志记录、跟踪

  • 针对每个服务,隔离的不只是代码,而是整个构建+测试+打包+推广

  • 可以为每个服务明确定义上游/下游/编译时/运行时的依赖关系

  • 知道如何构建、发布和维护良好的 API 和契约

  • 尊重向后和向前兼容性,就算你即是服务的提供者又是消费者

  • 良好的单元测试技能和准备好做更多的工作(随着微服务的增加,一切都变得更加困难,因此需要更多的单元/契约/api 测试驱动,以及更少的 e2e 驱动)

  • 了解 微服务 vs 模块 vs 库、分布式单体应用、协调发布、数据库驱动集成等

  • 了解基础设施自动化(这里需要了解更多)

  • 有可用的 CI/CD 基础设施

  • 已经或准备投资开发工具、共享库、内部Artifact注册表等

  • 拥有工程方法和流程工具来分解功能需求,并在多个服务中实现/跟踪/发布(xp、pivotal、scrum 等)

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

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

技术映射

====

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

上表的主要结论是:

  • 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 健康检查、进程重启和自动扩展功能相结合时,微服务将变成一个真正的健壮系统(反脆弱系统, antifragile system)。

优点和缺点

=====

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

Spring Cloud

============

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

优点

==

  • Spring Platform自身提供的统一编程模型,以及Spring Boot的快速应用创建能力,给开发者带来了极好的微服务开发体验。例如,您可以使用少量注释创建一个配置服务器,再添加一些注释就可以让客户端库配置您的服务。

  • 有丰富的类库可供选择,涵盖了大多数运行时问题。所有库都是用 Java 编写的,提供了多种功能、更好的控制和优化选项。

  • 不同的 Spring Cloud 库彼此很好地集成在一起。例如,一个 Feign 客户端也将使用 Hystrix 进行断路,使用 Ribbon 对请求进行负载平衡。一切都是注解驱动的,易于开发,感觉就像是 Java 开发人员的天堂。

缺点

==
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后的话

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!

部分截图:
在这里插入图片描述

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

[外链图片转存中…(img-VpG90Uuk-1713683262953)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.安装JDK 在进行SpringCloud微服务架构环境部署之前,需要先安装Java Development Kit(JDK),可以从Oracle官网下载最新版本的JDK,然后按照提示安装即可。 2.安装Eclipse Eclipse是一款开源的集成开发环境(IDE),可以用来开发Java应用程序。在进行SpringCloud微服务架构环境部署之前,需要先安装Eclipse。 可以从Eclipse官网下载最新版本的Eclipse,然后按照提示安装即可。 3.安装Maven Maven是一个构建工具,可以用来自动化构建、测试和部署Java应用程序。在进行SpringCloud微服务架构环境部署之前,需要先安装Maven。 可以从Maven官网下载最新版本的Maven,然后按照提示安装即可。 4.安装Docker Docker是一款开源的容器化平台,可以将应用程序打包成容器,方便部署和管理。在进行SpringCloud微服务架构环境部署之前,需要先安装Docker。 可以从Docker官网下载最新版本的Docker,然后按照提示安装即可。 5.安装Kubernetes Kubernetes是一个开源的容器编排系统,可以用来部署、管理和扩展容器化应用程序。在进行SpringCloud微服务架构环境部署之前,需要先安装Kubernetes。 可以从Kubernetes官网下载最新版本的Kubernetes,然后按照提示安装即可。 6.部署SpringCloud微服务架构 在完成以上步骤之后,就可以开始部署SpringCloud微服务架构了。具体步骤如下: (1)创建一个SpringBoot项目,并在pom.xml文件中添加所需的SpringCloud依赖。 (2)在src/main/resources目录下创建一个application.yml配置文件,并配置SpringCloud相关的参数。 (3)使用Maven打包应用程序,并将生成的jar文件上传到Docker镜像仓库。 (4)使用Kubernetes创建一个Deployment对象,用来部署应用程序的容器。 (5)使用Kubernetes创建一个Service对象,用来暴露应用程序的服务。 (6)使用Kubernetes创建一个Ingress对象,用来路由应用程序的请求。 (7)完成以上步骤后,就可以访问应用程序了。 7.总结 以上就是SpringCloud微服务架构环境部署的详细步骤。需要注意的是,在进行部署之前,需要先熟悉Docker和Kubernetes的基本概念和操作方法,以便能够顺利完成部署。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值