2、工具链总体架构设计:分层架构思想、核心组件选型、高可用与灾备设计
好,咱们进入第二章。上一章聊了为什么要搭这个工具链,这一章咱们直接上干货——怎么搭。
我个人习惯,做任何系统设计之前,先画一张大图。把整个工具链的骨架立起来,后面填肉才不慌。说白了,就是先定架构,再选组件,最后考虑怎么让它不挂。
2.1 分层架构思想:把复杂问题拆成四层
金融云的运维工具链,我建议采用四层分层架构。为什么是四层?我在项目中遇到过,如果层数太少,耦合太重;层数太多,调用链又臭又长,排查问题能把你逼疯。
这四层分别是:
- 接入层:统一入口,负责认证、鉴权、流量分发。
- 服务层:核心业务逻辑,比如自动化作业、监控告警、CMDB。
- 数据层:存储一切,包括配置、日志、指标、事件。
- 基础设施层:跑在云上的计算、网络、存储资源。
你想想看,每一层只干自己该干的事。接入层不碰业务逻辑,服务层不直接读写数据库,数据层不关心谁来调用。这样改一层,其他层不用动。嗯,这里要注意,层与层之间必须通过API通信,别搞共享内存那一套,金融场景下审计和隔离是第一位的。
核心原则:上层依赖下层,下层不依赖上层。每一层都可以独立扩缩容。
下面这张图,是我用SVG画的四层架构关系,你看一眼就明白了。
2.2 核心组件选型:不选最火的,只选最稳的
选型这件事,我踩过不少坑。曾经在某个项目里,为了追求“新技术”,选了一个刚开源的调度引擎,结果生产环境出了个bug,社区都没人修。那叫一个惨。
所以我的选型原则很简单:金融级优先看成熟度,再看社区活跃度,最后看性能。
下面这张表,是我个人比较推荐的一套组合拳:
| 层级 | 组件 | 选型理由 | 避坑提醒 |
|---|---|---|---|
| 接入层 | APISIX / Kong | 支持热更新、灰度发布、插件丰富 | 我曾经用Kong遇到性能瓶颈,后来发现是插件顺序没调好 |
| 服务层 | Spring Cloud + K8s | 生态成熟,金融行业案例多 | 别用太新的版本,我建议用LTS版 |
| 作业调度 | XXL-JOB / DolphinScheduler | 支持分布式、失败重试、任务依赖 | DolphinScheduler的租户隔离做得不错,适合多团队 |
| 监控告警 | Prometheus + AlertManager | 云原生标配,告警规则灵活 | 注意Prometheus的存储容量,我建议搭配Thanos |
| 日志中心 | Elasticsearch + Filebeat + Kibana | 全文检索快,可视化方便 | ES的索引分片数别设太多,我曾经设了64个分片,集群直接挂了 |
| CMDB | 自研 / 开源CMDB | 必须支持模型自定义和自动发现 | 别买商业版,定制成本太高,我建议基于MySQL+Redis自研 |
| 数据层 | MySQL MGR + Redis Sentinel | 高可用方案成熟,切换时间可控 | MySQL MGR的写节点最多7个,多了性能下降 |
| 对象存储 | MinIO / 阿里云OSS | S3兼容,支持多版本和生命周期 | MinIO的纠删码模式能省不少存储成本 |
小技巧:选型时,先列一个“必须满足”清单和一个“最好有”清单。必须满足的少列几条,最好有的可以多列。这样选型时不会纠结。
2.3 高可用与灾备设计:别让工具链成为新的故障点
说实话,工具链本身如果挂了,比业务挂了还可怕。因为业务挂了你能用工具链去修,工具链挂了你就只能人肉运维了。嗯,我经历过,凌晨三点,工具链挂了,全公司运维都在手动敲命令,那场面...
所以高可用和灾备,我建议从三个维度来设计:
2.3.1 服务高可用
- 多副本部署:每个微服务至少2个Pod,分散在不同物理机/可用区。
- 无状态设计:服务层全部无状态,Session信息扔Redis。这样扩缩容就像喝水一样简单。
- 健康检查与自愈:K8s的Liveness和Readiness探针必须配。我曾经见过一个服务内存泄漏,K8s没配探针,直到OOM了才发现。
- 熔断降级:用Sentinel或Hystrix,防止一个服务拖垮整个链路。
2.3.2 数据高可用
- 数据库:MySQL用MGR模式,3节点起步。Redis用Sentinel或Cluster,至少一主两从。
- 数据备份:全量备份每天一次,增量备份每15分钟一次。备份文件存到对象存储,并且跨地域复制一份。
- 数据校验:我曾经遇到过备份文件损坏,恢复时才发现。从那以后,我要求每次备份完成后必须做一次校验。
2.3.3 灾备设计
- 同城双活:两个可用区同时提供服务,流量各50%。一个区挂了,另一个区扛全部流量。
- 异地灾备:至少跨一个城市,数据异步复制。RPO控制在15分钟以内,RTO控制在30分钟以内。
- 容灾演练:每季度至少一次。别等到真出事了再试,我见过演练时才发现DNS切不过来的情况。
警告:灾备方案一定要写文档,而且要写“人肉操作手册”。因为工具链都挂了,你只能靠人肉执行。手册里要写清楚:第一步登录哪台跳板机,第二步执行什么命令,第三步验证什么结果。别写“等待系统自动恢复”这种废话。
最后说一句,架构设计没有银弹。我给你的这套方案,适合大多数金融云场景,但具体到你自己的环境,一定要做压力测试和故障演练。纸上谈兵终觉浅,绝知此事要躬行。