mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-09-29 22:56:42 +08:00
754 lines
56 KiB
HTML
754 lines
56 KiB
HTML
<!DOCTYPE html>
|
||
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
<head>
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
|
||
<link rel="icon" href="/static/favicon.png">
|
||
<title>083 程序员练级攻略(2018):分布式架构工程设计.md.html</title>
|
||
<!-- Spectre.css framework -->
|
||
<link rel="stylesheet" href="/static/index.css">
|
||
<!-- theme css & js -->
|
||
<meta name="generator" content="Hexo 4.2.0">
|
||
</head>
|
||
<body>
|
||
<div class="book-container">
|
||
<div class="book-sidebar">
|
||
<div class="book-brand">
|
||
<a href="/">
|
||
<img src="/static/favicon.png">
|
||
<span>技术文章摘抄</span>
|
||
</a>
|
||
</div>
|
||
<div class="book-menu uncollapsible">
|
||
<ul class="uncollapsible">
|
||
<li><a href="/" class="current-tab">首页</a></li>
|
||
</ul>
|
||
<ul class="uncollapsible">
|
||
<li><a href="../">上一级</a></li>
|
||
</ul>
|
||
<ul class="uncollapsible">
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/000 开篇词 洞悉技术的本质,享受科技的乐趣.md.html">000 开篇词 洞悉技术的本质,享受科技的乐趣</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/001 程序员如何用技术变现(上).md.html">001 程序员如何用技术变现(上)</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/002 程序员如何用技术变现(下).md.html">002 程序员如何用技术变现(下)</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/003 Equifax信息泄露始末.md.html">003 Equifax信息泄露始末</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/004 从Equifax信息泄露看数据安全.md.html">004 从Equifax信息泄露看数据安全</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/005 何为技术领导力.md.html">005 何为技术领导力</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/006 如何拥有技术领导力.md.html">006 如何拥有技术领导力</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/007 推荐阅读:每个程序员都该知道的事.md.html">007 推荐阅读:每个程序员都该知道的事</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/008 Go语言,Docker和新技术.md.html">008 Go语言,Docker和新技术</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/009 答疑解惑:渴望、热情和选择.md.html">009 答疑解惑:渴望、热情和选择</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/010 如何成为一个大家愿意追随的Leader?.md.html">010 如何成为一个大家愿意追随的Leader?</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/011 程序中的错误处理:错误返回码和异常捕捉.md.html">011 程序中的错误处理:错误返回码和异常捕捉</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/012 程序中的错误处理:异步编程和最佳实践.md.html">012 程序中的错误处理:异步编程和最佳实践</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/013 魔数 0x5f3759df.md.html">013 魔数 0x5f3759df</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/014 推荐阅读:机器学习101.md.html">014 推荐阅读:机器学习101</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/015 时间管理:同扭曲时间的事儿抗争.md.html">015 时间管理:同扭曲时间的事儿抗争</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/016 时间管理:投资赚取时间.md.html">016 时间管理:投资赚取时间</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/017 故障处理最佳实践:应对故障.md.html">017 故障处理最佳实践:应对故障</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/018 故障处理最佳实践:故障改进.md.html">018 故障处理最佳实践:故障改进</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/019 答疑解惑:我们应该能够识别的表象和本质.md.html">019 答疑解惑:我们应该能够识别的表象和本质</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/020 分布式系统架构的冰与火.md.html">020 分布式系统架构的冰与火</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/021 从亚马逊的实践,谈分布式系统的难点.md.html">021 从亚马逊的实践,谈分布式系统的难点</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/022 分布式系统的技术栈.md.html">022 分布式系统的技术栈</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/023 分布式系统关键技术:全栈监控.md.html">023 分布式系统关键技术:全栈监控</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/024 分布式系统关键技术:服务调度.md.html">024 分布式系统关键技术:服务调度</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/025 分布式系统关键技术:流量与数据调度.md.html">025 分布式系统关键技术:流量与数据调度</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/026 洞悉PaaS平台的本质.md.html">026 洞悉PaaS平台的本质</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/027 推荐阅读:分布式系统架构经典资料.md.html">027 推荐阅读:分布式系统架构经典资料</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/028 编程范式游记(1)- 起源.md.html">028 编程范式游记(1)- 起源</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/029 编程范式游记(2)- 泛型编程.md.html">029 编程范式游记(2)- 泛型编程</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/030 编程范式游记(3) - 类型系统和泛型的本质.md.html">030 编程范式游记(3) - 类型系统和泛型的本质</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/031 Git协同工作流,你该怎样选.md.html">031 Git协同工作流,你该怎样选</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/032 推荐阅读:分布式数据调度相关论文.md.html">032 推荐阅读:分布式数据调度相关论文</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/033 编程范式游记(4)- 函数式编程.md.html">033 编程范式游记(4)- 函数式编程</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/034 编程范式游记(5)- 修饰器模式.md.html">034 编程范式游记(5)- 修饰器模式</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/035 编程范式游记(6)- 面向对象编程.md.html">035 编程范式游记(6)- 面向对象编程</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/036 编程范式游记(7)- 基于原型的编程范式.md.html">036 编程范式游记(7)- 基于原型的编程范式</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/037 编程范式游记(8)- Go 语言的委托模式.md.html">037 编程范式游记(8)- Go 语言的委托模式</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/038 编程范式游记(9)- 编程的本质.md.html">038 编程范式游记(9)- 编程的本质</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/039 编程范式游记(10)- 逻辑编程范式.md.html">039 编程范式游记(10)- 逻辑编程范式</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/040 编程范式游记(11)- 程序世界里的编程范式.md.html">040 编程范式游记(11)- 程序世界里的编程范式</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/041 弹力设计篇之“认识故障和弹力设计”.md.html">041 弹力设计篇之“认识故障和弹力设计”</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/042 弹力设计篇之“隔离设计”.md.html">042 弹力设计篇之“隔离设计”</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/043 弹力设计篇之“异步通讯设计”.md.html">043 弹力设计篇之“异步通讯设计”</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/044 弹力设计篇之“幂等性设计”.md.html">044 弹力设计篇之“幂等性设计”</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/045 弹力设计篇之“服务的状态”.md.html">045 弹力设计篇之“服务的状态”</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/046 弹力设计篇之“补偿事务”.md.html">046 弹力设计篇之“补偿事务”</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/047 弹力设计篇之“重试设计”.md.html">047 弹力设计篇之“重试设计”</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/048 弹力设计篇之“熔断设计”.md.html">048 弹力设计篇之“熔断设计”</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/049 弹力设计篇之“限流设计”.md.html">049 弹力设计篇之“限流设计”</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/050 弹力设计篇之“降级设计”.md.html">050 弹力设计篇之“降级设计”</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/051 弹力设计篇之“弹力设计总结”.md.html">051 弹力设计篇之“弹力设计总结”</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/052 区块链技术 - 区块链的革命性及技术概要.md.html">052 区块链技术 - 区块链的革命性及技术概要</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/053 区块链技术 - 区块链技术细节 - 哈希算法.md.html">053 区块链技术 - 区块链技术细节 - 哈希算法</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/054 区块链技术 - 区块链技术细节 - 加密和挖矿.md.html">054 区块链技术 - 区块链技术细节 - 加密和挖矿</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/055 区块链技术 - 去中心化的共识机制.md.html">055 区块链技术 - 去中心化的共识机制</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/056 区块链技术 - 智能合约.md.html">056 区块链技术 - 智能合约</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/057 区块链技术 - 传统金融和虚拟货币.md.html">057 区块链技术 - 传统金融和虚拟货币</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/058 管理设计篇之分布式锁.md.html">058 管理设计篇之分布式锁</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/059 管理设计篇之配置中心.md.html">059 管理设计篇之配置中心</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/060 管理设计篇之边车模式.md.html">060 管理设计篇之边车模式</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/061 管理设计篇之服务网格.md.html">061 管理设计篇之服务网格</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/062 管理设计篇之网关模式.md.html">062 管理设计篇之网关模式</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/063 管理设计篇之部署升级策略.md.html">063 管理设计篇之部署升级策略</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/064 性能设计篇之缓存.md.html">064 性能设计篇之缓存</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/065 性能设计篇之异步处理.md.html">065 性能设计篇之异步处理</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/066 性能设计篇之数据库扩展.md.html">066 性能设计篇之数据库扩展</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/067 性能设计篇之秒杀.md.html">067 性能设计篇之秒杀</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/068 性能设计篇之边缘计算.md.html">068 性能设计篇之边缘计算</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/069 程序员练级攻略(2018):开篇词.md.html">069 程序员练级攻略(2018):开篇词</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/070 程序员练级攻略(2018):零基础启蒙.md.html">070 程序员练级攻略(2018):零基础启蒙</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/071 程序员练级攻略(2018):正式入门.md.html">071 程序员练级攻略(2018):正式入门</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/072 程序员练级攻略(2018):程序员修养.md.html">072 程序员练级攻略(2018):程序员修养</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/073 程序员练级攻略(2018):编程语言.md.html">073 程序员练级攻略(2018):编程语言</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/074 程序员练级攻略:理论学科.md.html">074 程序员练级攻略:理论学科</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/075 程序员练级攻略(2018):系统知识.md.html">075 程序员练级攻略(2018):系统知识</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/076 程序员练级攻略(2018):软件设计.md.html">076 程序员练级攻略(2018):软件设计</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/077 程序员练级攻略(2018):Linux系统、内存和网络.md.html">077 程序员练级攻略(2018):Linux系统、内存和网络</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/078 程序员练级攻略(2018):异步IO模型和Lock-Free编程.md.html">078 程序员练级攻略(2018):异步IO模型和Lock-Free编程</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/079 程序员练级攻略(2018):Java底层知识.md.html">079 程序员练级攻略(2018):Java底层知识</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/080 程序员练级攻略(2018):数据库.md.html">080 程序员练级攻略(2018):数据库</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/081 程序员练级攻略(2018):分布式架构入门.md.html">081 程序员练级攻略(2018):分布式架构入门</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/082 程序员练级攻略(2018):分布式架构经典图书和论文.md.html">082 程序员练级攻略(2018):分布式架构经典图书和论文</a>
|
||
</li>
|
||
<li>
|
||
<a class="current-tab" href="/专栏/左耳听风/083 程序员练级攻略(2018):分布式架构工程设计.md.html">083 程序员练级攻略(2018):分布式架构工程设计</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/084 程序员练级攻略(2018):微服务.md.html">084 程序员练级攻略(2018):微服务</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/085 程序员练级攻略(2018):容器化和自动化运维.md.html">085 程序员练级攻略(2018):容器化和自动化运维</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/086 程序员练级攻略(2018):机器学习和人工智能.md.html">086 程序员练级攻略(2018):机器学习和人工智能</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/087 程序员练级攻略(2018):前端基础和底层原理.md.html">087 程序员练级攻略(2018):前端基础和底层原理</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/088 程序员练级攻略(2018):前端性能优化和框架.md.html">088 程序员练级攻略(2018):前端性能优化和框架</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/089 程序员练级攻略(2018):UIUX设计.md.html">089 程序员练级攻略(2018):UIUX设计</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/090 程序员练级攻略(2018):技术资源集散地.md.html">090 程序员练级攻略(2018):技术资源集散地</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/091 程序员面试攻略:面试前的准备.md.html">091 程序员面试攻略:面试前的准备</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/092 程序员面试攻略:面试中的技巧.md.html">092 程序员面试攻略:面试中的技巧</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/093 程序员面试攻略:面试风格.md.html">093 程序员面试攻略:面试风格</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/094 程序员面试攻略:实力才是王中王.md.html">094 程序员面试攻略:实力才是王中王</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/095 高效学习:端正学习态度.md.html">095 高效学习:端正学习态度</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/096 高效学习:源头、原理和知识地图.md.html">096 高效学习:源头、原理和知识地图</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/097 高效学习:深度,归纳和坚持实践.md.html">097 高效学习:深度,归纳和坚持实践</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/098 高效学习:如何学习和阅读代码.md.html">098 高效学习:如何学习和阅读代码</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/099 高效学习:面对枯燥和量大的知识.md.html">099 高效学习:面对枯燥和量大的知识</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/100 高效沟通:Talk和Code同等重要.md.html">100 高效沟通:Talk和Code同等重要</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/101 高效沟通:沟通阻碍和应对方法.md.html">101 高效沟通:沟通阻碍和应对方法</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/102 高效沟通:沟通方式及技巧.md.html">102 高效沟通:沟通方式及技巧</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/103 高效沟通:沟通技术.md.html">103 高效沟通:沟通技术</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/104 高效沟通:好老板要善于提问.md.html">104 高效沟通:好老板要善于提问</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/105 高效沟通:好好说话的艺术.md.html">105 高效沟通:好好说话的艺术</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/106 加餐 谈谈我的“三观”.md.html">106 加餐 谈谈我的“三观”</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/107 结束语 业精于勤,行成于思.md.html">107 结束语 业精于勤,行成于思</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
|
||
<div class="sidebar-toggle-inner"></div>
|
||
</div>
|
||
<script>
|
||
function add_inner() {
|
||
let inner = document.querySelector('.sidebar-toggle-inner')
|
||
inner.classList.add('show')
|
||
}
|
||
function remove_inner() {
|
||
let inner = document.querySelector('.sidebar-toggle-inner')
|
||
inner.classList.remove('show')
|
||
}
|
||
function sidebar_toggle() {
|
||
let sidebar_toggle = document.querySelector('.sidebar-toggle')
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
let content = document.querySelector('.off-canvas-content')
|
||
if (sidebar_toggle.classList.contains('extend')) { // show
|
||
sidebar_toggle.classList.remove('extend')
|
||
sidebar.classList.remove('hide')
|
||
content.classList.remove('extend')
|
||
} else { // hide
|
||
sidebar_toggle.classList.add('extend')
|
||
sidebar.classList.add('hide')
|
||
content.classList.add('extend')
|
||
}
|
||
}
|
||
function open_sidebar() {
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
let overlay = document.querySelector('.off-canvas-overlay')
|
||
sidebar.classList.add('show')
|
||
overlay.classList.add('show')
|
||
}
|
||
function hide_canvas() {
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
let overlay = document.querySelector('.off-canvas-overlay')
|
||
sidebar.classList.remove('show')
|
||
overlay.classList.remove('show')
|
||
}
|
||
</script>
|
||
<div class="off-canvas-content">
|
||
<div class="columns">
|
||
<div class="column col-12 col-lg-12">
|
||
<div class="book-navbar">
|
||
<!-- For Responsive Layout -->
|
||
<header class="navbar">
|
||
<section class="navbar-section">
|
||
<a onclick="open_sidebar()">
|
||
<i class="icon icon-menu"></i>
|
||
</a>
|
||
</section>
|
||
</header>
|
||
</div>
|
||
<div class="book-content" style="max-width: 960px; margin: 0 auto;
|
||
overflow-x: auto;
|
||
overflow-y: hidden;">
|
||
<div class="book-post">
|
||
<p id="tip" align="center"></p>
|
||
<div><h1>083 程序员练级攻略(2018):分布式架构工程设计</h1>
|
||
<p>要学好分布式架构,你首先需要学习一些架构指导性的文章和方法论,即分布式架构设计原则。下面是几篇很不错的文章,值得一读。</p>
|
||
<ul>
|
||
<li><a href="https://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf">Designs, Lessons and Advice from Building Large Distributed Systems</a>,Google 杰夫·迪恩(Jeff Dean)2009 年一次演讲的 PPT。2010 年,斯坦福大学请杰夫·迪恩到大学里给他们讲了一节课,你可以在 YouTube 上看一下,<a href="https://www.youtube.com/watch?v=modXC5IWTJI">Building Software Systems At Google and Lessons Learned</a> ,其回顾了 Google 发展的历史。</li>
|
||
<li><a href="https://12factor.net/">The Twelve-Factor App</a> ,如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS)。12-Factor 为构建 SaaS 应用提供了方法论,是架构师必读的文章。(<a href="https://12factor.net/zh_cn/">中译版</a>)这篇文章在业内的影响力很大很大,必读!</li>
|
||
<li><a href="https://www.somethingsimilar.com/2013/01/14/notes-on-distributed-systems-for-young-bloods/">Notes on Distributed Systems for Young Bloods</a> ,给准备进入分布式系统领域的人的一些忠告。</li>
|
||
<li><a href="https://www.usenix.org/legacy/event/lisa07/tech/full_papers/hamilton/hamilton_html/index.html">On Designing and Deploying Internet-Scale Services</a>(<a href="https://darktea.github.io/notes/2014/07/23/On-Designing-and-Deploying-Internet-Scale-Services.html">中译版</a>),微软 Windows Live 服务平台的一些经验性的总结文章,很值得一读。</li>
|
||
<li><a href="https://blog.box.com/blog/4-things-to-keep-in-mind-when-building-a-platform-for-the-enterprise/">4 Things to Keep in Mind When Building a Platform for the Enterprise</a> ,Box 平台 VP 海蒂·威廉姆斯(Heidi Williams)撰写的一篇文章,阐述了为企业构建平台时需要牢记的四件关于软件设计方面的事:1. Design Broadly, Build Narrowly; 2. Platforms Are Powerful and Flexible. Choose wisely what to expose when!;3. Build Incrementally, Get Feedback, and Iterate;4. Create a Platform-first Mentality。文章中有详细的解读,推荐看看。</li>
|
||
<li><a href="https://www.usenix.org/conference/srecon17americas/program/presentation/rosenthal">Principles of Chaos Engineering</a> ,我们知道,Netflix 公司有一个叫 Chaos Monkey 的东西,这个东西会到分布式系统里瞎搞,以此来测试系统的健壮和稳定性。这个视频中,Netflix 分享了一些软件架构的经验和原则,值得一看。</li>
|
||
<li><a href="https://www.igvita.com/2016/05/20/building-fast-and-resilient-web-applications/">Building Fast & Resilient Web Applications</a> ,伊利亚·格里高利克(Ilya Grigorik)在 Google I/O 2016 上的一次关于如何通过弹力设计来实现快速和可容错的网站架构的演讲,其中有好些经验分享。</li>
|
||
<li><a href="http://highscalability.com/blog/2012/12/31/designing-for-resiliency-will-be-so-2013.html">Design for Resiliency</a> ,这篇文章带我们全面认识 " 弹力(Resiliency)",以及弹力对于系统的重要性,并详细阐述了如何设计和实现系统的弹力。</li>
|
||
<li>微软的 Azure 网站上有一系列的 <a href="https://docs.microsoft.com/en-us/azure/architecture/guide/design-principles/">Design Principle</a> 的文章,你可以看看这几篇: <a href="https://docs.microsoft.com/en-us/azure/architecture/guide/design-principles/self-healing">Design for Self-healing</a> 、<a href="https://docs.microsoft.com/en-us/azure/architecture/guide/design-principles/scale-out">Design for Scaling Out</a> 和 <a href="https://docs.microsoft.com/en-us/azure/architecture/guide/design-principles/design-for-evolution">Design for Evolution</a> 。</li>
|
||
<li><a href="https://www.allthingsdistributed.com/2008/12/eventually_consistent.html">Eventually Consistent</a> ,AWS CTO 维尔纳·沃格尔斯(Werner Vogels)发布在自己 Blog 上的一篇关于最终一致性的好文。</li>
|
||
<li><a href="https://blog.rackspace.com/writing-code-that-scales">Writing Code that Scales</a> ,Rackspace 的一篇很不错的博文,告诉我们一些很不错的写出高扩展和高性能代码的工程原则。</li>
|
||
<li><a href="https://architecht.io/lessons-from-facebook-on-engineering-for-scale-f5716f0afc7a">Automate and Abstract: Lessons from Facebook on Engineering for Scale</a> ,软件自动化和软件抽象,这是软件工程中最重要的两件事了。通过这篇文章,我们可以看到 Facebook 的关于这方面的一些经验教训。</li>
|
||
</ul>
|
||
<h1>设计模式</h1>
|
||
<p>有了方法论后,你还需要学习一些比较细节的落地的技术。最好的方式就是学习被前人总结出来的设计模式,虽然设计模式也要分场景,但是设计模式可以让你知道一些套路,这些套路对于我们设计的分布式系统有非常大的帮助,不但可以让我们少走一些弯路,而且还能让我们更为系统和健壮地设计我们的架构。</p>
|
||
<p>下面是一些分布式架构设计模式的网站。</p>
|
||
<p>首先,需要重点推荐的是微软云平台 Azure 上的设计模式。 <a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/">Cloud Design Patterns</a> ,这个网站上罗列了分布式设计的各种设计模式,可以说是非常全面和完整。对于每一个模式都有详细的说明,并有对其优缺点的讨论,以及适用场景和不适用场景的说明,实在是一个非常不错的学习分布式设计模式的地方。其中有如下分类。</p>
|
||
<ul>
|
||
<li><a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/category/availability">设计模式:可用性</a>;</li>
|
||
<li><a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/category/data-management">设计模式:数据管理</a>;</li>
|
||
<li><a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/category/design-implementation">设计模式:设计和实现</a>;</li>
|
||
<li><a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/category/messaging">设计模式:消息</a>;</li>
|
||
<li><a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/category/management-monitoring">设计模式:管理和监控</a>;</li>
|
||
<li><a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/category/performance-scalability">设计模式:性能和扩展</a>;</li>
|
||
<li><a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/category/resiliency">设计模式:系统弹力</a>;</li>
|
||
<li><a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/category/security">设计模式:安全</a>。</li>
|
||
</ul>
|
||
<p>除此之外,还有其它的一些关于分布式系统设计模式的网站和相关资料。</p>
|
||
<ul>
|
||
<li><a href="http://en.clouddesignpattern.org/index.php/Main_Page">AWS Cloud Pattern</a> ,这里收集了 AWS 云平台的一些设计模式。</li>
|
||
<li><a href="https://research.google.com/pubs/archive/45406.pdf">Design patterns for container-based distributed systems</a> ,这是 Google 给的一篇论文,其中描述了容器化下的分布式架构的设计模式。</li>
|
||
<li><a href="https://www.slideshare.net/pagsousa/patterns-fro-distributed-systems">Patterns for distributed systems</a> ,这是一个 PPT,其中讲了一些分布式系统的架构模式,你可以顺着到 Google 里去搜索。</li>
|
||
</ul>
|
||
<p>我个人觉得微服务也好,SOA 也好,都是分布式系统的一部分,这里有两个网站罗列了各种各样的服务架构模式。</p>
|
||
<ul>
|
||
<li><a href="http://microservices.io/patterns/index.html">A Pattern Language for Micro-Services</a> ;</li>
|
||
<li><a href="http://soapatterns.org/">SOA Patterns</a>。</li>
|
||
</ul>
|
||
<p>当然,还有我在极客时间上写的那些分布式的设计模式的总结。</p>
|
||
<ul>
|
||
<li><strong>弹力设计篇</strong>,内容包括:认识故障和弹力设计、隔离设计、异步通讯设计、幂等性设计、服务的状态、补偿事务、重试设计、熔断设计、限流设计、降级设计、弹力设计总结。</li>
|
||
<li><strong>管理设计篇</strong>,内容包括:分布式锁、配置中心、边车模式、服务网格、网关模式、部署升级策略等。</li>
|
||
<li><strong>性能设计篇</strong>,内容包括:缓存、异步处理、数据库扩展、秒杀、边缘计算等。</li>
|
||
</ul>
|
||
<h1>设计与工程实践</h1>
|
||
<h2>分布式系统的故障测试</h2>
|
||
<ul>
|
||
<li><a href="https://medium.com/netflix-techblog/fit-failure-injection-testing-35d8e2a9bb2">FIT: Failure Injection Testing</a> ,Netflix 公司的一篇关于做故障注入测试的文章。</li>
|
||
<li><a href="https://medium.com/netflix-techblog/automated-failure-testing-86c1b8bc841f">Automated Failure Testing</a> ,同样来自 Netflix 公司的自动化故障测试的一篇博文。</li>
|
||
<li><a href="https://people.ucsc.edu/~palvaro/socc16.pdf">Automating Failure Testing Research at Internet Scale</a> ,Netflix 公司伙同圣克鲁斯加利福尼亚大学和 Gremlin 游戏公司一同撰写的一篇论文。</li>
|
||
</ul>
|
||
<h2>弹性伸缩</h2>
|
||
<ul>
|
||
<li><a href="http://highscalability.com/blog/2014/5/12/4-architecture-issues-when-scaling-web-applications-bottlene.html">4 Architecture Issues When Scaling Web Applications: Bottlenecks, Database, CPU, IO</a> ,本文讲解了后端程序的主要性能指标,即响应时间和可伸缩性这两者如何能提高的解决方案,讨论了包括纵向和横向扩展,可伸缩架构、负载均衡、数据库的伸缩、CPU 密集型和 I/O 密集型程序的考量等。</li>
|
||
<li><a href="http://ithare.com/scaling-stateful-objects/">Scaling Stateful Objects</a> ,这是一本叫《Development&Deployment of Multiplayer Online Games》书中一章内容的节选,讨论了有状态和无状态的节点如何伸缩的问题。虽然还没有写完,但是可以给你一些很不错的基本概念和想法。</li>
|
||
<li><a href="https://blog.codinghorror.com/scaling-up-vs-scaling-out-hidden-costs/">Scale Up vs Scale Out: Hidden Costs</a> ,Coding Horror 上的一篇有趣的文章,详细分析了可伸缩性架构的不同扩展方案(横向扩展或纵向扩展)所带来的成本差异,帮助你更好地选择合理的扩展方案,可以看看。</li>
|
||
<li><a href="https://blog.openshift.com/best-practices-for-horizontal-application-scaling/">Best Practices for Scaling Out</a> ,OpenShift 的一篇讨论 Scale out 最佳实践的文章。</li>
|
||
<li><a href="https://www.infoq.com/articles/scalability-worst-practices">Scalability Worst Practices</a> ,这篇文章讨论了一些最差实践,你需要小心避免。</li>
|
||
<li><a href="http://highscalability.com/blog/2013/8/26/reddit-lessons-learned-from-mistakes-made-scaling-to-1-billi.html">Reddit: Lessons Learned From Mistakes Made Scaling To 1 Billion Pageviews A Month</a> ,Reddit 分享的一些关于系统扩展的经验教训。</li>
|
||
<li>下面是几篇关于自动化弹性伸缩的文章。
|
||
<ul>
|
||
<li><a href="https://medium.com/@Pinterest_Engineering/auto-scaling-pinterest-df1d2beb4d64">Autoscaling Pinterest</a>;</li>
|
||
<li><a href="https://medium.com/square-corner-blog/autoscaling-based-on-request-queuing-c4c0f57f860f">Square: Autoscaling Based on Request Queuing</a>;</li>
|
||
<li><a href="https://www.paypal-engineering.com/2017/08/16/autoscaling-applications-paypal/">PayPal: Autoscaling Applications</a>;</li>
|
||
<li><a href="http://tech.trivago.com/2017/02/17/your-definite-guide-for-autoscaling-jenkins/">Trivago: Your Definite Guide For Autoscaling Jenkins</a>;</li>
|
||
<li><a href="https://medium.com/netflix-techblog/scryer-netflixs-predictive-auto-scaling-engine-a3f8fc922270">Scryer: Netflix’s Predictive Auto Scaling Engine</a>。</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<h2>一致性哈希</h2>
|
||
<ul>
|
||
<li><a href="http://www.tom-e-white.com/2007/11/consistent-hashing.html">Consistent Hashing</a> ,这是一个一致性哈希的简单教程,其中还有代码示例。</li>
|
||
<li><a href="https://medium.com/@dgryski/consistent-hashing-algorithmic-tradeoffs-ef6b8e2fcae8">Consistent Hashing: Algorithmic Tradeoffs</a> ,这篇文章讲述了一致性哈希的一些缺陷和坑,以及各种哈希算法的性能比较,最后还给了一组代码仓库,其中有各种哈希算法的实现。</li>
|
||
<li><a href="https://medium.com/netflix-techblog/distributing-content-to-open-connect-3e3e391d4dc9">Distributing Content to Open Connect</a> ,Netflix 的一个对一致性哈希的实践,提出了 Uniform Consistent Hashing,是挺有意思的一篇文章。</li>
|
||
<li><a href="https://blog.imaginea.com/consistent-hashing-in-cassandra/">Consistent Hashing in Cassandra</a> ,这是 Cassandra 中使用到的一致性哈希的相关设计。</li>
|
||
</ul>
|
||
<h2>数据库分布式</h2>
|
||
<ul>
|
||
<li>
|
||
<p><a href="https://queue.acm.org/detail.cfm?id=3025012">Life Beyond Distributed Transactions</a> ,该文是 Salesforce 的软件架构师帕特·赫兰德(Pat Helland)于 2016 年 12 月发表的针对其在 2007 年 CIDR(创新数据库研究会议)上首次发表的同名文章的更新和缩写版本。业界谈到分布式事务通常指两段提交 2PC 事务(Spring/JEE 中 JTA 等) 或者 Paxos 与 Raft,这些事务都有明显缺点和局限性。</p>
|
||
<p>而赫兰德在本文讨论的是另外一种基于本地事务情况下的事务机制,它是基于实体和活动(Activity)的概念,其实类似 DDD 聚合根和领域事件的概念,这种工作流类型事务虽然需要程序员介入,依靠消息系统实现,但可以实现接近无限扩展的大型系统。赫兰德文中提出了重要的观点:“如果你不能使用分布式事务,那么你就只能使用工作流。”</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://medium.com/@jeeyoungk/how-sharding-works-b4dec46b3f6">How Sharding Works</a> ,这是一篇很不错的探讨数据 Sharding 的文章。基本上来说,数据 Sharding 可能的问题都在这篇文章里谈到了。</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://www.percona.com/blog/2009/08/06/why-you-dont-want-to-shard/">Why you don’t want to shard</a> ,这是 Percona 的一篇文章,其中表达了,不到万不得已不要做数据库分片。是的,最好还是先按业务来拆分,先把做成微服务的架构,然后把数据集变简单,然后再做 Sharding 会更好。</p>
|
||
</li>
|
||
<li>
|
||
<p>[How to Scale Big Data Applications](https://www.percona.com/sites/default/files/presentations/How to Scale Big Data Applications.pdf) ,这也是 Percona 给出的一篇关于怎样给大数据应用做架构扩展的文章。值得一读。</p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://www.percona.com/blog/2016/08/30/mysql-sharding-with-proxysql/">MySQL Sharding with ProxySQL</a> ,用 ProxySQL 来支撑 MySQL 数据分片的一篇实践文章。</p>
|
||
</li>
|
||
</ul>
|
||
<h2>缓存</h2>
|
||
<ul>
|
||
<li><a href="https://coolshell.cn/articles/17416.html">缓存更新的套路</a>,这是我在 CoolShell 上写的缓存更新的几个设计模式,包括 Cache Aside、Read/Write Through、Write Behind Caching。</li>
|
||
<li><a href="http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html">Design Of A Modern Cache</a> ,设计一个现代化的缓存系统需要注意到的东西。</li>
|
||
<li><a href="https://medium.com/netflix-techblog/caching-for-a-global-netflix-7bcc457012f1">Netflix: Caching for a Global Netflix</a> ,Netflix 公司的全局缓存架构实践。</li>
|
||
<li><a href="https://code.facebook.com/posts/220956754772273/an-analysis-of-facebook-photo-caching/">Facebook: An analysis of Facebook photo caching</a> ,Facebook 公司的图片缓存使用分析,这篇文章挺有意思的,用数据来调优不同的缓存大小和算法。</li>
|
||
<li><a href="https://tech.trivago.com/2017/12/19/how-trivago-reduced-memcached-memory-usage-by-50/">How trivago Reduced Memcached Memory Usage by 50%</a> ,Trivago 公司一篇分享自己是如何把 Memcached 的内存使用率降了一半的实践性文章。很有意思,可以让你学到很多东西。</li>
|
||
<li><a href="https://engineeringblog.yelp.com/2018/03/caching-internal-service-calls-at-yelp.html">Caching Internal Service Calls at Yelp</a> ,Yelp 公司的缓存系统架构。</li>
|
||
</ul>
|
||
<h2>消息队列</h2>
|
||
<ul>
|
||
<li><a href="https://content.pivotal.io/blog/understanding-when-to-use-rabbitmq-or-apache-kafka">Understanding When to use RabbitMQ or Apache Kafka</a> ,什么时候使用 RabbitMQ,什么时候使用 Kafka,通过这篇文章可以让你明白如何做技术决策。</li>
|
||
<li><a href="https://tech.trello.com/why-we-chose-kafka/">Trello: Why We Chose Kafka For The Trello Socket Architecture</a> ,Trello 的 Kafka 架构分享。</li>
|
||
<li><a href="https://engineering.linkedin.com/kafka/running-kafka-scale">LinkedIn: Running Kafka At Scale</a> ,Linkedin 公司的 Kafka 架构扩展实践。</li>
|
||
<li><a href="https://www.confluent.io/blog/put-several-event-types-kafka-topic/">Should You Put Several Event Types in the Same Kafka Topic?</a> ,这个问题可能经常困扰你,这篇文章可以为你找到答案。</li>
|
||
<li><a href="https://engineeringblog.yelp.com/2016/07/billions-of-messages-a-day-yelps-real-time-data-pipeline.html">Billions of Messages a Day - Yelp’s Real-time Data Pipeline</a> ,Yelp 公司每天十亿级实时消息的架构。</li>
|
||
<li><a href="https://eng.uber.com/reliable-reprocessing/">Uber: Building Reliable Reprocessing and Dead Letter Queues with Kafka</a> ,Uber 公司的 Kafka 应用。</li>
|
||
<li><a href="https://eng.uber.com/chaperone/">Uber: Introducing Chaperone: How Uber Engineering Audits Kafka End-to-End</a> ,Uber 公司对 Kafka 消息的端到端审计。</li>
|
||
<li><a href="https://open.nytimes.com/publishing-with-apache-kafka-at-the-new-york-times-7f0e3b7d2077">Publishing with Apache Kafka at The New York Times</a> ,纽约时报的 Kafka 工程实践。</li>
|
||
<li><a href="https://blog.heroku.com/kafka-streams-on-heroku">Kafka Streams on Heroku</a> ,Heroku 公司的 Kafka Streams 实践。</li>
|
||
<li><a href="https://engineering.salesforce.com/how-apache-kafka-inspired-our-platform-events-architecture-2f351fe4cf63">Salesforce: How Apache Kafka Inspired Our Platform Events Architecture</a> ,Salesforce 的 Kafka 工程实践。</li>
|
||
<li><a href="https://www.confluent.io/blog/exactly-once-semantics-are-possible-heres-how-apache-kafka-does-it/">Exactly-once Semantics are Possible: Here’s How Kafka Does it</a> ,怎样用 Kafka 让只发送一次的语义变为可能。这是业界中一个很难的工程问题。</li>
|
||
<li><a href="https://segment.com/blog/exactly-once-delivery/">Delivering billions of messages exactly once</a> 同上,这也是一篇挑战消息只发送一次这个技术难题的文章。</li>
|
||
<li><a href="https://yahooeng.tumblr.com/post/135321837876/benchmarking-streaming-computation-engines-at">Benchmarking Streaming Computation Engines at Yahoo!</a>。Yahoo! 的 Storm 团队在为他们的流式计算做技术选型时,发现市面上缺乏针对不同计算平台的性能基准测试。于是,他们研究并设计了一种方案来做基准测试,测试了 Apache Flink、Apache Storm 和 Apache Spark 这三种平台。文中给出了结论和具体的测试方案。(如果原文链接不可用,请尝试搜索引擎对该网页的快照。)</li>
|
||
</ul>
|
||
<h2>关于日志方面</h2>
|
||
<ul>
|
||
<li><a href="https://www.confluent.io/blog/using-logs-to-build-a-solid-data-infrastructure-or-why-dual-writes-are-a-bad-idea/">Using Logs to Build a Solid Data Infrastructure - Martin Kleppmann</a> ,设计基于 log 结构应用架构的一篇不错的文章。</li>
|
||
<li><a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2015/building-distributedlog-twitter-s-high-performance-replicated-log-servic.html">Building DistributedLog: High-performance replicated log service</a> ,Distributed 是 Twitter 2016 年 5 月份开源的一个分布式日志系统。在 Twitter 内部已经使用 2 年多。其主页在 <a href="http://distributedlog.io/">distributedlog.io</a>。这篇文章讲述了这个高性能日志系统的一些技术细节。另外,其技术负责人是个中国人,其在微信公众号中也分享过这个系统 <a href="https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=403051208&idx=1&sn=1694ac05acbcb5ca53c88bfac8a68856&scene=2&srcid=1224xZuQ9QQ4sRmiPVdHTppL">Twitter 高性能分布式日志系统架构解析</a>。</li>
|
||
<li><a href="https://code.facebook.com/posts/357056558062811/logdevice-a-distributed-data-store-for-logs/">LogDevice: a distributed data store for logs</a> ,Facebook 分布式日志系统方面的一些工程分享。</li>
|
||
</ul>
|
||
<h2>关于性能方面</h2>
|
||
<ul>
|
||
<li><a href="http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it">Understand Latency</a> ,这篇文章收集并整理了一些和系统响应时间相关的文章,可以让你全面了解和 Latency 有关的系统架构和设计经验方面的知识。</li>
|
||
<li><a href="http://highscalability.com/blog/2012/5/16/big-list-of-20-common-bottlenecks.html">Common Bottlenecks</a> ,文中讲述了 20 个常见的系统瓶颈。</li>
|
||
<li><a href="https://blog.codinghorror.com/performance-is-a-feature/">Performance is a Feature</a> ,Coding Horror 上的一篇让你关注性能的文章。</li>
|
||
<li><a href="https://codeascraft.com/2014/12/11/make-performance-part-of-your-workflow/">Make Performance Part of Your Workflow</a> ,这篇文章是图书《<a href="http://shop.oreilly.com/product/0636920033578.do">Designing for Performance</a>》中的节选(国内没有卖的),其中给出来了一些和性能有关的设计上的平衡和美学。</li>
|
||
<li><a href="https://blog.cloudflare.com/counting-things-a-lot-of-different-things/">CloudFlare: How we built rate limiting capable of scaling to millions of domains</a>,讲述了 CloudFlare 公司是怎样实现他们的限流功能的。从最简单的每客户 IP 限流开始分析,进一步讲到 anycast,在这种情况下 PoP 的分布式限流是怎样实现的,并详细解释了具体的算法。</li>
|
||
</ul>
|
||
<h2>关于搜索方面</h2>
|
||
<ul>
|
||
<li><a href="https://instagram-engineering.com/search-architecture-eeb34a936d3a">Instagram: Search Architecture</a></li>
|
||
<li><a href="http://www.cs.otago.ac.nz/homepages/andrew/papers/2017-8.pdf">eBay: The Architecture of eBay Search</a></li>
|
||
<li><a href="https://www.ebayinc.com/stories/blogs/tech/making-e-commerce-search-faster/">eBay: Improving Search Engine Efficiency by over 25%</a></li>
|
||
<li><a href="https://engineering.linkedin.com/search/did-you-mean-galene">LinkedIn: Introducing LinkedIn’s new search architecture</a></li>
|
||
<li><a href="https://engineering.linkedin.com/blog/2018/03/search-federation-architecture-at-linkedin">LinkedIn: Search Federation Architecture at LinkedIn</a></li>
|
||
<li><a href="https://slack.engineering/search-at-slack-431f8c80619e">Slack: Search at Slack</a></li>
|
||
<li><a href="https://blog.doordash.com/powering-search-recommendations-at-doordash-8310c5cfd88c">DoorDash: Search and Recommendations at DoorDash</a></li>
|
||
<li><a href="https://blog.twitter.com/engineering/en_us/a/2014/building-a-complete-tweet-index.html">Twitter: Search Service at Twitter (2014)</a></li>
|
||
<li><a href="https://medium.com/@Pinterest_Engineering/manas-a-high-performing-customized-search-system-cf189f6ca40f">Pinterest: Manas: High Performing Customized Search System</a></li>
|
||
<li><a href="https://tech.flipkart.com/sherlock-near-real-time-search-indexing-95519783859d">Sherlock: Near Real Time Search Indexing at Flipkart</a></li>
|
||
<li><a href="https://medium.com/airbnb-engineering/nebula-as-a-storage-platform-to-build-airbnbs-search-backends-ecc577b05f06">Airbnb: Nebula: Storage Platform to Build Search Backends</a></li>
|
||
</ul>
|
||
<h2>各公司的架构实践</h2>
|
||
<p><a href="http://highscalability.com/">High Scalability</a> ,这个网站会定期分享一些大规模系统架构是怎样构建的,下面是迄今为止各个公司的架构说明。</p>
|
||
<ul>
|
||
<li><a href="http://highscalability.com/youtube-architecture">YouTube Architecture</a></li>
|
||
<li><a href="http://highscalability.com/blog/2013/4/15/scaling-pinterest-from-0-to-10s-of-billions-of-page-views-a.html">Scaling Pinterest</a></li>
|
||
<li><a href="http://highscalability.com/google-architecture">Google Architecture</a></li>
|
||
<li><a href="http://highscalability.com/scaling-twitter-making-twitter-10000-percent-faster">Scaling Twitter</a></li>
|
||
<li><a href="http://highscalability.com/blog/2014/2/26/the-whatsapp-architecture-facebook-bought-for-19-billion.html">The WhatsApp Architecture</a></li>
|
||
<li><a href="http://highscalability.com/flickr-architecture">Flickr Architecture</a></li>
|
||
<li><a href="http://highscalability.com/amazon-architecture">Amazon Architecture</a></li>
|
||
<li><a href="http://highscalability.com/blog/2009/8/5/stack-overflow-architecture.html">Stack Overflow Architecture</a></li>
|
||
<li><a href="http://highscalability.com/blog/2012/5/21/pinterest-architecture-update-18-million-visitors-10x-growth.html">Pinterest Architecture</a></li>
|
||
<li><a href="http://highscalability.com/blog/2012/2/13/tumblr-architecture-15-billion-page-views-a-month-and-harder.html">Tumblr Architecture</a></li>
|
||
<li><a href="http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html">Instagram Architecture</a></li>
|
||
<li><a href="http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view.html">TripAdvisor Architecture</a></li>
|
||
<li><a href="http://highscalability.com/blog/2013/6/18/scaling-mailbox-from-0-to-one-million-users-in-6-weeks-and-1.html">Scaling Mailbox</a></li>
|
||
<li><a href="http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html">Salesforce Architecture</a></li>
|
||
<li><a href="http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html">ESPN Architecture</a></li>
|
||
<li><a href="http://highscalability.com/blog/2015/9/14/how-uber-scales-their-real-time-market-platform.html">Uber Architecture</a></li>
|
||
<li><a href="https://www.youtube.com/watch?v=PE4gwstWhmc">DropBox Design</a></li>
|
||
<li><a href="http://www.splunk.com/view/SP-CAAABF9">Splunk Architecture</a></li>
|
||
</ul>
|
||
<h1>小结</h1>
|
||
<p>今天我们分享的内容是高手成长篇分布式架构部分的最后一篇——分布式架构工程设计,讲述了设计原则、设计模式等方面的内容,尤其整理和推荐了国内外知名企业的设计思路和工程实践,十分具有借鉴意义。</p>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<div style="float: left">
|
||
<a href="/专栏/左耳听风/082 程序员练级攻略(2018):分布式架构经典图书和论文.md.html">上一页</a>
|
||
</div>
|
||
<div style="float: right">
|
||
<a href="/专栏/左耳听风/084 程序员练级攻略(2018):微服务.md.html">下一页</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
|
||
</div>
|
||
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"709978936f423cfa","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
|
||
</body>
|
||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
|
||
<script>
|
||
window.dataLayer = window.dataLayer || [];
|
||
function gtag() {
|
||
dataLayer.push(arguments);
|
||
}
|
||
gtag('js', new Date());
|
||
gtag('config', 'G-NPSEEVD756');
|
||
var path = window.location.pathname
|
||
var cookie = getCookie("lastPath");
|
||
console.log(path)
|
||
if (path.replace("/", "") === "") {
|
||
if (cookie.replace("/", "") !== "") {
|
||
console.log(cookie)
|
||
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
|
||
}
|
||
} else {
|
||
setCookie("lastPath", path)
|
||
}
|
||
function setCookie(cname, cvalue) {
|
||
var d = new Date();
|
||
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
|
||
var expires = "expires=" + d.toGMTString();
|
||
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
|
||
}
|
||
function getCookie(cname) {
|
||
var name = cname + "=";
|
||
var ca = document.cookie.split(';');
|
||
for (var i = 0; i < ca.length; i++) {
|
||
var c = ca[i].trim();
|
||
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
|
||
}
|
||
return "";
|
||
}
|
||
</script>
|
||
</html>
|