<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>系统设计 on Cooper&#39;s Blog</title>
    <link>https://www.wsqyouth.cn/tags/system-design/</link>
    <description>Recent content in 系统设计 on Cooper&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>en</language>
    <managingEditor>Coopers</managingEditor>
    <atom:link href="https://www.wsqyouth.cn/tags/system-design/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>跨境订单智能诊断系统复盘</title>
      <link>https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/</link>
      <pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;年前就一直想做一个前后端链路打通的作品，经过不断打磨，这个项目最近终于告一段落。在此做一个简单的复盘。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;目录&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/#%e4%b8%80%e9%a1%b9%e7%9b%ae%e8%83%8c%e6%99%af&#34;&gt;项目背景&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/#%e4%ba%8c%e4%ba%a7%e5%93%81%e6%95%88%e6%9e%9c&#34;&gt;产品效果&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/#%e4%b8%89%e6%8a%80%e6%9c%af%e5%ae%9e%e7%8e%b0&#34;&gt;技术实现&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/#%e5%9b%9b%e6%94%b6%e8%8e%b7%e6%88%90%e9%95%bf&#34;&gt;收获成长&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;一项目背景&#34;&gt;一、项目背景&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;客户痛点&lt;/strong&gt;：中小卖家在进行跨境发货时，面临物流订单地址异常检测和物流商比价两大痛点，因此我做了一个轻量级的跨境订单智能诊断平台。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;产品优势&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;轻量级&lt;/strong&gt;：市场上有类似系统，但需要付费购买庞大的 SaaS 应用，而客户往往只需要一个轻量的工具&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;双端支持&lt;/strong&gt;：平台支持界面手动填写，也支持 API 接入（未来还可以封装为 MCP，供 AI 调用）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;即插即用&lt;/strong&gt;：客户只需理解一套标准接口即可快速接入，背后支持多家物流商的地址异常检测和费率、时效查询&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;从个人层面来说，我希望通过这样一个前后端打通的 MVP 作品，对整个系统设计有一个更深的认识。另外，现在 AI 编程能力已经很强，只要你思考得足够清晰，剩下的实现可以交给 AI。&lt;/p&gt;
