-
APISIX Gateway 504s After Exactly 15 Seconds: Tracing It to tcp_syn_retries
An API gateway kept returning 504s with request time pinned at exactly 15 seconds. This postmortem walks through timeout tracing, kernel parameter analysis, DNS elimination and packet capture to root-cause it as a SYN retransmission timeout.
Chinese original: APISIX Gateway 504s After Exactly 15 Seconds: Tracing It to tcp_syn_retries -
From Model Management to an AI Gateway: Tying Assets, Traffic and Cost into a Closed Loop
Model management decides who can use what and how much; the AI gateway enforces it on every request. A tour of the three planes, the model lifecycle, and the request pipeline.
Chinese original: From Model Management to an AI Gateway: Tying Assets, Traffic and Cost into a Closed Loop -
API7 Gateway Upgrade Postmortem: Streaming 500s and Low-Traffic CPU Saturation From Two Independent Bugs
An API7 upgrade introduced streaming 500s and CPU saturation under low traffic. Controlled experiments, a dependency diff, and perf data proved they were two independent bugs.
Chinese original: API7 Gateway Upgrade Postmortem: Streaming 500s and Low-Traffic CPU Saturation From Two Independent Bugs -
Rethinking LLM Gateway Rate Limiting: From an In-Process Leaky Bucket to a Distributed Leaky-Bucket Matrix
How Alibaba Cloud's Bailian gateway rebuilt LLM rate limiting: fixed window plus a distributed LiteTopic leaky-bucket matrix, and the response channel the article skips.
Chinese original: Rethinking LLM Gateway Rate Limiting: From an In-Process Leaky Bucket to a Distributed Leaky-Bucket Matrix -
Coding Agent Harness Selection and Integration: OpenCode, Pi, DeepSeek Harness, Codex, Claude Agent SDK, and OpenHands Compared
A documentation-based comparison of six coding agent harnesses across standalone operation, HTTP APIs and session management, with a decision tree and integration guidance.
Chinese original: Coding Agent Harness Selection and Integration: OpenCode, Pi, DeepSeek Harness, Codex, Claude Agent SDK, and OpenHands Compared -
From Upload to Verifiable Answers: A Go Document Q&A RAG Implementation
How a Go document Q&A system turns an uploaded file into verifiable answers: async parsing, OCR, chunking, hybrid retrieval with RRF, reranking, and citation checking.
Chinese original: From Upload to Verifiable Answers: A Go Document Q&A RAG Implementation -
How to Judge an AI Gateway: Protocol Compatibility, Traffic Governance, and a Performance Scorecard
A practical framework for judging AI gateways: L7 fundamentals, AI traffic handling, provable runtime performance, production maturity, five veto lines, and a weighted scorecard.
Chinese original: How to Judge an AI Gateway: Protocol Compatibility, Traffic Governance, and a Performance Scorecard -
Runtime Behavior Blind Spots: Postmortem of CPU Saturation Bugs in an API7 AI Gateway
Postmortem of repeated CPU saturation in an API7 AI gateway: cancellation propagation, scheduling fairness, per-request decode cost, and streaming backpressure — four distinct failure modes with separate fixes.
Chinese original: Runtime Behavior Blind Spots: Postmortem of CPU Saturation Bugs in an API7 AI Gateway -
APISIX Protocol Translation Plugin in Practice: Anthropic and OpenAI Compatible APIs
How an APISIX plugin converts Anthropic Messages API traffic to OpenAI Chat Completions and back, covering streaming, thinking, tool calls, and multimodal images.
Chinese original: APISIX Protocol Translation Plugin in Practice: Anthropic and OpenAI Compatible APIs -
Apache APISIX Architecture: Coroutines, Event-Driven Design, and OpenResty vs Envoy
A look at the Apache APISIX architecture: how event-driven design, coroutines, and LuaJIT on top of OpenResty deliver its performance, plus a comparison with Envoy as a foundation.
Chinese original: Apache APISIX Architecture: Coroutines, Event-Driven Design, and OpenResty vs Envoy -
North-South Entry Gateway Selection
North-south entry gateway selection for a hybrid cloud spanning China and overseas, comparing Istio Gateway, cloud ASM and the Kubernetes Gateway API.
Chinese original: North-South Entry Gateway Selection -
Flood of TIME_WAIT Connections from a Go HTTP Client: Unread Response Bodies and the Liveness Probe
A Go HTTP client produced masses of TIME_WAIT and short-lived connections. Tracing it from request code through response body handling and connection reuse, then Transport tuning.
Chinese original: Flood of TIME_WAIT Connections from a Go HTTP Client: Unread Response Bodies and the Liveness Probe -
Elasticsearch Cluster Turned Red: hs_err Logs, mmap, and 60,000 Shards
Postmortem of a 3-node Elasticsearch cluster that went red with write timeouts: tracing an hs_err crash log to native memory (mmap) exhaustion and rescuing unassigned shards.
Chinese original: Elasticsearch Cluster Turned Red: hs_err Logs, mmap, and 60,000 Shards -
Service Thread Count Spikes: Tracing It to Repeated Thread Pool Creation
A postmortem of a service whose thread count spiked from repeated thread pool creation: monitoring alert, thread dump and heap analysis, root cause, and four fixes.
Chinese original: Service Thread Count Spikes: Tracing It to Repeated Thread Pool Creation -
Feign Calls Pegged the CPU: Repeated HttpMessageConverter Initialization
A production postmortem: Feign calls pegged the CPU because HttpMessageConverters were re-initialized on every call, re-running class loading and Jackson setup. Full diagnosis chain and fixes.
Chinese original: Feign Calls Pegged the CPU: Repeated HttpMessageConverter Initialization -
Zero-Downtime Elasticsearch Cloud Migration: Data Sync, Document Comparison, and Cutover
A zero-downtime Elasticsearch cloud migration: ~40 indexes under 100 GB with no usable update-time fields. Data sync, document comparison, mapping checks, and traffic cutover.
Chinese original: Zero-Downtime Elasticsearch Cloud Migration: Data Sync, Document Comparison, and Cutover -
RocketMQ Client DEADLINE_EXCEEDED in the Cloud: Tracing It to Container Memory
A RocketMQ Java client failed with gRPC DEADLINE_EXCEEDED only in one cloud test cluster. Packet capture and resource-limit tests traced it to container memory pressure, not the network.
Chinese original: RocketMQ Client DEADLINE_EXCEEDED in the Cloud: Tracing It to Container Memory -
Elasticsearch Cluster Lost Its Master: Thread Pools, Packet Capture, and 60,000 Shards
Postmortem of a seven-node Elasticsearch 7 cluster that lost its master: thread pool spikes, bandwidth checks, packet capture, and a shard count that had grown past 60,000.
Chinese original: Elasticsearch Cluster Lost Its Master: Thread Pools, Packet Capture, and 60,000 Shards -
OOM in a Gin API Gateway: Caching Every Response Body
A postmortem of an OOM caused by caching every response body in a Gin API gateway: why memory ballooned in minutes, and a safer implementation.
Chinese original: OOM in a Gin API Gateway: Caching Every Response Body -
Elasticsearch Limits and Recommended Configurations
Elasticsearch limits and recommended settings: array and document size caps, a reference index template, shard balancing, delayed allocation, and concurrent recoveries.
Chinese original: Elasticsearch Limits and Recommended Configurations -
Elasticsearch Refresh vs Flush: What Each One Does and When It Runs
Elasticsearch refresh vs flush explained: trigger timing, scope, and how each affects search visibility and write durability, plus the settings to trade one for the other.
Chinese original: Elasticsearch Refresh vs Flush: What Each One Does and When It Runs -
Elasticsearch 7.6.2 "[parent] Data Too Large": Troubleshooting a Circuit Breaker Exception
Troubleshooting the "[parent] Data too large" circuit breaker on Elasticsearch 7.6.2: how use_real_memory and G1 GC interact. The JVM flags here apply to that era's clusters only.
Chinese original: Elasticsearch 7.6.2 "[parent] Data Too Large": Troubleshooting a Circuit Breaker Exception
These are English editions of articles originally published in Chinese on this blog. The Chinese edition is always the most complete and up-to-date version. Feedback and corrections are welcome via email.