<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Tan Junlin — Go Backend · Distributed Systems · AI/LLM Engineering</title><description>Tan Junlin 的个人技术博客，记录 Go 后端、分布式系统、LLM Gateway、Agent 与 AI/LLM 工程实践。</description><link>https://herta27.top/</link><language>zh-CN</language><dc:creator>Tan Junlin</dc:creator><item><title>ModelGate：从一次大模型 API 调用，到一个 Go 网关</title><link>https://herta27.top/posts/modelgate-from-api-call-to-go-gateway/</link><guid isPermaLink="true">https://herta27.top/posts/modelgate-from-api-call-to-go-gateway/</guid><description>从最简单的模型 API 调用出发，记录 ModelGate 如何逐步加入流式代理、限流、幂等、路由、重试、熔断、可观测性与工程化验证。</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><dc:creator>Tan Junlin</dc:creator><category>Go</category><category>LLM</category><category>API Gateway</category><category>Distributed Systems</category></item><item><title>Redis 限流器里的 Lua：为什么 Token Bucket 不能用几条命令拼出来</title><link>https://herta27.top/posts/redis-lua-token-bucket-atomicity/</link><guid isPermaLink="true">https://herta27.top/posts/redis-lua-token-bucket-atomicity/</guid><description>从一次并发超发出发，解释 ModelGate 如何用 Redis Lua 和统一时间源实现分布式 Token Bucket，以及它与并发控制的边界。</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><dc:creator>Tan Junlin</dc:creator><category>Go</category><category>Redis</category><category>Lua</category><category>Rate Limiting</category><category>LLM Gateway</category></item><item><title>SSE 流式代理：为什么第一帧之后不能再返回 JSON 错误</title><link>https://herta27.top/posts/sse-streaming-proxy-error-boundary/</link><guid isPermaLink="true">https://herta27.top/posts/sse-streaming-proxy-error-boundary/</guid><description>从 ModelGate 的流式代理实现出发，解释 SSE 的响应边界、首帧前后错误处理、Flush、Context 取消与资源释放。</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><dc:creator>Tan Junlin</dc:creator><category>Go</category><category>SSE</category><category>HTTP</category><category>LLM Gateway</category></item></channel></rss>