成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

數(shù)據(jù)庫的 Consistency 與 Leaky Abstraction

wanghui / 1166人閱讀

摘要:最近在學習各大互聯(lián)網(wǎng)公司是如何處理數(shù)據(jù)一致性的。目前已知的有這么幾種數(shù)據(jù)庫做到情況下的強一致性淘寶淘寶頂級科學家陽振坤微博號阿里正祥,發(fā)出一則消息。然后因為數(shù)據(jù)庫是的,內部把改動到了北美,君就可以看到消息了。

最近在學習各大互聯(lián)網(wǎng)公司是如何處理數(shù)據(jù)一致性的。因為之前從事的不是這個方向的工作,所以并非什么經(jīng)驗之談,只是一些學習筆記。所有資料來自互聯(lián)網(wǎng)。

Consistent => Eventual Consistent

這個是陳詞濫調了。很多文章已經(jīng)講過什么是CAP,什么是BASE了?;ヂ?lián)網(wǎng)業(yè)務“需要”Eventual Consistency貌似已經(jīng)是共識了。Eric Bewer最近接受的一次采訪,很好的總結了現(xiàn)狀(https://medium.com/s-c-a-l-e/google-systems-guru-explains-why-containe...)

  

You allow things to be inconsistent and then you find ways to
compensate for mistakes, versus trying to prevent mistakes altogether.

并且舉了一個金融行業(yè)的例子:ATM機與銀行是聯(lián)網(wǎng)的,當網(wǎng)絡中斷了你去ATM上取錢,ATM仍然會吐錢給你。這就說明了即便是銀行也選擇了availability而不是consistency。但是你取第二筆就會拒絕掉。

Eventual Consistent => Consistent

這是一個比前一個趨勢有趣得多的現(xiàn)象。Eventual Consistent是數(shù)據(jù)層的不負責任,把hard work上推給了應用層的開發(fā):

要么設計各種規(guī)則,去compensate邊邊角角的異常情況

要么在有限一致性約束下,work around一些設計(比如只有單key的一致性的數(shù)據(jù)庫,要一致就得放到一個key下)

我覺得有一個不太被重視的研究方向是架構的選擇與開發(fā)者的生產效率的關系:

數(shù)據(jù)庫只給你一個k/v模型,業(yè)務的邏輯的需求多種多樣,無比懷念sql啊

數(shù)據(jù)庫只有eventual consistency,要設計各種對賬邏輯去compensate,無比蛋疼啊

異步I/O到處都是callback,邏輯被切成了意大利面條啊

到處鼓吹micro service,跨服務的事務你來搞???

最近在hacker news上看到關于technical debt的文章,排第一位的不是bad code,而是unfit architecture(小孩子才分對錯)很說明了群眾的情緒 https://news.ycombinator.com/item?id=9963994

這篇文章(http://queue.acm.org/detail.cfm?ref=rss&id=2610533)詳細描述了Eventual Consistent的各種蛋疼之處:

本來評論的順序是:
Alice: 我把戒子丟了
Alice: 歐,在樓上找到了
Bob:真為你高興

從西海岸同步到東海岸的IDC之后,因為亂序和到達延遲,可能就變成這樣了

Alice:我把戒子丟了
Bob:真為你高興

暈倒,Bob這是起啥哄呢?你不要以為這個例子是編出來的哦。目前主流的解決方案是把評論合到一個key內存儲,每次跨idc同步是把一個key整體同步。評論歸屬于一個主idc,修改只在那個idc發(fā)生。要是評論超級長呢?一個key可以存儲的數(shù)據(jù)量是有上限的哦。

這個例子是SNS里為數(shù)不多需要強一致的場景。student和advisor是朋友,代表了一種授權。這種權限的變更如果不是立即生效的,就會導致用戶隱私的泄漏。

本來的順序:
student刪除了隱私圖片
student把advisor加為好友

實際的順序:
student把advisor加為好
[期間advisor可以看到student的所有圖片,包括隱私圖片]
student刪除了隱私圖片

一種更常見的形式是先把另外一個人拉黑,然后發(fā)朋友圈。這就要求關系鏈的變更不能是Eventual Consistent。

alice上傳了照片
alice創(chuàng)建了一個專輯
alice把照片整理到專輯里

實際的順序:

alice把照片整理到專輯里(這時既沒有照片,也沒有專輯)
alice創(chuàng)建了一個專輯
alice上傳了照片
最終照片沒有整理到專輯里

共同賬戶里本來有1000
cindy在idc1從共同賬戶里取了1000
dave同時在idc2從共同賬戶取了1000
兩個idc的數(shù)據(jù)同步之后發(fā)現(xiàn)賬戶的余額是-1000了

Spanner

Google Spanner 在其paper里的這段話最能說明這種反思的情緒:

  

We believe it is better to have application programmers deal with
performance problems due to overuse of transactions as bottlenecks
arise, rather than always coding around the lack of transactions

就是你可以說一致性會導致延遲上升,可以說可用性變差,但是不能直接拿走強一致這種選項。目前已知的有這么幾種數(shù)據(jù)庫做到geo replicated情況下的強一致性:

google spanner/f1

cockroachdb

淘寶 oceanbase 淘寶頂級科學家陽振坤微博號@阿里正祥,發(fā)出一則消息。“從上周五開始,淘寶/天貓/聚劃算在支付寶上的交易,100%都在OceanBase上了。你可能沒有什么感覺?!?/p>

微信 quorum kv:http://www.infoq.com/cn/presentations/weixin-background-memory-archite...

Leaky Abstraction

這些數(shù)據(jù)庫是銀彈了嗎?是不是有了這種號稱全球分布的強一致數(shù)據(jù)庫之后就不用考慮數(shù)據(jù)是分布的事實了呢?考慮這樣一個極端情況:

  

我們寫了一個x信。A君在深圳,B君在加拿大。A君給B君發(fā)了一條消息,就是在數(shù)據(jù)庫里修改了兩條記錄。然后因為數(shù)據(jù)庫是consistent的,內部把改動replicate到了北美,B君就可以看到消息了。

總感覺哪里有點不對。x信做為一個類似的電話公司的機構,兩個用戶跨大洋的通信居然不是其業(yè)務層的邏輯(比如長途費啥的),而是由底層的數(shù)據(jù)庫部門來完成。這不是很奇怪的事情么?更極端的假設

  

我們寫了一個y信,可以在地球和kepler 452b之間進行通信。A君在地球,B君在4000光年外的kepler
452b上。A向B上發(fā)消息就是修改了兩條數(shù)據(jù)庫記錄,因為數(shù)據(jù)庫是consistent的,B君就收到了。

這就顯然不對了。我們知道星際間的通信絕對不可能被一個consistent的假象屏蔽掉的。說到底,數(shù)據(jù)庫怎么也是一個leaky abstraction

你可以提供一個consistent的假象,但是必須明白這背后的是至少一個跨idc的rtt的延時代價

你可以提供一個全球分布的假象,到頭來什么用戶的數(shù)據(jù)放在哪個idc是業(yè)務決定(就近訪問降低延遲,另外也有法律規(guī)定)也不是數(shù)據(jù)庫的決定

因為光速的不可超越,所以大部分不要求強一致的場景(比如關系鏈變更v.s.消息收發(fā))還是要用queue的方式去做。只是這個queue一定是database的replication queue,還是業(yè)務層的event queue的區(qū)別而已。一個通信企業(yè),其核心的跨洋通信管道是database replication queue,都不算業(yè)務邏輯,你感受一下這和當年用Database trigger寫業(yè)務邏輯的區(qū)別

所以哪怕有spanner:

用做一種高級的容災工具

偶爾在需要全局強一致的情況下,做橫跨大洋的事務

大部分的事務是在同一個zone內的,zone間的通信仍然是業(yè)務邏輯可見的queue

國內的企業(yè)已經(jīng)利用spanner類似的工具可以做到同城三園區(qū)強一致容災了,跨城仍然是eventual consistent的,部分業(yè)務場景特殊work around

google利用spanner已經(jīng)可以做到北美東西南三片區(qū)強一致容災了,猜測其真正需要跨大洋的事務用途還是很少的

最后再次強調一下

因為之前從事的不是這個方向的工作,所以并非什么經(jīng)驗之談,只是一些學習筆記。所有資料來自互聯(lián)網(wǎng)。

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/11722.html

相關文章

  • 數(shù)據(jù)庫 Consistency Leaky Abstraction

    摘要:最近在學習各大互聯(lián)網(wǎng)公司是如何處理數(shù)據(jù)一致性的。目前已知的有這么幾種數(shù)據(jù)庫做到情況下的強一致性淘寶淘寶頂級科學家陽振坤微博號阿里正祥,發(fā)出一則消息。然后因為數(shù)據(jù)庫是的,內部把改動到了北美,君就可以看到消息了。 最近在學習各大互聯(lián)網(wǎng)公司是如何處理數(shù)據(jù)一致性的。因為之前從事的不是這個方向的工作,所以并非什么經(jīng)驗之談,只是一些學習筆記。所有資料來自互聯(lián)網(wǎng)。 Consistent => Ev...

    Wildcard 評論0 收藏0
  • 設計模式之橋接模式

    摘要:橋接模式中的所謂脫耦,就是指在一個軟件系統(tǒng)的抽象化和實現(xiàn)化之間使用關聯(lián)關系組合或者聚合關系而不是繼承關系,從而使兩者可以相對獨立地變化,這就是橋接模式的用意。 0x01.定義與類型 定義:將抽象部分與它的具體實現(xiàn)部分分離,使它們都可以獨立地變化。 橋接模式將繼承關系轉化成關聯(lián)關系,它降低了類與類之間的耦合度,減少了系統(tǒng)中類的數(shù)量,也減少了代碼量。 橋接模式中的所謂脫耦,就是指在一個軟...

    kycool 評論0 收藏0
  • 橋接模式(Bridge)

    摘要:橋接模式一橋接模式定義把抽象化和實現(xiàn)化解耦,使得二者可以獨立變化角色業(yè)務抽象角色業(yè)務實現(xiàn)角色二具體實現(xiàn)創(chuàng)建業(yè)務實現(xiàn)的接口創(chuàng)建業(yè)務實現(xiàn)的具體實現(xiàn)類創(chuàng)建業(yè)務抽象的抽象類創(chuàng)建業(yè)務抽象的實現(xiàn)類調用輸出三優(yōu)缺點優(yōu)點抽象與實現(xiàn)的解耦缺點增加系統(tǒng)設計難度 橋接模式 一.橋接模式 1.1 定義 把抽象化和實現(xiàn)化解耦,使得二者可以獨立變化. 1.2 角色 業(yè)務抽象角色(Implementor). 業(yè)務...

    lewinlee 評論0 收藏0
  • Google軟件工程師解讀:深度學習activation function哪家強?

    摘要:現(xiàn)為谷歌軟件工程師。盡管存在這兩個問題,目前仍是最常用的,在搭建人工神經(jīng)網(wǎng)絡的時候推薦優(yōu)先嘗試函數(shù)人們?yōu)榱私鉀Q,提出了將的前半段設為而非。 夏飛,清華大學計算機軟件學士,卡內基梅隆大學人工智能碩士?,F(xiàn)為谷歌軟件工程師。TLDR (or the take-away)優(yōu)先使用ReLU (Rectified Linear Unit) 函數(shù)作為神經(jīng)元的activation function:背景深度...

    frolc 評論0 收藏0

發(fā)表評論

0條評論

wanghui

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<