刚开始做网站那会儿,很多人都是把所有功能塞进一个项目里,用户管理、订单处理、内容发布全挤在一块。这种做法就像刚毕业时住的合租房,大家共用厨房卫生间,省事是省事,可人一多就容易打架。
单体架构的甜蜜期与瓶颈
早期流量不大时,单体架构跑得挺顺。改个按钮颜色,本地测试一下,打个包上传服务器,几分钟搞定。但随着业务变复杂,比如突然要做会员体系、积分商城、消息推送,代码越来越臃肿。这时候改一处功能,可能连带着登录页都打不开了。
更头疼的是团队协作。三五个人还能凑合,十来号人同时开发,每天合并代码像拆炸弹,谁也不知道上一秒提交会不会炸掉别人的功能。
垂直拆分:先分房间再分楼层
为了解决问题,有人开始把系统按功能切开。比如把用户中心独立出来,订单模块单独部署。这就像合租久了,大家商量着每人一间房,互不打扰。数据库也跟着拆,各自管各自的表。
这时候访问流程变了。原本直接查本地数据库就能登录,现在得调用用户中心的接口。虽然多了网络请求,但各模块能独立上线,出问题也容易定位。
服务化升级:让模块自己说话
再往后,发现重复代码越来越多。十个服务都要发短信,难道每个都写一遍短信发送逻辑?于是搞了个专门的通知服务,别人只需要发个请求就行。
RPC 框架用起来了,服务之间通过定义好的协议通信。注册中心记下谁提供什么服务,调用方去那里查地址。就像小区物业贴了个公告栏,谁修水管、谁换灯泡,需要时找对应的人就行。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
微服务不是终点
拆得太细也有麻烦。一次下单操作要走七八个服务,某个环节卡住,整个流程就挂了。监控难度也上来了,得引入链路追踪,看请求到底卡在哪。
有些人又开始往回收,把关联紧密的服务打包成“中台模块”,既保留独立性,又减少过度拆分带来的损耗。技术没有银弹,架构演进本质是在成本、效率和稳定性之间找平衡点。
就像搬家,从合租到整租再到买公寓,每一步都是被现实推着走的。今天的最优解,明天可能就成了包袱。关键是留够腾挪空间,别让架构困住业务的脚步。