版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一致性算法与短系统Consistent Hashing & Design Tiny Url课程版本 v5.1本节主讲人 东邪/扫描关注获取最新面试题及权威解答: ninechapter:知乎:官网:法律责任和本由偿社区用户整理第1页与,否则将九章的所有课程均受法律保护,不与损失一经发现,将被法律责任和赔偿法律责任本赔由社区用户整理第2页与,否则将今日课程大纲Consistent Hashing 简单的Consistent Hashing方法的回顾及缺陷分析 一个更优的 Consistent Hashing 方法RepliaSQL 通常如何进行备份NoSQL 通常如何进行备份?系统 De
2、sign Tiny Url设计一个短 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 算法可以称之为:不一
3、致 hashWeb Server0 3 6 93 7 112 6 10DB0DB1DB2DB0DB1DB2DB3法律责任本赔由社区用户整理第5页与,否则将Consistent Hashing一个简单的一致性Hash算法将 key 模一个很大的数,比如 360将 360 分配给 n 台,每个负责一段区间Web Server 上区间分配信息为一张表新加一台的时候,在表中选择一个位置,匀走相邻两台的一部分数据比如 n 从 2 变化到 3,只有 1/3 的数据移动DB1: 240359DB0: 0119DB1: 180359DB0: 0179DB2: 120239法律责任本赔由社区用户整理第6页与,否
4、则将3台变4台的例子法律责任本赔由社区用户整理第7页与,否则将Consistent Hashing每一次加入一台新只有1台或者2台数据库的数据会被迁移 因为要占据环上的一段区间这是一个比较简单的 Consistent Hashing 的算法提问:这种简单方法中,有什么缺陷?法律责任本赔由社区用户整理第8页与,否则将缺陷1 数据分布不均匀因为算法是“将数据最多的相邻两台均匀分为三台”比如,3台变4台时,无法做到4台均匀分布法律责任本赔由社区用户整理第9页与,否则将缺陷2 迁移大上获取新的数据只从两台老导致这两台老负载过大法律责任本赔由社区用户整理第10页与,否则将Consistent Hashi
5、ng 更实用的方法将整个 Hash 区间看做环这个环的大小从 0359 变为 0264-1将和数据都看做环上的点引入 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所在的数
6、据库服务器新加入一台做数据迁移时 1000 个 virtual nodes 各自向顺时针的一个 virtual node 要数据 例子:法律责任本赔由社区用户整理第11页与,否则将Consistent Hashing法律责任本赔由社区用户整理第12页与,否则将Replica 数据备份问:Backup 和 Replica 有什么区别?法律责任本赔由社区用户整理第13页与,否则将Backup vs ReplicaBackup一般是周期性的,比如每天晚上进行一次备份当数据丢失的时候,通常只能恢复到之前的某个时间点Backup 不用作的数据服务,不分摊读Replica是实时的, 在数据写入的时候,就会
7、以当数据丢失的时候,可以马上通过其他的品的形式存为多份品恢复Replica 用作的数据服务,分摊读思考:既然 Replica 更牛,那么还需要 Backup么?法律责任本赔由社区用户整理第14页与,否则将MySQL Replica以MySQL为代表SQL型数据库,通常“自带” Master Slave 的Replica 方法Master 负责写,Slave 负责读Slave 从 Master 中同步数据法律责任本赔由社区用户整理第15页与,否则将Master - Slave原理 Write Ahead LogSQL 数据库的任何操作,都会以 Log 的形式做一份比如数据A在B时刻从C改到了DS
8、lave 被激活后,告诉master我在了Master每次有任何操作就通知 slave 来读log 因此Slave上的数据是有“延迟”的masterMaster 挂了怎么办?slave1slave2将一台 Slave 升级 (promote) 为 Master,接受读+写可能会造成一定程度的数据丢失和不一致法律责任本赔由社区用户整理第16页与,否则将NoSQL Replica以 Cassandra 为代表的 NoSQL 数据库通常将数据“顺时针”在 Consistent hashing 环上的三个 virtual nodes 中法律责任本赔由社区用户整理第17页与,否则将SQL vs NoSQ
9、L in ReplicaSQL“自带” 的 Replica 方式是 Master Slave“手动” 的 Replica 方式也可以在 Consistent Hashing 环上顺时针存三份NoSQL“自带” 的 Replica 方式就是 Consistent Hashing 环上顺时针存三份“手动” 的 Replica 方式:就不需要手动了,NoSQL就是在 Sharding 和 Replica 上帮你偷懒用的!法律责任本赔由社区用户整理第18页与,否则将设计短系统Design Tiny URL法律责任和本由偿社区用户整理第19页与,否则将法律责任和本由偿社区用户整理第20页与,否则将回顾系
10、统设计的常见误区流量一定巨大无比那必须是要用NoSQL了那必须是分布式系统了某同学:先来个Load Balancer,后面一堆Web Server,然后memcached,最底层NoSQL,搞定!法律责任和本由偿社区用户整理第21页与,否则将系统设计问题的基本步骤4S 分析法1.提问:分析功能/需求/QPS/容量Scenario2. 画图:根据分析结果设计“可行解” Service+Storage3. 进化:研究可能遇到的问题,优化系统 Scale法律责任和本由偿社区用户整理第22页与,否则将Scenario 场景分析动起手来试试看法律责任和本由偿社区用户整理第23页与,否则将Scenario
11、 场景 我要设计啥根据 Long URL 生成一个 Short URL=>法律责任和本由偿社区用户整理第24页与,否则将Scenario 场景 我要设计啥根据 Short URL 还原 Long URL,并跳转=>法律责任和本由偿社区用户整理第25页与,否则将QPS动起手来试试看,分析QPS和法律责任和本由偿社区用户整理第26页与,否则将Scenario 需求 QPS + Storage1. 询问面试官 约100M2. 推算产生一条Tiny URL的QPS日活跃用户假设每个用户平均每天发 0.1 条带 URL 的Average Write QPS = 100M * 0.1 / 86
12、400 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. 推算每天产生的新的 URL 所占100M * 0.1 10M 条每一条 URL 长度平均 100 算,一共1G 1T 的硬盘可以用 3 年法律责任和本由偿社区用户整理第27页与,否则将Service 服务该系统比较简单,只有一个 ServiceURL Service法律
13、责任和本由偿社区用户整理第28页与,否则将Service 服务 逻辑块聚类与接口设计TinyUrl只有一个UrlService 本身就是一个小Application 无需关心其他的函数设计UrlService.encong_url)UrlService.decode(short_url)端口设计GET /<short_url> return a Http redirect responsePOST /data/shorten/Data = url:Return short url法律责任和本由偿社区用户整理第29页与,否则将Tiny URL 里程碑场景分析:要做什么功能需求分析:Q
14、PS和Storage应用服务:UrlService法律责任和本由偿社区用户整理第30页与,否则将Storage 数据存取数据如何与第一步:Select 选结构第二步:Schema 细化数据表法律责任和本由偿社区用户整理第31页与,否则将SQL or NoSQL选什么?标准是什么?法律责任和本由偿社区用户整理第32页与,否则将SQL vs NoSQL 到底怎么选?是否需要支持 Transaction? NoSQL不支持Transaction是否需要丰富的 SQL Query? NoSQL的SQL Query不是太丰富 也有一些NoSQL的数据库提供简单的SQL Query支持是否想偷懒? 大多数
15、 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 的性能更高对Scalability的要求有多高?SQL 需要码农写代码来 Scale 还记得Db那节课中怎么做 Sharding,Replica 的么?NoSQL 这些都帮你做了所以Tiny UR
16、L用什么比较合适?法律责任和本由偿社区用户整理第34页与,否则将Storage 数据如何与是否需要支持 Transaction?不需要。NoSQL +1是否需要丰富的 SQL Query?不需要。NoSQL +1是否想偷懒?Tiny URL 需要写的代码并不复杂。NoSQL+1对QPS的要求有多高? 经计算,2k QPS并不高,而且2k读可以用Cache,写很少。SQL +1对Scalability的要求有多高?和QPS要求都不高,单机都可以搞定。SQL+1是否需要Sequential ID? 取决于你的算法是什么法律责任和本由偿社区用户整理第35页与,否则将算法是什么?如何将 Long Ur
17、l 转换为一个 6位的 Short Url?法律责任和本由偿社区用户整理第36页与,否则将算法1 使用函数 Hash Function(不可行)比如取 Long Url 的 MD5 的最后 6 位只是打个比方,这个方法肯定是有问题的啦优点:快缺点:难以设计一个没有的算法法律责任和本由偿社区用户整理第37页与,否则将算法2 随机生成ShortURL + 数据库去重随机一个 6 位的 ShortURL,如果没有被用过,就绑定到该 LongURL伪代码如下:优点:实现简单缺点:生成短的速度随着短越来越多变得越来越慢法律责任和本由偿社区用户整理第38页与,否则将算法3 进制转换 Base62Base6
18、2将 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页与,否则将基于随机生成的方法需要根据 LongShort,也需要根据
19、 ShortLong。如果选择用 SQL 型数据库,表结构如下:并且需要对 shortKey 和 longURL 分别建索引(index)。什么是索引?索引的原理?法律责任和本由偿社区用户整理第41页与,否则将shortKeylongUrla0B4LbDf523Pdao80FQFD8oq基于随机生成的方法也可以选用 NoSQL 数据库,但是需要建立两张表(大多数NoSQL数据库不支持以 Cassandra 为例子索引)第一张表:根据 LongShortrow_key=longURL, column_key=ShortURL, value=null or timestamp第二张表:根据 Sho
20、rtLongrow_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页与,否则将基于进制转换
21、的方法因为需要用到自增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 urlreturn http 301
22、redirect法律责任和本由偿社区用户整理第45页与,否则将Tiny URL 里程碑场景分析:要做什么功能需求分析:QPS和Storage应用服务:UrlService数据分析:选SQL还是NoSQL 数据分析:细化数据库表得到一个Work Solution法律责任和本由偿社区用户整理第46页与,否则将先休息5分钟,然后下半节的内容,你基本要开始教大家弹指神通了不到期中问卷法律责任和本由偿社区用户整理第47页与,否则将Scale 进化Tiny URL 有什么可以优化的地方?法律责任和本由偿社区用户整理第48页与,否则将Interviewer: How to reduce response t
23、ime?如何提高响应速度?说说看有哪些地方可以?提高读的速度还是写的速度?法律责任和本由偿社区用户整理第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和Stor
24、age应用服务:UrlService数据分析:选SQL还是NoSQL 数据分析:细化数据库表得到一个Work Solution提高Web服务器与数据服务器之间的效率:利用缓存提高读请求的效率法律责任和本由偿社区用户整理第51页与,否则将Scale 如何提速利用地理位置信息提速优化服务器速度 不同的地区,使用不同的 Web 服务器 通过DNS不同地区的用户到不同的服务器优化数据速度使用Centralized MySQL+Distributed Memcached一个MySQL配多个Memcached,Memcached跨地区分布法律责任和本由偿社区用户整理第52页与,否则将Scale 如何提速S
25、hared DB法律责任和本由偿社区用户整理第53页与,否则将CNDNSWeb ServerMemcachedUSADNSWeb ServerMemcachedTiny URL 里程碑场景分析:要做什么功能需求分析:QPS和Storage应用服务:UrlService数据分析:选SQL还是NoSQL 数据分析:细化数据库表得到一个Work Solution提高Web服务器与数据服务器之间的效率:利用缓存提高读请求的效率提高用户与服务器之间的效率:解决了中国用户美国服务器慢的问题法律责任和本由偿社区用户整理第54页与,否则将* Interviewer: How to scale?假如我们一开始估
26、算错了,一台MySQL搞不定了法律责任和本由偿社区用户整理第55页与,否则将Scale 如何扩展?什么时候需要多台数据库服务器?Cache不够DB 0写操作越来越多越来越多的请求无法通过 Cache 满足Web Server增加多台数据库服务器可以优化什么?解决“存不下”的问题 Storage的角度解决“忙不过”的问题 QPS的角度Tiny URL 主要是什么问题?DB 1Web ServerDB 2如何将数据分配到多台?DB 3法律责任和本由偿社区用户整理第56页与,否则将Scale 如何扩展?Vertical Sharding 将多张数据表分别分配给多台 Tiny URL 并不适用DB 0
27、Horizontal ShardingWeb Server用什么做Sharding Key?如果用 ID,如何Long Url?DB 1如果用Long 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 找到数据库到 lon
28、g url在该数据库中Long url to short url先:广播给 N 台数据库,是否看起来有点耗,不过也是可行的,因为数据库服务器太多对应数据库的话,获得下一个自增 ID 的值,再:如果不法律责任和本由偿社区用户整理第58页与,否则将Scale 全局自增ID如何获得在N台服务器中全局共享的一个自增ID是一个难点一种解决办法是,专门用一台数据库来做自增ID服务Read more: 该数据库不真实数据,也不负责其他 为了避免单点失效(Single Point Failure) 可能需要多台数据库另外一种解决办法是用 Zookeeper使用全局自增ID的方法并不是解决 Tiny URL 的
29、最佳方法故不展开讨论全局自增ID的细节,那到底怎么做?法律责任和本由偿社区用户整理第59页与,否则将Scale 扩展SHORT KEY如果最开始,short key 为6位,下面为short key增加 1 位前置位 AB1234 0AB1234 还有一种做法是把第1位单独留出来做 sharding key,总共还是6位该前置位的值由 Hash(long_url) % 62 得到该前置位则为 sharding keyConsistent Hashing 相关练习将环分为62个区间每台在环上负责一段区间这样我们就可以同时通过 short_url 和 long_url 得到 Sharding Ke
30、y无需广播无论是short2long还是long2short 都可以直接找到数据所在服务器Read more:Read more:法律责任和本由偿社区用户整理第60页与,否则将Scale 目前的架构Consistent Hashing 的Mapping 表存于每台 Web Server 上,hard code在代码里法律责任和本由偿社区用户整理第61页与,否则将CNDNSWeb ServerMemcachedShared DBShared DBShared DBShared DB 0123USADNSWeb ServerMemcachedTiny URL 里程碑场景分析:要做什么功能需求分析:
31、QPS和Storage应用服务:UrlService数据分析:选SQL还是NoSQL 数据分析:细化数据库表得到一个Work Solution提高Web服务器与数据服务器之间的效率:利用缓存提高读请求的效率提高用户与服务器之间的效率:解决了中国用户美国服务器慢的问题解决流量继续增大一台数据库服务器的问题:将数据分配到多台服务器法律责任和本由偿社区用户整理第62页与,否则将* Interviewer: 还有可以优化的么?法律责任和本由偿社区用户整理第63页与,否则将Scale Multi Region 的进一步优化优化空间的地方是 上图的架构中,还服务器 (Web Server) 与 数据库服务
32、器 (Database) 之间的通信 中心化的服务器集群(Centralized DB set)与 跨地域的 Web Server 之间通信较慢 比如中国的服务器需要那么何不让中国的服务器美国的数据库中国的数据库?如果数据是重复写到中国的数据库,那么如何解决一致性问题? 很难解决用户习惯想时,会被DNS分配中国的服务器中国的用户中国的用户的一般都是中国的的地域信息进行 Sharding所以我们可以按照 如何获得中国的用户的地域信息?只需要将用户比较常的弄一张表就好了美国的怎么办?美国的数据好了,反正也那就让中国的服务器慢多少中国中国是主流需求,优化系统就是要优化主要的需求法律责任和本由偿社区用
33、户整理第64页与,否则将Scale 最终的架构法律责任和本由偿社区用户整理第65页与,否则将CNDB CNDNSWeb ServerMemcachedUSADNSWeb ServerDB USAMemcachedTiny URL 里程碑场景分析:要做什么功能需求分析:QPS和Storage应用服务:UrlService数据分析:选SQL还是NoSQL 数据分析:细化数据库表得到一个Work Solution提高Web服务器与数据服务器之间的效率:利用缓存提高读请求的效率提高用户与服务器之间的效率:解决了中国用户美国服务器慢的问题提高QPS,将数据分配到多台服务器:解决流量继续增大一台数据库服务
34、器的问题提高中国的Web服务器与美国的数据库服务器通信较慢的问题:按照地域信息进行Sharding法律责任和本由偿社区用户整理第66页与,否则将* Interviewer: How to provide custom url?=>=>法律责任和本由偿社区用户整理第67页与,否则将Scale 自定义的短自定义URL新建一张表CustomURLTable长先再CustomURLTable URLTable创建普通短CustomURLTable是否根据长先再在URLTable中和创新自定义短错误的想法:是否已经在URLTable中在URLTable中加一个column 大部分数据这一项都
35、会是空 再在CustomURLTable中和课后练习:法律责任和本由偿社区用户整理第68页与,否则将custom_urllong_url (index=true)ggfbjzTiny URL 设计总结场景分析:要做什么功能需求分析:QPS和Storage应用服务:UrlService数据分析:选SQL还是NoSQL 数据分析:细化数据库表得到一个Work Solution提高Web服务器与数据服务器之间的 利用缓存提高读请求的效率Scenario: 各种问面试官问题,搞清楚要干嘛Service + Storage:根据问到的内容进行分析得到一个基本可以work的方案效率提高用户与服务器之间的效
36、率 解决了中国用户美国服务器慢的问题提高QPS,将数据分配到多台服务器 解决流量继续增大一台数据库服务器Scale的问题提高中国的Web服务器与美国的数据库服务器通信较慢的问题 按照地域信息进行Sharding提供 Custom URL 的功能follow up法律责任和本由偿社区用户整理第69页与,否则将重要的事情说N遍系统设计没有标准,言之有理即可设计一个可行解比抛出Fancy的概念更有用法律责任和本由偿社区用户整理第70页与,否则将课后作业思考题:请基于随机生成的算法,设计一整套系统假如同一个 Long URL 可以对应到不用的 Short URL,请根据这个特性优化你的系统架构。是否需
37、要长久保存 ShortURL?好处是什么,坏处是什么?如果一个 short URL 被疯狂和点击,会出现什么情况?以及如何避免这种情况带来的麻烦?编程题:法律责任和本由偿社区用户整理第71页与,否则将今天我们学会了什么?两个系统设计的 General Questions How to sharding? How to replica?一个超高频的系统设计面试题 Design Tiny URL从题目之中我们学会的:SQL 和 NoSQL 的选择标准读比较多的话,可以用 Memcached 来优化写比较多的话,可以拆分数据库 Vertical Sharding / Horizontal Sharding Consistent HashingMulti Region知道了不同区域之
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO 9241-161:2025 EN Ergonomics of human-system interaction - Part 161: Visual user-interface elements
- 电商网制作合同范本
- 疫情下婚宴合同范本
- 窗帘店主的合同协议
- 洗手间卫生检查表
- 签探店达人协议合同
- 电力整改后期协议书
- 电脑的内销合同范本
- 电子安装安全协议书
- 电力产权协议书范本
- 心肺协同康复护理专家共识
- 22《鸟的天堂》课件
- 香港大埔宏福苑火灾事件全解析:灾情、救援与安全启示
- 中国的矿产资源课件 -2025-2026学年八年级地理上册湘教版
- 2025年火力电厂面试题及答案
- 2025年老人70岁以上驾考三力测试题及答案
- 2025江西金融租赁股份有限公司社会招聘10人笔试考试备考试题及答案解析
- 2026广东省选调生招录1715人历年真题库含答案解析(夺冠)
- 药学专业社会实践报告3000字
- 《地方导游基础知识》课程标准
- 中西文化鉴赏智慧树知到答案章节测试2023年郑州大学
评论
0/150
提交评论