返回架构笔记
Arch Day 17

Arch Day 17: 企业级集成架构

企业级集成架构是解决异构系统间数据流通、业务协作和一致性保障的系统化方案,它不是简单的"API调用",而是涵盖CDC数据同步、事件驱动编排、防腐层隔离、API编排等多种模式的完整体系。

2026-04-16
第一阶段 - 架构基础
集成架构CDCEventMesh防腐层编排与编舞

日期: 2026-04-16 (Day 17) 阶段: 第一阶段 - 架构基础 标签: #集成架构 #CDC #EventMesh #防腐层 #编排与编舞


核心概念

一句话定义

企业级集成架构是解决异构系统间数据流通、业务协作和一致性保障的系统化方案,它不是简单的"API调用",而是涵盖CDC数据同步、事件驱动编排、防腐层隔离、API编排等多种模式的完整体系。

为什么资深架构师仍需关注

在任何有一定规模的金融组织中,系统集成的复杂度远超单个系统内部。我在金融零售软件十年经验中,至少有40%的架构工作与集成有关:

  1. 银行核心系统(通常是大型机或旧Java系统)需要与新的数字化渠道对接
  2. 支付系统需要同时对接内部清算和外部支付渠道(银联/SWIFT/本地清算)
  3. 风控系统需要实时获取交易数据做实时决策
  4. 监管报送需要从多个业务系统汇聚数据

这些场景的共同特征是:异构技术栈、不同数据模型、不同可用性要求、不同团队负责。简单的"加个API"远远不够。资深架构师需要:

  • 在同步/异步之间做正确选择
  • 在编排(Orchestration)/编舞(Choreography)之间做正确选择
  • 在强一致/最终一致之间做正确选择
  • 在紧耦合/松耦合之间找到平衡

常见误区与反模式

误区表现正确做法
万物皆REST所有系统对接都用REST API区分场景:同步查询用REST,事件通知用消息,数据同步用CDC
大一统ESB用一个ESB(企业服务总线)连接一切去中心化的Event Mesh + 轻量级API Gateway
忽视数据模型差异直接传递上游系统的数据结构建立防腐层(ACL),翻译数据模型
同步一切所有调用都是同步的识别可以异步化的流程,提高系统韧性
数据复制黑洞用定时ETL同步数据,延迟大且不可靠用CDC实现近实时数据同步
忽略幂等性集成接口不考虑重试和幂等所有集成点必须支持幂等调用

知识点详解

知识点一:CDC(Change Data Capture)架构设计

CDC是现代数据集成的核心技术,通过捕获数据库变更日志实现近实时的数据同步,替代传统的定时ETL。

CDC的三种实现方式

方式1: 基于日志(Log-based) ← 推荐
┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
│ 源数据库  │───→│ WAL/Binlog│───→│ CDC引擎  │───→│ 目标系统  │
│(PostgreSQL)│   │  变更日志  │    │(Debezium)│    │(Kafka→ES)│
└──────────┘    └──────────┘    └──────────┘    └──────────┘
优点: 不侵入应用/低延迟/不丢数据
缺点: 依赖数据库日志格式/需要额外组件

方式2: 基于查询(Query-based)
┌──────────┐    ┌──────────┐    ┌──────────┐
│ 源数据库  │←──│ 轮询查询  │───→│ 目标系统  │
│          │    │(每分钟)   │    │          │
└──────────┘    └──────────┘    └──────────┘
优点: 简单/不依赖数据库特性
缺点: 延迟高/对源库有查询压力/可能丢失删除操作

方式3: 基于触发器(Trigger-based)
┌──────────┐    ┌──────────┐    ┌──────────┐
│ 源数据库  │───→│ 触发器+   │───→│ 目标系统  │
│          │    │ 变更表    │    │          │
└──────────┘    └──────────┘    └──────────┘
优点: 可以捕获所有变更
缺点: 严重影响源库性能/运维复杂/不推荐在金融系统使用