&lt;h3 id=&#34;二产品效果&#34;&gt;二、产品效果&lt;/h3&gt;
&lt;h4 id=&#34;21-平台界面&#34;&gt;2.1 平台界面&lt;/h4&gt;
&lt;p&gt;整个系统已部署到个人服务器：&lt;a href=&#34;https://oip.wsqyouth.cn/&#34;&gt;&lt;strong&gt;OIP 诊断平台&lt;/strong&gt;&lt;/a&gt;，可登录 &lt;code&gt;test@example.com&lt;/code&gt; 体验。&lt;/p&gt;
&lt;p&gt;系统包含四个模块：概览、订单列表、新建诊断、账号管理。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;产品概览&lt;/strong&gt;
客户故事：登录账号 → 新建物流订单 → 提交诊断 → 在订单列表查看诊断结果 → 通过概览了解整体诊断情况。
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/platform-overview.png&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;客户注册及账号切换&lt;/strong&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/platform-account-switching.png&#34;&gt;
为什么这么设计？因为海外用户主要以邮箱作为账号主体来处理业务，因此设计为通过邮箱切换账号，登录后即可查看该账号下的订单。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;新建诊断&lt;/strong&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/create-diagnosis.png&#34;&gt;
客户填写订单信息后，由诊断平台执行诊断并返回结果。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;诊断结果页面&lt;/strong&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/diagnosis-result.png&#34;&gt;
每个订单都会得到一份诊断结果：物流信息是否异常，以及当前这票快递可选的物流商有哪些，其中哪个服务最便宜、哪个最快。
&lt;strong&gt;备注&lt;/strong&gt;：当前物流商接口数据为 Mock 随机值，后续可接入真实物流商 API。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;三技术实现&#34;&gt;三、技术实现&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;系统部署架构&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;用户浏览器 → https://oip.wsqyouth.cn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            Nginx (host, port 443)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            ├── /       → 前端静态文件
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            └── /api/   → reverse proxy → 127.0.0.1:8080 (dpmain)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            dpmain (Go binary, host, :8080)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              ├── MySQL   (Docker, 127.0.0.1:3306)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              ├── Redis   (Docker, 127.0.0.1:6379)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              └── Lmstfy  (Docker, 127.0.0.1:7777)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            dpsync (Go binary, host)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;前端&lt;/strong&gt;基于 React 实现。这部分是我写好 PRD 后直接让 AI 实现的，我并不太熟悉前端，就不展开了。主要的设计考量是：路由、静态页面、业务逻辑这几块要分层，方便后续扩展。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;后端&lt;/strong&gt;系统技术架构如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;┌─────────────────────────────────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│              用户/商家系统                        │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└──────────┬──────────────────────────┬───────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           │ HTTP API                 │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           ↓                          │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ┌──────────────┐                 │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │   dpmain     │                 │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │  (API 服务)   │                 │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └──────┬───────┘                 │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           │                          │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           │ 1. 订阅 Redis            │ 4. 轮询查询
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           │ 2. 推送 Lmstfy           │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           │ 3. Smart Wait (10s)      │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           ↓                          ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ┌──────────────────────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │  Redis Pub/Sub + MySQL              │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │  channel: diagnosis:result:{id}     │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └──────────────┬──────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   ↑
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   │ 5. 发布结果
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ┌──────────────┴──────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │      dpsync             │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │   (Worker 服务)          │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │                         │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │  CompositeHandler       │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │  ├─ ShippingCalculator  │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │  └─ AnomalyChecker      │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └─────────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;后端基于 Gin 框架，分为 API 服务（dpmain）和异步诊断服务（dpsync），通过 Lmstfy 消息队列解耦。这样设计的考量是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API 同步服务处理校验、耗时短的业务，将耗时较长的诊断环节放到异步任务中。&lt;/li&gt;
&lt;li&gt;消息队列做解耦，一方面使业务架构更清晰，另一方面也为后续微服务拆分留好了扩展点。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;完整请求流程&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1. 用户 → POST /api/v1/orders?wait=10
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2. dpmain: 验证 account → 地址校验 → 订单落库 (DIAGNOSING)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3. dpmain: 订阅 Redis channel: diagnosis:result:{order_id}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;4. dpmain: 推送 Lmstfy 队列：oip_order_diagnose
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;5. dpmain: Smart Wait 10s
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   → 10s 内收到 Redis 消息 → 返回 200 + 诊断结果
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   → 超时 → 返回 3001 + poll_url
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;三个模块的职责划分&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;模块&lt;/th&gt;
          &lt;th&gt;职责&lt;/th&gt;
          &lt;th&gt;技术栈&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;common&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;共享内核：Entity + Model + DAO&lt;/td&gt;
          &lt;td&gt;GORM + Go 标准库&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;dpmain&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;同步 API：HTTP 接口 + Smart Wait + Callback Consumer&lt;/td&gt;
          &lt;td&gt;Gin + Wire + Redis&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;dpsync&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;异步 Worker：消费队列 + 执行诊断 + 发布回调&lt;/td&gt;
          &lt;td&gt;Lmstfy + Template Method&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;其中 dpmain 的核心架构采用 DDD，领域划分结构如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpmain/internal/app/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── domains/               # 领域层
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── entity/           # et 前缀：聚合根和值对象
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── apimodel/         # API 模型（DTO）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   │   ├── request/      # XxxRequest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   │   └── response/     # XxxResponse
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── modules/          # md 前缀：业务编排
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── repo/             # rp 前缀：仓储接口
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── services/         # sv 前缀：领域服务
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── infra/                # 基础设施层
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── persistence/      # 持久化实现
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── mq/               # 消息队列
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── server/               # 服务器层
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── handlers/         # HTTP 处理器
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── routers/          # 路由配置
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── middlewares/      # 中间件
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── pkg/                  # 工具包
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;[!important] 依赖方向核心原则
&lt;strong&gt;依赖指向领域层，领域层不依赖外部。&lt;/strong&gt;
&lt;code&gt;server → services → modules + repo(接口) ← infra(实现)&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;dpsync 是一个异步消费框架：订阅队列数据，多 Worker 并发消费处理，之后将结果回传或直接结束。主要设计考量：一是并发消费数量可配置化，灵活调节消费能力；二是扩展性好，后续新增的异步任务都能方便地接入。&lt;/p&gt;
&lt;p&gt;总结核心设计决策：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Shared Kernel 架构&lt;/strong&gt;：dpmain 和 dpsync 共处一个仓库，共用 Entity 层，适合 MVP 阶段快速迭代，同时保留了向微服务演进的可能性。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Smart Wait + Redis Pub/Sub&lt;/strong&gt;：诊断请求先 Hold 住 API 连接，若 10s 内处理完成则直接返回 200 和诊断结果；否则返回 3001 和 poll_url，交由客户端异步轮询。这样既让客户有&amp;quot;伪同步&amp;quot;的实时体验，又避免长连接过多占用服务器资源。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;轻量级链路追踪&lt;/strong&gt;：仅 100 行 Go 代码实现，采样统计各环节耗时占比，方便后续监控优化。同一服务内通过 context 传播，跨服务通过 MQ metadata 传递 trace_id。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;四收获成长&#34;&gt;四、收获成长&lt;/h3&gt;
&lt;h4 id=&#34;41-ai-编程开发&#34;&gt;4.1 AI 编程开发&lt;/h4&gt;
&lt;p&gt;在这个项目中，我掌握了一套 SpecKit 编程范式——无论前端还是后端，与 AI 结对编程时都是先通过文档确定方案和协议，再进入代码开发。&lt;/p&gt;
&lt;p&gt;典型开发流程：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1. 阅读 Story → 明确目标和验证标准
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2. Plan 模式 → 与 Claude 对齐技术方案
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3. Code 模式 → Claude 根据 knowledge/ 规范生成代码
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;4. Code Review → 人工审查，发现不符合规范的地方
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;5. 提炼规范 → 将 Review 发现的问题沉淀到 coding-standards.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;6. 更新 Story → 记录会话内容、决策、问题
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;在开发过程中，一方面对所有改动都通过文档留痕，方便复盘和回退；另一方面也在过程中不断沉淀经验和方法论到 Claude 的配置文档中，为后续项目积累可复用的知识。&lt;/p&gt;
&lt;p&gt;下图是我让 AI 沉淀的一套编程经验：
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/ai-programming-standards.png&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://www.wsqyouth.cn/2026/03/12/cross-border-order-diagnosis-system-review/ai-programming-experience.png&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;42-压测与调试&#34;&gt;4.2 压测与调试&lt;/h4&gt;
&lt;p&gt;如果没有这个环节，充其量就是一个 MVP Demo。只有经过反复压测，才能知道系统的边界和薄弱项在哪里，最终打磨成可以发布到生产环境的产品。&lt;/p&gt;
&lt;p&gt;两天的压测过程中发现了以下问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;日志量过大&lt;/strong&gt;：大量无用日志浪费资源，需要精简为关键信息&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;连接池参数不合理&lt;/strong&gt;：高并发场景下没有使用池化复用连接，导致业务模块 CPU 占用不合理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;指标定义修正&lt;/strong&gt;：客户真正关心的是&amp;quot;快速且成功&amp;quot;，因此将指标定义为&amp;quot;3 秒内成功率&amp;quot;。这个指标一方面反映客户诉求，另一方面也倒逼我们持续提升系统性能&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;回调队列的多线程化&lt;/strong&gt;：这个环节处于整个链路的末端，起初按多进程模型部署，后来优化为单线程合并到 dpmain（复用 DAO 并简化运维），没想到这里才是最大瓶颈。压测帮我发现了这个关键问题，多线程化后吞吐提升了 75%&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;五总结展望&#34;&gt;五、总结展望&lt;/h3&gt;
&lt;p&gt;当然，距离真正的高并发系统还有很长的路要走。仅我能想到的不足就有：错误标准化、代码耦合优化、进一步性能调优、CI/CD 集成、云原生集群部署等。&lt;/p&gt;
&lt;p&gt;但更重要的是，自己从头经历了一个项目的完整上线过程：原型设计 → 代码开发 → 压测调试 → 上云部署。对整个工程链路有了更深的认识。&lt;/p&gt;
</description>
    </item>
  </channel>
</rss>
