赞
踩
背景
==
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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!
部分截图:
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
:
[外链图片转存中…(img-VpG90Uuk-1713683262953)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。