引言:
在写这篇博客之前,其实吧,博主很久之前有过一段时间的Spring Cloud的案例项目开发经验,就是一个案例项目开发而已,也说不上有多高大上,那个时候,我其实也是从众而已罢了,毕竟现在的面试动不动都是分布式,微服务项目等等。
本来嘛,我其实不想如个系列的坑的,毕竟网上这个系列一大堆的,并且有好多的Spring Cloud系列讲的还蛮好,甚至带你对源码进行分析,我觉得这样挺好的,但是吧,我发现我还是自己搞一套吧,毕竟属于自己的才是我的,适合自己的才是符合我的身价,哈哈,开个玩笑,我一个程序员有什么身价。总之就是想写一个属于自己系列的Spring Cloud系列吧。
高并发在面试都已经成为常态了,说句搞笑的话,在校大学生,如果没有实习的,都是自己搭个项目来玩玩罢了,练练手,考虑问题也是在自己在项目开发中碰到的问题罢了,怎么能够和企业有需求任务,有客户的项目需求推动的开发者比呢,就算是有实习的,绝大多数人也接触不到高并发,微服务等。
并且微服务项目在一定的场景下也是不可用的,比如游戏开发项目,用微服务的话,你觉得网络延迟如何,并且微服务项目的数据通讯绝大多少都是通过RPC进行,你可否了解RPC通讯的好处与坏处?
对于Spring Cloud的使用,网络上一直存在争议,有人说使用Spring Cloud利大于弊,有人则说他弊大于利。好吧,题外话说多了,等下人都跑了。那么你觉得如何?
往下看,咱们首先了解Spring Cloud
Spring Cloud是一个基于Spring Boot实现的云原生微服务开发工具集,它为开发者提供了在分布式系统环境下快速构建一些常见模式的(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)工具。Spring Cloud利用Spring Boot的开发便利性,简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器等。
Spring Cloud的好处包括但不限于:
Spring Cloud框架包含的组件非常多,这里列举一些常用的:
Spring Cloud Netflix(包含Eureka、Hystrix、Zuul等)
Spring Cloud Config
Spring Cloud Bus
Spring Cloud Consul
Spring Cloud Gateway
Spring Cloud Security
Spring Cloud Sleuth
Spring Cloud Stream
Spring Cloud OpenFeign
解答一个开头的问题,我们所说的,Spring Cloud究竟有没有是我们想的那么好?
Spring Cloud是否真的那么好,这取决于具体的使用场景和需求。对于需要构建大规模微服务架构的企业来说,Spring Cloud提供了一套成熟的解决方案,但对于小型项目或者不需要微服务的场景,使用Spring Cloud可能会带来不必要的复杂性。
在微服务架构中,服务之间的通信可以通过多种方式实现,其中远程过程调用(RPC)是一种常见的通信机制。RPC允许一个服务直接调用另一个服务的方法,就像调用本地方法一样,这种方式隐藏了网络通信的复杂性。
RPC通信的好处包括:
RPC通讯的缺点:
这个问题,就又回到我们上边的那个点上去了,为啥在游戏项目中,普遍不使用Spring Cloud项目,就这样说吧,你在玩王者荣耀,延迟高一点你都难受,在Sping Cloud项目中,我们会有在发送请求,并等待请求响应的过程,但是作为一个游戏项目,服务玩家那数量可不少,那么对性能的要求也高,并且各个模块直接的数据通讯也是一个问题。
在Spring Cloud有几种常用的策略:
咱们介绍一下Spring Cloud的核心组件和相关概念,虽然在上述我们都有涉及,这里将提高更为详细的:
配置管理(Spring Cloud Config):
提供集中化的外部配置支持,可以与各种环境无缝地工作,支持配置文件的热加载。
服务发现(Spring Cloud Netflix Eureka):
服务注册与发现机制,允许服务相互查找并通信。Eureka Server作为注册中心,各个微服务作为Eureka
Client注册到Eureka Server上。
客户端负载均衡(Spring Cloud Netflix Ribbon):
在客户端实现负载均衡,可以在进行远程调用时根据某种策略(如轮询、随机)从服务注册中心获取可用服务列表,并选择一个服务实例进行调用。
断路器(Spring Cloud Netflix Hystrix):
提供了断路器功能,防止服务间的级联故障,通过隔离服务的点对点调用,Hystrix可以控制服务间的交互。
声明式服务调用(Spring Cloud OpenFeign):
一个声明式的Web服务客户端,使得编写Web服务客户端变得更加简单。
API网关(Spring Cloud Gateway/Zuul):
提供动态路由、监控、弹性、安全等边缘服务的支持。API网关是微服务架构中的重要组成部分,它负责请求的路由、过滤和转发。
分布式跟踪(Spring Cloud Sleuth/Zipkin):
提供服务链路追踪的解决方案,帮助开发者了解服务间的调用链路和性能瓶颈。
消息驱动的微服务(Spring Cloud Stream):
提供了一套创建消息驱动微服务的模型,包括发布/订阅、消费组和消息分区的概念。
服务总线(Spring Cloud Bus):
用于将分布式系统的节点与轻量级消息系统连接起来,用于广播状态更改或其他管理指令。
分布式事务(Spring Cloud Alibaba Seata):
提供分布式事务解决方案,保证跨服务调用的数据一致性。
安全(Spring Cloud Security):
提供安全相关的功能,如OAuth2认证。
Spring Cloud的架构设计遵循了微服务的核心原则,如服务自治、去中心化治理、弹性设计、配置管理等。通过这些组件和概念,Spring Cloud为开发者提供了一套相对完整的微服务解决方案,帮助开发者在复杂的分布式系统中实现快速开发和部署。