Debezium CDC架构(推荐方案)

┌──────────────────────────────────────────────────────────┐
│                    CDC 数据流管道                          │
│                                                          │
│  ┌─────────┐   ┌──────────┐   ┌─────────┐   ┌────────┐ │
│  │PostgreSQL│──→│ Debezium │──→│  Kafka   │──→│Consumer│ │
│  │  WAL     │   │Connector │   │  Topic   │   │(多个)  │ │
│  └─────────┘   └──────────┘   └─────────┘   └────────┘ │
│                                     │                    │
│                               ┌─────┴─────┐             │
│                               │Schema      │             │
│                               │Registry    │             │
│                               └───────────┘             │
└──────────────────────────────────────────────────────────┘

Consumer可以是:
├── Elasticsearch (全文搜索)
├── Redis (缓存更新)
├── 数据仓库 (分析)
├── 另一个微服务 (数据同步)
└── 审计日志系统 (合规)

CDC在金融系统中的典型应用

场景源系统目标系统CDC作用延迟要求
交易查询交易核心(PG)Elasticsearch支持复杂查询<3秒
实时风控交易核心(PG)风控引擎(Flink)实时交易流<1秒
缓存更新用户中心(PG)Redis保持缓存一致<5秒
数据分析多个系统数据湖(S3)数据汇聚<1分钟
审计合规核心系统审计数据库变更审计<10秒

CDC关键设计决策

# CDC设计检查清单
schema_evolution:
  # Schema变更如何处理?
  strategy: "Avro + Schema Registry + 兼容性检查"
  backward_compatible: required  # 消费者可以处理旧格式
  forward_compatible: recommended  # 消费者可以忽略新字段

ordering:
  # 事件顺序如何保证?
  partition_key: "entity_id"  # 同一实体的变更有序
  # 注意:跨实体不保证全局有序

exactly_once:
  # 如何保证精确一次?
  strategy: "Kafka事务 + 消费者幂等"
  # CDC引擎可能重发,消费者必须幂等

snapshot:
  # 初始全量同步如何处理?
  strategy: "initial_snapshot + 增量同步"
  # Debezium支持首次运行时做全量快照

monitoring:
  # 如何监控CDC管道健康?
  lag_threshold: "< 10秒"
  alert_on: ["connector_down", "lag_exceeds_threshold", "deserialization_error"]

知识点二:Event Mesh架构

Event Mesh是分布式事件总线的演进,支持跨集群、跨地域、跨协议的事件路由。相比传统的单集群消息队列,Event Mesh更适合大型企业的分布式架构。

传统消息队列:                    Event Mesh:
┌─────────────┐              ┌─────────────────────────┐
│  单一Kafka   │              │     Event Mesh Layer    │
│  集群       │              │  ┌─────┐  ┌─────┐      │
│  ┌───────┐  │              │  │Node1│──│Node2│      │
│  │Broker │  │              │  │(DC1)│  │(DC2)│      │
│  │ 1,2,3 │  │              │  └──┬──┘  └──┬──┘      │
│  └───────┘  │              │     │        │          │
└─────────────┘              │  ┌──┴──┐  ┌──┴──┐      │
                             │  │Node3│──│Node4│      │
所有服务连同一集群              │  │(DC3)│  │(Edge)│     │
单点/跨地域延迟高              │  └─────┘  └─────┘      │
                             └─────────────────────────┘

                             服务连接最近的Node
                             Event自动路由到订阅者
                             跨地域/跨协议透明

Event Mesh vs 传统消息队列

维度传统消息队列Event Mesh
拓扑集中式集群分布式网格
协议单一(如Kafka协议)多协议(MQTT/AMQP/HTTP/Kafka)
地域通常单地域跨地域自动路由
服务发现静态配置动态发现和路由
适用规模单集群数百服务跨集群/跨地域数千服务
代表产品Kafka/RabbitMQSolace/EventMesh(Apache)

知识点三:Orchestration vs Choreography深度对比

