对于一线研发团队来说,把 OCR 系统从公有云 API 迁回本地私有化部署,往往是一场噩梦。
业务部门的决策往往很干脆:“为了数据安全和合规,下个月全面切换到本地的 信创OCR。”但这轻飘飘的一句话,落到研发头上,就是几万行散落在 OA、财务、ERP 系统里的高耦合代码。
过去几年,业务代码早就被云厂商的 SDK 和特定的 JSON 返回格式“绑架”了。如果采用“硬编码”的方式,全局搜索并替换云厂商的 API,不仅工作量巨大,而且极易引发线上事故。
作为一个踩过无数坑的架构老兵,今天我们不谈虚的,就聊聊在剥离云端 API、接入本地 信创OCR 时,如何利用网关(Gateway)和适配器中间件(Adapter Middleware),在不修改甚至少修改核心业务代码的前提下,实现一次优雅的“无痛重构”。
一、 核心痛点:为什么“直接替换 API”是下下策?
如果你打算直接在业务代码里把 https://api.cloud-vendor.com/ocr 替换成 http://192.168.x.x/local-ocr,你会立刻撞上三堵墙:
- 鉴权机制断裂: 公有云通常使用 AK/SK(AccessKey/SecretKey)加签机制,而本地 信创OCR 可能采用内部 Token、IP 白名单或基于国产密码算法(国密 SM2/SM3)的鉴权方式。
- JSON Payload 结构不一致: 这是最致命的。云厂商 A 返回的字段叫
tax_amount,云厂商 B 叫TotalTax,而本地系统的标准可能是taxAmount。外层嵌套的坐标(Bounding Box)结构更是千差万别。如果让业务层去消化这些差异,代码会迅速膨胀成一堆if-else的“屎山”。 - 并发控制失效: 云端是无底洞的弹性算力,你的业务线习惯了瞬间并发几百个请求。但本地国产化服务器的算力是有物理上限的,如果不加节制地直接把流量拍到本地服务器上,极易引发底层 OOM(内存溢出)。
二、 架构破局:引入“防腐层”(Anti-Corruption Layer)
在领域驱动设计(DDD)中,面对外部系统的变更,最标准的解法是建立一层“防腐层”。在 OCR 迁移场景下,这个防腐层就是由API 网关和报文转换中间件组成的。
1. 流量接管与鉴权卸载(API Gateway)
在业务系统和本地 信创OCR 引擎之间,横插一道 API 网关(如开源的 APISIX、Kong,或东方通等国产信创网关)。
- 统一入口: 所有的业务系统不再直连 OCR 引擎,而是统一将请求发送给网关。
- 鉴权转换: 网关负责在入口处拦截老旧的 AK/SK 请求,并在转发给本地引擎前,自动将其转化为本地系统所需的内部 Token 或国密签名。业务层完全不需要改动鉴权代码。
- 限流与熔断: 在网关层配置严格的令牌桶限流策略。当月末报销洪峰到来时,超出本地服务器处理能力的请求会被网关直接放入排队队列或优雅降级,死死护住底层的信创环境不被击穿。
2. 报文适配中间件(Adapter Middleware)
这是重构的核心。在网关之后,我们需要编写一个轻量级的适配器微服务。它的唯一作用,就是做“翻译”。
- 入参翻译(Request Mapping): 拦截业务系统发出的老旧 JSON 请求体,将其转换为本地引擎需要的格式(比如提取 Base64 图片流,过滤掉无用的云端参数)。
- 出参翻译(Response Mapping): 当本地 信创OCR 识别完成后,适配器将其输出的结构化数据,强行组装成原云厂商 API 的 JSON 格式,再返回给业务系统。
带来的奇效: 对于上层的财务系统或 OA 系统而言,它根本不知道底层的 OCR 引擎已经从“阿里云/腾讯云”换成了“本地私有化服务器”。它发出的请求和收到的响应,格式与过去完全一致。这就是“无痛”的精髓。
三、 实战:平滑割接的“灰度发布”策略
有了网关和适配器,我们就可以抛弃高风险的“连夜停机割接”,转而采取稳如老狗的灰度路由策略。
- Step 1:影子模式(双写测试)。 生产环境的流量依然走向公有云 API,但网关利用
traffic-mirror机制,将请求同时复制一份发给本地 信创OCR。通过对比两边的识别结果差异和响应耗时,在真实流量下验证本地算力的稳定性。 - Step 2:基于权重的灰度路由。 排雷结束后,在网关层配置路由权重。第一周将 10% 的流量切入本地,观察无误后,逐步调整至 30%、50%,直至 100%。
- Step 3:一键回滚机制。 一旦本地环境出现大面积报错或内存泄漏,运维人员只需在网关控制台点一下鼠标,即可将流量瞬间切回云端(保留一段时间的云端账户作为灾备),确保业务零中断。
把 OCR 迁回本地,考验的不仅仅是算法部门的模型精度,更是后端架构团队的工程化手腕。
通过引入 API 网关和报文适配中间件,我们在高度耦合的业务代码和脆弱的底层信创硬件之间,建立了一块极具弹性的缓冲带。这套架构不仅让代码重构的成本降到了最低,更为企业未来随时替换其他底座(无论是升级新的国产芯片,还是更换另一家本地 OCR 供应商)铺平了道路。
真正的架构师,绝不会让外部工具的变更,演变成一场业务代码的灾难。