架构是设计图,技术栈是工具箱
你去盖一栋楼,得先有设计图吧?几层、楼梯在哪、水电怎么走,这些属于“架构”。而用钢筋还是木头、水泥选哪个牌子,这是“技术栈”的事。服务端开发也一样,很多人把“架构”和“技术栈”混着用,其实它们差得挺远。
举个例子:开个外卖平台
你想做个外卖系统,用户下单、商家接单、骑手配送。这时候你得考虑系统怎么拆——是所有功能塞在一个程序里(单体),还是把订单、支付、用户分开成独立模块(微服务)?这个拆法就是架构。
那用 Java 还是 Go 写?数据库选 MySQL 还是 PostgreSQL?部署在 Docker 里还是直接跑在物理机上?这些具体的技术选择,就是技术栈。
架构决定结构,技术栈影响实现
比如你定了微服务架构,每个服务独立部署、互相通信。这决定了你的系统结构更灵活,但也带来了服务发现、网络延迟等问题。但具体每个服务用什么写,不影响架构本身。订单服务可以用 Spring Boot 写,支付服务用 Go 实现,只要接口对得上就行。
反过来,就算你全用 Java + Spring Cloud,但如果所有代码打成一个包发布,那还是单体架构,不是微服务。光堆高大上的技术栈,改不了架构本质。
常见技术栈长啥样?
拿一个典型的 Web 后端项目来说,技术栈可能是:
语言:Java
框架:Spring Boot
数据库:MySQL + Redis 缓存
部署:Nginx + Docker + Kubernetes
消息队列:RabbitMQ
这套组合拳你可以用在单体架构上,也能用于微服务。技术栈没变,但架构一换,整个系统的扩展性、维护方式就完全不同。
为啥要分清这两者?
团队开会时,有人嚷嚷“我们得上微服务”,结果发现数据库还是共用一个,服务之间强依赖,根本没法独立上线。这就是只改了技术栈,没动架构。
还有人觉得“用了 K8s 就是现代化架构”,其实 K8s 只是帮你管容器的工具,你拿它跑单体应用也没问题。工具再高级,也替代不了合理的系统设计。
搞清楚“我要怎么组织系统”和“我用什么来实现”是两回事,才能避免踩坑。架构不对,技术栈越复杂,后期越难改。