《Java 服务端通信工程》 · 全书目录与章节索引(50 篇)
《Java 服务端通信工程》全 50 篇:从 RPC 语义、Protobuf 编码与四种调用模式写起,覆盖 Stub/Channel、Interceptor、服务发现与负载均衡、连接池与 drain、重试预算、熔断、限流背压,再到 HTTP 网关、TLS 与租户授权、指标日志追踪、灰度发布与契约测试,最后以容量模型、故障演练和 linkd-v3 验收收尾,附完整章节索引与实验口径。
tag
《Java 服务端通信工程》全 50 篇:从 RPC 语义、Protobuf 编码与四种调用模式写起,覆盖 Stub/Channel、Interceptor、服务发现与负载均衡、连接池与 drain、重试预算、熔断、限流背压,再到 HTTP 网关、TLS 与租户授权、指标日志追踪、灰度发布与契约测试,最后以容量模型、故障演练和 linkd-v3 验收收尾,附完整章节索引与实验口径。
整理 macOS 上排查 linkd-v3 的可复制命令:JDK 与 Maven、keytool 与 openssl、lsof 与 netstat、tcpdump lo0、ab、jcmd 与 JFR,每条说明用途、平台限制与风险,并给出从端口到线程栈再到 JFR 的组合排查路径。
按 gRPC 核心、Metadata 与 Status、Protobuf、JDK HttpClient、HTTP server、并发与时间六组,列出卷三用到的类、方法签名、用途与对应章节,只收白名单 API,并标出容易记错的重载与调用顺序,供写 linkd-v3 时直接查表。
运行手册要在凌晨三点也能照着做。本节给出 linkd-v3 的启动停止、健康检查、五类常见故障的处置顺序、升级回滚步骤和值班交接模板,用两段可编译的 Java 代码实现优雅关闭与健康探针,并给出带「验收缺口」的复盘格式、回归证据要求和常见误操作清单。
验收不是再跑一次健康检查。本节把 linkd-v3 接入 libraryd 的验收拆成编译单测、契约测试、连通性与超时、限流熔断、TLS、指标日志追踪、灰度回滚七组,每条给出命令或断言,并附五条故障注入与两段可编译的 JUnit 测试代码。
把前十四章的能力装进一条真实链路:HTTP 客户端 → 9094 网关 → 9093 gRPC Library → 8080 libraryd。本节给出超时预算 800/300 ms 的逐段分配、失败传播图,以及重试、熔断、限流分别由谁负责的边界,并附两段可编译代码。
成本不是月底看账单。本节按核数、内存、出口流量拆开 linkd-v3 的月度成本,给出可复算的估算模型与两个算例,讨论 CPU 之外的扩缩容信号、冷启动的代价、最小副本与预算上限,以及预算与 SLO 之间的取舍,并附两段可编译的 Java 代码。
压测不是把 ab 的 -n 调大。本节区分恒定、阶梯、尖峰、浸泡四种剖面,给出吞吐、错误率与 p50/p95/p99 的口径,讲清协调缺失如何美化延迟,并用 ManagedChannel 写一个固定并发、按预期开始时间计时的 gRPC 压测客户端。
容量不是「多开几个线程」。本节用 Little's law 的 L=λW 把 200 rps × 800 ms = 160 在途算清楚,给出线程、连接、队列与并发的对应关系、Amdahl 定律下的瓶颈判断,以及一段可运行的 Java 容量模型代码和完整算例。
一次演练要有开始时间、结束时间、回滚路径和观察者,否则就会变成事故。本节给出假设→注入→观察→回滚→复盘五步闭环、单次演练记录表、超时与熔断护栏、独立的 kill switch 通道,以及两段 Java 代码实现自动回滚看门狗和演练时间线记录。
不引入混沌平台,只用 ServerInterceptor 和 ClientInterceptor 实现延迟、异常、丢弃与半开连接四类注入。开关默认关闭、只对测试租户生效、按请求 ID 哈希固定比例,给出完整可编译代码、装配方式与误伤生产流量的六条边界。
故障不是一句「服务挂了」。本节按依赖、资源、流量、代码、配置五类拆开 linkd-v3 链路的失效来源,给出爆炸半径分级表、稳态假设的写法、MTTD/MTTR 的拆解口径,并用一段 Java 代码计算一次故障影响的请求量,最后划清故障注入与生产环境的边界。
把版本兼容从口头约定变成 CI 门禁:用 Descriptors.FileDescriptor 对比上一版与当前 proto,检查字段号、类型、标签、枚举值和服务方法,并给出 golden 快照、JUnit 测试与破坏性变更回滚流程的具体实现。
把 12.1 的 v1/v2 并存接到真实流量:用租户白名单、请求 ID 哈希和 x-canary 声明做确定性切流,给出 CanaryRouter、服务端指标标记、回滚开关与放量门槛的完整代码、口径,并说明常见误判、边界条件与自动回滚的冷却要求。
围绕 linkd-v3 的 Library 服务,拆解 proto 包名、服务名、字段号三种版本载体,给出 v1/v2 并存、x-api-version 校验与只加不改不删的兼容矩阵,并附可编译的拦截器、网关路由代码与旧版本安全下线与观测口径。
11.2 有了 trace_id,本节补上 span:定义客户端与服务端 span 的父子关系,实现头部采样与尾部采样两种策略,并把 trace_id 作为 exemplar 挂到延迟直方图上,同时说明这不是完整的 OpenTelemetry。
把单个请求串起来:按 W3C 规范解析与生成 traceparent,区分 request-id 与 trace_id,用 JDK 输出可检索的结构化 JSON 日志,并给出按 trace 一致采样的完整可编译实现、字段设计与日志脱敏边界。
用 JDK 自己实现一套 gRPC 指标:LongAdder 计数器、固定桶并发直方图、gRPC 四个黄金信号,以及手写 renderPrometheus() 的 # HELP、# TYPE、le 标签格式;讲清标签基数风险和 9095 暴露口径。
认证只回答「你是谁」,本节回答「你能做什么」:把 x-tenant-id 设为必填并校验租户归属,用 RBAC 加 ABAC 的简化模型做资源级授权,拒绝时返回 PERMISSION_DENIED 与 ErrorInfo(TENANT_FORBIDDEN),并防住跨租户 ID 枚举。
10.1 解决了链路加密,本节解决调用者身份:用 Metadata 传播 Bearer token,在 ServerInterceptor 里校验结构、HMAC 签名与过期时间,给出可编译实现,并划清教学代码与生产 JWT 库的边界和日志脱敏规则。