在微服务架构中,跨服务的业务流程有两种协调方式:编排(Orchestration)和编舞(Choreography)。这个选择是架构师最重要的决策之一。

编排(Orchestration):
有一个中央协调者,像指挥家

┌──────────────┐
│  Orchestrator │
│  (支付流程)   │
└──┬───┬───┬──┘
   │   │   │
   ▼   ▼   ▼
┌──┐ ┌──┐ ┌──┐
│风控│ │账务│ │通知│
└──┘ └──┘ └──┘

流程: 协调者依次调用→风控→账务→通知
控制权: 集中在协调者
可见性: 协调者知道全局状态


编舞(Choreography):
每个服务自主响应事件,像舞蹈

┌──┐ ──事件──→ ┌──┐ ──事件──→ ┌──┐
│风控│           │账务│           │通知│
└──┘ ←─事件── └──┘ ←─事件── └──┘

流程: 每个服务发布事件,其他服务订阅并响应
控制权: 分散在各服务
可见性: 没有单一视图看到全局状态

深度对比矩阵

维度OrchestrationChoreography
耦合度协调者知道所有参与者服务间通过事件松耦合
可见性高(协调者有全局视图)低(需要额外工具追踪)
单点故障协调者是单点无单点
流程变更改协调者即可可能需要改多个服务
复杂度管理协调者变复杂(God Service风险)复杂度分散(难以理解全局)
错误处理集中处理(Saga补偿)分散处理(每个服务自己处理)
适合场景明确的业务流程/强事务性松散的事件通知/高扩展性
金融适用性高(交易/支付流程)中(通知/审计/分析)

混合策略(推荐)

在实际金融系统中,我推荐混合使用:

┌─────────────────────────────────────────┐
│              支付处理流程                  │
│                                         │
│  ┌──────────────────────┐               │
│  │ Orchestration层       │               │
│  │ (核心交易流程)         │               │
│  │                       │               │
│  │ 1.风控检查 →           │               │
│  │ 2.AML筛查 →           │──→ 发布事件    │
│  │ 3.账务处理 →           │   (交易完成)   │
│  │ 4.清算提交             │               │
│  └──────────────────────┘       │        │
│                                 ▼        │
│  ┌──────────────────────────────────┐    │
│  │ Choreography层                    │    │
│  │ (非核心后续处理)                    │    │
│  │                                   │    │
│  │ 交易完成事件 →┬→ 通知服务(发短信)   │    │
│  │              ├→ 积分服务(累积积分)  │    │
│  │              ├→ 报表服务(更新报表)  │    │
│  │              └→ 审计服务(记录日志)  │    │
│  └──────────────────────────────────┘    │
└─────────────────────────────────────────┘

核心原则

  • 核心流程用Orchestration:交易、支付、清算——需要强事务性和可见性
  • 非核心后续用Choreography:通知、报表、审计——松耦合、可独立失败

知识点四:防腐层(Anti-Corruption Layer, ACL)

防腐层是DDD(领域驱动设计)中的关键模式,用于隔离和翻译外部系统的数据模型,防止外部系统的"坏味道"污染内部领域模型。

没有防腐层:
┌──────────┐                ┌──────────┐
│ 内部系统  │── 直接调用 ────→│ 外部系统  │
│ 领域模型  │← 直接返回 ─────│ 数据模型  │
└──────────┘                └──────────┘
问题: 外部系统的任何变更都直接影响内部系统

有防腐层:
┌──────────┐   ┌──────────┐   ┌──────────┐
│ 内部系统  │──→│ 防腐层    │──→│ 外部系统  │
│ 领域模型  │←──│ (ACL)    │←──│ 数据模型  │
└──────────┘   └──────────┘   └──────────┘
                    │
              ┌─────┴─────┐
              │ • 模型翻译  │
              │ • 协议适配  │
              │ • 异常转换  │
              │ • 数据校验  │
              └───────────┘

ACL设计模式

