-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
188 lines (93 loc) · 60.4 KB
/
Copy pathatom.xml
File metadata and controls
188 lines (93 loc) · 60.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>errocks</title>
<link href="https://errocks.github.io/atom.xml" rel="self"/>
<link href="https://errocks.github.io/"/>
<updated>2026-07-07T16:27:52.901Z</updated>
<id>https://errocks.github.io/</id>
<author>
<name>errocks</name>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>基于纳什均衡的技术设计</title>
<link href="https://errocks.github.io/2026/07/08/%E5%9F%BA%E4%BA%8E%E7%BA%B3%E4%BB%80%E5%9D%87%E8%A1%A1%E7%9A%84%E6%8A%80%E6%9C%AF%E8%AE%BE%E8%AE%A1/"/>
<id>https://errocks.github.io/2026/07/08/%E5%9F%BA%E4%BA%8E%E7%BA%B3%E4%BB%80%E5%9D%87%E8%A1%A1%E7%9A%84%E6%8A%80%E6%9C%AF%E8%AE%BE%E8%AE%A1/</id>
<published>2026-07-08T06:00:00.000Z</published>
<updated>2026-07-07T16:27:52.901Z</updated>
<content type="html"><![CDATA[<h1 id="基于纳什均衡的技术设计"><a href="#基于纳什均衡的技术设计" class="headerlink" title="基于纳什均衡的技术设计"></a>基于纳什均衡的技术设计</h1><h1 id="分享者-李广庆"><a href="#分享者-李广庆" class="headerlink" title="分享者: 李广庆"></a>分享者: 李广庆</h1><h2 id="一、架构设计的核心哲学"><a href="#一、架构设计的核心哲学" class="headerlink" title="一、架构设计的核心哲学"></a>一、架构设计的核心哲学</h2><h3 id="系统演化的必然性"><a href="#系统演化的必然性" class="headerlink" title="系统演化的必然性"></a>系统演化的必然性</h3><h4 id="好架构的标准:支持升级演变>全知全能"><a href="#好架构的标准:支持升级演变>全知全能" class="headerlink" title="好架构的标准:支持升级演变>全知全能"></a>好架构的标准:支持升级演变>全知全能</h4><ul><li><p>好的架构不是能解决所有问题</p></li><li><p>应该支持升级与演变, 因为变化才是必然的</p></li><li><p>好的系统都是具有优美的特点的</p></li></ul><h5 id="纳什均衡与经济学系统"><a href="#纳什均衡与经济学系统" class="headerlink" title="纳什均衡与经济学系统"></a>纳什均衡与经济学系统</h5><ul><li>软件服务其实是一个经济学系统</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br></pre></td><td class="code"><pre><span class="line">%% 经济系统与软件系统的类比关系图</span><br><span class="line">graph LR</span><br><span class="line"> %% 经济系统元素</span><br><span class="line"> A[经济系统] --> A1[资源]</span><br><span class="line"> A --> A2[生产主体]</span><br><span class="line"> A --> A3[消费者]</span><br><span class="line"> A --> A4[市场机制]</span><br><span class="line"> A --> A5[货币]</span><br><span class="line"> A --> A6[政府调控]</span><br><span class="line"> A --> A7[经济循环流]</span><br><span class="line"> </span><br><span class="line"> %% 软件系统元素</span><br><span class="line"> B[软件系统] --> B1[硬件资源]</span><br><span class="line"> B --> B2[服务/微服务]</span><br><span class="line"> B --> B3[用户/其他服务]</span><br><span class="line"> B --> B4[通信协议]</span><br><span class="line"> B --> B5[算力/令牌]</span><br><span class="line"> B --> B6[调度器]</span><br><span class="line"> B --> B7[数据/控制流]</span><br><span class="line"> </span><br><span class="line"> %% 对应关系</span><br><span class="line"> A1 -->|类比| B1</span><br><span class="line"> A2 -->|类比| B2</span><br><span class="line"> A3 -->|类比| B3</span><br><span class="line"> A4 -->|类比| B4</span><br><span class="line"> A5 -->|类比| B5</span><br><span class="line"> A6 -->|类比| B6</span><br><span class="line"> A7 -->|类比| B7</span><br><span class="line"> </span><br><span class="line"> %% 详细说明节点</span><br><span class="line"> subgraph 经济系统详解</span><br><span class="line"> A1("资源(土地、劳动力、资本)")</span><br><span class="line"> A2("生产主体(企业)")</span><br><span class="line"> A3("消费者(家庭)")</span><br><span class="line"> A4("市场机制")</span><br><span class="line"> A5("货币")</span><br><span class="line"> A6("政府调控")</span><br><span class="line"> A7("经济循环流")</span><br><span class="line"> end</span><br><span class="line"> </span><br><span class="line"> subgraph 软件系统详解</span><br><span class="line"> B1("硬件资源(CPU、内存、带宽、存储)")</span><br><span class="line"> B2("服务/微服务(Service)")</span><br><span class="line"> B3("用户或其他服务")</span><br><span class="line"> B4("服务间通信协议(API、消息队列)")</span><br><span class="line"> B5("算力/令牌/优先级配额")</span><br><span class="line"> B6("调度器/协调器(K8s、服务网格)")</span><br><span class="line"> B7("数据流与控制流")</span><br><span class="line"> end</span><br><span class="line"> </span><br><span class="line"> %% 连接线说明</span><br><span class="line"> A1 -.->|"资源有限需高效分配<br>软件竞争硬件资源<br>类似资源稀缺性"| B1</span><br><span class="line"> A2 -.->|"每个服务是独立生产单元<br>通过计算'制造'数据或功能"| B2</span><br><span class="line"> A3 -.->|"用户消费功能(如页面加载)<br>服务间相互消费(如API调用)"| B3</span><br><span class="line"> A4 -.->|"API定义'交易规则'<br>消息队列是'交易市场'<br>服务通过协议交换数据"| B4</span><br><span class="line"> A5 -.->|"服务需支付'成本'(CPU时间、延迟)<br>配额系统类似货币分配"| B5</span><br><span class="line"> A6 -.->|"通过策略维护系统稳定<br>(限流、熔断、负载均衡)<br>避免'市场失灵'(雪崩崩溃)"| B6</span><br><span class="line"> A7 -.->|"数据(商品)在服务间流动<br>控制信号调节生产节奏<br>(如扩容指令)"| B7</span><br><span class="line"> </span><br><span class="line"> %% 样式设置</span><br><span class="line"> classDef econ fill:#f9f,stroke:#333,stroke-width:2px;</span><br><span class="line"> classDef tech fill:#cff,stroke:#333,stroke-width:2px;</span><br><span class="line"> classDef mapping fill:#fff,stroke:#aaa,dashed;</span><br><span class="line"> classDef desc fill:#fff,stroke:#0a0;</span><br><span class="line"> </span><br><span class="line"> class A,B econ;</span><br><span class="line"> class A1,A2,A3,A4,A5,A6,A7 desc;</span><br><span class="line"> class B1,B2,B3,B4,B5,B6,B7 tech;</span><br><span class="line"> style A1 fill:#ff9</span><br><span class="line"> style A2 fill:#f9f</span><br><span class="line"> style A3 fill:#faa</span><br><span class="line"> style A4 fill:#afa</span><br><span class="line"> style A5 fill:#aaf</span><br><span class="line"> style A6 fill:#fcc</span><br><span class="line"> style A7 fill:#cdf</span><br><span class="line"> </span><br><span class="line"> style B1 fill:#ff9</span><br><span class="line"> style B2 fill:#f9f</span><br><span class="line"> style B3 fill:#faa</span><br><span class="line"> style B4 fill:#afa</span><br><span class="line"> style B5 fill:#aaf</span><br><span class="line"> style B6 fill:#fcc</span><br><span class="line"> style B7 fill:#cdf</span><br></pre></td></tr></table></figure><p>软件即经济:</p><p>将代码、服务和资源视为一个动态演化的数字生态系统,用经济学思维(稀缺性、激励、交换)指导设计:</p><ol><li><p>资源即商品,分配策略决定系统效率;</p></li><li><p>服务即企业,API契约是交易规则;</p></li><li><p>调度器即政府,通过政策维护系统稳定。<br>这种视角让开发者更关注系统的动态平衡,而非静态结构,从而构建出更具韧性和适应性的软件。</p></li></ol><p>系统的演变成本与收益如何达到一个平衡点?</p><ul><li>开发者博弈模型</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">graph TD</span><br><span class="line"> classDef player fill:#b3e5fc,stroke:#0277bd</span><br><span class="line"> classDef strategy fill:#c8e6c9,stroke:#2e7d32</span><br><span class="line"> classDef payoff fill:#f0f4c3,stroke:#827717</span><br><span class="line"> classDef equilibrium fill:#ffcdd2,stroke:#c62828</span><br><span class="line"></span><br><span class="line"> subgraph 开发者博弈模型</span><br><span class="line"> A[开发者]:::player --> B{策略选择}</span><br><span class="line"> B --> |稳定点优先| C[区分变与不变]:::strategy</span><br><span class="line"> C --> D[代码迭代量少]:::payoff</span><br><span class="line"> C --> E[系统复用性大]:::payoff</span><br><span class="line"> D & E --> F[均衡状态]:::equilibrium</span><br><span class="line"> F --> G[无单方偏离动机]</span><br><span class="line"> F -->|若单方偏离|H[增加不可复用代码]:::equilibrium</span><br><span class="line"> F -->|若单方偏离|I[测试代码膨胀]:::equilibrium</span><br><span class="line"> end</span><br><span class="line"> H & I -->|反向激励| B</span><br></pre></td></tr></table></figure><hr><h4 id="稳定点理论:数据层>接口层>服务层>技术基建"><a href="#稳定点理论:数据层>接口层>服务层>技术基建" class="headerlink" title="稳定点理论:数据层>接口层>服务层>技术基建"></a>稳定点理论:数据层>接口层>服务层>技术基建</h4><h5 id="稳定点方法论设计系统-区分变化与不变"><a href="#稳定点方法论设计系统-区分变化与不变" class="headerlink" title="稳定点方法论设计系统: 区分变化与不变"></a>稳定点方法论设计系统: 区分变化与不变</h5><p>ⅰ. 接口层应该是业务服务的稳定点(包括进出的接口层)<br> ⅱ. 数据是业务逻辑服务的稳定点, 能用数据去解决的,就不要用计算去解决,数据(接口)定义了问题<br> ⅲ. 业务与技术(框架,DB,语言), 业务其实才是稳定点, 业务被视为是最重要的, 是核心, 最稳定的, db, 框架等都是可变的, 可以随时根据项目的情况替换掉</p><ul><li>纳什均衡启示:多因素动态平衡中的最佳稳定态</li></ul><h2 id="用稳定点方法论理解SOLID原则"><a href="#用稳定点方法论理解SOLID原则" class="headerlink" title="用稳定点方法论理解SOLID原则"></a>用稳定点方法论理解SOLID原则</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">graph LR</span><br><span class="line"> subgraph SOLID原则的稳定点</span><br><span class="line"> SRP[单一职责] -->|每个变化点被隔离| 稳定1[类内部稳定]</span><br><span class="line"> OCP[开闭原则] -->|扩展而非修改| 稳定2[现有代码稳定]</span><br><span class="line"> LSP[里氏替换] -->|子类不破坏行为| 稳定3[多态调用稳定]</span><br><span class="line"> ISP[接口隔离] -->|接口最小化| 稳定4[客户端稳定]</span><br><span class="line"> DIP[依赖倒置] -->|依赖抽象| 稳定5[模块间稳定]</span><br><span class="line"> end</span><br><span class="line"> 稳定1 --> 系统稳定</span><br><span class="line"> 稳定2 --> 系统稳定</span><br><span class="line"> 稳定3 --> 系统稳定</span><br><span class="line"> 稳定4 --> 系统稳定</span><br><span class="line"> 稳定5 --> 系统稳定</span><br></pre></td></tr></table></figure><h3 id="单一职责原则-SRP-的稳定点分析"><a href="#单一职责原则-SRP-的稳定点分析" class="headerlink" title="单一职责原则(SRP)的稳定点分析"></a>单一职责原则(SRP)的稳定点分析</h3><p><strong>稳定机制</strong>:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">graph TD</span><br><span class="line"> subgraph 违反SRP</span><br><span class="line"> A[上帝类] --> B[修改原因1]</span><br><span class="line"> A --> C[修改原因2]</span><br><span class="line"> A --> D[修改原因3]</span><br><span class="line"> B --> E[风险区1]</span><br><span class="line"> C --> E</span><br><span class="line"> D --> E</span><br><span class="line"> E[系统崩溃点]</span><br><span class="line"> end</span><br><span class="line"> </span><br><span class="line"> subgraph 遵守SRP</span><br><span class="line"> F[服务A] --> G[职责1]</span><br><span class="line"> H[服务B] --> I[职责2]</span><br><span class="line"> J[服务C] --> K[职责3]</span><br><span class="line"> G --> L[稳定点]</span><br><span class="line"> I --> L</span><br><span class="line"> K --> L</span><br><span class="line"> L[系统均衡]</span><br><span class="line"> end</span><br><span class="line"> </span><br><span class="line"> style E fill:#f99</span><br><span class="line"> style L fill:#9f9</span><br></pre></td></tr></table></figure><ul><li><p>每个类只有一个改变理由 → 减少变化传播路径</p></li><li><p>修改影响局部化 → 偏离成本高于收益</p></li><li><p>系统自然收敛到模块化状态</p></li></ul><h3 id="开闭原则-OCP-的博弈平衡"><a href="#开闭原则-OCP-的博弈平衡" class="headerlink" title="开闭原则(OCP)的博弈平衡"></a>开闭原则(OCP)的博弈平衡</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">sequenceDiagram</span><br><span class="line"> participant C as 客户端</span><br><span class="line"> participant M as 核心模块(稳定点)</span><br><span class="line"> participant E as 扩展点</span><br><span class="line"> C->>M: 使用核心功能</span><br><span class="line"> M->>E: 定义扩展接口</span><br><span class="line"> alt 遵循OCP</span><br><span class="line"> E->>E: 添加新实现</span><br><span class="line"> E->>C: 提供新功能</span><br><span class="line"> C->>C: 无需修改现有代码</span><br><span class="line"> else 违反OCP</span><br><span class="line"> C->>M: 直接修改核心</span><br><span class="line"> M->>M: 内部调整</span><br><span class="line"> M--xC: 引发连锁错误</span><br><span class="line"> C->>C: 修复成本↑↑</span><br><span class="line"> end</span><br><span class="line"> Note over M,E: 纳什均衡:<br>核心模块保持封闭=稳定收益<br>扩展模块开放=灵活收益</span><br></pre></td></tr></table></figure><p><strong>稳定点特性</strong>:</p><ul><li><p>核心模块封闭 → 成为系统不动点</p></li><li><p>扩展接口开放 → 允许策略变化而不破坏均衡</p></li><li><p>违反惩罚:修改核心导致系统稳定性破坏</p></li></ul><h3 id="里氏替换原则-LSP-的策略一致性"><a href="#里氏替换原则-LSP-的策略一致性" class="headerlink" title="里氏替换原则(LSP)的策略一致性"></a>里氏替换原则(LSP)的策略一致性</h3><ul><li>当你扩展一个类时, 记住你应该要能在不修改客户端代码的情况下将子类的对象作为父类对象进行传递</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">graph LR</span><br><span class="line"> subgraph 继承体系</span><br><span class="line"> B[基类] --> D1[子类A]</span><br><span class="line"> B --> D2[子类B]</span><br><span class="line"> B --> D3[子类C]</span><br><span class="line"> end</span><br><span class="line"> subgraph 客户端</span><br><span class="line"> C[使用基类接口]</span><br><span class="line"> end</span><br><span class="line"> C --> B</span><br><span class="line"> C -. 应能 .-> D1</span><br><span class="line"> C -. 应能 .-> D2</span><br><span class="line"> C -. 应能 .-> D3</span><br><span class="line"> subgraph 纳什均衡</span><br><span class="line"> NE[所有子类遵守基类契约] --> ST[系统稳定]</span><br><span class="line"> ST -->|any class替换| OK[行为一致]</span><br><span class="line"> end</span><br><span class="line"> subgraph 偏离惩罚</span><br><span class="line"> D2 -. 破坏契约 .-> ERR[运行时错误]</span><br><span class="line"> ERR --> C[客户端故障]</span><br><span class="line"> C --> D2[子类被弃用]</span><br><span class="line"> end</span><br><span class="line"> style NE fill:#9f9</span><br><span class="line"> style ERR fill:#f99</span><br></pre></td></tr></table></figure><p><strong>稳定机制</strong>:</p><ul><li><p>子类必须遵守基类约定 → 形成策略不变点</p></li><li><p>破坏契约的子类会被自然淘汰(被客户端拒绝)</p></li><li><p>系统收敛到所有派生类型可互换的状态</p></li></ul><h3 id="接口隔离原则-ISP-的收益优化"><a href="#接口隔离原则-ISP-的收益优化" class="headerlink" title="接口隔离原则(ISP)的收益优化"></a>接口隔离原则(ISP)的收益优化</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">graph TD</span><br><span class="line"> subgraph 违反ISP</span><br><span class="line"> FAT[胖接口] --> C1[客户端A]</span><br><span class="line"> FAT --> C2[客户端B]</span><br><span class="line"> FAT --> C3[客户端C]</span><br><span class="line"> C1 -->|依赖不需要方法| L1[维护成本↑]</span><br><span class="line"> C2 --> L2[测试复杂度↑]</span><br><span class="line"> C3 --> L3[变更风险↑]</span><br><span class="line"> end</span><br><span class="line"> subgraph 遵守ISP</span><br><span class="line"> I1[接口A] --> C1</span><br><span class="line"> I2[接口B] --> C2</span><br><span class="line"> I3[接口C] --> C3</span><br><span class="line"> C1 --> S1[稳定收益]</span><br><span class="line"> C2 --> S2[稳定收益]</span><br><span class="line"> C3 --> S3[稳定收益]</span><br><span class="line"> end</span><br><span class="line"> subgraph 纳什均衡</span><br><span class="line"> NE[每个客户端仅依赖必需接口] --> OPT[系统最优]</span><br><span class="line"> end</span><br><span class="line"> style FAT fill:#f99</span><br><span class="line"> style NE fill:#9f9</span><br></pre></td></tr></table></figure><p><strong>稳定点分析</strong>:</p><ul><li><p>最小接口依赖 → 减少变化传播</p></li><li><p>客户端只承担必要契约 → 无动机偏离</p></li><li><p>胖接口导致”免费搭车”问题 → 破坏系统稳定性</p></li></ul><h3 id="依赖倒置原则-DIP-的收敛过程"><a href="#依赖倒置原则-DIP-的收敛过程" class="headerlink" title="依赖倒置原则(DIP)的收敛过程"></a>依赖倒置原则(DIP)的收敛过程</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">flowchart TB</span><br><span class="line"> subgraph 传统依赖</span><br><span class="line"> H[高层模块] --> L[低层实现]</span><br><span class="line"> L --> D[细节变更]</span><br><span class="line"> D --> H[被迫修改]</span><br><span class="line"> end</span><br><span class="line"> subgraph DIP应用</span><br><span class="line"> H2[高层模块] --> I[抽象接口]</span><br><span class="line"> L2[低层实现] --> I</span><br><span class="line"> I --> S[稳定层]</span><br><span class="line"> S --> H2[免受影响]</span><br><span class="line"> S --> L2[自由演化]</span><br><span class="line"> end</span><br><span class="line"> subgraph 收敛状态</span><br><span class="line"> C[所有模块依赖抽象] --> NE[纳什均衡]</span><br><span class="line"> NE -->|变更成本| CC[局部化]</span><br><span class="line"> NE -->|系统稳定性| SS[最大化]</span><br><span class="line"> end</span><br><span class="line"> style I fill:#bbf</span><br><span class="line"> style S fill:#9f9</span><br><span class="line"> style NE fill:#9f9</span><br></pre></td></tr></table></figure><p><strong>稳定机制</strong>:</p><ul><li><p>抽象接口成为系统不动点</p></li><li><p>高层和低层策略在抽象层达到最优响应</p></li><li><p>违反DIP导致双向依赖 → 系统进入振荡状态</p></li></ul><h2 id="23条设计模式都可以用稳定点原则去理解"><a href="#23条设计模式都可以用稳定点原则去理解" class="headerlink" title="23条设计模式都可以用稳定点原则去理解"></a>23条设计模式都可以用稳定点原则去理解</h2><h3 id="案例1-装饰模式:装饰者模式、装饰器模式、Wrapper、Decorator"><a href="#案例1-装饰模式:装饰者模式、装饰器模式、Wrapper、Decorator" class="headerlink" title="案例1: 装饰模式:装饰者模式、装饰器模式、Wrapper、Decorator"></a>案例1: 装饰模式:装饰者模式、装饰器模式、Wrapper、Decorator</h3><p>装饰是一种结构型设计模式,允许你通过将对象放入包含,行为的特殊封装对象中来为, 原对象绑定新的行为</p><p><img src="https://internal-api-drive-stream.feishu.cn/space/api/box/stream/download/authcode/?code=NjdlMjYxZTVhMDQ1YzI4MTgyN2VkZjc3YTRlY2NlZDhfODQ5MDE2MDAxYmY2NzljZjdiOTU0MzM4NDFjNjQ1MDBfSUQ6NzUzOTgyMTAwNzE1MDc1OTkzOF8xNzgyNDg3ODI1OjE3ODI1NzQyMjVfVjM" alt="Image"></p><p>案例2: 策略模式</p><p>策略是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够<strong>相互替换</strong>。</p><p><img src="https://internal-api-drive-stream.feishu.cn/space/api/box/stream/download/authcode/?code=MTEyNTU2ZGMzOGRiY2JiMDM3MjEwZjlmMGQ3ZDI0YzFfNTcwMzgyNzJkMTNiMzhmOTczNGM3NDFmMzlkNDlkYjNfSUQ6NzUzOTgyMTc1MDA3NTcwMzI5OF8xNzgyNDg3ODI1OjE3ODI1NzQyMjVfVjM" alt="Image"></p><p>假如你需要前往机场。你可以选择乘坐公共汽车、预约出租车或骑自行车。这些就是你的出行策略。你可以根据预算或时间等因素来选择其中一种策略</p><p>策略与装饰的区别: 策略是可以很多种随时替换的, 装饰是一次性选择</p><h2 id="当一个需求来的时候怎么设计"><a href="#当一个需求来的时候怎么设计" class="headerlink" title="当一个需求来的时候怎么设计?"></a>当一个需求来的时候怎么设计?</h2><h3 id="只有一条原则-找出需求的稳定点-区分变化与不变的东西"><a href="#只有一条原则-找出需求的稳定点-区分变化与不变的东西" class="headerlink" title="只有一条原则: 找出需求的稳定点(区分变化与不变的东西)"></a>只有一条原则: 找出需求的稳定点(区分变化与不变的东西)</h3><p><strong>识别变化热点</strong>:将频繁变化的区域隔离为独立策略</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">flowchart LR</span><br><span class="line"> A[变化模块] --> B[抽象接口]</span><br><span class="line"> C[稳定模块] --> B</span><br><span class="line"> B --> D[纳什均衡点]</span><br></pre></td></tr></table></figure><h3 id="案例1-数字人资源调度"><a href="#案例1-数字人资源调度" class="headerlink" title="案例1-数字人资源调度"></a>案例1-数字人资源调度</h3><ul><li>调度器的本质是Filter+Priority, 这里参考了k8s的调度器源码实现</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line">flowchart TB</span><br><span class="line"> subgraph Kube-APIServer</span><br><span class="line"> A[kube-apiserver] -->|list/watch| B[Informer]</span><br><span class="line"> end</span><br><span class="line"></span><br><span class="line"> subgraph Scheduler</span><br><span class="line"> B -->|push| C[priorityQueue]</span><br><span class="line"> C --> D[activeQ]</span><br><span class="line"> C --> E[backoffQ]</span><br><span class="line"> C --> F[unschedulableQ]</span><br><span class="line"> </span><br><span class="line"> G[scheduleOne] -->|从 activeQ 取 Pod| H[predicates 过滤]</span><br><span class="line"> H -->|通过| I[priorities 打分]</span><br><span class="line"> I --> J[选择最佳 Node]</span><br><span class="line"> J --> K[bind 绑定]</span><br><span class="line"> </span><br><span class="line"> H -->|失败| F</span><br><span class="line"> J -->|失败| E</span><br><span class="line"> K -->|成功| M[调度完成]</span><br><span class="line"> end</span><br><span class="line"></span><br><span class="line"> style A fill:#4CAF50,stroke:#388E3C</span><br><span class="line"> style B fill:#2196F3,stroke:#0D47A1</span><br><span class="line"> style C fill:#FFC107,stroke:#FF8F00</span><br><span class="line"> style G fill:#9C27B0,stroke:#4A148C</span><br><span class="line"> style H fill:#F44336,stroke:#B71C1C</span><br><span class="line"> style I fill:#3F51B5,stroke:#1A237E</span><br><span class="line"> style K fill:#009688,stroke:#004D40</span><br><span class="line"> style M fill:#4CAF50,stroke:#388E3C</span><br><span class="line"> </span><br><span class="line"> classDef queue fill:#FFF9C4,stroke:#FFD600</span><br><span class="line"> class D,E,F queue</span><br></pre></td></tr></table></figure><h3 id="稳定点设计法则"><a href="#稳定点设计法则" class="headerlink" title="稳定点设计法则"></a>稳定点设计法则</h3><h4 id="数据驱动原则:用存储代替计算(例:业务规则用配置表实现)"><a href="#数据驱动原则:用存储代替计算(例:业务规则用配置表实现)" class="headerlink" title="数据驱动原则:用存储代替计算(例:业务规则用配置表实现)"></a>数据驱动原则:用存储代替计算(例:业务规则用配置表实现)</h4><h4 id="抽象固化原则:面向接口编程>具体实现(Go语言集合设计范式)"><a href="#抽象固化原则:面向接口编程>具体实现(Go语言集合设计范式)" class="headerlink" title="抽象固化原则:面向接口编程>具体实现(Go语言集合设计范式)"></a>抽象固化原则:面向接口编程>具体实现(Go语言集合设计范式)</h4><h4 id="核心稳定三角:业务领域模型>API定义-gt-技术基建-db-框架-语言"><a href="#核心稳定三角:业务领域模型>API定义-gt-技术基建-db-框架-语言" class="headerlink" title="核心稳定三角:业务领域模型>API定义>技术基建(db,框架,语言)"></a>核心稳定三角:业务领域模型>API定义>技术基建(db,框架,语言)</h4><h2 id="二、软件架构中的API层设计"><a href="#二、软件架构中的API层设计" class="headerlink" title="二、软件架构中的API层设计"></a>二、软件架构中的API层设计</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">graph TD</span><br><span class="line"> B[API平衡点] --> S[稳定性]</span><br><span class="line"> B --> C[兼容性]</span><br><span class="line"> B --> P[可预测性]</span><br><span class="line"> B --> D[文档化]</span><br><span class="line"> </span><br><span class="line"> S -->|机制| S1[版本管理]</span><br><span class="line"> S1 --> S1a[语义化版本]</span><br><span class="line"> S1 --> S1b[弃用周期]</span><br><span class="line"> </span><br><span class="line"> C -->|机制| C1[扩展而非修改]</span><br><span class="line"> C1 --> C1a[字段可扩展]</span><br><span class="line"> C1 --> C1b[向后兼容]</span><br><span class="line"> </span><br><span class="line"> P -->|机制| P1[契约测试]</span><br><span class="line"> P1 --> P1a[消费者驱动]</span><br><span class="line"> P1 --> P1b[提供方保障]</span><br><span class="line"> </span><br><span class="line"> D -->|机制| D1[OpenAPI规范]</span><br><span class="line"> D1 --> D1a[机器可读]</span><br><span class="line"> D1 --> D1b[人类友好]</span><br><span class="line"> </span><br><span class="line"> style B fill:#bbf</span><br></pre></td></tr></table></figure><h2 id="API设计的平衡点检查表"><a href="#API设计的平衡点检查表" class="headerlink" title="API设计的平衡点检查表"></a>API设计的平衡点检查表</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line">mindmap</span><br><span class="line"> root((API平衡点))</span><br><span class="line"> 契约稳定性</span><br><span class="line"> 版本策略</span><br><span class="line"> 语义化版本</span><br><span class="line"> 弃用周期≥30天</span><br><span class="line"> 变更管理</span><br><span class="line"> 新增不破坏</span><br><span class="line"> 修改可选</span><br><span class="line"> 删除有预警</span><br><span class="line"> 消费方体验</span><br><span class="line"> 文档质量</span><br><span class="line"> OpenAPI规范</span><br><span class="line"> 代码示例</span><br><span class="line"> 沙箱环境</span><br><span class="line"> 错误处理</span><br><span class="line"> 标准错误码</span><br><span class="line"> 可操作错误信息</span><br><span class="line"> 重试指导</span><br><span class="line"> 系统保护(可观测性)</span><br><span class="line"> 限流机制</span><br><span class="line"> 按消费者配额</span><br><span class="line"> 突发流量缓冲</span><br><span class="line"> 服务降级</span><br><span class="line"> 安全防护</span><br><span class="line"> OAuth2.0</span><br><span class="line"> 速率限制</span><br><span class="line"> 审计日志</span><br><span class="line"> 演化能力</span><br><span class="line"> 扩展点设计</span><br><span class="line"> 预留metadata</span><br><span class="line"> 可枚举类型扩展</span><br><span class="line"> 分页标准化</span><br><span class="line"> 兼容性保障</span><br><span class="line"> 契约测试</span><br><span class="line"> 消费者驱动契约</span><br><span class="line"> 金丝雀发布</span><br></pre></td></tr></table></figure><h2 id="平衡点设计的工程效益"><a href="#平衡点设计的工程效益" class="headerlink" title="平衡点设计的工程效益"></a>平衡点设计的工程效益</h2><table><thead><tr><th>平衡点特征</th><th>提供方收益</th><th>消费方收益</th><th>系统稳定性</th></tr></thead><tbody><tr><td>版本兼容</td><td>减少支持负担</td><td>无缝升级体验</td><td>升级无服务中断</td></tr><tr><td>文档完备</td><td>降低咨询成本</td><td>加速集成速度</td><td>减少配置错误</td></tr><tr><td>流量控制</td><td>防止系统过载</td><td>公平资源分配</td><td>服务可用性99.99%</td></tr><tr><td>错误标准化</td><td>统一处理逻辑</td><td>快速故障恢复</td><td>减少事故时长</td></tr><tr><td>扩展性设计</td><td>灵活添加功能</td><td>平滑适应新需求</td><td>长期演进能力</td></tr></tbody></table><h3 id="API层治理的统一方案-tars-http-grpc协议统一代码生成插件"><a href="#API层治理的统一方案-tars-http-grpc协议统一代码生成插件" class="headerlink" title="API层治理的统一方案: tars-http-grpc协议统一代码生成插件"></a>API层治理的统一方案: <a href="https://q9jvw0u5f5.feishu.cn/docx/VWB9d6cuOomsPwxK6vscVgX9n7f">tars-http-grpc协议统一代码生成插件</a></h3><h3 id="未来的技术设计"><a href="#未来的技术设计" class="headerlink" title="未来的技术设计"></a>未来的技术设计</h3><h4 id="AI自动生成代码与领域驱动设计"><a href="#AI自动生成代码与领域驱动设计" class="headerlink" title="AI自动生成代码与领域驱动设计"></a>AI自动生成代码与领域驱动设计</h4><p>在AI代码生成的场景下, 稳定点应该是什么?</p>]]></content>
<summary type="html"><h1 id="基于纳什均衡的技术设计"><a href="#基于纳什均衡的技术设计" class="headerlink" title="基于纳什均衡的技术设计"></a>基于纳什均衡的技术设计</h1><h1 id="分享者-李广庆"><a href="#分享者-李广庆" c</summary>
<category term="技术设计" scheme="https://errocks.github.io/categories/%E6%8A%80%E6%9C%AF%E8%AE%BE%E8%AE%A1/"/>
<category term="纳什均衡" scheme="https://errocks.github.io/tags/%E7%BA%B3%E4%BB%80%E5%9D%87%E8%A1%A1/"/>
<category term="架构设计" scheme="https://errocks.github.io/tags/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/"/>
<category term="API设计" scheme="https://errocks.github.io/tags/API%E8%AE%BE%E8%AE%A1/"/>
<category term="SOLID" scheme="https://errocks.github.io/tags/SOLID/"/>
</entry>
<entry>
<title>test blog2233</title>
<link href="https://errocks.github.io/2022/11/09/yuque/test%20blog223/"/>
<id>https://errocks.github.io/2022/11/09/yuque/test%20blog223/</id>
<published>2022-11-08T16:43:30.000Z</published>
<updated>2023-03-21T13:53:20.318Z</updated>
<content type="html"><![CDATA[<p><img src="https://cdn.nlark.com/yuque/0/2022/jpeg/545431/1668145187458-a888af15-865a-4fae-b11f-85c2d8d8b89c.jpeg"><br><img src="https://cdn.nlark.com/yuque/0/2022/jpeg/545431/1668145678088-09a169a7-c77f-4f66-9e48-ec95000c4e89.jpeg"><br><img src="https://cdn.nlark.com/yuque/0/2022/jpeg/545431/1668045253759-e0ce49e6-3205-4387-b581-6a87e4168a35.jpeg"></p>]]></content>
<summary type="html"><p><img src="https://cdn.nlark.com/yuque/0/2022/jpeg/545431/1668145187458-a888af15-865a-4fae-b11f-85c2d8d8b89c.jpeg"><br><img src="https://c</summary>
<category term="232" scheme="https://errocks.github.io/tags/232/"/>
</entry>
<entry>
<title>书单</title>
<link href="https://errocks.github.io/2022/11/09/yuque/%E6%95%B0%E5%AD%A6%E4%B8%8E%E6%B3%9B%E5%9E%8B%E7%BC%96%E7%A8%8B/"/>
<id>https://errocks.github.io/2022/11/09/yuque/%E6%95%B0%E5%AD%A6%E4%B8%8E%E6%B3%9B%E5%9E%8B%E7%BC%96%E7%A8%8B/</id>
<published>2022-11-08T16:43:30.000Z</published>
<updated>2023-03-21T13:53:20.318Z</updated>
<category term="读书笔记" scheme="https://errocks.github.io/categories/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/"/>
<category term="golang" scheme="https://errocks.github.io/tags/golang/"/>
<category term="后端" scheme="https://errocks.github.io/tags/%E5%90%8E%E7%AB%AF/"/>
<category term="数据" scheme="https://errocks.github.io/tags/%E6%95%B0%E6%8D%AE/"/>
</entry>
<entry>
<title>test blog</title>
<link href="https://errocks.github.io/2022/11/08/yuque/test%20blog/"/>
<id>https://errocks.github.io/2022/11/08/yuque/test%20blog/</id>
<published>2022-11-07T16:43:30.000Z</published>
<updated>2022-11-07T16:57:43.055Z</updated>
<content type="html"><![CDATA[<p><img src="https://cdn.nlark.com/yuque/0/2022/png/545431/1667840257001-3229199f-4f6a-4ae5-9208-6148421ada7f.png#averageHue=%23fafafa&clientId=u6cd62893-b331-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=114&id=u35342abe&margin=%5Bobject%20Object%5D&name=image.png&originHeight=228&originWidth=592&originalType=binary%E2%88%B6=1&rotation=0&showTitle=false&size=22856&status=done&style=none&taskId=ubf02a705-660f-4937-9346-2dae34db498&title=&width=296" alt="image.png"></p>]]></content>
<summary type="html"><p><img src="https://cdn.nlark.com/yuque/0/2022/png/545431/1667840257001-3229199f-4f6a-4ae5-9208-6148421ada7f.png#averageHue=%23fafafa&clien</summary>
</entry>
<entry>
<title>Hello World2323</title>
<link href="https://errocks.github.io/2022/08/09/hello-world2/"/>
<id>https://errocks.github.io/2022/08/09/hello-world2/</id>
<published>2022-08-09T07:12:13.883Z</published>
<updated>2022-08-09T07:12:44.812Z</updated>
<content type="html"><![CDATA[<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues">GitHub</a>.</p><h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new <span class="string">"My New Post"</span></span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/writing.html">Writing</a></p><h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/server.html">Server</a></p><h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/generating.html">Generating</a></p><h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/one-command-deployment.html">Deployment</a></p><h3 id="Deploy-to-remote-sites1"><a href="#Deploy-to-remote-sites1" class="headerlink" title="Deploy to remote sites1"></a>Deploy to remote sites1</h3>]]></content>
<summary type="html"><p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for</summary>
<category term="文章分类" scheme="https://errocks.github.io/categories/%E6%96%87%E7%AB%A0%E5%88%86%E7%B1%BB/"/>
<category term="hello" scheme="https://errocks.github.io/tags/hello/"/>
</entry>
<entry>
<title>Hello World</title>
<link href="https://errocks.github.io/2022/08/09/hello-world/"/>
<id>https://errocks.github.io/2022/08/09/hello-world/</id>
<published>2022-08-09T01:25:24.102Z</published>
<updated>2022-11-07T15:55:01.508Z</updated>
<content type="html"><![CDATA[<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues">GitHub</a>.</p><h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new <span class="string">"My New Post"</span></span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/writing.html">Writing</a></p><h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/server.html">Server</a></p><h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/generating.html">Generating</a></p><h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/one-command-deployment.html">Deployment</a></p><h3 id="Deploy-to-remote-sites1"><a href="#Deploy-to-remote-sites1" class="headerlink" title="Deploy to remote sites1"></a>Deploy to remote sites1</h3>]]></content>
<summary type="html"><p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for</summary>
<category term="文章分类1" scheme="https://errocks.github.io/categories/%E6%96%87%E7%AB%A0%E5%88%86%E7%B1%BB1/"/>
<category term="hello" scheme="https://errocks.github.io/tags/hello/"/>
</entry>
<entry>
<title>网络问题总结</title>
<link href="https://errocks.github.io/2022/08/08/%E7%BD%91%E7%BB%9C%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93/"/>
<id>https://errocks.github.io/2022/08/08/%E7%BD%91%E7%BB%9C%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93/</id>
<published>2022-08-08T15:53:58.517Z</published>
<updated>2022-08-09T08:28:46.265Z</updated>
<content type="html"><![CDATA[<h2 id="运输层"><a href="#运输层" class="headerlink" title="运输层"></a>运输层</h2><p>运输层主要是UDP、TCP相关的问题。</p><ul><li><p>为什么需要三次握手</p><blockquote><p>tcp连接的双方要确保各自的收发消息的能力都是正常的。 客户端第一次发送握手消息到服务端, 服务端接收到握手消息后把ack和自己的syn一同发送给客户端,这是第二次握手, 当客户端接收到服务端发送来的第二次握手消息后,客户端可以确认“服务端的收发能力OK,客户端的收发能力OK”,但是服务端只能确认“客户端的发送OK,服务端的接收OK”, 所以还需要第三次握手,客户端收到服务端的第二次握手消息后,发起第三次握手消息,服务端收到客户端发送的第三次握手消息后,就能够确定“服务端的发送OK,客户端的接收OK”, 至此,客户端和服务端都能够确认自己和对方的收发能力OK,,tcp连接建立完成。</p></blockquote></li><li><p>什么是TIME_WAIT </p><blockquote><p><img src="https://cdn.nlark.com/yuque/0/2022/png/545431/1652530678440-1dda5193-fb5d-4c13-bd2f-4b7340437395.png#clientId=u7140745c-d3a4-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=368&id=ud5fb29e1&margin=%5Bobject%20Object%5D&name=image.png&originHeight=736&originWidth=1088&originalType=binary&ratio=1&rotation=0&showTitle=false&size=187259&status=done&style=none&taskId=uaf3f6bdf-6aab-4484-93f3-2186a7eda89&title=&width=544" alt="image.png"><br>主动发起关闭放, 收到对方的FIN-n的时候就会进入TIME_WAIT, 等待2MSL 时间(60秒) 就会关闭连接</p></blockquote></li><li><p>为什么要有TIME_WAIT?</p><blockquote><p>为了网络传输的可靠性->容错性<br>如果主机 1 没有维护 TIME_WAIT 状态,而直接进入 CLOSED 状态,它就失去了当前状态的上下文,只能回复一个 RST 操作,从而导致被动关闭方出现错误。<br>可能还有数据没发完<br>第二个理由和连接“化身”和报文迷走有关系,为了让旧连接的重复分节在网络中自然消失。我们知道,在网络中,经常会发生报文经过一段时间才能到达目的地的情况,产生的原因是多种多样的,如路由器重启,链路突然出现故障等。如果迷走报文到达时,发现 TCP 连接四元组(源 IP,源端口,目的 IP,目的端口)所代表的连接不复存在,那么很简单,这个报文自然丢弃。我们考虑这样一个场景,在原连接中断后,又重新创建了一个原连接的“化身”,说是化身其实是因为这个连接和原先的连接四元组完全相同,如果迷失报文经过一段时间也到达,那么这个报文会被误认为是连接“化身”的一个 TCP 分节,这样就会对 TCP 通信产生影响。</p></blockquote></li><li><p>出现大量TIME_WAIT的原因</p><blockquote><p>同时大量关闭连接<br>大量TIME_WAIT可能导致以下的问题</p><ol><li>是内存占用</li><li>端口资源占用</li></ol></blockquote></li><li><p>TCP协议如何提高传输效率</p><blockquote><ol><li>发送窗口</li><li>糊涂窗口问题</li></ol></blockquote><p>需要在自己的缓冲区大到一个合理的值之后,再向发送端发送窗口更新通知。这个合理的值,由对应的 RFC 规范定义</p><blockquote><ol start="3"><li>在发送端进行优化。这个优化的算法叫做** Nagle 算法**,Nagle 算法的本质其实就是限制大批量的小数据包同时发送,为此,它提出,在任何一个时刻,未被确认的小数据包不能超过一个。这里的小数据包,指的是长度小于最大报文段长度 MSS 的 TCP 分组。这样,发送端就可以把接下来连续的几个小数据包存储起来,等待接收到前一个小数据包的 ACK 分组之后,再将数据一次性发送出去。</li><li>在接收端进行优化,这个优化的算法叫做<strong>延时 ACK</strong>。延时 ACK 在收到数据后并不马上回复,而是累计需要发送的 ACK 报文,等到有数据需要发送给对端时,将累计的 ACK捎带一并发送出去。当然,延时 ACK 机制,不能无限地延时下去,否则发送端误认为数据包没有发送成功,引起重传,反而会占用额外的网络带宽</li><li></li></ol></blockquote></li><li><p>为什么断连要四次?</p><blockquote><p>不一定四次, 有可能第二第三次会合并, 要确认双方的可靠传输, 可靠传输 , 其中包括不影响原有的业务, 客户端, 服务端都需要一来一回的确认收发没问题, 才关闭</p></blockquote></li><li></li><li><p>TCP协议切片</p></li><li><p>流量控制机制</p><blockquote><p>发送窗口反应了作为单 TCP 连接、点对点之间的流量控制模型,它是需要和接收端一起共同协调来调整大小的;而拥塞窗口则是反应了作为多个 TCP 连接共享带宽的拥塞控制模型,它是发送端独立地根据网络状况来动态调整的<br>在任何一个时刻,TCP 发送缓冲区的数据是否能真正发送出去,至少取决于两个因素,一个是当前的发送窗口大小,另一个是拥塞窗口大小,而 TCP 协议中总是取两者中最小值作为判断依据</p></blockquote></li><li><p>滑动窗口为0时怎么办?</p><blockquote><p>如果在PT超时之前没有接收到B window更新,则定时器触发,动作为<br>1)发送一个byte 合法数据(滑动窗口内)或非法数据(滑动窗口外)<br>2)刷新定时器<br>3)记录超时次数<br>如果超时次数到达极限,则事件触发,动作为<br>1)reset 或关闭TCP连接<br>2)通知应用层出错原因</p></blockquote></li><li><p>TCP首部结构 </p></li><li><p>TCP怎么保证可靠性?(控制包大小、包序号、校验和、接收端丢弃重复数据、流量控制、拥塞控制、ARQ协议、超时重传)</p></li><li><p>seq为何要各自保存?ack的计算方法?</p></li><li><p>第三次握手失败了怎么办?</p></li><li><p>UDP和TCP的区别</p></li><li><p>如何改造UDP,确保数据有序?</p></li><li><p>什么是多路复用?</p></li><li></li></ul><p>极客时间</p><ul><li>一段数据流从客户端到服务端, 总共拷贝了多少次?</li></ul><p>如果是mmp, 0拷贝, 应该是1次? 内核到发送缓冲区, 包括服务端就2次</p><ul><li>socket的缓冲区能否搞的很大? 增加程序的吞吐量</li></ul>]]></content>
<summary type="html"><h2 id="运输层"><a href="#运输层" class="headerlink" title="运输层"></a>运输层</h2><p>运输层主要是UDP、TCP相关的问题。</p>
<ul>
<li><p>为什么需要三次握手</p>
<blockquote>
<p></summary>
<category term="文章分类" scheme="https://errocks.github.io/categories/%E6%96%87%E7%AB%A0%E5%88%86%E7%B1%BB/"/>
<category term="hello" scheme="https://errocks.github.io/tags/hello/"/>
</entry>
</feed>