外观
antispam-private-cib — 兴业银行私有化网关
分层:业务层 | 部署单元:5 个 | 数据库:MySQL(antispam) | base image:private-registry.yidun.internal/yidun/base-image:jdk8-cib
一、模块定位与架构
本模块是易盾内容安全能力在兴业银行侧私有化交付的对外网关:用一套 HTTP 接口代理文本/图片/视频/音频/文档检测,把请求转发到私有化部署的真实检测服务(172.17.36.141:8011),并由定时任务拉取异步结果、由控制台后端与前端提供运营管理界面。它承担「统一入口 + 协议适配 + 结果回捞」的角色。
架构分层(协议/逻辑/数据三层映射到子模块):
- 协议层:
facade/http-api(对外检测网关,端口 8080)、facade/dubbo-provider(Dubbo 查询契约,port=-1)、console/api(控制台后端,端口 8080,内含 Dubbo Provider)、console/web(Node/Vue 前端,nginx)。 - 逻辑层:
scheduler(ElasticJob 定时拉取各模态结果)、service/business。 - 数据层:
service/base(MyBatis DAO)、domain、common。
关键数据流:
银行内系统 HTTP 提交检测 → facade/http-api(*CheckProxy) → 转发 http://172.17.36.141:8011/vX/.../submit|check → 真实检测网关 → scheduler 定时 *ResultFetchTask 拉取异步结果 → 回调/落库 → console/api + console/web 展示与管理。
二、可部署服务清单
| 部署单元目录 | artifactId | 镜像名 | 端口 | 服务类型 | 独立 Dockerfile | 是否进 kubernetes.yml |
|---|---|---|---|---|---|---|
console/api | antispam-private-cib-console-api | antispam-private-cib-console-api | 8080 | 控制台后端(含 Dubbo Provider) | 有 | 无(模块无 kubernetes.yml) |
console/web | —(Node/Vue 前端,无 Maven artifactId) | antispam-private-cib-console-web | 80 | 前端静态站点(nginx) | 有 | 无(模块无 kubernetes.yml) |
facade/dubbo-provider | antispam-private-cib-facade-dubbo-provider | antispam-private-cib-dubbo-provider | 随机(dubbo.protocol.port=-1) | Dubbo Provider | 有 | 无(模块无 kubernetes.yml) |
facade/http-api | antispam-private-cib-facade-http | antispam-private-cib-http-api | 8080 | HTTP 检测网关 | 有 | 无(模块无 kubernetes.yml) |
scheduler | antispam-private-cib-scheduler | antispam-private-cib-scheduler | 无(ElasticJob Worker) | 定时任务 | 有 | 无(模块无 kubernetes.yml) |
facade/dubbo-api | antispam-private-cib-facade-dubbo-api | — | 无 | Dubbo 接口定义(非部署单元) | 无(不构建) | 否 |
三、同模块启动顺序
console/api— 控制台后端 + 内置 Dubbo Provider,提供产品/密钥校验等基础数据(product.default.clientId)。facade/dubbo-provider— Dubbo 查询 Provider(注意其 online 配置为占位模板)。facade/http-api— 对外检测网关,依赖console/api的基础数据与真实检测网关。scheduler— ElasticJob 定时拉取结果,依赖 ZK 与检测网关。console/web— 前端站点,最后起,指向console/api展示。
四、逐服务启动逻辑
4.1 console/api
- 启动类:
com.netease.is.antispam.cib.console.api.ConsoleApplication(console/api/src/main/java/com/netease/is/antispam/cib/console/api/ConsoleApplication.java)。 - exclude:无。
@Enable*/@Import:@EnableConfigurationProperties({ClientProperties.class})。- 配置类:
configuration/ConsoleConfiguration——@ComponentScan(basePackages={"com.netease.is.antispam.cib.console.api.service","com.netease.is.antispam.cib.console.api.manager"})+@MapperScan("com.netease.is.antispam.cib.console.api.dao")。 - Dubbo:
dubbo.scan.basePackages=com.netease.is.antispam.cib.console.api.provider;dubbo.protocol.port=-1;spring.main.allow-circular-references=true。 main()自定义:无。- 启动钩子:
service/impl/BusinessServiceImpl.@PostConstruct、service/impl/SystematicServiceImpl.@PostConstruct。
4.2 console/web
- 前端工程(Node/Vue),无 Java 启动类。
- 构建:
build.sh执行npm run build产出dist/,再docker build。 - 镜像:
FROM private-registry.yidun.internal/yidun/nginx:1.19.8,COPY ./dist/ -> /usr/share/nginx/html,default.conf监听 80,SPA 回退try_files $uri $uri/ /index.html。 - 启动钩子:不适用。
4.3 facade/dubbo-provider
- 启动类:
com.netease.is.antispam.cib.facade.dubbo.DubboApplication(facade/dubbo-provider/src/main/java/com/netease/is/antispam/cib/facade/dubbo/DubboApplication.java)。 - exclude:无。
@Enable*/@Import:@EnableAspectJAutoProxy。- 配置类:
configuration/FacadeDubboConfiguration——@ComponentScan({"com.netease.is.platform.service","com.netease.is.platform.manager"})+@MapperScan("com.netease.is.platform.dao")(扫描通用骨架包,非 cib 业务包)。 - Dubbo:
dubbo.scan.basePackages=com.netease.is.antispam.private.cib.facade.dubbo.provider;dubbo.protocol.port=-1。 main()自定义:无。- 启动钩子:未发现。
4.4 facade/http-api
- 启动类:
com.netease.is.antispam.cib.facade.http.HttpApplication(facade/http-api/src/main/java/com/netease/is/antispam/cib/facade/http/HttpApplication.java)。 - exclude:无。
@Enable*/@Import:@EnableOssClient、@EnableBusinessClient、@EnableConfigurationProperties({TextCheckProperties, ImageCheckProperties, VideoCheckProperties, AudioCheckProperties, FileCheckProperties, TransferProperties, HttpProxyProperties, VideoSolutionCheckProperties})。- 配置类:
configuration/FacadeHttpConfiguration——@ComponentScan({"com.netease.is.antispam.cib.service","com.netease.is.antispam.cib.manager"})+@MapperScan("com.netease.is.antispam.cib.dao");SwaggerConfiguration。 - 容器/Sentinel:Undertow(
io-threads=8、worker-threads=200);spring.cloud.sentinel.datasource.ds1.file.file=classpath:degrade-rule.json(降级规则)。 main()自定义:无。- 启动钩子:各模态
*CheckProxy.@PostConstruct(AudioCheckProxy/FileCheckProxy/ImageCheckProxy/TextCheckProxy/VideoCheckProxy/VideoSolutionCheckProxy)、controller/text/TextController.@PostConstruct、tool/BusinessCache.@PostConstruct、tool/TransferTool.@PostConstruct。 - 启动开关:JAVA_OPTS 带
-Ddubbo.enabled=false -Dhttp.proxy.mockEnabled=true,不注册 Dubbo。
4.5 scheduler
- 启动类:
com.netease.is.antispam.cib.scheduler.SchedulerApplication(scheduler/src/main/java/com/netease/is/antispam/cib/scheduler/SchedulerApplication.java)。 - exclude:无。
@Enable*/@Import:@EnableScheduling、@EnableElasticJob、@EnableBusinessClient、@EnableConfigurationProperties({VideoCallbackProperties, AudioCallbackProperties, FileCallbackProperties, TextCallbackProperties, VideoSolutionCallbackProperties, ImageCallbackProperties, ImageAsyncResultProperties})。- 配置类:
configuration/SchedulerConfiguration——@ComponentScan({"com.netease.is.antispam.cib.service","com.netease.is.antispam.cib.manager"})+@MapperScan("com.netease.is.antispam.cib.dao")。 - ElasticJob:namespace
netease-antispam-private-cib;任务audioResultFetchTask、fileResultFetchTask、imageResultFetchTask、textCallbackResultFetchTask、videoResultFetchTask、videoSolutionResultFetchTask(cron*/10 * * * * ?)。 main()自定义:无。- 启动钩子:
service/ImageRecoverService.@PostConstruct、service/TextRecoverService.@PostConstruct、tasks/AbstractHttpProxy.@PostConstruct。
五、启动前置依赖
| 依赖 | 配置键/地址 | 阻塞 or 弱依赖 | 配置文件 |
|---|---|---|---|
| MySQL | jdbc:mysql://yidun-mysql.z040x0.svc:3331/antispam(com.mysql.jdbc.Driver + Hikari,pool 100/5) | 阻塞 | application-online.properties |
| ZooKeeper(Dubbo 注册) | zookeeper://yidun-zookeeper-0.z040x0.svc:2181?backup=...;group /yidun/antispam/online-new/yidun-antispam-dubbo | 阻塞 | application-online.properties |
| ZooKeeper(ElasticJob) | elastic.job.zk.server-lists=yidun-zookeeper-0.z040x0.svc:2181,...;elastic.job.zk.namespace=netease-antispam-private-cib | 阻塞 | scheduler/application-online.properties |
| Kafka | spring.kafka.bootstrap-servers=yidun-kafka-0.z040x0.svc:9092,... | 阻塞 | facade/http-api/application-online.properties |
| 真实检测网关 | text/image/video/audio/file.check.checkUrl=http://172.17.36.141:8011/... | 阻塞 | facade/http-api/application-online.properties |
| 音视频解决方案 | videosolution.check.checkUrl=http://as.dun.163yun.com/v1/videosolution/submit | 弱依赖(公网) | facade/http-api/application-online.properties |
| OSS | oss.client.provider=s3;endpoint=172.21.14.204:18080;default-bucket=1;ak/sk 均为 1 | 弱依赖 | facade/http-api/application-online.properties |
| Apollo | 未发现显式接入 | — | — |
六、启动参数与 Profile
- Profiles:已有
dev/test/online(无private);facade/http-api/application.properties默认spring.profiles.active=test。 - Maven profile:根
buildAll.sh设GLOBAL_ENV=online,逐模块build.sh -e online触发mvn clean install -P online。 - JAVA_OPTS:
console/api、facade/dubbo-provider、scheduler为-Xmx1024m -Xms1024m -XX:+UseG1GC;facade/http-api为-Xmx512m -Xms512m -XX:+UseG1GC -Ddubbo.enabled=false -Dhttp.proxy.mockEnabled=true;全部附-Dspring.profiles.active=online。 - base image 与仓库:
private-registry.yidun.internal/yidun/base-image:jdk8-cib(JDK8);console/web用private-registry.yidun.internal/yidun/nginx:1.19.8;镜像仓库private-registry.yidun.internal/yidun;tag1.0.0.cib-210127;jar 落/cib/(非/app/),入口bash docker-entrypoint.sh。
七、启动期踩坑
- JDK8 基础镜像 + jar 路径
/cib/:与其它模块的jdk17//app/不同,构建脚本与探针路径不可套用。 facade/dubbo-provider的application-online.properties实为 localhost 模板(127.0.0.1:2181、jdbc:mysql://127.0.0.1:3306/fate),且FacadeDubboConfiguration扫com.netease.is.platform.*骨架包,该单元基本是占位,无法真正对外服务。facade/http-api以-Ddubbo.enabled=false启动,不注册 Dubbo Provider;若误删该开关会启动异常。- 依赖公网
as.dun.163yun.com(videosolution.check.checkUrl、videosolution.callback.callbackUrl),私有化环境需出网白名单,否则音视频解决方案调用失败。 spring.main.allow-circular-references=true(console/api、http-api 均设),循环依赖被静默放行,问题不易暴露。console/web必须先npm run build产出dist/再docker build;build.sh里npm run build失败时镜像会缺静态资源。facade/http-api默认 profile 是test,靠 Dockerfile-Dspring.profiles.active=online覆盖,本地直启易连错库。- OSS 为 s3 占位配置:
endpoint=172.21.14.204:18080、bucket=1、ak/sk 均为1,需与私有化 MinIO 对齐。
八、跨模块前置
- 依赖私有化检测服务(
172.17.36.141:8011提供 text/image/video/audio/file 检测),是私有化交付的前置组件。 - 依赖
z040x0命名空间下的 MySQL / ZooKeeper / Kafka(yidun-mysql、yidun-zookeeper-{0,1,2}、yidun-kafka-{0,1,2})。 - 依赖 S3 兼容对象存储(
172.21.14.204:18080)与 Sentinel 降级规则文件classpath:degrade-rule.json。 - 无 Apollo 接入,配置全部走本地
application-*.properties,改配置需重建镜像。