┌──────────────────────────────────────┐
│             Anti-Corruption Layer     │
│                                      │
│  ┌──────────┐  ┌──────────┐         │
│  │ Facade   │  │Translator│         │
│  │(统一入口) │→ │(模型翻译) │         │
│  └──────────┘  └────┬─────┘         │
│                     │                │
│  ┌──────────┐  ┌────┴─────┐         │
│  │ Adapter  │  │Validator │         │
│  │(协议适配) │  │(数据校验) │         │
│  └──────────┘  └──────────┘         │
└──────────────────────────────────────┘

金融系统ACL实例——对接银行核心

# 防腐层示例: 将银行核心系统的账户模型翻译为内部领域模型

# 银行核心返回的数据(可能是XML/固定格式/大型机编码)
class LegacyBankAccountResponse:
    """
    银行核心系统返回:
    - ACCT_NO: "6222021234567890"  (字符串)
    - ACCT_BAL: "000000012345"     (12位定长,单位:分)
    - ACCT_STS: "A"                (A=Active, D=Dormant, C=Closed)
    - CUST_ID: "C2024001234"       (客户号)
    - CCY_CD: "01"                 (01=CNY, 14=USD)
    """
    pass

# 内部领域模型(干净、类型安全、有业务含义)
class Account:
    account_id: str
    balance: Decimal  # 精确到小数点后2位
    status: AccountStatus  # 枚举: ACTIVE/DORMANT/CLOSED
    customer_id: str
    currency: Currency  # 枚举: CNY/USD/EUR...

# 防腐层翻译器
class AccountTranslator:
    CURRENCY_MAP = {"01": Currency.CNY, "14": Currency.USD}
    STATUS_MAP = {"A": AccountStatus.ACTIVE, "D": AccountStatus.DORMANT, "C": AccountStatus.CLOSED}

    def translate(self, legacy: LegacyBankAccountResponse) -> Account:
        return Account(
            account_id=legacy.ACCT_NO,
            balance=Decimal(legacy.ACCT_BAL) / 100,  # 分→元
            status=self.STATUS_MAP.get(legacy.ACCT_STS, AccountStatus.UNKNOWN),
            currency=self.CURRENCY_MAP.get(legacy.CCY_CD, Currency.UNKNOWN),
            customer_id=legacy.CUST_ID
        )

知识点五:API编排层设计

API编排层(API Orchestration Layer)是BFF(Backend for Frontend)的高级版本,负责将多个后端服务的调用组合成前端需要的接口。

没有编排层:
┌──────┐     ┌───────┐
│      │──→──│Service1│  前端需要调用5个API
│ 前端  │──→──│Service2│  然后在前端组装数据
│      │──→──│Service3│  延迟高/逻辑复杂
│      │──→──│Service4│
│      │──→──│Service5│
└──────┘     └───────┘

有编排层:
┌──────┐   ┌───────────┐   ┌───────┐
│      │   │ API编排层   │──→│Service1│
│ 前端  │──→│            │──→│Service2│  前端只调用1个API
│      │   │ 组装+编排   │──→│Service3│  编排层负责并发调用
│      │   │            │──→│Service4│  和数据组装
└──────┘   └───────────┘   └───────┘

编排层的设计原则

原则说明
不包含业务逻辑只做数据组装和路由,业务逻辑在下游服务
并发调用无依赖关系的调用应并行执行
优雅降级非核心数据获取失败不影响主流程
缓存策略频繁访问且变化不大的数据在编排层缓存
限流保护保护下游服务不被前端大量请求打垮

对比分析

集成模式综合对比

模式实时性耦合度可靠性复杂度适用场景
同步API实时查询/简单命令
异步消息近实时事件通知/解耦
CDC近实时极低中高数据同步/缓存更新
ETL/批处理延迟大数据分析/报表
Event Mesh近实时大规模分布式
文件传输延迟大极低传统对接/大批量

CDC vs 传统ETL对比

