GeekBand C++ Week12 Notes

系统设计与实践

系统设计介绍

短URL设计

设计一个系统把用户提供的URL转换为短的URL,访问的时候要跳回到原始的URL,在系统设计的面试里,如何评价一个系统设计,一分到四分

第一级:

设计一个数据库来映射关系,从短URL到原始的URL。

有哪些不好的地方?

从原始的URL返回一个5位的编码,不是五位的用0补充。

能不能扩充,返回的ID为什么都是0到9?

在Cache里面搜索,Read/Write rate LRU和LFU

第二级:

Key-Value DB

MySQL is slow

Key-Value模型做了很多简化,提升了性能,是MySQL的10倍以上

有没有其他办法产生呢?

URL->md5(128bits)

Base64->6bits

Truncate(md5(URL), 5)

第三级:

考虑到扩展性和可靠性

Multiple Servers(Memcache/DB)

Sharding: hash(URL) % N = Server ID

Standby

Reliability

Replica(cross region, master slave)

Recovery(master: checkpoints, slave:recreate)

Consistency:一致性,在分布式当中,某一个节点还没有同步完成,从A和B中读出来有误差

第四级:

从chunk中分到一个cluster,id generator(zookeeper)

怎么避免URL被重复地访问和爬虫(有些网站不想要被爬取),可以在内部把字符串打乱

怎么限制单一用户RPS,strategy?

流量控制

怎么实现重定向的思路?

速率限制:可以用memcache,key是IP,Username/Email, UserId(logged in)

Reak key in memcache: key+timestamp(inminute)

Value:counter

Expiration:/m,/h,/d

Memcache内存

Redis内存+磁盘,定时从内存flush

Nosqul database

Sql database

Ratelimit

使用cache带上过期销毁信息,一个小时后销毁,但算法会出错

系统设计七剑客:

同步

网络

数据库

分布式

性能

估算

面向对象

案例-社交网络信息流

日志统计

网络爬虫

电商产品页面

concurrency

thread vs. process

consumer and producer

blockingqueue

tracking:

synchronized, asynchronized

操作系统里面程序运行的系统单位,一个程序至少有一个进程,一个进程至少有一个线程,进程的划分比较小,一个进程有独立的内存单位,但多个线程可以共享内存,每一个独立的线程有入口,序列和程序的出口,操作系统会用进程的调度管理来分配,进程是数据集合上的活动,是系统实现调度的单位

生产者和消费者:

有限的缓冲问题,多线程同步问题的案例,主要描述了两个共享缓冲区的线程,一个叫consumer,一个叫producer,生产者生产一定数据到缓冲区,消费者负责消费,生产者不会在缓冲区满的时候加入,消费者不会在空的时候的消费

blockingqueue

给定了一个queue的结构,普通的queue先入先出,但空的时候要等待,满的时候不能push,queue的基本操作,有move和add,有maxSize,,如果有两个同时去操作的话,有保护,在函数起始位置有lock,末尾有unlock.当queue是空的时候,que就一直在等待,

tracking相关的,记录一个事件是不是被记录下来,

两种做法一种是同步的,一种是异步的,当你去访问一个服务的时候是一个get请求,异步的方式,放入缓冲区,做一种积累,log aggregator,每隔一段时间去刷新到磁盘上面,好处是一方面降低系统复杂度,另一方面可以加一些实时的分析系统。

网络结构

OSI

Application layer

Presentation layer

Session layer

Transport layer

Networklayer

Data link layer

Physical layer

在头部会加一些mate data

应用层有HTTP协议,1.1

传输层:TCP,UDP

网络层IP

TCP是一个可靠的稳定的链接,UDP不太可靠,到物理层会通过路由传输到另外一台机子上去,然后会一层层往上解压

Visit URL

当你输入一个URL后发生了哪些事情

先要链接到远端的服务器,然后发送请求到服务器,寻址和建立链接,首先你要做一个寻址,如果浏览器中存在URL的IP,就直接访问,否则要访问DNS,寻址加上域名找到IP,域名是一个分层的结果,顶级域名,DNS会返回服务器的地址,第三步就是浏览器会建立三次握手建立TCP的链接,网页服务默认端口是80端口,第四部是浏览器和服务器的会话,接受数据,第五步是浏览器解析数据并渲染展示网页,浏览器关闭的时候会终止对话并把链接关闭。

数据库Database

relational DB vs. Key value store

sharding vs. clustering

以前关联是主流,结构化和数据模型,交易的安全性要求非常高

KV store在很多社交网站,发了很多信息是对象的存储,是一个静态的过程,不需要做很多关联。

分片和集群的比较,一台数据库的容量有限,单个表的承受在一千万左右,超过一千万实现的性能比较差,需要拿到更大的数据量需要拆表,垂直拆和水平拆,取摸然后分配到不同的机器上面去,第二种是clustering,是一个自动管理的东西,会自动维护,有协调者,知道哪个服务器的复杂量的高低,每次先访问协调者,然后返回一个服务器地址。

听起来很好,加一台数据库会告诉你,在真正的工业中sharding更多一点,算法设计不好的话本来负荷就很高,给更多的压力,一旦发现问题的话sharding能做问题的定位和处理,在做tinyURL的时候也用到了数据库的结构,怎么拿到code,url, created_at,要加一个索引。

分布式

怎么规模化tinyurl,一个是对于前段的服务可以用load balancer,给前端服务做均衡,当某一台机器做了一个转移之后还能做

第二个是把服务器sharding化。

第三步提高性能,每一层都可以加一些cache,相当于把读的请求给缓存住,大大减轻服务器的压力。

然后对写的流量也要给做一个平衡化。

原来只能写到集中一台的对象,现在能写到某一个服务器上的数据库。

如何做一个tracking可以在本地做一个缓冲,异步刷新到message queue上去。

Performance性能

Numbers evetyone should know

访问效率,cache 0.5ns

硬盘千万纳秒级

闪存,寿命比磁盘小一些,比较适合做随机,磁盘适合做顺序

Estimation

全世界范围内有多少调音师

tinyURL总的存储大小

URL长度10-1000字符

设计模式

MVC,网络系统中,后端数据叫模型层,前段叫View,中间叫Controller

Singleton只有一个实例,能使用一些方式来初始化这个实例

Factory

Iterator

Decorator

Façade

案例

news feeds

stats server

web crawler

amazon product page

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,941评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,397评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,345评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,851评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,868评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,688评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,414评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,319评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,775评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,945评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,096评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,789评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,437评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,993评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,107评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,308评论 3 372
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,037评论 2 355

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,661评论 18 139
  • 1、memcache的概念? Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨...
    桖辶殇阅读 2,239评论 2 12
  • 问题导读: 1.如何构建高并发电商平台架构 2.哈希、B树、倒排、bitmap的作用是什么? 3.作为软件工程师,...
    MaLiang阅读 5,124评论 1 70
  • 一、 设计理念 1.空间换时间 1)多级缓存,静态化 客户端页面缓存(http header中包含Expires/...
    帅T阅读 3,612评论 1 15
  • 最让人感到愉悦的时候,莫过于夏天——微风轻轻拂过,带动着树叶“哗哗”作响。清风掠过丝丝长发,眯着眼眼,享受着这美好...
    Sty兮城阅读 144评论 0 0