GeekBand C++ Week12 Notes

系統(tǒng)設(shè)計(jì)與實(shí)踐

系統(tǒng)設(shè)計(jì)介紹

短URL設(shè)計(jì)

設(shè)計(jì)一個(gè)系統(tǒng)把用戶提供的URL轉(zhuǎn)換為短的URL,訪問的時(shí)候要跳回到原始的URL关炼,在系統(tǒng)設(shè)計(jì)的面試?yán)锍谈梗绾卧u(píng)價(jià)一個(gè)系統(tǒng)設(shè)計(jì),一分到四分

第一級(jí):

設(shè)計(jì)一個(gè)數(shù)據(jù)庫(kù)來(lái)映射關(guān)系儒拂,從短URL到原始的URL寸潦。

有哪些不好的地方?

從原始的URL返回一個(gè)5位的編碼社痛,不是五位的用0補(bǔ)充见转。

能不能擴(kuò)充,返回的ID為什么都是0到9蒜哀?

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

第二級(jí):

Key-Value DB

MySQL is slow

Key-Value模型做了很多簡(jiǎn)化,提升了性能,是MySQL的10倍以上

有沒有其他辦法產(chǎn)生呢乘客?

URL->md5(128bits)

Base64->6bits

Truncate(md5(URL), 5)

第三級(jí):

考慮到擴(kuò)展性和可靠性

Multiple Servers(Memcache/DB)

Sharding: hash(URL) % N = Server ID

Standby

Reliability

Replica(cross region, master slave)

Recovery(master: checkpoints, slave:recreate)

Consistency:一致性赊抖,在分布式當(dāng)中,某一個(gè)節(jié)點(diǎn)還沒有同步完成寨典,從A和B中讀出來(lái)有誤差

第四級(jí):

從chunk中分到一個(gè)cluster氛雪,id generator(zookeeper)

怎么避免URL被重復(fù)地訪問和爬蟲(有些網(wǎng)站不想要被爬取),可以在內(nèi)部把字符串打亂

怎么限制單一用戶RPS耸成,strategy?

流量控制

怎么實(shí)現(xiàn)重定向的思路报亩?

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

Reak key in memcache: key+timestamp(inminute)

Value:counter

Expiration:/m,/h,/d

Memcache內(nèi)存

Redis內(nèi)存+磁盤井氢,定時(shí)從內(nèi)存flush

Nosqul database

Sql database

Ratelimit

使用cache帶上過期銷毀信息弦追,一個(gè)小時(shí)后銷毀,但算法會(huì)出錯(cuò)

系統(tǒng)設(shè)計(jì)七劍客:

同步

網(wǎng)絡(luò)

數(shù)據(jù)庫(kù)

分布式

性能

估算

面向?qū)ο?/p>

案例-社交網(wǎng)絡(luò)信息流

日志統(tǒng)計(jì)

網(wǎng)絡(luò)爬蟲

電商產(chǎn)品頁(yè)面

concurrency

thread vs. process

consumer and producer

blockingqueue

tracking:

synchronized, asynchronized

操作系統(tǒng)里面程序運(yùn)行的系統(tǒng)單位花竞,一個(gè)程序至少有一個(gè)進(jìn)程劲件,一個(gè)進(jìn)程至少有一個(gè)線程,進(jìn)程的劃分比較小约急,一個(gè)進(jìn)程有獨(dú)立的內(nèi)存單位零远,但多個(gè)線程可以共享內(nèi)存,每一個(gè)獨(dú)立的線程有入口厌蔽,序列和程序的出口牵辣,操作系統(tǒng)會(huì)用進(jìn)程的調(diào)度管理來(lái)分配,進(jìn)程是數(shù)據(jù)集合上的活動(dòng)奴饮,是系統(tǒng)實(shí)現(xiàn)調(diào)度的單位

生產(chǎn)者和消費(fèi)者:

有限的緩沖問題纬向,多線程同步問題的案例,主要描述了兩個(gè)共享緩沖區(qū)的線程戴卜,一個(gè)叫consumer,一個(gè)叫producer逾条,生產(chǎn)者生產(chǎn)一定數(shù)據(jù)到緩沖區(qū),消費(fèi)者負(fù)責(zé)消費(fèi)投剥,生產(chǎn)者不會(huì)在緩沖區(qū)滿的時(shí)候加入师脂,消費(fèi)者不會(huì)在空的時(shí)候的消費(fèi)

blockingqueue

