Spring Boot Alibaba(一)
系统架构的"打怪升级"之路
1. 单体架构:"一个人就是一支军队"
想象一下,你开了一家路边小餐馆。刚开始生意一般,你既是老板,又是大厨,还得兼职端盘子、收银,甚至厕所堵了都得你自己通。这就是单体架构。
- 核心特征 :所有功能(用户、订单、支付)都写在一个项目里,最后打成一个
war包扔到 Tomcat 里运行。 - 优点:开发简单,部署方便,不用操心太多。
- 致命痛点 :
- 代码耦合严重:你想改个菜单(下单功能),结果不小心把收银台(支付功能)给砸了。
- 扩展受限:生意好了忙不过来,你没法只雇个服务员,只能克隆一个"全能的你",成本太高。
- 迭代困难:每次改个小功能,整个店都得重新装修重启,效率极低。
2. 分布式架构:"分工合作,效率翻倍"
生意火了,你终于招兵买马了!你雇了专门的厨师炒菜,专门的服务员点餐,专门的收银员收钱。大家各司其职,效率瞬间起飞。这就是分布式架构。
- 核心特征:按功能点把项目拆分成多个模块。
- 新问题 :
- 远程调用麻烦:服务员得跑去厨房喊一嗓子"菜好了没?",模块间通信变复杂了。
- 负载均衡:如果有三个服务员,老板怎么知道把哪桌客人分给谁?
3. 微服务架构:"专业的人做专业的事"
后来你开成了连锁品牌,成立了专门的"采购部"、"人事部"、"财务部"。每个部门只负责核心职能,为所有门店服务。这就是微服务。
- 核心特征:单一职责,服务自治。用户服务只管注册登录,订单服务只管下单发货。
️ Spring Cloud------微服务界的"组装大师"
1. 什么是 Spring Cloud?
很多人以为它是个框架,其实不对。它是一套微服务开发全家桶 。
Spring 官方非常鸡贼(褒义),它从来不重复造轮子。它发现 Netflix 公司造了很多好用的零件(Eureka, Ribbon, Hystrix),于是 Spring 就基于 Spring Boot,把这些零件组装在一起,提供了一套开箱即用的解决方案。
公式记忆法:
Spring Cloud = Spring Boot + Netflix(早期的经典组合)
2. 什么是 Spring Cloud Alibaba?
既然有了 Spring Cloud,为啥还要搞个 Alibaba 版?
因为后来 Netflix 的很多核心组件(比如 Eureka 2.0)不更新了,甚至停更了。这时候,国产之光阿里巴巴站了出来,把自己在双11这种亿级流量下摸爬滚打出来的经验开源了,推出了 Spring Cloud Alibaba。
新公式:
Spring Cloud Alibaba = Spring Boot + Alibaba
它用 Nacos 代替了 Eureka+Config,用 Sentinel 代替了 Hystrix,更符合国内场景,功能更强大。
3. 版本匹配------微服务开发的"第一大坑"
警告 :这是新手最容易踩雷的地方!
Spring Boot、Spring Cloud、Spring Cloud Alibaba 三者之间有着严格的"门当户对"关系。如果版本不匹配,你会遇到各种莫名其妙的 Bug,让你怀疑人生。
推荐搭配:
-
下表为按时间顺序发布的 Spring Cloud Alibaba 以及对应的适配 Spring Cloud 和 Spring Boot 版本关系:
Spring Cloud Alibaba Version Spring Cloud Version Spring Boot Version 2021.0.1.0 Spring Cloud 2021.0.1 2.6.3 2.2.7.RELEASE Spring Cloud Hoxton.SR12 2.3.12.RELEASE 2021.1 Spring Cloud 2020.0.1 2.4.2 2.2.6.RELEASE Spring Cloud Hoxton.SR9 2.3.2.RELEASE 2.1.4.RELEASE Spring Cloud Greenwich.SR6 2.1.13.RELEASE 2.2.1.RELEASE Spring Cloud Hoxton.SR3 2.2.5.RELEASE 2.2.0.RELEASE Spring Cloud Hoxton.RELEASE 2.2.X.RELEASE 2.1.2.RELEASE Spring Cloud Greenwich 2.1.X.RELEASE 2.0.4.RELEASE(停止维护,建议升级) Spring Cloud Finchley 2.0.X.RELEASE 1.5.1.RELEASE(停止维护,建议升级) Spring Cloud Edgware 1.5.X.RELEASE
注册中心和配置中心------Nacos
1. 什么是 Nacos?
Nacos 的名字就是它的功能说明书:
- Na = Naming (服务注册与发现)
- Co = Configuration (配置管理)
- S = Service (服务)
它是阿里巴巴开源的一个"瑞士军刀",既是注册中心 ,又是配置中心。
2. Nacos 的安装与启动
别被复杂的集群吓到了,单机版启动只需三步:
- 上传解压 :
tar -zxvf nacos-server-1.4.1.tar.gz - 启动 :进入
bin目录,执行./startup.sh -m standalone(standalone 表示单机模式,不加这个默认是集群,会报错)。 - 访问 :浏览器输入
http://ip:8848/nacos,默认账号密码都是nacos。
3. Nacos 作为注册中心
它的作用就像一个服务户籍管理处。
服务提供者 (Provider):
-
依赖 :
spring-cloud-starter-alibaba-nacos-discovery -
配置 (
application.yml):yamlspring: cloud: nacos: discovery: server-addr: 192.168.61.132:8848 # 告诉 Nacos 服务器在哪 application: name: nacos-provider # 给自己起个名,注册进去 -
启动类 :加上
@EnableDiscoveryClient注解,表示"我要去注册了"。
服务消费者 (Consumer):
-
依赖:同上。
-
配置:同上(也要注册进去,方便别人找到我)。
-
调用代码 :
以前写死 IP 地址调用,现在要用DiscoveryClient去查户口:java// 1. 注入 DiscoveryClient @Autowired private DiscoveryClient discoveryClient; // 2. 根据服务名获取实例列表 List<ServiceInstance> instances = discoveryClient.getInstances("nacos-provider"); // 3. 拿到 IP 和端口,拼接 URL 进行调用 ServiceInstance instance = instances.get(0); String url = "http://" + instance.getHost() + ":" + instance.getPort() + "/provider/...";
4. Nacos 作为配置中心
它的作用是集中管理配置文件,修改配置不用重启服务,动态生效,简直是运维的福音。
关键步骤:
-
依赖 :除了 discovery,还要加
spring-cloud-starter-alibaba-nacos-config。 -
配置文件 :注意!必须创建一个
bootstrap.yml(不是 application.yml)。因为配置中心的加载优先级比本地配置高,应用启动初期就要去 Nacos 拉取配置。yamlspring: cloud: nacos: config: server-addr: 192.168.61.132:8848 prefix: nacos-config # 对应 Data ID 的前缀 file-extension: yaml # 文件格式 -
Nacos 控制台操作 :
在网页上新建配置,Data ID 的命名规则必须严格遵守:prefix + file-extension(例如nacos-config.yaml)。配置内容写好后发布,你的微服务就能实时读取到了。
未完待续...