2、工具链总体架构设计:分层架构思想、核心组件选型、高可用与灾备设计

好,咱们进入第二章。上一章聊了为什么要搭这个工具链,这一章咱们直接上干货——怎么搭。

我个人习惯,做任何系统设计之前,先画一张大图。把整个工具链的骨架立起来,后面填肉才不慌。说白了,就是先定架构,再选组件,最后考虑怎么让它不挂。

2.1 分层架构思想:把复杂问题拆成四层

金融云的运维工具链,我建议采用四层分层架构。为什么是四层?我在项目中遇到过,如果层数太少,耦合太重;层数太多,调用链又臭又长,排查问题能把你逼疯。

这四层分别是:

  • 接入层:统一入口,负责认证、鉴权、流量分发。
  • 服务层:核心业务逻辑,比如自动化作业、监控告警、CMDB。
  • 数据层:存储一切,包括配置、日志、指标、事件。
  • 基础设施层:跑在云上的计算、网络、存储资源。

你想想看,每一层只干自己该干的事。接入层不碰业务逻辑,服务层不直接读写数据库,数据层不关心谁来调用。这样改一层,其他层不用动。嗯,这里要注意,层与层之间必须通过API通信,别搞共享内存那一套,金融场景下审计和隔离是第一位的。

核心原则:上层依赖下层,下层不依赖上层。每一层都可以独立扩缩容。

下面这张图,是我用SVG画的四层架构关系,你看一眼就明白了。

接入层 统一网关 | 认证鉴权 | 流量控制 | 审计日志 组件:Nginx + Kong / APISIX 服务层 作业调度 | 监控告警 | CMDB | 变更管理 | 日志中心 发布引擎 | 成本分析 | 安全扫描 组件:Spring Cloud / Go微服务 + K8s 数据层 关系库(MySQL) | 缓存(Redis) | 时序库(ClickHouse) 对象存储(S3/MinIO) | 搜索引擎(Elasticsearch) 组件:MySQL MGR + Redis Sentinel + ES集群 基础设施层 云主机 | 容器集群 | 网络 | 存储 | 负载均衡

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切不过来的情况。

警告:灾备方案一定要写文档,而且要写“人肉操作手册”。因为工具链都挂了,你只能靠人肉执行。手册里要写清楚:第一步登录哪台跳板机,第二步执行什么命令,第三步验证什么结果。别写“等待系统自动恢复”这种废话。

最后说一句,架构设计没有银弹。我给你的这套方案,适合大多数金融云场景,但具体到你自己的环境,一定要做压力测试和故障演练。纸上谈兵终觉浅,绝知此事要躬行。


专注资料整理