Spring Cloud概述

1. 微服务架构

1.1 介绍

在分布式系统下,当部署的服务越来越多的时候,重复的代码就会越来越多,服务的调用关系也会越来越复杂,可以把一些通用的,会被多个上层服务调用的共享业务,提取成独立的基础服务,组成一个个微笑的服务,这就是微服务

简单来说,微服务就是很小的服务,小到一个服务只对应一个单一的功能,只做一件事,这个服务可以单独部署运行

微服务之间可以采用Rest和RPC协议进行通行


为什么需要RPC?(它解决了什么问题?)

在微服务或分布式系统中,服务部署在不同服务器上。如果没有RPC,你需要手写Socket代码、定义数据格式、处理重试和异常,极其繁琐。RPC框架帮你搞定:

  • 网络通信(TCP/UDP/HTTP2)。

  • 序列化协议(将对象转为二进制流,如 Protobuf、JSON、Hessian)。

  • 服务发现(在动态IP环境中找到目标服务器)。

  • 负载均衡与容错(超时重试、熔断)。

1.2 挑战

优点:

  • 易开发和维护,每个微服务负责的业务比较清新
  • 容错性高,一个服务发生故障,可以使故障隔离在单个服务中,不影响整体服务故障
  • 扩展性好,每个服务器都是独立运行的,可以结合项目实际情况进行扩展
  • 技术型灵活,每个服务都是单独的团队来运维,可以选择合适的技术栈

挑战:

  • 服务依赖,随着服务的数量增加,服务之间的关系也会变的更加复杂,一个服务更改,需要考虑对其他服务的影响
  • 运维成本
  • 开发和测试
  • 服务监控
  • 负载均衡

.......

2. Spring Cloud 介绍

Spring Cloud 为开发人员提供了工具,可以快速构建分布式系统中一些常见的模式(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、短生命周期微服务和契约测试)

3. 环境和工程搭建

3.1 服务拆分

1. 单一职责

单一职责原则是面向对象设计中的一个基本原则,它指的是一个类应该专注单一功能

在微服务架构中,一个微服务也应该只负责一个功能或业务领域,每个服务应该有清晰的定义和边界,只关注自己的特定业务领域

2. 服务自治

服务自治是指每个微服务都应该具备高度自治的能力,即每个服务要能够做到独立开发,独立测试,独立构建,独立运行

3. 单向依赖

微服务之间需要做到单向依赖,严禁循环依赖、双向依赖

3.2 业务准备

简单来说,该页面提供了一下信息:

  1. 订单信息

  2. 商品信息

根据服务的单一职责原则,将服务拆分为:订单服务,商品服务

订单服务:提供订单id,获取订单详细信息

商品服务:根据商品id,返回商品详细信息

3.3 工程搭建

创建父工程

DependencyMangement 和 Dependencies

  1. Dependencies 将所依赖的jar直接加到子项目中,自项目也会继承该依赖

  2. DependencyMangement 只是声明依赖,并不实现jar包引入,如果子项目中需要用到相关依赖,需要显示声明,如果子项目中没有指定具体版本,会从父类项目中读取version

创建子项目

订单服务

商品服务

3.4 远程调用

实现思路: order-service服务向product-service服务发送一个http请求,把得到的返回结果,和订单结果融合起来,返回调用方

定义RestTemplate

修改order-service中的OrderService

从SpringBoot 3.0 开始支持的一个HTTP请求工具,它是一个同步的REST API 客户端,提供了常见的REST请求方案的模板

REST(Representation State Transfer)表现层资源状态转移

是一种软件架构风格

4. 项目存在的问题

  • 远程调用时,URL的IP和端口号是写死的,如果更换IP,需要修改代码
  • 多机部署分摊压力
  • 远程调用时,URL容易写错,而且复用性不高
  • 所有的服务都可以调用该接口,是否有风险
  • ........

除此之外,微服务架构还面临很多问题,接下来我们学习如何使用Spring Cloud 来解决这些问题

相关推荐
半个落月22 分钟前
React JWT 登录鉴权实战:Mock、Zustand、Axios 与路由守卫全流程
后端·react.js
XingXingXxx26 分钟前
Skill 能自己变强吗?从轨迹归纳到文本空间优化的进化之路
后端
jvmind_dev39 分钟前
频繁 new JedisCluster 之后,对象池为什么回不去了?
java·后端
掘金者阿豪40 分钟前
给你的AI龙虾打造一间像素办公室!Star Office UI部署+公网访问完整教程
后端
学长毕业设计1 小时前
基于SpringBoot的咖啡馆管理系统的设计与实现(源码+文档+讲解视频)
java·spring boot·后端
骇客野人1 小时前
SpringBoot业财一体化系统设计和落地实施方案
java·spring boot·后端
学长毕业设计1 小时前
基于SpringBoot的教学资源推荐系统的设计与实现(源码+文档+讲解视频)
java·spring boot·后端
用户850869276151 小时前
一次线上文件上传 Bug 引发的区块链分布式存储深度排查
后端
名字还没想好☜1 小时前
Java Cleaner 实战:替代废弃的 finalize() 做堆外资源清理,以及强引用导致永不回收的坑
java·后端·spring