資料密集型應用系統設計 | 做自己 - 2024年11月

資料密集型應用系統設計

作者:Martin Kleppmann
出版社:歐萊禮
出版日期:2021年05月26日
ISBN:9789865028350
語言:繁體中文

  在當今的系統設計中,資料是許多挑戰的中心。需要克服各種困難,如可擴展性、一致性、可靠性、效率和可維護性。我們有各式各樣的工具可以選擇,包括關聯式資料庫、NoSQL資料儲存、串流或批次處理機以及訊息中介,又該如何做出正確的選擇?如何理解所有這些熱門詞彙? 
 
  本書深入剖析各種儲存技術的優缺點,幫助您做全面性的了解。軟體雖然一直變化,但基本的原則始終如一。本書可以幫助軟體工程師與架構師了解如何在實踐中運用這些這些理念,以及如何在現代應用中充分利用資料。 
 
  在這本實用而全面的指南中,作者Martin Kleppmann經由研究處理和儲存數據之各種技術的優缺點,幫助您一覽資料世界多樣化的景觀。雖然軟體持續演變,但基本原則始終如一。軟體工程師與架構師可以藉由本書瞭解這些基本的理念,以及如何充分應用資料的方法。 
 
  .檢視並學習如何更有效的使用與操作你正在使用的系統。 
  .了解各種工具的優缺點,並做出明智的選擇。 
  .圍繞一致性、可擴展性、容錯性和複雜性進行權衡。 
  .瞭解作為現代資料庫基礎的分佈式系統研究。 
  .探索並學習主流線上服務的架構。 
 
業界推薦 
 
  "本書的問世,是所有相關從業人員之幸。因為即便是資料庫領域的實務專家,也很少有人能像這本書這樣,能夠全面理解資料處理架構的技術全貌,更別說將這些知識一一解說和傳授給其他人。如果你對資料處理架構的設計感興趣,這本書將會是你一定要拜讀的聖經。" -- 錢逢祥(Fred Chien), 寬橋(Brobridge)技術長兼首席架構師 
 
  "這本書太棒了,填補了理論跟實務之間的空白。如果十年前就有這本書的話,我可以省掉許多摸索跟犯錯的時間。"--Jay Kreps, Apache Kafka的開發者 
 
  "軟體工程師必讀的一本書。這本書是少數能夠完美整合理論與實務的著作,可以幫助開發者做出明智的決定。"--Kevin Scott, 微軟技術長 
 
來自讀者的讚譽 
 
  "在準備面試時,這本書對於系統設計的幫助極大" 
  "程式設計師必讀之作,當你自己設計過系統,做過系統分析取捨之後,再翻開這本書會有一種醍醐灌頂的感覺。" 
  "關於資料庫,我看過最棒的一本書,作者能夠用非常簡單的方式,解釋複雜的技術,代表他對這項技術的確有深入的理解" 
  "對於技術詮釋的精采程度令人震驚!" 
  "可能是近15年來最好的技術書籍" 

作者簡介
 
Martin Kleppmann 
 
  英國劍橋大學分散式系統的研究員,曾任職於LinkedIn和Rapportive,負責大規模資料基礎架構。同時他也是位講者、部落客和開源貢獻者。


 
  如果你近幾年曾經從事過軟體工程領域的工作,特別是在伺服器和後端系統的領域,你也可能有過被大量資料儲存和資料處理的術語轟炸過的經驗。NoSQL! Big Data!Web-scale! Sharding!最終一致性! CAP 定理!雲端服務! MapReduce!即時性! 
 
  過去十來年,我們在資料庫、分散式系統以及在其上建構應用程式的方式有許多引人注目的發展。推動這些發展的因素包括: 
 
  • Google、Microsoft、Amazon、Facebook、LinkedIn、Netflix 和Twitter等網路公司都需要處理大規模的資料和流量,迫使它們創造新工具來有效處理如此大量的資料和流量。 
 
  • 企業需要夠敏捷,測試假設的成本低,而且也必須透過縮短開發週期和靈活的資料模型來快速因應新的市場洞察。 
 
  • 自由和開放原始碼的文化非常成功,現在這些軟體在許多環境中都比商用或內部訂製的軟體還要受歡迎。 
 
  • CPU 時脈速度幾乎沒有成長,不過多核心處理器已儼然成為標準配備,而且網路速度也越來越快。這意味著,平行架構也會跟著成長。 
 
  • 即使你在一個小團隊工作,現在也可以建立跨多台機器甚至多個地理區域的系統,這多虧了像是Amazon Web Services這類基礎建設即服務(infra􀀀structure as a service, IaaS)的幫忙。 
 
  • 現在大家對許多服務的預期都應該是高可用的;大家對於故障或維護而導致的停機時間也越來越要求了。 
 
  資料密集型應用(Data-intensive applications)利用了這些技術發展,正在進一步拓展可能性的疆界。如果資料是應用程式的主要挑戰(資料的數量、複雜性或變化速度),我們就可稱其為資料密集型的(data-intensive), 而不是計算密集型的(computeintensive),對於後者而言,CPU 的處理速度將會是瓶頸所在。 
 
  已經有工具和技術開始順應時勢,能夠支援資料密集型應用程式的儲存和資料處理。新型的資料庫系統(「NoSQL」)已經得到許多關注,但是訊息佇列、快取、搜尋索引、批次處理和串流處理框架以及零零總總的相關技術也同樣重要。許多應用程式都是採用這些方法的某種組合架構而成的。 
 
  一些流行用語(buzzwords)的出現正是對新興機會展現熱情的標誌,這是件了不起的事情。然而,身為軟體工程師和架構師,如果我們想要建構出好的應用程式,還需要對各種技術及其利弊有準確的理解才行。為此,我們必須得繼續挖掘比buzzwords 還要更深入的東西。 
 
  幸運的是,技術快速變化的背後存在一些歷久不衰的原則,無論你使用的是哪種工具,這些原則都一體適用。如果能夠理解這些原則,就可以知道每種工具的適用之處、如何充分利用它同時避免其缺陷。這就是本書的價值所在。 
 
  本書的目標是帶您一覽當今發展快速且多樣的資料處理與儲存技術。本書並非針對某一特定工具的入門書籍,也不是一本充滿枯燥理論的教科書。相反地,我們將著眼於一些成功的資料系統,以其作為範例:這些技術是許多流行應用程式的基礎,並且必須滿足生產環境所需要的可擴展性、性能和可靠性等等要求。 
 
  我們將深入這些系統的內部,梳理出其中關鍵的演算法,討論它們的原則以及必要的權衡。在這趟旅程中,我們也會嘗試找到思考資料系統的有用方法:不僅僅是瞭解它們如何工作,還能夠知道它們為什麼要這樣工作,以及我們需要提出哪些問題才能直指事情的核心。 
 
  讀完這本書,你就可以知道如何選擇合適的技術,並瞭解如何將各種工具結合起來形成一個良好的應用架構來當作基礎。對於從頭建構自己的資料庫儲存引擎,或許你全然沒有準備,但幸運的是,已經很少有這種自己再重新來過的必要了。然而,當你對系統底層開始具備良好的直覺,這樣就可以推斷它們的行為,協助你做出優秀的設計決策並跟蹤可能出現的任何問題。


相關書籍