维度CDC(Debezium)传统ETLCDC优势场景
延迟秒级分钟~小时实时风控/缓存同步
对源库影响极低(读日志)中(查询)生产核心库
数据完整性高(不丢变更)中(可能丢删除)审计合规
Schema感知自动感知变更手动维护映射快速迭代系统
运维复杂度中(需额外组件)低(定时脚本)大规模场景
初始成本高(部署CDC管道)低(写SQL即可)长期项目

架构设计实操

实操目标

设计"银行核心↔支付↔风控↔外部渠道"四方集成架构。

业务场景

一笔跨境汇款的完整流程:

1. 客户在手机银行发起汇款请求
2. 支付系统接收请求
3. 风控系统做实时风险评估(AML/制裁名单)
4. 银行核心系统扣款
5. 通过SWIFT/本地清算网络发送到境外
6. 等待对方银行确认
7. 通知客户结果

涉及系统:
- 银行核心(Core Banking): 旧Java系统, 同步API, 数据格式旧
- 支付系统(Payment): 新建微服务, gRPC/REST
- 风控系统(Risk): 实时决策引擎, 需要毫秒级响应
- 外部渠道(External): SWIFT, 各国本地清算, 第三方支付

集成架构设计

┌─────────────────────────────────────────────────────────────┐
│                     四方集成架构                               │
│                                                             │
│  ┌──────────┐   ┌──────────────────┐   ┌──────────────┐    │
│  │ 手机银行  │──→│   API Gateway     │──→│  API编排层    │    │
│  │ Web端    │   │  (认证/限流/路由)  │   │  (BFF)       │    │
│  └──────────┘   └──────────────────┘   └──────┬───────┘    │
│                                               │             │
│                          ┌────────────────────┤             │
│                          ▼                    ▼             │
│  ┌─────────────────────────────────────────────────┐       │
│  │            Orchestration层(支付流程引擎)          │       │
│  │                                                  │       │
│  │  Step1: 参数校验                                  │       │
│  │  Step2: 风控检查 ──→ 风控系统(同步gRPC, <100ms)   │       │
│  │  Step3: 汇率锁定 ──→ 汇率服务                    │       │
│  │  Step4: 核心扣款 ──→ 银行核心ACL(同步, <500ms)    │       │
│  │  Step5: 渠道提交 ──→ 外部渠道ACL(异步+回调)       │       │
│  │  Step6: 状态更新                                  │       │
│  └───────────────────────────┬──────────────────────┘       │
│                              │                              │
│                              ▼ 发布事件                      │
│  ┌──────────────────────────────────────────────────┐       │
│  │              Event Broker (Kafka)                 │       │
│  │                                                   │       │
│  │  Topic: payment.transaction.created               │       │
│  │  Topic: payment.transaction.completed             │       │
│  │  Topic: payment.transaction.failed                │       │
│  └─────┬────────┬───────────┬──────────┬────────────┘       │
│        ▼        ▼           ▼          ▼                    │
│  ┌──────┐ ┌──────┐   ┌──────┐   ┌──────┐                   │
│  │通知   │ │审计   │   │报表   │   │对账   │                   │
│  │服务   │ │服务   │   │服务   │   │服务   │                   │
│  └──────┘ └──────┘   └──────┘   └──────┘                   │
│                                                             │
│  ┌──────────────────────────────────────────────────┐       │
│  │              CDC层 (Debezium)                     │       │
│  │                                                   │       │
│  │  核心交易表 ──CDC──→ Kafka ──→ Elasticsearch(查询) │       │
│  │  核心交易表 ──CDC──→ Kafka ──→ 数据仓库(分析)      │       │
│  │  核心交易表 ──CDC──→ Kafka ──→ Redis(缓存更新)     │       │
│  └──────────────────────────────────────────────────┘       │
│                                                             │
│  ┌──────────────────────────────────────────────────┐       │
│  │              防腐层(ACL)                           │       │
│  │                                                   │       │
│  │  ┌──────────────┐    ┌──────────────────┐        │       │
│  │  │银行核心ACL    │    │外部渠道ACL        │        │       │
│  │  │• XML↔JSON转换 │    │• SWIFT协议适配    │        │       │
│  │  │• 金额格式转换  │    │• 多渠道路由       │        │       │
│  │  │• 错误码映射   │    │• 超时重试         │        │       │
│  │  │• 超时/重试    │    │• 回调处理         │        │       │
│  │  └──────────────┘    └──────────────────┘        │       │
│  └──────────────────────────────────────────────────┘       │
└─────────────────────────────────────────────────────────────┘

