




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一致性算法与短系统Consistent Hashing & Design Tiny Url课程版本 v5.1本节主讲人 东邪/扫描关注获取最新面试题及权威解答: ninechapter:知乎:官网:第1页与,否则将法律责任和赔偿九章的所有课程均受法律保护,不与损失一经发现,将被法律责任和赔偿第2页与,否则将法律责任和赔偿今日课程大纲Consistent Hashing 简单的Consistent Hashing方法的回顾及缺陷分析 一个更优的 Consistent Hashing 方法RepliaSQL 通常如何进行备份NoSQL 通常如何进行备份?系统 Design Tiny Url
2、设计一个短 4S 分析法 No Hire / Weak Hire / Hire / Strong Hire附录(供大家自学):当你的时候第3页与,否则将法律责任和赔偿一致性算法Consistent HashingHorizontal Sharding 的第4页与,否则将法律责任和赔偿Consistent Hashing我们先来说说为什么要做 “一致性”Hash% n 的方法是一种最简单的 Hash 算法但是这种方法在 n 变成 n+1 的时候,每个 key % n和 % (n+1) 结果基本上都不一样所以这个 Hash 算法可以称之为:不一致 hashWeb Server0 3 6 93 7
3、1192 6 10DB0DB1DB2DB0DB1DB2DB3第5页与,否则将法律责任和赔偿Consistent Hashing一个简单的一致性Hash算法将 key 模一个很大的数,比如 360将 360 分配给 n 台,每个负责一段区间为一张表存在 Web Server 上区间分配信息新加一台的时候,在表中选择一个位置,匀走相邻两台的一部分数据比如 n 从 2 变化到 3,只有 1/3 的数据移动DB1: 240359DB0: 0119DB1: 180359DB0: 0179DB2: 120239第6页与,否则将法律责任和赔偿3台变4台的例子第7页与,否则将法律责任和赔偿Consistent
4、 Hashing每一次加入一台新只有1台或者2台数据库的数据会被迁移 因为要占据环上的一段区间这是一个比较简单的 Consistent Hashing 的算法提问:这种简单方法中,有什么缺陷?第8页与,否则将法律责任和赔偿缺陷1 数据分布不均匀因为算法是“将数据最多的相邻两台均匀分为三台”比如,3台变4台时,无法做到4台均匀分布第9页与,否则将法律责任和赔偿缺陷2 迁移大上获取新的数据只从两台老导致这两台老负载过大第10页与,否则将法律责任和赔偿Consistent Hashing 更实用的方法将整个 Hash 区间看做环这个环的大小从 0359 变为 0264-1将和数据都看做环上的点引入
5、Micro shards / Virtual nodes 的概念 一台实体对应 1000 个 Micro shards / Virtual nodes每个 virtual node 对应 Hash 环上的一个点,就在环上随机撒 1000 个点作为 virtual nodes每新加入一台需要计算某个 key 所在服务器时 计算该key的hash值得到0264-1的一个数,对应环上一个点 顺时针找到第一个virtual node 该virtual node 所在就是该key所在的数据库服务器新加入一台做数据迁移时 1000 个 virtual nodes 各自向顺时针的一个 virtual nod
6、e 要数据 例子:第11页与,否则将法律责任和赔偿Consistent Hashing第12页与,否则将法律责任和赔偿Replica 数据备份问:Backup 和 Replica 有什么区别?第13页与,否则将法律责任和赔偿Backup vs ReplicaBackup一般是周期性的,比如每天晚上进行一次备份当数据丢失的时候,通常只能恢复到之前的某个时间点Backup 不用作的数据服务,不分摊读Replica是实时的, 在数据写入的时候,就会以当数据丢失的时候,可以马上通过其他的品的形式存为多份品恢复Replica 用作的数据服务,分摊读思考:既然 Replica 更牛,那么还需要 Backu
7、p么?第14页与,否则将法律责任和赔偿MySQL Replica以MySQL为代表SQL型数据库,通常“自带” Master Slave 的Replica 方法Master 负责写,Slave 负责读Slave 从 Master 中同步数据第15页与,否则将法律责任和赔偿Master - Slave原理 Write Ahead LogSQL 数据库的任何操作,都会以 Log 的形式做一份比如数据A在B时刻从C改到了DSlave 被激活后,告诉master我在了Master每次有任何操作就通知 slave 来读log 因此Slave上的数据是有“延迟”的masterMaster 挂了怎么办?sl
8、ave1slave2将一台 Slave 升级 (promote) 为 Master,接受读+写可能会造成一定程度的数据丢失和不一致第16页与,否则将法律责任和赔偿NoSQL Replica以 Cassandra 为代表的 NoSQL 数据库通常将数据“顺时针”在 Consistent hashing 环上的三个 virtual nodes 中第17页与,否则将法律责任和赔偿SQL vs NoSQL in ReplicaSQL“自带” 的 Replica 方式是 Master Slave“手动” 的 Replica 方式也可以在 Consistent Hashing 环上顺时针存三份NoSQL“
9、自带” 的 Replica 方式就是 Consistent Hashing 环上顺时针存三份“手动” 的 Replica 方式:就不需要手动了,NoSQL就是在 Sharding 和 Replica 上帮你偷懒用的!第18页与,否则将法律责任和赔偿设计短系统Design Tiny URL第19页与,否则将法律责任和赔偿第20页与,否则将法律责任和赔偿回顾系统设计的常见误区流量一定巨大无比那必须是要用NoSQL了那必须是分布式系统了某同学:先来个Load Balancer,后面一堆Web Server,然后memcached,最底层NoSQL,搞定!第21页与,否则将法律责任和赔偿系统设计问题的
10、基本步骤4S 分析法1.提问:分析功能/需求/QPS/容量Scenario2. 画图:根据分析结果设计“可行解” Service+Storage3. 进化:研究可能遇到的问题,优化系统 Scale第22页与,否则将法律责任和赔偿Scenario 场景分析动起手来试试看第23页与,否则将法律责任和赔偿Scenario 场景 我要设计啥根据 Long URL 生成一个 Short URL=>第24页与,否则将法律责任和赔偿Scenario 场景 我要设计啥根据 Short URL 还原 Long URL,并跳转=>第25页与,否则将法律责任和赔偿QPS动起手来试试看,分析QPS和第26
11、页与,否则将法律责任和赔偿Scenario 需求 QPS + Storage1. 询问面试官 约100M2. 推算产生一条Tiny URL的QPS日活跃用户假设每个用户平均每天发 0.1 条带 URL 的Average Write QPS = 100M * 0.1 / 86400 100 Peak Write QPS = 100 * 2 = 2002k QPS一台 SSD支持 的MySQL完全可以搞定3. 推算点击一条Tiny URL的QPS假设每个用户平均点1个Tiny URLAverage Read QPS = 100M * 1 / 86400 1k Peak Read QPS = 2k4
12、. 推算每天产生的新的 URL 所占100M * 0.1 10M 条每一条 URL 长度平均 100 算,一共1G 1T 的硬盘可以用 3 年第27页与,否则将法律责任和赔偿Service 服务该系统比较简单,只有一个 ServiceURL Service第28页与,否则将法律责任和赔偿Service 服务 逻辑块聚类与接口设计TinyUrl只有一个UrlService 本身就是一个小Application 无需关心其他的函数设计UrlService.encong_url)UrlService.decode(short_url)端口设计GET /<short_url> return
13、 a Http redirect responsePOST /data/shorten/Data = url:Return short url第29页与,否则将法律责任和赔偿Tiny URL 里程碑场景分析:要做什么功能需求分析:QPS和Storage应用服务:UrlService第30页与,否则将法律责任和赔偿Storage 数据存取数据如何与第一步:Select 选结构第二步:Schema 细化数据表第31页与,否则将法律责任和赔偿SQL or NoSQL选什么?标准是什么?第32页与,否则将法律责任和赔偿SQL vs NoSQL 到底怎么选?是否需要支持 Transaction? NoS
14、QL不支持Transaction是否需要丰富的 SQL Query? NoSQL的SQL Query不是太丰富 也有一些NoSQL的数据库提供简单的SQL Query支持是否想偷懒? 大多数 Web Framework 与 SQL 数据库兼容得很好 用SQL比用NoSQL少写很多代码是否需要Sequential ID?SQL 为你提供了 auto-increment 的 Sequential ID也就是1,2,3,4,5 NoSQL的ID并不是 Sequential 的第33页与,否则将法律责任和赔偿SQL vs NoSQL 到底怎么选?对QPS的要求有多高? NoSQL 的性能更高对Scal
15、ability的要求有多高?SQL 需要码农写代码来 Scale 还记得Db那节课中怎么做 Sharding,Replica 的么?NoSQL 这些都帮你做了所以Tiny URL用什么比较合适?第34页与,否则将法律责任和赔偿Storage 数据如何与是否需要支持 Transaction?不需要。NoSQL +1是否需要丰富的 SQL Query?不需要。NoSQL +1是否想偷懒?Tiny URL 需要写的代码并不复杂。NoSQL+1对QPS的要求有多高? 经计算,2k QPS并不高,而且2k读可以用Cache,写很少。SQL +1对Scalability的要求有多高?和QPS要求都不高,单
16、机都可以搞定。SQL+1是否需要Sequential ID? 取决于你的算法是什么第35页与,否则将法律责任和赔偿算法是什么?如何将 Long Url 转换为一个 6位的 Short Url?第36页与,否则将法律责任和赔偿算法1 使用函数 Hash Function(不可行)比如取 Long Url 的 MD5 的最后 6 位只是打个比方,这个方法肯定是有问题的啦优点:快缺点:难以设计一个没有的算法第37页与,否则将法律责任和赔偿算法2 随机生成ShortURL + 数据库去重随机一个 6 位的 ShortURL,如果没有被用过,就绑定到该 LongURL伪代码如下:优点:实现简单缺点:生成
17、短的速度随着短越来越多变得越来越慢第38页与,否则将法律责任和赔偿算法3 进制转换 Base62Base62将 6 位的short url看做一个62进制数(0-9, a-z, A-Z)每个short url 对应到一个整数该整数对应数据库表的Primary Key Sequential ID6 位可以表示的不同 URL 有多少? 5 位 = 625 = 0.9B = 9 亿 6 位 = 626 = 57 B = 570 亿 7 位 = 627 = 3.5 T = 35000 亿优点:效率高缺点:依赖于全局的自增ID第39页与,否则将法律责任和赔偿随机生成 vs 进制转换幸福二选一第40页与,
18、否则将法律责任和赔偿基于随机生成的方法需要根据 LongShort,也需要根据 ShortLong。如果选择用 SQL 型数据库,表结构如下:并且需要对 shortKey 和 longURL 分别建索引(index)。什么是索引? 索引的原理?第41页与,否则将法律责任和赔偿shortKeylongUrla0B4LbDf523Pdao80FQFD8oq基于随机生成的方法也可以选用 NoSQL 数据库,但是需要建立两张表(大多数NoSQL数据库不支持以 Cassandra 为例子索引)第一张表:根据 LongShortrow_key=longURL, column_key=ShortURL, v
19、alue=null or timestamp第二张表:根据 ShortLongrow_key=shortURL, column_key=LongURL, value=null or timestamp第42页与,否则将法律责任和赔偿基于随机生成方法的 Work Solution1. check long urlshortentrue/false2. insert new urlWeb ServerURL Tablereturn short urlget1. check short urlWeb ServerURL Tablelong urlreturn http 301 redirect第43
20、页与,否则将法律责任和赔偿基于进制转换的方法因为需要用到自增ID(Sequential ID),因此只能选择使用 SQL 型数据库。表单结构如下,shortURL 可以不在表单里,因为可以根据 id 来进行换算第44页与,否则将法律责任和赔偿idlongUrl (index=true)1234基于进制转换方法的Work Solution1. check long urlshortentrue/false2. insert new urlWeb ServerURL Tablereturn idget1. check short urlWeb ServerURL Tablelong urlretu
21、rn http 301 redirect第45页与,否则将法律责任和赔偿Tiny URL 里程碑场景分析:要做什么功能需求分析:QPS和Storage应用服务:UrlService数据分析:选SQL还是NoSQL 数据分析:细化数据库表得到一个Work Solution第46页与,否则将法律责任和赔偿先休息5分钟,然后下半节的内容,你基本要开始教大家弹指神通了不到期中问卷第47页与,否则将法律责任和赔偿Scale 进化Tiny URL 有什么可以优化的地方?第48页与,否则将法律责任和赔偿Interviewer: How to reduce response time?如何提高响应速度?说说看
22、有哪些地方可以?提高读的速度还是写的速度?第49页与,否则将法律责任和赔偿Scale 如何提速利用缓存提速(Cache Aside)缓存里需要存两类数据:long to short(生成新 short url 时需要)short to long(short url 时需要)画一下生成新URL时的流程图小练习:getWeb Serverreturn http 301 redirectURL Table (MySQL)第50页与,否则将法律责任和赔偿MemcachedTiny URL 里程碑场景分析:要做什么功能需求分析:QPS和Storage应用服务:UrlService数据分析:选SQL还是N
23、oSQL 数据分析:细化数据库表得到一个Work Solution提高Web服务器与数据服务器之间的效率:利用缓存提高读请求的效率第51页与,否则将法律责任和赔偿Scale 如何提速利用地理位置信息提速优化服务器速度 不同的地区,使用不同的 Web 服务器 通过DNS不同地区的用户到不同的服务器优化数据速度使用Centralized MySQL+Distributed Memcached一个MySQL配多个Memcached,Memcached跨地区分布第52页与,否则将法律责任和赔偿Scale 如何提速Shared DB第53页与,否则将法律责任和赔偿CNDNSWeb ServerMemca
24、chedUSADNSWeb ServerMemcachedTiny URL 里程碑场景分析:要做什么功能需求分析:QPS和Storage应用服务:UrlService数据分析:选SQL还是NoSQL 数据分析:细化数据库表得到一个Work Solution提高Web服务器与数据服务器之间的效率:利用缓存提高读请求的效率提高用户与服务器之间的效率:解决了中国用户美国服务器慢的问题第54页与,否则将法律责任和赔偿* Interviewer: How to scale?假如我们一开始估算错了,一台MySQL搞不定了第55页与,否则将法律责任和赔偿Scale 如何扩展?什么时候需要多台数据库服务器?C
25、ache不够DB 0写操作越来越多越来越多的请求无法通过 Cache 满足Web Server增加多台数据库服务器可以优化什么?解决“存不下”的问题 Storage的角度解决“忙不过”的问题 QPS的角度Tiny URL 主要是什么问题?DB 1Web ServerDB 2如何将数据分配到多台?DB 3第56页与,否则将法律责任和赔偿Scale 如何扩展?Vertical Sharding 将多张数据表分别分配给多台 Tiny URL 并不适用DB 0Horizontal ShardingWeb Server用什么做Sharding Key?如果用 ID,如何Long Url?DB 1如果用L
26、ong Url,如何ID?用什么做 Sharding Key?Web ServerDB 2DB 3第57页与,否则将法律责任和赔偿Scale 如何扩展?用 Long URL 做 shard key的时候,只能广播给N台数据库QPS的问题并不解决降低每台用 ID 做 shard key按照 ID % N(N为数据服务器个数),来分配Short url to long url将 short url 转换为 ID根据 ID 找到数据库到 long url在该数据库中Long url to short url先:广播给 N 台数据库,是否存在 看起来有点耗,不过也是可行的,因为数据库服务器:如果不存在
27、的话,获得下一个自增 ID 的值,太多对应数据库再第58页与,否则将法律责任和赔偿Scale 全局自增ID如何获得在N台服务器中全局共享的一个自增ID是一个难点一种解决办法是,专门用一台数据库来做自增ID服务Read more: 该数据库不真实数据,也不负责其他 为了避免单点失效(Single Point Failure) 可能需要多台数据库另外一种解决办法是用 Zookeeper使用全局自增ID的方法并不是解决 Tiny URL 的最佳方法故不展开讨论全局自增ID的细节,那到底怎么做?第59页与,否则将法律责任和赔偿Scale 扩展SHORT KEY如果最开始,short key 为6位,下
28、面为short key增加 1 位前置位 AB1234 0AB1234 还有一种做法是把第1位单独留出来做 sharding key,总共还是6位该前置位的值由 Hash(long_url) % 62 得到该前置位则为 sharding keyConsistent Hashing 相关练习将环分为62个区间每台在环上负责一段区间这样我们就可以同时通过 short_url 和 long_url 得到 Sharding Key无需广播无论是short2long还是long2short 都可以直接找到数据所在服务器Read more:Read more:第60页与,否则将法律责任和赔偿Scale 目
29、前的架构Consistent Hashing 的Mapping 表存于每台 Web Server 上,hard code在代码里第61页与,否则将法律责任和赔偿CNDNSWeb ServerMemcachedShared DBShared DBShared DBShared DB 0123USADNSWeb ServerMemcachedTiny URL 里程碑场景分析:要做什么功能需求分析:QPS和Storage应用服务:UrlService数据分析:选SQL还是NoSQL 数据分析:细化数据库表得到一个Work Solution提高Web服务器与数据服务器之间的效率:利用缓存提高读请求的效
30、率提高用户与服务器之间的效率:解决了中国用户美国服务器慢的问题解决流量继续增大一台数据库服务器的问题:将数据分配到多台服务器第62页与,否则将法律责任和赔偿* Interviewer: 还有可以优化的么?第63页与,否则将法律责任和赔偿Scale Multi Region 的进一步优化上图的架构中,还存在优化空间的地方是 服务器 (Web Server) 与 数据库服务器 (Database) 之间的通信 中心化的服务器集群(Centralized DB set)与 跨地域的 Web Server 之间通信较慢 比如中国的服务器需要那么何不让中国的服务器美国的数据库中国的数据库?如果数据是重复
31、写到中国的数据库,那么如何解决一致性问题? 很难解决用户习惯想时,会被DNS分配中国的服务器中国的用户中国的用户的一般都是中国的的地域信息进行 Sharding所以我们可以按照 如何获得中国的用户的地域信息?只需要将用户比较常的弄一张表就好了美国的怎么办?美国的数据好了,反正也那就让中国的服务器慢多少中国中国是主流需求,优化系统就是要优化主要的需求第64页与,否则将法律责任和赔偿Scale 最终的架构第65页与,否则将法律责任和赔偿CNDB CNDNSWeb ServerMemcachedUSADNSWeb ServerDB USAMemcachedTiny URL 里程碑场景分析:要做什么功
32、能需求分析:QPS和Storage应用服务:UrlService数据分析:选SQL还是NoSQL 数据分析:细化数据库表得到一个Work Solution提高Web服务器与数据服务器之间的效率:利用缓存提高读请求的效率提高用户与服务器之间的效率:解决了中国用户美国服务器慢的问题提高QPS,将数据分配到多台服务器:解决流量继续增大一台数据库服务器的问题提高中国的Web服务器与美国的数据库服务器通信较慢的问题:按照地域信息进行Sharding第66页与,否则将法律责任和赔偿* Interviewer: How to provide custom url?=>=>第67页与,否则将法律责
33、任和赔偿Scale 自定义的短自定义URL新建一张表CustomURLTable长先再CustomURLTable URLTable创建普通短CustomURLTable是否存在根据长先再在URLTable中和创新自定义短错误的想法:是否已经在URLTable中存在在URLTable中加一个column 大部分数据这一项都会是空 再在CustomURLTable中和课后练习:第68页与,否则将法律责任和赔偿custom_urllong_url (index=true)ggfbjzTiny URL 设计总结场景分析:要做什么功能需求分析:QPS和Storage应用服务:UrlService数据分
34、析:选SQL还是NoSQL 数据分析:细化数据库表得到一个Work Solution提高Web服务器与数据服务器之间的 利用缓存提高读请求的效率Scenario: 各种问面试官问题,搞清楚要干嘛Service + Storage:根据问到的内容进行分析得到一个基本可以work的方案效率提高用户与服务器之间的效率 解决了中国用户美国服务器慢的问题提高QPS,将数据分配到多台服务器 解决流量继续增大一台数据库服务器Scale的问题提高中国的Web服务器与美国的数据库服务器通信较慢的问题 按照地域信息进行Sharding提供 Custom URL 的功能follow up第69页与,否则将法律责任和
35、赔偿重要的事情说N遍系统设计没有标准,言之有理即可设计一个可行解比抛出Fancy的概念更有用第70页与,否则将法律责任和赔偿课后作业思考题:请基于随机生成的算法,设计一整套系统假如同一个 Long URL 可以对应到不用的 Short URL,请根据这个特性优化你的系统架构。是否需要长久保存 ShortURL?好处是什么,坏处是什么?如果一个 short URL 被疯狂和点击,会出现什么情况?以及如何避免这种情况带来的麻烦?编程题:第71页与,否则将法律责任和赔偿今天我们学会了什么?两个系统设计的 General Questions How to sharding? How to replica?一个超高频的系统设计面试题 Design Tiny URL从题目之中我们学会的:SQL 和 NoSQL 的选择标准读比较多的话,可以用 Memcached 来优化写比较多的话,可以拆分数据库 Vertical Sharding / Horizontal Sharding Consisten
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年VB考试难点试题及答案剖析
- 企业波动与战略调整的风险管理试题及答案
- 软件生命周期管理最佳实践试题及答案
- 行政法学的学术贡献与试题答案探讨
- 软件设计师考试系统化知识体系试题及答案
- 2025年商业环境对企业战略决策的影响试题及答案
- 具体案例2025年法学概论考试试题及答案
- 2025年市场变化与企业战略修正的挑战试题及答案
- 高考数学研究分析方法试题及答案
- 行政管理知识点的深入梳理:试题及答案
- 黑龙江省自然科学基金项目申请书联合引导项目JJSBYB
- 英国食物介绍british-food(课堂)课件
- 神经系统疾病的康复课件
- DB32 4181-2021 行政执法案卷制作及评查规范
- 涉密文件借阅登记表
- 脊髓损伤康复讲义
- 布草洗涤服务方案完整版
- 气体安全知识培训(72张)课件
- 电子类产品结构设计标准-
- 音乐神童莫扎特详细介绍和作品欣赏课件
- 共线向量与共面向量全面版课件
评论
0/150
提交评论