第二章 技术选型与架构设计

技术选型和架构设计,说白了就是给项目「搭骨架」。骨架搭得好,后面写代码就像拼乐高;搭不好,那就是在烂泥里打滚。我见过太多项目,一开始图省事随便选了个技术栈,结果半年后重构成本比重新写一套还高。

这一章,我把这些年踩过的坑和总结的经验都摊开来讲。你想想看,选技术就像挑工具——锤子再好,也不能拿来拧螺丝对吧?

2.1 技术选型原则

技术选型没有银弹,但有几条铁律。我个人习惯先问三个问题:团队会什么?业务要什么?社区活不活跃?

核心原则:

  • 团队匹配度——选团队熟悉的技术,别为了炫技选冷门框架
  • 业务适配性——高并发选 Go/Java,快速原型选 Python/Ruby
  • 社区生态——活跃社区意味着坑有人填,问题有人答
  • 长期维护成本——别选那种「三年不更新」的库

我在项目中遇到过一件事:有个团队非要上 Rust 做 Web 后端,理由是「性能好」。结果招人招了三个月,项目延期半年。嗯,这里要注意——技术选型不是选「最好的」,而是选「最合适的」。

避坑指南:我曾经在一个电商项目里选了 MongoDB 做订单存储,理由是「灵活」。结果到了对账环节,复杂查询慢得像蜗牛。最后不得不加了一层 Elasticsearch 做查询缓存。所以啊,关系型数据还是老老实实用 MySQL 或 PostgreSQL。

2.2 分层架构设计

分层架构是最经典的架构模式,没有之一。它的核心思想就一句话:各司其职,互不干扰。

我习惯把系统分成四层:

层级 职责 常见技术
表现层 处理用户交互、数据展示 React、Vue、Spring MVC
业务层 核心业务逻辑、规则校验 Service 层、领域模型
数据访问层 数据库 CRUD、缓存操作 MyBatis、JPA、Redis
基础设施层 消息队列、文件存储、日志 Kafka、MinIO、ELK

为什么会这样分层?说白了就是为了「解耦」。表现层改了,业务层不用动;数据库换了,业务层也不用动。我刚开始做架构时,把所有代码都塞在一个 Controller 里,后来改需求改到想哭。

// 错误示范:所有逻辑堆在 Controller
@RestController
public class OrderController {
    @PostMapping("/create")
    public String createOrder(@RequestBody Order order) {
        // 校验参数
        // 查库存
        // 扣库存
        // 生成订单
        // 发消息通知
        // 返回结果
        return "success";
    }
}

// 正确做法:分层清晰
@RestController
public class OrderController {
    @Autowired
    private OrderService orderService;

    @PostMapping("/create")
    public Result createOrder(@RequestBody OrderDTO dto) {
        return orderService.createOrder(dto);
    }
}

注意:分层不是越多越好。我见过有人分了七层,结果一个简单的查询要穿越五个类。记住:分层是为了降低复杂度,不是增加复杂度。

2.3 单体架构 vs 微服务架构

这个话题吵了好几年了。我的态度很明确:能用单体就别上微服务。

你想想看,微服务带来的分布式事务、服务发现、链路追踪、配置中心……哪一个不是坑?我见过一个创业公司,总共 5 个人,硬要拆 8 个微服务,结果每天光部署就要花半天。

单体架构 表现层 业务层 数据访问层 数据库 微服务架构 用户服务 订单服务 支付服务 库存服务 API 网关

那什么时候该上微服务?我总结了三个信号:

  1. 团队规模超过 20 人——人多了,代码冲突频繁,单体编译慢
  2. 业务模块天然独立——比如订单和用户,几乎没有强耦合
  3. 需要独立扩缩容——某个模块流量暴增,其他模块不需要跟着扩容

我的建议:先做单体,把业务跑通。等真的遇到瓶颈了,再按「绞杀者模式」逐步拆微服务。别一开始就搞分布式,那是给自己挖坑。

2.4 架构选型决策矩阵

为了方便你做决策,我整理了一个表格。每次选型时,对着打分就行:

评估维度 单体架构 微服务架构
开发效率 ⭐⭐⭐⭐⭐ ⭐⭐⭐
部署复杂度 ⭐⭐⭐⭐⭐ ⭐⭐
扩展性 ⭐⭐ ⭐⭐⭐⭐⭐
故障隔离 ⭐ ⭐⭐⭐⭐
团队要求 低 高
运维成本 低 高

说白了,选架构就是做 trade-off。没有完美的架构,只有适合当前阶段的架构。我记得有个前辈说过一句话:「架构是演进来的,不是设计出来的。」深以为然。

个人经验:如果你拿不准选什么,那就选你团队最熟悉的技术栈,用最朴素的分层架构。先把业务跑起来,再考虑优化。80% 的项目根本活不到需要微服务的那一天。

2.5 本章小结

这一章我们聊了技术选型的四条铁律,看了分层架构怎么搭,也对比了单体和微服务的优劣。核心就一句话:别为了技术而技术,技术是服务于业务的。

下一章,我们会进入实战——从零搭建一个项目的目录结构。到时候我会手把手带你搭一个「看着就专业」的项目骨架。