給定了一個(gè)queue的結(jié)構(gòu),普通的queue先入先出薇缅,但空的時(shí)候要等待危彩,滿的時(shí)候不能push,queue的基本操作泳桦,有move和add汤徽,有maxSize,,如果有兩個(gè)同時(shí)去操作的話灸撰,有保護(hù)谒府,在函數(shù)起始位置有l(wèi)ock,末尾有unlock.當(dāng)queue是空的時(shí)候拼坎,que就一直在等待,

tracking相關(guān)的完疫,記錄一個(gè)事件是不是被記錄下來(lái)枢步,

兩種做法一種是同步的近弟,一種是異步的腌乡,當(dāng)你去訪問一個(gè)服務(wù)的時(shí)候是一個(gè)get請(qǐng)求斩启,異步的方式,放入緩沖區(qū)芳誓,做一種積累余舶,log aggregator,每隔一段時(shí)間去刷新到磁盤上面锹淌,好處是一方面降低系統(tǒng)復(fù)雜度匿值,另一方面可以加一些實(shí)時(shí)的分析系統(tǒng)。

網(wǎng)絡(luò)結(jié)構(gòu)

OSI

Application layer

Presentation layer

Session layer

Transport layer

Networklayer

Data link layer

Physical layer

在頭部會(huì)加一些mate data

應(yīng)用層有HTTP協(xié)議赂摆,1.1

傳輸層:TCP,UDP

網(wǎng)絡(luò)層IP

TCP是一個(gè)可靠的穩(wěn)定的鏈接挟憔,UDP不太可靠,到物理層會(huì)通過路由傳輸?shù)搅硗庖慌_(tái)機(jī)子上去烟号,然后會(huì)一層層往上解壓

Visit URL

當(dāng)你輸入一個(gè)URL后發(fā)生了哪些事情

先要鏈接到遠(yuǎn)端的服務(wù)器绊谭,然后發(fā)送請(qǐng)求到服務(wù)器,尋址和建立鏈接褥符,首先你要做一個(gè)尋址龙誊,如果瀏覽器中存在URL的IP抚垃,就直接訪問喷楣,否則要訪問DNS,尋址加上域名找到IP鹤树,域名是一個(gè)分層的結(jié)果铣焊,頂級(jí)域名,DNS會(huì)返回服務(wù)器的地址罕伯,第三步就是瀏覽器會(huì)建立三次握手建立TCP的鏈接曲伊,網(wǎng)頁(yè)服務(wù)默認(rèn)端口是80端口,第四部是瀏覽器和服務(wù)器的會(huì)話追他,接受數(shù)據(jù)坟募,第五步是瀏覽器解析數(shù)據(jù)并渲染展示網(wǎng)頁(yè),瀏覽器關(guān)閉的時(shí)候會(huì)終止對(duì)話并把鏈接關(guān)閉邑狸。

數(shù)據(jù)庫(kù)Database

relational DB vs. Key value store

sharding vs. clustering

以前關(guān)聯(lián)是主流懈糯,結(jié)構(gòu)化和數(shù)據(jù)模型,交易的安全性要求非常高

KV store在很多社交網(wǎng)站单雾,發(fā)了很多信息是對(duì)象的存儲(chǔ)赚哗,是一個(gè)靜態(tài)的過程她紫,不需要做很多關(guān)聯(lián)。

分片和集群的比較屿储,一臺(tái)數(shù)據(jù)庫(kù)的容量有限贿讹,單個(gè)表的承受在一千萬(wàn)左右,超過一千萬(wàn)實(shí)現(xiàn)的性能比較差够掠,需要拿到更大的數(shù)據(jù)量需要拆表民褂,垂直拆和水平拆,取摸然后分配到不同的機(jī)器上面去疯潭,第二種是clustering,是一個(gè)自動(dòng)管理的東西助赞,會(huì)自動(dòng)維護(hù),有協(xié)調(diào)者袁勺,知道哪個(gè)服務(wù)器的復(fù)雜量的高低雹食,每次先訪問協(xié)調(diào)者,然后返回一個(gè)服務(wù)器地址期丰。

聽起來(lái)很好群叶,加一臺(tái)數(shù)據(jù)庫(kù)會(huì)告訴你,在真正的工業(yè)中sharding更多一點(diǎn)钝荡,算法設(shè)計(jì)不好的話本來(lái)負(fù)荷就很高街立,給更多的壓力,一旦發(fā)現(xiàn)問題的話sharding能做問題的定位和處理埠通,在做tinyURL的時(shí)候也用到了數(shù)據(jù)庫(kù)的結(jié)構(gòu)赎离,怎么拿到code,url, created_at,要加一個(gè)索引。