关键设计决策(ADR摘要)

决策点选择理由
风控调用方式同步gRPC必须在扣款前完成,且要求<100ms
核心扣款方式同步+ACL需要实时确认扣款结果
渠道提交方式异步+回调外部系统响应时间不可控(秒~天)
后续处理方式Choreography通知/审计/报表可独立失败
数据同步方式CDC查询和分析不直接查核心库

错误处理和补偿设计(Saga)

正常流程:
风控通过 → 汇率锁定 → 核心扣款 → 渠道提交 → 完成

Saga补偿流程(任一步骤失败):

Step2失败(风控拒绝):
  → 直接返回拒绝,不需要补偿

Step3失败(汇率服务不可用):
  → 重试3次 → 仍失败则返回错误

Step4失败(核心扣款失败):
  → 释放汇率锁定 → 返回错误

Step5失败(渠道提交失败):
  → 核心冲正(退款) → 释放汇率 → 通知客户

补偿关键原则:
1. 补偿操作必须幂等
2. 补偿记录必须持久化
3. 补偿失败需要人工介入队列
4. 所有补偿操作有审计日志

AI增强实践

AI辅助集成架构设计

Prompt模板——集成方案设计

你是一位有10年金融系统经验的集成架构师。

我需要设计以下系统之间的集成方案:
- 系统A: [描述,包括技术栈/接口能力/SLA]
- 系统B: [描述]
- 系统C: [描述]

业务流程: [描述跨系统的业务流程]

约束条件:
- [延迟/一致性/可用性要求]
- [团队能力/预算约束]

请分析:
1. 每个集成点应该用同步还是异步?
2. 是否需要防腐层?
3. 数据同步用CDC还是ETL?
4. 错误处理和补偿策略?
5. 画出完整的集成架构图(ASCII)

AI驱动的集成监控

# 概念:AI辅助集成健康监控
class IntegrationHealthMonitor:
    """
    AI监控集成点的健康状况:
    - 检测延迟趋势异常
    - 预测可能的超时
    - 关联分析多个集成点的故障
    """

    def detect_cascade_failure(self, metrics):
        """
        检测级联故障:
        - 银行核心变慢 → 支付系统超时 → 重试风暴 → 风控系统过载
        AI可以更早发现这种级联模式
        """
        pass

    def suggest_circuit_breaker_config(self, historical_data):
        """
        基于历史数据,AI推荐熔断器配置:
        - 超时阈值
        - 错误率阈值
        - 恢复时间
        """
        pass

与Web3/DeFi的关联

DeFi中的集成模式

DeFi协议之间的集成与传统企业集成有惊人的相似和根本的不同:

集成模式传统金融DeFi
同步调用REST/gRPC智能合约间调用(单交易原子性)
事件驱动Kafka/MQ合约Events + Indexer(The Graph)
防腐层ACL服务Wrapper合约/Adapter合约
数据同步CDC/ETLSubgraph + Indexer
编排Saga/流程引擎Flash Loan原子组合

DeFi特有的集成优势和挑战

优势:
├── 原子性组合: 一个交易内完成多个协议的交互
│   (传统金融需要Saga补偿,DeFi天然原子)
├── 标准化接口: ERC20/ERC721等标准降低集成成本
├── 无许可集成: 任何人可以集成任何协议
└── 链上可审计: 所有集成调用永久可追溯

