从“一人全栈“到“分布式打工“:Spring Cloud微服务进化史(小白友好版)
相信很多刚入行的小伙伴都听过 "微服务" 这个词,感觉它高大上又遥不可及。其实微服务并没有那么神秘,它就像我们公司的组织架构一样,是一步步演变过来的。今天我就用最接地气的方式,带大家搞懂 Spring Cloud 到底是个啥。
一、系统架构的 "打怪升级" 之路
第一关:单体架构 ——"一个人就是一支军队"
想象一下,你开了一家小餐馆。刚开始的时候,你既是老板又是厨师,既是服务员又是收银员,连打扫卫生都是你一个人包了。这就是单体架构。
所有的功能都写在一个项目里,最后打成一个 war 包扔到 Tomcat 里运行。优点很明显:开发简单、部署方便、调试容易。
但缺点也同样致命:
-
代码耦合严重:改个下单功能,结果把支付功能搞崩了
-
迭代困难:每次修改都要重新部署整个项目,重启一次 10 分钟
-
技术债务高:祖传代码没人敢动,动了就出问题
-
扩展受限:只能整个项目一起扩容,不能只给下单功能加机器
当你的餐馆生意越来越好,每天排队的人越来越多的时候,你一个人肯定忙不过来了。这时候,你就需要进入下一个阶段。
第二关:分布式架构 ——"分工合作,效率翻倍"
你终于招到人了!你雇了一个厨师专门负责炒菜,一个服务员专门负责点餐和上菜,一个收银员专门负责收钱。每个人只负责自己的那一块工作,效率一下子就上来了。这就是分布式架构。
我们把一个大项目按照功能拆分成多个模块,每个模块独立部署运行。比如用户模块、订单模块、支付模块等等。
但分布式架构也带来了新的问题:
-
拆分粒度难把握:拆太细了调用关系复杂,拆太粗了又和单体没区别
-
远程调用麻烦:模块之间怎么通信?用 HTTP 还是 RPC?
-
负载均衡:同一个模块部署了多个实例,请求该发给哪个?
第三关:微服务架构 ——"专业的人做专业的事"
后来你的餐馆开成了连锁品牌。你不再自己管理每个门店的厨师和服务员,而是成立了专门的采购部、人事部、运营部、财务部。每个部门只负责自己的核心职能,为所有门店提供服务。这就是微服务架构。
微服务是分布式架构的一种更细粒度的实现,它强调单一职责和服务自治。每个微服务只做一件事,并且把这件事做到极致。
比如用户服务只负责用户的注册、登录、信息管理;订单服务只负责订单的创建、支付、发货;支付服务只负责对接各种支付渠道。
二、Spring Cloud—— 微服务界的 "组装大师"
1. 什么是 Spring Cloud?
很多人以为 Spring Cloud 是一个框架,其实不对。Spring Cloud 是一套微服务开发的全家桶。
Spring 最聪明的地方就是它从来不重复造轮子。它发现市面上已经有很多优秀的微服务组件了,比如 Netflix 的 Eureka、Ribbon、Feign、Hystrix 等等。于是 Spring 就基于 Spring Boot,把这些组件整合在了一起,给开发者提供了一套开箱即用的微服务解决方案。
所以我们可以得到一个公式:
Spring Cloud = Spring Boot + Netflix
Spring Cloud 就像一个组装大师,它把各个厂商最好的零件组装成了一辆完整的汽车,让我们不用再自己从零开始造轮子。
2. 什么是 Spring Cloud Alibaba?
既然有了 Spring Cloud,为什么又出来一个 Spring Cloud Alibaba 呢?
因为后来 Netflix 的很多核心组件都停止更新了。比如 Eureka 2.0 开发夭折,Hystrix 也进入了维护模式。这时候,我们的 "国产之光" 阿里巴巴站了出来。
阿里把自己在微服务领域多年的实践经验开源了出来,推出了 Spring Cloud Alibaba。它同样是基于 Spring Boot,整合了阿里的 Nacos、Sentinel、Seata 等优秀组件。
所以我们又得到了一个新的公式:
Spring Cloud Alibaba = Spring Boot + Alibaba
Spring Cloud Alibaba 不仅解决了 Netflix 组件停更的问题,还更符合国内的使用场景。比如 Nacos 同时支持服务注册发现和配置中心,比 Eureka+Config 的组合方便多了;Sentinel 的控制台也比 Hystrix 的 Dashboard 好用太多。
三、版本匹配 —— 微服务开发的 "第一大坑"
如果你问我微服务开发中最容易踩的坑是什么,我一定会毫不犹豫地告诉你:版本不匹配!
Spring Boot、Spring Cloud、Spring Cloud Alibaba 三者之间有着非常严格的版本对应关系。如果版本不匹配,你会遇到各种莫名其妙的 bug,让你怀疑人生。
就像找对象一样,一定要门当户对。你不能让 Spring Boot 3.x 去搭配 Spring Cloud Hoxton,就像你不能让 00 后去和 60 后谈恋爱一样,代沟太大了。
这里给大家一个官方推荐的版本对应关系:
|
Spring Cloud 版本 |
Spring Cloud Alibaba 版本 |
Spring Boot 版本 |
|
Hoxton.SR9 |
2.2.6.RELEASE |
2.3.2.RELEASE |
|
2020.0.5 |
2021.1 |
2.4.13 |
|
2021.0.8 |
20[21.0.5.0](21.0.5.0) |
2.6.15 |
|
2022.0.4 |
20[22.0.0.0](22.0.0.0) |
3.0.9 |
强烈建议:在创建微服务项目之前,一定要先去官方网站查清楚最新的版本对应关系,然后再开始写代码。否则你可能会花一整天的时间去解决一个版本不匹配导致的问题。
写在最后
好了,今天的分享就到这里。相信大家对 Spring Cloud 已经有了一个初步的认识。
其实微服务并没有那么可怕,它只是一种架构思想。我们学习 Spring Cloud,本质上就是学习如何使用这套全家桶来解决微服务开发中遇到的各种问题。
下一篇文章我会带大家手把手搭建一个最简单的 Spring Cloud Alibaba 项目,让大家亲身体验一下微服务的魅力。
互动话题:你在微服务开发中踩过哪些版本不匹配的坑?欢迎在评论区留言分享,让大家一起避坑!
更多推荐


所有评论(0)