关于OCR项目的流水账

搜狗商业技术团队
实战 阅读量

最近一直在开发某个 OCR 项目:底层用的是 ABBYY 提供的 FineReader 引擎,应用层把 FineReader 包装成 gRPC 对外提供服务,因为 FineReader 项目是 C++ 实现的,而我们团队使用的编程语言是 Golang,所以二者间通过 CGO 来完成交互。整个项目没有特殊的需求,只是鉴于 OCR 耗时较长,为了提升产品体验,要求在处理过程中:客户端可以主动退出;服务端能够实时返回已处理百分比。下面是根据需求画出来的流程图:

流程图

看上去很简单,不过我还是遇到不少问题,虽然这些问题主要都是一些细枝末节,基本上和 OCR 没什么关系,但是对别的项目还是会有所帮助的,下面让我一一道来。

浅谈K8S下gRPC负载均衡问题

搜狗商业技术团队
实战 阅读量

一般来说,在 K8S 下部署服务是很简单的事儿,但是如果部署的是一个 gRPC 服务的话,那么稍不留神就可能掉坑里,个中缘由,且听我慢慢道来。

实战CGO

搜狗商业技术团队
实战 阅读量

某项目要集成 PDF 文件的 OCR 功能,不过由于此功能技术难度太大,网络上找不到靠谱的开源实现,最终不得不选择 ABBYY FineReader Engine 的付费服务。可惜 ABBYY 只提供了 C++ 和 Java 两种编程语言的 SDK,而我们的项目采用的编程语言是 Golang,此时通常的集成方法是使用 C++ 或 Java 实现一个服务,然后在 Golang 项目里通过 RPC 调用服务,不过如此一来明显增加了系统的复杂度,好在 Golang 支持 CGO,让我们可以很方便的在 Golang 中使用 C 模块,本文总结了我在学习 CGO 过程中的心得体会。

从iptables谈ServiceMesh流量拦截

搜狗商业技术团队
架构技术 阅读量

最近研究学习 Kubernetes 和 ServiceMesh 过程中都看到了 iptables 发挥重要作用独挡一面的场景。
Kubernetes 中 iptables 作为 kube-proxy 里控制流量转发的核心模式,通过在目标 node 的 iptables 中增加一些自定义链对流经到该 node 的数据包做DNAT和SNAT操作以实现路由、负载均衡和地址转换。
ServiceMesh 服务网格中 Istio 通过 init 容器(启动命令为istio-iptables)给 Sidecar 容器即 Envoy 代理做初始化,设置 iptables 端口转发,从而实现流量劫持&转发控制等服务治理相关。