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 业务准备

简单来说,该页面提供了一下信息:
-
订单信息
-
商品信息
根据服务的单一职责原则,将服务拆分为:订单服务,商品服务
订单服务:提供订单id,获取订单详细信息
商品服务:根据商品id,返回商品详细信息
3.3 工程搭建
创建父工程

DependencyMangement 和 Dependencies
-
Dependencies 将所依赖的jar直接加到子项目中,自项目也会继承该依赖
-
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 来解决这些问题