一、架构演进史:从单体应用到微服务,AP平台的诞生背景与核心痛点
聊AP平台之前,我想先带大家回顾一下架构的演进历程。说实话,我入行那会儿,正是单体应用大行其道的年代。那时候写代码,一个项目就是一个大包,所有功能都堆在一起。现在想想,真是又怀念又后怕。
1.1 单体应用的黄金时代
2008年,我参与了一个电商平台的建设。整个系统就是一个Java WAR包,部署在一台服务器上。用户管理、商品展示、订单处理、支付结算……全在一个进程里跑。
听起来很粗糙对吧?但当时这么做是有道理的:
- 开发简单:一个IDE,一个项目,搞定所有
- 部署方便:打个包扔到Tomcat里就行
- 测试容易:启动一次,所有功能都能测
- 运维省心:就一台机器,出问题定位快
但问题很快就来了。我记得有一次,营销团队搞了个大促活动,流量瞬间暴涨。订单模块扛不住了,结果连带着用户登录都挂了。你想想看,用户连网站都进不去,还怎么买东西?
单体应用的核心痛点:
- 模块耦合严重,改一处可能影响全局
- 无法独立扩缩容,流量不均时资源浪费
- 技术栈绑定,想换语言或框架几乎不可能
- 团队协作困难,多人改同一个模块经常冲突
1.2 SOA架构的尝试
为了解决这些问题,业界开始尝试SOA(面向服务架构)。说白了,就是把大系统拆成几个粗粒度的服务,通过ESB(企业服务总线)通信。
我2012年在一家金融公司做过SOA改造。我们把交易系统拆成了账户服务、风控服务、清算服务等几个模块。每个服务独立部署,通过WebService通信。
效果确实有改善,但新的问题又冒出来了:
- ESB成了新的单点瓶颈,它挂了所有服务都完蛋
- 服务间通信太重,XML解析慢得要命
- 服务拆分粒度太粗,本质上还是大模块
我个人习惯:做架构设计时,不要为了拆分而拆分。SOA的教训就是拆分粒度没把握好,反而引入了更多复杂度。
1.3 微服务架构的崛起
2014年左右,微服务概念开始流行。它和SOA最大的区别是什么?我总结就两点:更细的粒度和更轻的通信。
举个例子,同样是订单系统:
| 维度 | SOA | 微服务 |
|---|---|---|
| 服务粒度 | 订单服务(包含所有订单逻辑) | 订单创建服务、订单查询服务、订单状态服务 |
| 通信方式 | SOAP/XML,重量级 | REST/JSON或gRPC,轻量级 |
| 数据存储 | 共享数据库 | 每个服务独立数据库 |
| 部署方式 | WAR包部署到应用服务器 | Docker容器化,独立部署 |
我在2016年主导过一个微服务改造项目。我们把一个老旧的CRM系统拆成了30多个微服务。每个服务都能独立开发、测试、部署、扩缩容。效果立竿见影——发布频率从每月一次提升到每天十几次。
1.4 AP平台的诞生背景
微服务虽好,但也不是银弹。随着服务数量增多,新的问题出现了:
- 服务发现:几百个服务,怎么知道谁在哪?
- 配置管理:每个服务都有自己的配置,改起来要命
- 熔断降级:一个服务挂了,怎么防止雪崩?
- 链路追踪:一个请求经过十几个服务,出问题怎么排查?
嗯,这就是AP平台(Adaptive Platform,自适应平台)诞生的背景。它要解决的核心问题就是:在微服务架构下,如何让系统具备自适应能力。
我曾经踩过的坑:刚开始做微服务时,我天真地以为只要拆了就完事了。结果服务间调用关系乱成一团麻,一个接口改了,十几个调用方跟着改。后来才明白,微服务不是目的,目的是让系统更灵活、更稳定。
1.5 AP平台的核心痛点
AP平台要解决的核心痛点,我归纳为以下五点:
- 服务治理的复杂性:服务多了,如何管理它们的生命周期?如何做灰度发布?如何做流量控制?
- 数据一致性的挑战:分布式环境下,怎么保证最终一致性?分布式事务怎么做?
- 弹性伸缩的自动化:流量高峰时自动扩容,低谷时自动缩容,怎么实现?
- 故障隔离与自愈:某个服务挂了,如何自动隔离?如何自动恢复?
- 可观测性:日志、指标、链路追踪,三件套怎么落地?
一句话总结:AP平台不是要消灭微服务的复杂性,而是要把这些复杂性封装起来,让开发者只关注业务逻辑。
好了,这一章我们回顾了从单体到微服务的演进历程,也看到了AP平台要解决的核心问题。下一章,我会带大家深入AP平台的分层架构设计,看看每一层到底该怎么搭。