外观
中间件与配置基线
本页汇总跨模块重复出现的中间件地址、配置约定与基础镜像矩阵。注意:地址多为 private(私有化)环境实测值,其它环境以对应 application-<profile>.properties 与 Apollo 为准。
一、ZooKeeper 的三个用途
同一个 ZK 集群在平台里承担三类职责,namespace / group 配错是最隐蔽的故障源:
| 用途 | 配置键 | 典型值 |
|---|---|---|
| Dubbo 注册中心 | dubbo.registry.address / dubbo.registry.group | zookeeper://zk-0.zookeeper.yidun-infra:2181?backup=zk-1,zk-2,group /yidun/antispam/online-new/yidun-antispam-dubbo |
| 业务配置源(BusinessClient) | business.client.options.zookeeper.address + rootPath | zk-0/1/2.zookeeper.yidun-infra:2181,rootPath /netease-antispam/online/config |
| Elastic-Job 调度 | elastic.job.zk.serverLists 或 elastic.job.zk.server-lists | 各模块独立 namespace,如 antispam-keyword-scheduler-jobs-private、netease-antispam-rule-jobs-online |
另有第四类(部分模块):
| 用途 | 配置键 | 说明 |
|---|---|---|
| 分布式 ID | distribute.id.zookeeperHost + distribute.id.namespace | antispam-rule、antispam-list、antispam-business-audio 等启用 |
三类高频事故
- ElasticJob namespace 跨模块共用 → 多实例注册同一 namespace 互相覆盖任务(
antispam-keyword的 check/cache/scheduler 三处共用同一 namespace)。 - Dubbo group 不一致 → 「注册成功但发现不到」。
antispam-media-solution/antispam-stream-solution/yidun-ai-agent用/yidun/jiande-online/dubbo,yidun-accountprivate 用/yidun/antispam/online-pre/...。 - 配置键驼峰/连字符混用 →
elastic.job.zk.serverLists(rule/video/livevideo/media)与server-lists(stream)两种写法,跨模块复制配置会静默失效。
二、Apollo 配置中心
| 项目 | 约定 |
|---|---|
| 启用方式 | apollo.bootstrap.enabled=true + apollo.bootstrap.namespaces=...;部分模块另加 @EnableApolloConfig |
app.id 命名 | 多为 <模块简称>_<单元>,如 antispam-audio_http-check、antispam-text_storage、cms-console-api |
| 公共 namespace | application、application.yml、antispam-audiovideo_common、antispam-privatization-common、yidun.common |
| 本地兜底 | apollo.cache-dir=./apollo/cache(Apollo 不可达时用缓存启动) |
apollo.meta | 私有环境通常不显式配置(靠环境变量/集群内注入);test=http://yd-apollo-config.nistest.netease.com,online=http://yd-apollo-meta.service.163.org |
完全没有 Apollo 的模块(配置只能改代码重打镜像)
antispam-file 的 checker 与 dubbo-provider、antispam-textclassify(bootstrap.enabled=false)、antispam-media-solution 的 dubbo-provider、antispam-business-video 的 http-check-api 与 scheduler、antispam-business-livevideo 的 dubbo-provider/scheduler/storage/grpc-stream、antispam-stream-solution 的 scheduler/console、yidun-message、yidun-export、yidun-website、yidun-account、yidun-cms、antispam-private-cib。
排查技巧
「改了 Apollo 不生效」第一步先确认该进程是否真的接了 Apollo —— 上面的清单里有一半模块没有。
三、数据库
| 类型 | 使用方 | 连接特征 |
|---|---|---|
| TiDB(MySQL 协议) | 大多数模块 | jdbc:mysql://tidb-cluster0-tidb.tidb.svc:4000/antispam,com.mysql.cj.jdbc.Driver |
| PostgreSQL | antispam-business-video | jdbc:postgresql://<PG_HOST>:5432/antispam,org.postgresql.Driver |
| DDB(网易分布式库) | antispam-llm 的 mq、antispam-crawler-solution 的 manager/scheduler/storage | jdbc:mysql:ddb://...,com.netease.lbd.LBDriver |
| GoldenDB | yidun-ai-agent 的 ai-dhs-worker | com.goldendb:gdb-mysql-connector-java |
| RDS(平台库) | yidun-account、yidun-cms、yidun-website | yidun-rds-platform-online-jd-30178...:3331/yd_platform |
| 独立库 | yidun-model-evaluation(yidun_model_evaluation)、yidun-supervision-cms(yidun_supervision)、AI-data(ai_data)、netease-antispam(antispam) | — |
常见配置形态:
properties
# 单数据源
spring.datasource.url=jdbc:mysql://tidb-cluster0-tidb.tidb.svc:4000/antispam
# 主从双数据源(常用于 dubbo-provider / console-api,需 exclude DataSourceAutoConfiguration)
spring.datasource.master.url=...
spring.datasource.mirror.url=...四、Redis:三种形态混用
| 形态 | 配置键 | 使用方(示例) |
|---|---|---|
| Sentinel(哨兵) | spring.redis.sentinel.master=master01 + spring.redis.sentinel.nodes=redis0-redis-ha.yidun-infra.svc:26379 | 大多数模块 |
| Cluster(集群) | spring.redis.cluster.nodes=10.196.180.49:6107,... | antispam-list 的 admin-provider、antispam-image 的 dubbo-provider、antispam-stream-solution、yidun-account、yidun-model-evaluation、yidun-ai-agent |
| 多实例 / 专用集群 | redis.multiple.configs.* | antispam-llm(MultipleRedisTemplate)、antispam-cms(ai 实例)、netease-image(LRU 专用实例) |
WARNING
同一模块内不同单元可能用不同形态(如 antispam-image:check-provider 用 Sentinel、dubbo-provider 用 Cluster)。切换 profile 时沿用错误的形态会启动即连接异常。
五、Kafka 与消息约定
| 项目 | 约定 |
|---|---|
| Bootstrap | 私有 kafka-yidun-0/1/2.kafka-yidun-headless.yidun-infra:9092;online 常见 yidun-jd-nrkafka*:9092 |
| 消费注解 | 平台自研 @KafkaConsumer(com.netease.is.antispam.components.kafka.consume)+ @MultipleKafkaConsumer,不是原生 @KafkaListener |
| 原生 Listener | 仅少数模块显式 @EnableKafka + ConcurrentKafkaListenerContainerFactory(antispam-business-text/liveaudio 的 storage、antispam-rule 的 scheduler、antispam-file 的 checker) |
| 生产者 | netease.kafka.producer.enable=true,集群分组 cluster.main / cluster.default / cluster.log / cluster.risk |
| 消费幂等 | 计费消息要求幂等去重(重跑不计费),消费端必须自行去重 |
| CDC | @EnableCdcDataSubscribe(binlog → ES);部分模块该注解被注释掉(如 antispam-business-text 的 http-api/storage) |
六、Elasticsearch / OSS
| 组件 | 约定 |
|---|---|
| ES | 6.5.4 与 8.x 并存;elasticsearch.multiple.config.servers(多集群)或 elasticsearch.cluster.servers;archive 集群见 elasticsearch-yidun-master.yidun-infra.svc:9200 |
| OSS/NOS | @EnableOssClient + oss.client.provider=netease/s3;多实例 oss.client.instance-map.<name>;部分模块用 video-oss.properties / audio-oss.properties 单独文件 |
| 已知风险 | antispam-business-livevideo 的 livevideo-oss.properties 在仓库内不存在;antispam-business-image 明文 AK/SK |
七、基础镜像与 Profile 基线
base image 矩阵
| base image | 使用方 |
|---|---|
base-image:jdk17 | 大多数新模块(business-image/audio/video/liveaudio/livevideo、solution、cms、account、cms-web 后端等) |
base-image:jdk17-kylin | antispam-business-text、netease-antispam 部分单元 |
base-image:jdk8 | yidun-message、yidun-export、yidun-supervision-cms、antispam-business-video 的部分单元 |
base-image:jdk8-cib | antispam-private-cib |
base-image:jdk8-image-arm / tomcat8-arm | netease-image 各 provider / service |
tomcat:8.5.79-jdk8-openjdk-buster | AI-data |
yd-java-app:v3(轻舟) | antispam-llm 的 mq/scheduler/console、yidun-model-evaluation 与 yidun-ai-agent 的部分单元 |
Profile 约定
| 层级 | 取值 |
|---|---|
Spring -Dspring.profiles.active | dev(代码默认)/ test / private / online / online-pre / online-jd / xjp-test / xjp-online / 各区域变体 |
| Maven profile | default / dev / test / online / online-jd / private / xjp-*;buildAll.sh 的 GLOBAL_ENV 决定默认值(netease-antispam 与 antispam-private-cib 用 online,其余用 private) |
| kubernetes.yml | 统一 JAVA_OPTS: -Xmx1024m -Xms1024m -XX:+UseG1GC -Dspring.profiles.active=private + ENABLE_SKYWALKING=true |
Profile 与文件不匹配(最高频启动失败)
Dockerfile/kubernetes.yml 强制 -Dspring.profiles.active=private,但以下模块仓库内没有 application-private.properties:antispam-guardian、yidun-cms、yidun-mplatform-event、yidun-website、antispam-stream-solution、yidun-ai-agent/yidun-model-evaluation(无 maven private profile)。
结果:profile 静默回退,只加载 application.properties(其 spring.profiles.active=dev),导致 Dubbo 注册地址、数据源等关键配置缺失。
JAVA_OPTS 常见档位
| 档位 | 参数 | 典型单元 |
|---|---|---|
| 小 | -Xmx512m -Xms512m -XX:+UseG1GC | 多数 dubbo-provider/http-api、yidun-account、antispam-private-custom |
| 中 | -Xmx1024m -Xms1024m | storage、scheduler、antispam-business-text、business-audio |
| 大 | k8s 覆写 -Xmx2048m / CPU 4–8 | antispam-rule 的 checker(replicas=4、maxSurge=4) |
八、Web 容器与端口约定
| 项 | 约定 |
|---|---|
| Tomcat | 多数模块默认(server.tomcat.threads.max=800) |
| Undertow | antispam-business-*、antispam-keyword、antispam-rule 的 checker(io-threads=1、worker-threads=2 在 base,private 覆写为 8/128 或 600) |
| 常见端口 | HTTP 业务层 8080(private 统一)/ 8510、8110、8401、18129、8765、8123、8234、18018、18020、8321、8700、8918、18880、8908、8081、8004、8008、8882 |
| Dubbo | 多数 dubbo.protocol.port=-1(随机);antispam-llm、antispam-stream-solution、yidun-model-evaluation、yidun-ai-agent 的 dubbo provider 固定 20880 |
| 就绪探针 | 多数 HTTP 单元暴露 /health/status;netease-image 用 tcpSocket 30043 |