分布式

怎么規(guī)亩巳瑁化tinyurl梁剔,一個(gè)是對(duì)于前段的服務(wù)可以用load balancer,給前端服務(wù)做均衡,當(dāng)某一臺(tái)機(jī)器做了一個(gè)轉(zhuǎn)移之后還能做

第二個(gè)是把服務(wù)器sharding化舞蔽。

第三步提高性能荣病,每一層都可以加一些cache,相當(dāng)于把讀的請(qǐng)求給緩存住,大大減輕服務(wù)器的壓力渗柿。

然后對(duì)寫的流量也要給做一個(gè)平衡化个盆。

原來(lái)只能寫到集中一臺(tái)的對(duì)象,現(xiàn)在能寫到某一個(gè)服務(wù)器上的數(shù)據(jù)庫(kù)朵栖。

如何做一個(gè)tracking可以在本地做一個(gè)緩沖颊亮,異步刷新到message queue上去。

Performance性能

Numbers evetyone should know

訪問效率陨溅,cache 0.5ns

硬盤千萬(wàn)納秒級(jí)

閃存终惑,壽命比磁盤小一些,比較適合做隨機(jī)声登,磁盤適合做順序

Estimation

全世界范圍內(nèi)有多少調(diào)音師

tinyURL總的存儲(chǔ)大小

URL長(zhǎng)度10-1000字符

設(shè)計(jì)模式

MVC狠鸳,網(wǎng)絡(luò)系統(tǒng)中揣苏,后端數(shù)據(jù)叫模型層,前段叫View,中間叫Controller

Singleton只有一個(gè)實(shí)例件舵,能使用一些方式來(lái)初始化這個(gè)實(shí)例

Factory

Iterator

Decorator

Fa?ade

案例

news feeds

stats server

web crawler

amazon product page

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末卸察,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子铅祸,更是在濱河造成了極大的恐慌坑质,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件临梗,死亡現(xiàn)場(chǎng)離奇詭異涡扼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)盟庞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門吃沪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人什猖,你說我怎么就攤上這事票彪。” “怎么了不狮?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵降铸,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我摇零,道長(zhǎng)推掸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任驻仅,我火速辦了婚禮谅畅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘雾家。我一直安慰自己铃彰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布芯咧。 她就那樣靜靜地躺著,像睡著了一般竹揍。 火紅的嫁衣襯著肌膚如雪敬飒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天芬位,我揣著相機(jī)與錄音无拗,去河邊找鬼。 笑死昧碉,一個(gè)胖子當(dāng)著我的面吹牛英染,可吹牛的內(nèi)容都是我干的揽惹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼四康,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼搪搏!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起闪金,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤疯溺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后哎垦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體囱嫩,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年漏设,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了墨闲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡郑口,死狀恐怖损俭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情潘酗,我是刑警寧澤杆兵,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站仔夺,受9級(jí)特大地震影響琐脏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缸兔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一日裙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惰蜜,春花似錦昂拂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至财著,卻和暖如春联四,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撑教。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工朝墩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伟姐。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓收苏,卻偏偏與公主長(zhǎng)得像亿卤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鹿霸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理排吴,服務(wù)發(fā)現(xiàn),斷路器杜跷,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 1傍念、memcache的概念? Memcache是一個(gè)高性能的分布式的內(nèi)存對(duì)象緩存系統(tǒng)葛闷,通過在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨...
    桖辶殤閱讀 2,235評(píng)論 2 12
  • 問題導(dǎo)讀: 1.如何構(gòu)建高并發(fā)電商平臺(tái)架構(gòu) 2.哈希憋槐、B樹、倒排淑趾、bitmap的作用是什么阳仔? 3.作為軟件工程師,...
    MaLiang閱讀 5,122評(píng)論 1 70
  • 一扣泊、 設(shè)計(jì)理念 1.空間換時(shí)間 1)多級(jí)緩存近范,靜態(tài)化 客戶端頁(yè)面緩存(http header中包含Expires/...
    帥T閱讀 3,610評(píng)論 1 15
  • 最讓人感到愉悅的時(shí)候,莫過于夏天——微風(fēng)輕輕拂過延蟹,帶動(dòng)著樹葉“嘩嘩”作響评矩。清風(fēng)掠過絲絲長(zhǎng)發(fā),瞇著眼眼阱飘,享受著這美好...
    Sty兮城閱讀 142評(píng)論 0 0