PageSourceSearch

https://rainbowhorse.site/

html rainbowhorse.site collected 2026-09-28 07:15:14 UTC 43,344 bytes, 585 lines download raw bytes

1<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><title>彩虹马的博客 - 不忘初心 方得始终</title><meta name="author" content="彩虹马"><meta name="copyright" content="彩虹马"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="总结个人心得,记录个人知识">
2<meta property="og:type" content="website">
3<meta property="og:title" content="彩虹马的博客">
4<meta property="og:url" content="https://mx-go.github.io/index.html">
5<meta property="og:site_name" content="彩虹马的博客">
6<meta property="og:description" content="总结个人心得,记录个人知识">
7<meta property="og:locale" content="zh_CN">
8<meta property="og:image" content="https://mx-go.github.io/img/avatar.jpg">
9<meta property="article:author" content="彩虹马">
10<meta name="twitter:card" content="summary">
11<meta name="twitter:image" content="https://mx-go.github.io/img/avatar.jpg"><link rel="shortcut icon" href="/img/favicon.ico"><link rel="canonical" href="https://mx-go.github.io/"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//hm.baidu.com"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/node-snackbar/dist/snackbar.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/instantsearch.min.css" media="print" onload="this.media='all'">
11<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/instantsearch.min.js" defer></script>
11<script>var _hmt = _hmt || [];
12(function() {
13  var hm = document.createElement("script");
14  hm.src = "https://hm.baidu.com/hm.js?d9a302391e363bd252e65a281d62a3c3";
15  var s = document.getElementsByTagName("script")[0]; 
16  s.parentNode.insertBefore(hm, s);
17})();
18</script>
18<script>const GLOBAL_CONFIG = { 
19  root: '/',
20  algolia: {"appId":"BPJ9SXT7ZR","apiKey":"361b6069a16dee1e14d36408c5b11773","indexName":"blog","hits":{"per_page":10},"languages":{"input_placeholder":"搜索文章","hits_empty":"找不到您查询的内容:${query}","hits_stats":"找到 ${hits} 条结果,用时 ${time} 毫秒"}},
21  localSearch: {"path":"search.xml","languages":{"hits_empty":"找不到您查询的内容:${query}"}},
22  translate: {"defaultEncoding":2,"translateDelay":0,"msgToTraditionalChinese":"繁","msgToSimplifiedChinese":"簡"},
23  noticeOutdate: {"limitDay":800,"position":"top","messagePrev":"本文于","messageNext":"天之前发表,文中内容可能已经过时。"},
24  highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":false,"highlightHeightLimit":false},
25  copy: {
26    success: '复制成功',
27    error: '复制错误',
28    noSupport: '浏览器不支持'
29  },
30  relativeDate: {
31    homepage: false,
32    post: false
33  },
34  runtime: '天',
35  date_suffix: {
36    just: '刚刚',
37    min: '分钟前',
38    hour: '小时前',
39    day: '天前',
40    month: '个月前'
41  },
42  copyright: {"limitCount":50,"languages":{"author":"作者: 彩虹马","link":"链接: ","source":"来源: 彩虹马的博客","info":"著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。"}},
43  lightbox: 'fancybox',
44  Snackbar: {"chs_to_cht":"你已切换为繁体","cht_to_chs":"你已切换为简体","day_to_night":"你已切换为深色模式","night_to_day":"你已切换为浅色模式","bgLight":"#49b1f5","bgDark":"#121212","position":"bottom-left"},
45  source: {
46    jQuery: 'https://cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js',
47    justifiedGallery: {
48      js: 'https://cdn.jsdelivr.net/npm/justifiedGallery/dist/js/jquery.justifiedGallery.min.js',
49      css: 'https://cdn.jsdelivr.net/npm/justifiedGallery/dist/css/justifiedGallery.min.css'
50    },
51    fancybox: {
52      js: 'https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.js',
53      css: 'https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.css'
54    }
55  },
56  isPhotoFigcaption: false,
57  islazyload: true,
58  isanchor: true
59}</script>
59<script id="config-diff">var GLOBAL_CONFIG_SITE = {
60  title: '彩虹马的博客',
61  isPost: false,
62  isHome: true,
63  isHighlightShrink: false,
64  isToc: false,
65  postUpdate: '2026-09-01 23:26:35'
66}</script>
66<noscript><style type="text/css">
67  #nav {
68    opacity: 1
69  }
70  .justified-gallery img {
71    opacity: 1
72  }
73
74  #recent-posts time,
75  #post-meta time {
76    display: inline !important
77  }
78</style></noscript>
78<script>(win=>{
79    win.saveToLocal = {
80      set: function setWithExpiry(key, value, ttl) {
81        if (ttl === 0) return
82        const now = new Date()
83        const expiryDay = ttl * 86400000
84        const item = {
85          value: value,
86          expiry: now.getTime() + expiryDay,
87        }
88        localStorage.setItem(key, JSON.stringify(item))
89      },
90
91      get: function getWithExpiry(key) {
92        const itemStr = localStorage.getItem(key)
93
94        if (!itemStr) {
95          return undefined
96        }
97        const item = JSON.parse(itemStr)
98        const now = new Date()
99
100        if (now.getTime() > item.expiry) {
101          localStorage.removeItem(key)
102          return undefined
103        }
104        return item.value
105      }
106    }
107  
108    win.getScript = url => new Promise((resolve, reject) => {
109      const script = document.createElement('script')
110      script.src = url
111      script.async = true
112      script.onerror = reject
113      script.onload = script.onreadystatechange = function() {
114        const loadState = this.readyState
115        if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
116        script.onload = script.onreadystatechange = null
117        resolve()
118      }
119      document.head.appendChild(script)
120    })
121  
122      win.activateDarkMode = function () {
123        document.documentElement.setAttribute('data-theme', 'dark')
124        if (document.querySelector('meta[name="theme-color"]') !== null) {
125          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
126        }
127      }
128      win.activateLightMode = function () {
129        document.documentElement.setAttribute('data-theme', 'light')
130        if (document.querySelector('meta[name="theme-color"]') !== null) {
131          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
132        }
133      }
134      const t = saveToLocal.get('theme')
135    
136          const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches
137          const isLightMode = window.matchMedia('(prefers-color-scheme: light)').matches
138          const isNotSpecified = window.matchMedia('(prefers-color-scheme: no-preference)').matches
139          const hasNoSupport = !isDarkMode && !isLightMode && !isNotSpecified
140
141          if (t === undefined) {
142            if (isLightMode) activateLightMode()
143            else if (isDarkMode) activateDarkMode()
144            else if (isNotSpecified || hasNoSupport) {
145              const now = new Date()
146              const hour = now.getHours()
147              const isNight = hour <= 6 || hour >= 18
148              isNight ? activateDarkMode() : activateLightMode()
149            }
150            window.matchMedia('(prefers-color-scheme: dark)').addListener(function (e) {
151              if (saveToLocal.get('theme') === undefined) {
152                e.matches ? activateDarkMode() : activateLightMode()
153              }
154            })
155          } else if (t === 'light') activateLightMode()
156          else activateDarkMode()
157        
158      const asideStatus = saveToLocal.get('aside-status')
159      if (asideStatus !== undefined) {
160        if (asideStatus === 'hide') {
161          document.documentElement.classList.add('hide-aside')
162        } else {
163          document.documentElement.classList.remove('hide-aside')
164        }
165      }
166    })(window)</script>
166<meta name="generator" content="Hexo 5.4.0"></head><body><div id="loading-box"><div class="loading-left-bg"></div><div class="loading-right-bg"></div><div class="spinner-box"><div class="configure-border-1"><div class="configure-core"></div></div><div class="configure-border-2"><div class="configure-core"></div></div><div class="loading-word">加载中...</div></div></div><div id="web_bg"></div><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="author-avatar"><img class="avatar-img" src= "/img/loading.gif" data-lazy-src="/img/avatar.jpg" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="site-data"><div class="data-item is-center"><div class="data-item-link"><a href="/archives/"><div class="headline">文章</div><div class="length-num">104</div></a></div></div><div class="data-item is-center"><div class="data-item-link"><a href="/tags/"><div class="headline">标签</div><div class="length-num">22</div></a></div></div><div class="data-item is-center"><div class="data-item-link"><a href="/categories/"><div class="headline">分类</div><div class="length-num">17</div></a></div></div></div><hr/><div class="menus_items"><div class="menus_item"><a class="site-page" href="javascript:void(0);"><i class="fa-fw fas fa-book"></i><span> 文章</span><i class="fas fa-chevron-down expand"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></li><li><a class="site-page child" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></li><li><a class="site-page child" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="javascript:void(0);"><i class="fa-fw fas fa-bars"></i><span> 其他</span><i class="fas fa-chevron-down expand"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/%E7%BD%91%E5%9D%80%E6%94%B6%E8%97%8F/"><i class="fa-fw fas fa-sitemap"></i><span> 网址收藏</span></a></li><li><a class="site-page child" target="_blank" rel="noopener" href="https://fontawesome.dashgame.com/"><i class="fa-fw fas fa-flag"></i><span> 图标速查</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-user"></i><span> 关于我</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="full_page" id="page-header" style="background-image: url('/img/index_image.jpg')"><nav id="nav"><span id="blog_name"><a id="site-name" href="/">彩虹马的博客</a></span><div id="menus"><div id="search-button"><a class="site-page social-icon search"><i class="fas fa-search fa-fw"></i><span> 搜索</span></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="javascript:void(0);"><i class="fa-fw fas fa-book"></i><span> 文章</span><i class="fas fa-chevron-down expand"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></li><li><a class="site-page child" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></li><li><a class="site-page child" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="javascript:void(0);"><i class="fa-fw fas fa-bars"></i><span> 其他</span><i class="fas fa-chevron-down expand"></i></a><ul class="menus_item_child"><li><a class="site-page child" href="/%E7%BD%91%E5%9D%80%E6%94%B6%E8%97%8F/"><i class="fa-fw fas fa-sitemap"></i><span> 网址收藏</span></a></li><li><a class="site-page child" target="_blank" rel="noopener" href="https://fontawesome.dashgame.com/"><i class="fa-fw fas fa-flag"></i><span> 图标速查</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-user"></i><span> 关于我</span></a></div></div><div id="toggle-menu"><a class="site-page"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="site-info"><h1 id="site-title">彩虹马的博客</h1><div id="site-subtitle"><span id="subtitle"></span></div><div id="site_social_icons"><a class="social-icon" href="https://github.com/mx-go" target="_blank" title="Github"><i class="fab fa-github"></i></a><a class="social-icon" href="mailto:[email protected]" target="_blank" title="Email"><i class="fas fa-envelope"></i></a><a class="social-icon" href="https://www.processon.com/u/5a55be27e4b0a447b99a9b2a/profile" target="_blank" title="ProcessOn"><i class="fas fa-pencil-square"></i></a></div></div><div id="scroll-down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout" id="content-inner"><div class="recent-posts" id="recent-posts"><div class="recent-post-item"><div class="post_cover left_radius"><a href="/%E6%9E%B6%E6%9E%84%E5%9B%BE%E5%88%86%E7%B1%BB/" title="架构图分类">     <img class="post_bg" src= "/img/loading.gif" data-lazy-src="/../../../../images/2022/7-9/arch_category_cover.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="架构图分类"></a></div><div class="recent-post-info"><a class="article-title" href="/%E6%9E%B6%E6%9E%84%E5%9B%BE%E5%88%86%E7%B1%BB/" title="架构图分类">架构图分类</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-08-18T10:19:34.000Z" title="发表于 2022-08-18 18:19:34">2022-08-18</time></span><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/">架构</a></span></div><div class="content">引言前面文章中介绍了很多架构相关理论,接下来说一说怎样才能画出一幅好看、好懂、好用的架构图。俗话说“一图胜千言”,一张好的结构图是不需要过多解释的,他应该是自描述的,并且要具备一致性、健壮性和足够的准确性,能够和代码相呼应。
167架构图分类
168
169产品/业务架构使用一套方法论/逻辑对产品(项目)所涉及到的业务进行边界划分,需要考虑各个模块的分层和边界。主要包括业务规划、业务模块和流程以及问题域的列表等。
170模板可参考我的ProcessOn文件:产品蓝图、产品架构图
171
172
173应用架构对整个系统实现的总体上的架构,需要指出系统的层次、系统各个层次的应用服务、组成关系、依赖关系。
174
175体现了架构是分层的,不同层次有不同的规则与关联。
176类似Java开发里面的三层架构,数据访问层、业务逻辑层、展现层。或者类似领域模型中的领域服务层、应用层、界面接口层分层方法。
177
178模板可参考我的ProcessOn文件:应用架构图
179
180
181存储/数据架构是一套对存储数据的架构逻辑,根据各个系统应用场景、不同时间段的应用场景 ,对数据进行诸如数据异构、读写分离、缓存使用、分布式数据策略等划分。
182
183
184技术架构离程序员最近的架构设计,突出技 ...</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/%E5%A2%9E%E5%BC%BA%E5%BC%8FSnowFlake-%E9%9B%AA%E8%8A%B1%E7%AE%97%E6%B3%95/" title="增强式SnowFlake(雪花算法)">     <img class="post_bg" src= "/img/loading.gif" data-lazy-src="/../../../../images/2022/7-9/snowflake_0.jpeg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="增强式SnowFlake(雪花算法)"></a></div><div class="recent-post-info"><a class="article-title" href="/%E5%A2%9E%E5%BC%BA%E5%BC%8FSnowFlake-%E9%9B%AA%E8%8A%B1%E7%AE%97%E6%B3%95/" title="增强式SnowFlake(雪花算法)">增强式SnowFlake(雪花算法)</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-06-02T02:34:16.000Z" title="发表于 2022-06-02 10:34:16">2022-06-02</time></span><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E8%AE%BE%E8%AE%A1/">设计</a></span></div><div class="content">引言在众多分布式ID中,雪花算法是比较简单且常用的算法,分布式ID一般具有的特性有:
185
186唯一性:生成的ID全局唯一,在特定范围内冲突极小。
187有序性:生成的ID全局或按规则有序,便于数据库插入及排序。
188可用性:可保证高并发下的可用性,确保任何时候都能正确的生成ID。
189自主性:分布式情况下不依赖中心认证即可自行生成ID。
190安全性:不暴露系统和业务的信息,如:订单数、用户数….
191
192常见的分布式ID生成方式比较
193
194
195比较点
196SnowFlake
197Leaf
198UidGenerator
199Redis
200
201
202
203依赖数据库
204否
205是
206可选
207是
208
209
210支持分布式
211是
212是
213是
214是
215
216
217可预测
218-
219-
220-
221-
222
223
224依赖性
225毫秒级时间戳 + 标识 位 + 序列号
226时间戳 + node + pid + 序列号
227秒级时间戳 + workId + 序列
228Redis单线程自增
229
230
231维护中
232多个变种
233是
234否
235-
236
237
238雪花算法SnowFlake是Twitter开源的分布式ID生成算法,生成的一个64bit的long类型数值,组成部分使用了时间戳,保证了粗略自增。
239优缺点优点
240高性能高可用:完全在内存中生成,不依赖数据库。
241高吞吐:每 ...</div></div></div><div class="recent-post-item"><div class="post_cover left_radius"><a href="/%E5%BC%82%E5%9C%B0%E5%A4%9A%E6%B4%BB%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/" title="异地多活架构设计">     <img class="post_bg" src= "/img/loading.gif" data-lazy-src="/../../../../images/2022/4-6/7.arch_cover.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="异地多活架构设计"></a></div><div class="recent-post-info"><a class="article-title" href="/%E5%BC%82%E5%9C%B0%E5%A4%9A%E6%B4%BB%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/" title="异地多活架构设计">异地多活架构设计</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-05-26T08:25:19.000Z" title="发表于 2022-05-26 16:25:19">2022-05-26</time></span><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/">架构</a><i class="fas fa-angle-right"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/%E8%AE%BE%E8%AE%A1/">设计</a></span></div><div class="content">高可用三大核心原理CAP
242分布式数据存储系统不可能同时满足一致性、可用性和分区容忍性。
243
244
245一致性 Consistency
246可用性 Availability
247分区容忍性 Partion Tolerance
248
249BASE
250核心思想是即使无法做到强一致性(CAP 的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性。
251
252
253基本可用 Basically Available
254软状态 Soft State
255最终一致性 Eventually Consistency
256
257FLP
258异步通信场景中,即使只允许一个节点失败,也没有任何确定性算法能够保证非失败进程达到一致性。
259
260
261Safety
262Fault Tolerance
263Liveness
264
265
266
267FEMA具体含义
268Failure:假设系统某些组件或者模块出现故障。 
269Mode: 故障发生的方式、可能性。
270Effect :故障的影响。 
271Analysis:分析系统的可能反应,以及如何改进。
272
273评估维度
274
275大纲
276
277业务及灾备架构常用架构
278同城双中心。
279跨域紧邻双中心。
280跨域远端双中心。
281跨国数据中心。
282
283
284
285异地多活架构模式业务定制型按照业务的优先级进 ...</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/" title="微服务架构设计">     <img class="post_bg" src= "/img/loading.gif" data-lazy-src="/../../../../images/2022/1-3/6.arch_cover.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="微服务架构设计"></a></div><div class="recent-post-info"><a class="article-title" href="/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/" title="微服务架构设计">微服务架构设计</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-04-16T06:53:08.000Z" title="发表于 2022-04-16 14:53:08">2022-04-16</time></span><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/">架构</a><i class="fas fa-angle-right"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/%E8%AE%BE%E8%AE%A1/">设计</a></span></div><div class="content">微服务架构详解微服务VS SOA
286
287
288
289微服务架构陷阱与挑战六大陷阱拆分颗粒度太细
290服务关系复杂
291团队效率下降
292问题定位困难
293系统性能下降
294
295基础设施不完善
296无法快速交付
297服务管理混乱
298
299四大挑战
300分布式事务
301全局幂等
302接口兼容
303接口循环调用
304
305
306
307微服务基础设施选型
308核心为服务运行层:服务注册、服务发现、服务路由
309
310
311嵌入SDK式
312反向代理式
313网络代理式
314
315
316
317微服务拆分技巧按业务拆分
318业务边界划分
319三个火枪手原则
320
321
322【定义】 平均3个开发人员负责一个微服务。 
323【剖析】
324
325为什么不是1个? 
326
327因为没有备份,且一个人思维有局限。 
328
329
330为什么不是2个? 
331
332因为异常情况下剩余1个,压力会很大;
3332个人负责维护一个微服务,微服务复杂度偏低。 
334
335
336为什么不是4个或者5个? 如果4个或4个以上,每个人不一定能掌握单个服务所有细节。 
337
338
339【技巧】 
340
341 微服务数量 = 服务端开发人数 /3 ; 
3423 = 1 +2,1个有经验的(P7/P6+),2个普通的(P5/P6); 
343处于维护期的服务,维护人员为2人。
344
345
346按质量拆分
347按性能拆分
348按业务重要程度拆分
349按可用性拆分
350按稳定性拆分
351 ...</div></div></div><div class="recent-post-item"><div class="post_cover left_radius"><a href="/%E9%AB%98%E5%8F%AF%E7%94%A8%E8%AE%A1%E7%AE%97%E6%9E%B6%E6%9E%84/" title="高可用计算架构">     <img class="post_bg" src= "/img/loading.gif" data-lazy-src="/../../../../images/2022/1-3/5.arch_cover.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="高可用计算架构"></a></div><div class="recent-post-info"><a class="article-title" href="/%E9%AB%98%E5%8F%AF%E7%94%A8%E8%AE%A1%E7%AE%97%E6%9E%B6%E6%9E%84/" title="高可用计算架构">高可用计算架构</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-03-25T05:49:43.000Z" title="发表于 2022-03-25 13:49:43">2022-03-25</time></span><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/">架构</a><i class="fas fa-angle-right"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/%E8%AE%BE%E8%AE%A1/">设计</a></span></div><div class="content">多级缓存架构缓存设计
352缓存内容
353缓存时间
354缓存系统
355更新机制
356
357多级缓存
358客户端缓存
359CDN缓存
360WEB容器缓存
361应用缓存
362分布式缓存
363
364
365
366分布式缓存架构设计分类
367数据缓存:实时性要求高,读多写少
368结果缓存:计算量大实时性要求不高
369
370缓存问题
371缓存穿透
372缓存雪崩
373缓存热点
374
375
376
377负载均衡架构
378
379
380DNS
381F5:100万~1000万
382LVS:10万~100万
383Nginx:5万~10万
384服务路由(Gateway):1000~5000
385
386
387
388负载均衡技巧通用算法
389轮训
390随机
391加权轮训
392负载有限
393性能优先
394hash
395
396服务器性能估算接口性能
397线上业务服务器接口处理时间分布为 20~100ms;
398平均大约为 50ms;
399 访问存储或者其它系统接口是主要的性能消耗点。
400
401服务器性能线上单个服务器(32核)性能大约为 300~1000 TPS/QPS
402服务器数量服务器数量 = (总 TPS+QPS) / 单个服务器性能
403
404
405接口高可用
406限流
407排队
408降级
409熔断
410
411
412
413</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AD%98%E5%82%A8%E6%9E%B6%E6%9E%84/" title="数据库存储架构">     <img class="post_bg" src= "/img/loading.gif" data-lazy-src="/../../../../images/2022/1-3/4.arch_cover.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="数据库存储架构"></a></div><div class="recent-post-info"><a class="article-title" href="/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AD%98%E5%82%A8%E6%9E%B6%E6%9E%84/" title="数据库存储架构">数据库存储架构</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-02-08T08:36:19.000Z" title="发表于 2022-02-08 16:36:19">2022-02-08</time></span><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/">架构</a><i class="fas fa-angle-right"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/%E8%AE%BE%E8%AE%A1/">设计</a></span></div><div class="content">数据库读写分离复杂度复制延迟
414业务分级(常用)
415读写绑定
416二次读取
417
418任务分解
419代码封装
420中间件封装
421
422分库分表垂直拆分-提升单机处理性能按照业务将表进行分类,分布到不同的数据库上面。
423水平拆分-提升集群处理性能按行切分。
424
425
426复制架构
427
428设计存储架构
429
430分片架构与分区架构分片架构通过叠加服务器来提升写性能和存储性能。
431分区架构通过冗余IDC来避免城市级别的灾难,并提供就近访问。
432
433
434常见存储系统剖析存储系统学习方法
435理解技术本质
436明确部署架构
437研究数据模型
438模拟业务场景
439
440
441</div></div></div><div class="recent-post-item"><div class="post_cover left_radius"><a href="/%E8%AE%BE%E8%AE%A1%E5%90%88%E7%90%86%E7%9A%84%E6%9E%B6%E6%9E%84/" title="设计合理的架构">     <img class="post_bg" src= "/img/loading.gif" data-lazy-src="/../../../../images/2022/1-3/3.arch_cover.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="设计合理的架构"></a></div><div class="recent-post-info"><a class="article-title" href="/%E8%AE%BE%E8%AE%A1%E5%90%88%E7%90%86%E7%9A%84%E6%9E%B6%E6%9E%84/" title="设计合理的架构">设计合理的架构</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-01-26T06:18:03.000Z" title="发表于 2022-01-26 14:18:03">2022-01-26</time></span><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/">架构</a><i class="fas fa-angle-right"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/%E8%AE%BE%E8%AE%A1/">设计</a></span></div><div class="content">架构师职责架构师是业务与技术之间的桥梁。 
442
443核心能力
444判断-确定性思维
445拆解-创造性思维
446取舍-系统性思维
447
448主要职责架构设计前期
449澄清不确定性
450识别复杂需求
451与业务方交流
452与利益干系人交流
453业务架构图
454核心场景流程
455
456架构设计中期
457选择、设计备选方案
458架构小组讨论
459方案评估
460方案汇报
461
462架构设计后期
463细化架构
464完善架构
465写文档
466架构宣讲
467最终的架构文档
468
469
470
471架构设计前期
472
473架构设计中期
474
475架构设计后期架构设计文档
476业务背景
477约束&amp;限制
478总体架构设计
479详细架构设计
480架构质量设计
481架构演进规则
482
483详细架构设计
484架构规范
485架构质量
486
487
488</div></div></div><div class="recent-post-item"><div class="post_cover right_radius"><a href="/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1%E5%85%B3%E9%94%AE%E7%82%B9/" title="架构设计关键点">     <img class="post_bg" src= "/img/loading.gif" data-lazy-src="/../../../../images/2022/1-3/2.arch_cover.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="架构设计关键点"></a></div><div class="recent-post-info"><a class="article-title" href="/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1%E5%85%B3%E9%94%AE%E7%82%B9/" title="架构设计关键点">架构设计关键点</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-01-10T10:08:20.000Z" title="发表于 2022-01-10 18:08:20">2022-01-10</time></span><span class="article-meta"><span class="article-meta__separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/">架构</a><i class="fas fa-angle-right"></i><a class="article-meta__categories" href="/categories/%E6%9E%B6%E6%9E%84/%E8%AE%BE%E8%AE%A1/">设计</a></span></div><div class="content">可扩展架构设计鸡蛋篮子第一法则拆分法则 
489
490拆分颗粒度内部复杂度可以用参与的开发人数来衡量单个拆分对象的复杂度。三个火枪手原则。
491外部复杂度可以用业务流程涉及对象数量来衡量外部复杂度。
492
493
494高性能架构设计鸡蛋篮子第二法则叠加法则 
495
496
497
498高可用架构设计鸡蛋篮子第三法则冗余法则 
499
500分类
501计算高可用
502
503存储高可用
504
505
506
507
508
509
510架构质量可测试性软件系统在测试环境下能否方便的支持测试各种场景的能力。
511可维护性软件系统支持定位问题、修复问题的能力。
512可观测性软件系统对外展现内部状态的能力 可观测性是可测试性、可维护性的基础。
513
514</div></div></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span><a class="page-number" href="/page/2/#content-inner">2</a><span class="space">&hellip;</span><a class="page-number" href="/page/13/#content-inner">13</a><a class="extend next" rel="next" href="/page/2/#content-inner"><i class="fas fa-chevron-right fa-fw"></i></a></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="card-info-avatar is-center"><img class="avatar-img" src= "/img/loading.gif" data-lazy-src="/img/avatar.jpg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/><div class="author-info__name">彩虹马</div><div class="author-info__description">总结个人心得,记录个人知识</div></div><div class="card-info-data"><div class="card-info-data-item is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">104</div></a></div><div class="card-info-data-item is-center"><a href="/tags/"><div class="headline">标签</div><div class="length-num">22</div></a></div><div class="card-info-data-item is-center"><a href="/categories/"><div class="headline">分类</div><div class="length-num">17</div></a></div></div><a class="button--animated" id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/mx-go"><i class="fab fa-github"></i><span>关注我</span></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/mx-go" target="_blank" title="Github"><i class="fab fa-github"></i></a><a class="social-icon" href="mailto:[email protected]" target="_blank" title="Email"><i class="fas fa-envelope"></i></a><a class="social-icon" href="https://www.processon.com/u/5a55be27e4b0a447b99a9b2a/profile" target="_blank" title="ProcessOn"><i class="fas fa-pencil-square"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn card-announcement-animation"></i><span>公告</span></div><div class="announcement_content">一个收藏回忆与分享技术的地方!</div></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item"><a class="thumbnail" href="/%E6%9E%B6%E6%9E%84%E5%9B%BE%E5%88%86%E7%B1%BB/" title="架构图分类"><img src= "/img/loading.gif" data-lazy-src="/../../../../images/2022/7-9/arch_category_cover.png" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="架构图分类"/></a><div class="content"><a class="title" href="/%E6%9E%B6%E6%9E%84%E5%9B%BE%E5%88%86%E7%B1%BB/" title="架构图分类">架构图分类</a><time datetime="2022-08-18T10:19:34.000Z" title="发表于 2022-08-18 18:19:34">2022-08-18</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/%E5%A2%9E%E5%BC%BA%E5%BC%8FSnowFlake-%E9%9B%AA%E8%8A%B1%E7%AE%97%E6%B3%95/" title="增强式SnowFlake(雪花算法)"><img src= "/img/loading.gif" data-lazy-src="/../../../../images/2022/7-9/snowflake_0.jpeg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="增强式SnowFlake(雪花算法)"/></a><div class="content"><a class="title" href="/%E5%A2%9E%E5%BC%BA%E5%BC%8FSnowFlake-%E9%9B%AA%E8%8A%B1%E7%AE%97%E6%B3%95/" title="增强式SnowFlake(雪花算法)">增强式SnowFlake(雪花算法)</a><time datetime="2022-06-02T02:34:16.000Z" title="发表于 2022-06-02 10:34:16">2022-06-02</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/%E5%BC%82%E5%9C%B0%E5%A4%9A%E6%B4%BB%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/" title="异地多活架构设计"><img src= "/img/loading.gif" data-lazy-src="/../../../../images/2022/4-6/7.arch_cover.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="异地多活架构设计"/></a><div class="content"><a class="title" href="/%E5%BC%82%E5%9C%B0%E5%A4%9A%E6%B4%BB%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/" title="异地多活架构设计">异地多活架构设计</a><time datetime="2022-05-26T08:25:19.000Z" title="发表于 2022-05-26 16:25:19">2022-05-26</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/" title="微服务架构设计"><img src= "/img/loading.gif" data-lazy-src="/../../../../images/2022/1-3/6.arch_cover.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="微服务架构设计"/></a><div class="content"><a class="title" href="/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/" title="微服务架构设计">微服务架构设计</a><time datetime="2022-04-16T06:53:08.000Z" title="发表于 2022-04-16 14:53:08">2022-04-16</time></div></div></div></div><div class="card-widget card-categories"><div class="item-headline">
515            <i class="fas fa-folder-open"></i>
516            <span>分类</span>
517            <a class="card-more-btn" href="/categories/" title="查看更多">
518    <i class="fas fa-angle-right"></i></a>
519            </div>
520            <ul class="card-category-list" id="aside-cat-list">
521            <li class="card-category-list-item parent"><a class="card-category-list-link" href="/categories/Linux/"><span class="card-category-list-name">Linux</span><span class="card-category-list-count">8</span><i class="fas fa-caret-left "></i></a><ul class="card-category-list child"><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Linux/%E5%9F%BA%E7%A1%80/"><span class="card-category-list-name">基础</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Linux/%E5%AE%89%E8%A3%85/"><span class="card-category-list-name">安装</span><span class="card-category-list-count">6</span></a></li></ul></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E4%B8%AD%E9%97%B4%E4%BB%B6/"><span class="card-category-list-name">中间件</span><span class="card-category-list-count">4</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/"><span class="card-category-list-name">前端</span><span class="card-category-list-count">4</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E5%90%8E%E7%AB%AF/"><span class="card-category-list-name">后端</span><span class="card-category-list-count">32</span></a></li>
522            </ul></div><div class="card-widget card-archives"><div class="item-headline"><i class="fas fa-archive"></i><span>归档</span></div><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2022/"><span class="card-archive-list-date">2022</span><span class="card-archive-list-count">8</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2021/"><span class="card-archive-list-date">2021</span><span class="card-archive-list-count">11</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2020/"><span class="card-archive-list-date">2020</span><span class="card-archive-list-count">10</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2019/"><span class="card-archive-list-date">2019</span><span class="card-archive-list-count">17</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2018/"><span class="card-archive-list-date">2018</span><span class="card-archive-list-count">34</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2017/"><span class="card-archive-list-date">2017</span><span class="card-archive-list-count">24</span></a></li></ul></div><div class="card-widget card-webinfo"><div class="item-headline"><i class="fas fa-chart-line"></i><span>网站资讯</span></div><div class="webinfo"><div class="webinfo-item"><div class="item-name">文章数目 :</div><div class="item-count">104</div></div><div class="webinfo-item"><div class="item-name">已运行时间 :</div><div class="item-count" id="runtimeshow" data-publishDate="2017-03-06T16:00:00.000Z"></div></div><div class="webinfo-item"><div class="item-name">本站总字数 :</div><div class="item-count">181.6k</div></div><div class="webinfo-item"><div class="item-name">本站访客数 :</div><div class="item-count" id="busuanzi_value_site_uv"></div></div><div class="webinfo-item"><div class="item-name">本站总访问量 :</div><div class="item-count" id="busuanzi_value_site_pv"></div></div><div class="webinfo-item"><div class="item-name">最后更新时间 :</div><div class="item-count" id="last-push-date" data-lastPushDate="2026-09-01T15:26:34.782Z"></div></div></div></div></div></div></main><footer id="footer" style="background-image: url('/img/index_image.jpg')"><div id="footer-wrap"><div class="copyright">&copy;2017 - 2026 By 彩虹马</div><div class="footer_custom_text"><a target="_blank" rel="noopener" href="http://www.beian.gov.cn/portal/registerSystemInfo?spm=a2c4g.11186623.J_9220772140.110.29fc5615Na3Cw2">粤ICP备2022148055号</></div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="translateLink" type="button" title="简繁转换">繁</button><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="回到顶部"><i class="fas fa-arrow-up"></i></button></div></div><div id="algolia-search"><div class="search-dialog"><div class="search-dialog__title" id="algolia-search-title">Algolia</div><div id="algolia-input-panel"><div id="algolia-search-input"></div></div><hr/><div id="algolia-search-results"><div id="algolia-hits"></div><div id="algolia-pagination"></div><div id="algolia-stats"></div></div><span class="search-close-button"><i class="fas fa-times"></i></span></div><div id="search-mask"></div></div><div>
522<script src="/js/utils.js"></script>
522<script src="/js/main.js"></script>
522<script src="/js/tw_cn.js"></script>
522<script src="https://cdn.jsdelivr.net/npm/instant.page/instantpage.min.js" type="module"></script>
522<script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload/dist/lazyload.iife.min.js"></script>
522<script src="https://cdn.jsdelivr.net/npm/node-snackbar/dist/snackbar.min.js"></script>
522<script>function panguFn () {
523  if (typeof pangu === 'object') pangu.autoSpacingPage()
524  else {
525    getScript('https://cdn.jsdelivr.net/npm/pangu/dist/browser/pangu.min.js')
526      .then(() => {
527        pangu.autoSpacingPage()
528      })
529  }
530}
531
532function panguInit () {
533  if (true){
534    GLOBAL_CONFIG_SITE.isPost && panguFn()
535  } else {
536    panguFn()
537  }
538}
539
540document.addEventListener('DOMContentLoaded', panguInit)</script>
540<script src="/js/search/algolia.js"></script>
540<script>var preloader = {
541  endLoading: () => {
542    document.body.style.overflow = 'auto';
543    document.getElementById('loading-box').classList.add("loaded")
544  },
545  initLoading: () => {
546    document.body.style.overflow = '';
547    document.getElementById('loading-box').classList.remove("loaded")
548
549  }
550}
551window.addEventListener('load',preloader.endLoading())</script>
551<div class="js-pjax">
551<script>function subtitleType () {
552  getScript('https://sdk.jinrishici.com/v2/browser/jinrishici.js').then(() => {
553    jinrishici.load(function (result) {
554      if (true) {
555        var sub = "".length == 0 ? new Array() : "".split(',')
556        var content = result.data.content
557        var both = sub.unshift(content)
558        var typed = new Typed('#subtitle', {
559          strings: sub,
560          startDelay: 300,
561          typeSpeed: 150,
562          loop: false,
563          backSpeed: 50,
564        })
565      } else {
566        document.getElementById('subtitle').innerHTML = result.data.content
567      }
568    })
569  })
570}
571
572if (true) {
573  if (typeof Typed === 'function') {
574    subtitleType()
575  } else {
576    getScript('https://cdn.jsdelivr.net/npm/typed.js/lib/typed.min.js').then(subtitleType)
577  }
578} else {
579  subtitleType()
580}
581</script>
581</div>
581<script defer="defer" id="ribbon" src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1/dist/canvas-ribbon.min.js" size="150" alpha="0.6" zIndex="-1" mobile="false" data-click="false"></script>
581<script src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1/dist/activate-power-mode.min.js"></script>
581<script>POWERMODE.colorful = true;
582POWERMODE.shake = false;
583POWERMODE.mobile = false;
584document.body.addEventListener('input', POWERMODE);
585</script>
585<script id="click-heart" src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1/dist/click-heart.min.js" async="async" mobile="false"></script>
585<script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
585</div></body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.