Mobile wallpaper 1Mobile wallpaper 2Mobile wallpaper 3Mobile wallpaper 4
896 字
4 分钟
微服务与SpringCloud

What

  • 分布式:就是指有多个系统,如A模块调用B模块的接口

  • 微服务:一种软件架构风格,传统项目所有功能都写在一起,微服务就是把这些功能拆成若干个小项目,最后组装成一个大项目,比如支付功能就只实现支付,每个小项目都可以部署在不同地方,互相调用

Why:在不同服务器上的A模块 调用 B模块

微服务常见框架如下

SpringCloud#

提供了一套微服务实现标准,由很多公司实现(一个标准 / 接口,多个实现)

核心组件#

没有什么问题是加了中间件解决不了的,如果有,那就多加

众所周知,服务之间的调用需要发网络请求(HTTP),而Spring自带的RestTemplate存在诸多问题

所以,springcloud带来了注册中心nacos,让服务知道彼此的信息

1. 注册中心:Nacos#

类似Nginx,常见的还有Eureka,consul

告诉系统你这服务叫啥,想用你的时候直接叫你名儿

原理#
  • 负载均衡(规定 同一个服务被多实例部署(多个端口部署),到底该请求谁)

  • 心跳机制:服务会和nacos定期发请求,看看你活着没

挂了:把该服务移除,并且推送变更消息

安装部署#

通过doker,具备图形化界面,需绑定数据库,http://192.168.150.101:8848/nacos/

服务注册#

引入依赖

Yaml配置nacos地址:服务名称,nacos地址

配置管理#
服务发现与调用(白雪,nacos自带的十分变态,因此要用OpenFeign)#

引入依赖

Yaml配置nacos地址

发现并调用服务:使用DiscoveryClient类,配置服务名称,请求方式和路径,返回值类型,请求参数,手写负载均衡

2. 服务调用:OpenFeign#

让Java发起HTTP请求更加优雅

咋用#

引入依赖

在启动类开启:@EnableFeignClients

编写OpenFeign客户端,标记类为Feign的客户端。这里只需要声明接口,无需实现方法。接口中的几个关键信息:

使用FeignClient,一行搞定

最佳实践#

这个功能放在哪里好?我是耦合在原代码还是新建个模块?在实际的使用会有两种方案

  • 单project,新建一个api模块即可

  • 每个微服务就是一个project,新建一个service

日志输出#
3. 负载均衡:loadbalancer#

已被OpenFeign继承

现在B模块被部署在多个节点上,A到底请求哪一个节点

老版用Ribbon

4. 网关:Gateway#

我的服务在不同的服务器,端口咋办?到底要请求谁?如果有身份认证怎么办?

叮叮叮,网关来了!同种类的还有zuul

网络关口,负责将前端的请求路由转发、身份校验

5. 熔断:Hystrix / Sentinal#

设定请求上限 -> B规定只接受100个,结果A发了105个,超过的会直接拒绝,类似保险丝

分布式事务#

我每个微服务都有自己独立的数据库,还能保持数据的ACID吗?(原子性,一致性,隔离性,持久性)

W:一个业务的执行,还需要依赖别的业务,这些业务需要保持同时成功或失败。也就是单体事务的多体进化。

解决方案:Seata#
微服务与SpringCloud
http://www.kafublog.com/posts/微服务-springcloud框架篇/微服务-springcloud框架篇/
作者
KafuSnow•卡夫雪
发布于
2025-11-30
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时