挑战:
├── Gas成本: 每次跨协议调用都有Gas开销
├── 组合性风险: 协议间的组合可能产生意外行为
├── 依赖风险: 下游协议被攻击会影响上游
└── 升级困难: 智能合约升级比传统系统更难

今日思考

问题一:集成的复杂度为什么总是被低估?

项目初期评估"对接一个外部系统"通常估3天,实际往往需要3周。为什么?是什么导致了集成复杂度的系统性低估?如何在项目评估中更准确地预估集成工作量?

问题二:CDC是否会取代传统ETL?

CDC提供了近实时的数据同步能力,但运维复杂度更高。在什么场景下CDC是值得的投入?在什么场景下简单的ETL仍然是更好的选择?两者共存的最佳实践是什么?

问题三:微服务时代的集成悖论

微服务的初衷是"解耦",但大量的服务间集成是否又创造了新的耦合?分布式单体(Distributed Monolith)这个反模式为什么如此常见?如何避免"用微服务创造更复杂的单体"?


面试题准备

面试题1: CDC和传统ETL有什么区别?什么时候用?

30秒回答

CDC通过捕获数据库变更日志实现秒级数据同步,而ETL是定时批量抽取。CDC适合需要实时性的场景(如缓存同步、实时风控),ETL适合批量分析场景(如日报月报)。在金融系统中,我推荐核心数据用CDC,分析数据用ETL,两者共存。

2分钟回答

CDC和ETL是两种数据同步策略,各有适用场景。

CDC(Change Data Capture)的核心是读取数据库的变更日志(如PostgreSQL的WAL、MySQL的Binlog)。优点是:延迟低(秒级)、对源库影响小(不执行查询)、不会丢失变更(包括DELETE)。但它需要额外的基础设施(如Debezium+Kafka),运维复杂度较高。

传统ETL是定时执行查询,从源库抽取数据。优点是简单、好理解、运维成本低。但延迟大(通常分钟~小时)、对源库有查询压力、可能丢失中间状态的变更。

在我的金融系统实践中,选择标准是:

  • 实时性要求<10秒→CDC(如实时风控数据、缓存更新)
  • 实时性要求分钟~小时→ETL(如数据仓库、报表)
  • 合规审计场景→CDC(需要完整的变更历史)

追问准备

  • Q: CDC如何处理Schema变更? A: 使用Schema Registry + Avro格式,支持Schema演进。Schema变更前需要评估兼容性(向前/向后兼容)。

  • Q: CDC管道故障如何恢复? A: Debezium支持从上次offset恢复。最坏情况可以做全量快照+增量补齐。关键是消费者端的幂等处理。

面试题2: 什么时候用事件驱动集成?

30秒回答

当系统间需要松耦合、异步处理、且可以接受最终一致性时,用事件驱动。典型场景是"完成动作后通知多个下游"。不适合需要同步响应和强一致性的场景。我推荐核心流程用同步编排,非核心后续用事件驱动。

2分钟回答

(展开混合策略的详细说明,结合金融业务场景,说明每个集成点选择同步/异步的理由。)


学习资源

资源类型推荐理由
《Enterprise Integration Patterns》书籍集成模式的圣经(EIP)
Debezium官方文档文档CDC最佳实践
《Designing Event-Driven Systems》(Ben Stopford)书籍/免费Kafka事件驱动设计
Martin Fowler: Event-Driven Architecture博客编排vs编舞的经典阐述
《Microservices Patterns》Ch4(Chris Richardson)书籍Saga模式和分布式事务
Confluent Blog: CDC Best Practices博客CDC实践经验

明日预告

Day 18: 数据架构(高级) —— 从"系统集成"进入"数据治理"。我们将深入Data Mesh vs Data Lake vs Lakehouse的选型决策、Lambda vs Kappa架构、数据血缘和元数据管理,以及金融行业特有的数据合规挑战(GDPR/数据本地化/跨境传输)。如果说集成架构解决的是"数据怎么流动",数据架构解决的是"数据怎么治理"。