@@ -221,21 +221,21 @@ Apache Hive、Spark SQL、Presto 和 Trino 是這種方法的例子。
221221在這種情況下,雲服務的優勢在於它們可以更容易地根據需求變化向上或向下擴充套件你的計算資源。
222222
223223例如,分析系統通常具有極其可變的負載:快速執行大型分析查詢需要並行使用大量計算資源,但一旦查詢完成,這些資源就會處於空閒狀態,直到使用者進行下一個查詢。
224- 預定義的查詢(例如,每日報告)可以排隊和排程以平滑負載,但對於互動式查詢,你希望它們完成得越快 ,工作負載就變得越可變。
224+ 預定義的查詢(例如,每日報告)可以排隊和排程以平滑負載,但對於互動式查詢,你越希望它們完成得快 ,工作負載就變得越可變。
225225如果你的資料集如此之大,以至於快速查詢需要大量的計算資源,使用雲可以節省資金,因為你可以將未使用的資源返回給供應商,而不是讓它們閒置。對於較小的資料集,這種差異不太顯著。
226226
227227雲服務的最大缺點是你無法控制它:
228228
229229* 如果它缺少你需要的功能,你所能做的就是禮貌地詢問供應商是否會新增它;你通常無法自己實現它。
230230* 如果服務宕機,你所能做的就是等它恢復。
231231* 如果你以觸發錯誤或導致效能問題的方式使用服務,你將很難診斷問題。對於你自己執行的軟體,你可以從作業系統獲取效能指標和除錯資訊來幫助你理解其行為,你可以檢視伺服器日誌,但對於供應商託管的服務,你通常無法訪問這些內部資訊。
232- * 此外,如果服務關閉或變得無法接受地昂貴 ,或者如果供應商決定以你不喜歡的方式更改他們的產品,你就受制於他們 —— 繼續執行舊版本的軟體通常不是一個可行選項,所以你將被迫遷移到替代服務 [ ^ 24 ] 。
232+ * 此外,如果服務關閉或變得無法接受的昂貴 ,或者如果供應商決定以你不喜歡的方式更改他們的產品,你就受制於他們 —— 繼續執行舊版本的軟體通常不是一個可行選項,所以你將被迫遷移到替代服務 [ ^ 24 ] 。
233233 如果有暴露相容 API 的替代服務,這種風險會得到緩解,但對於許多雲服務,沒有標準 API,這增加了切換成本,使供應商鎖定成為一個問題。
234234* 雲供應商需要被信任以保持資料安全,這可能會使遵守隱私和安全法規的過程複雜化。
235235
236236儘管有所有這些風險,組織在雲服務之上構建新應用程式或採用混合方法(在系統的某些部分使用雲服務)變得越來越流行。
237237然而,雲服務不會取代所有內部資料系統:許多較舊的系統早於雲,對於任何具有現有云服務無法滿足的專業要求的服務,內部系統仍然是必要的。
238- 例如,對延遲非常敏感的應用程式(如高頻交易)需要完全控制硬體 。
238+ 例如,對延遲非常敏感的應用程式(如高頻交易)需要對硬體的完全控制 。
239239
240240
241241### 雲原生系統架構 {#sec_introduction_cloud_native}
@@ -259,13 +259,13 @@ Apache Hive、Spark SQL、Presto 和 Trino 是這種方法的例子。
259259許多自託管資料系統的系統要求非常簡單:它們在傳統作業系統(如 Linux 或 Windows)上執行,將資料儲存為檔案系統上的檔案,並透過 TCP/IP 等標準網路協議進行通訊。
260260少數系統依賴於特殊硬體,如 GPU(用於機器學習)或 RDMA 網路介面,但總的來說,自託管軟體傾向於使用非常通用的計算資源:CPU、RAM、檔案系統和 IP 網路。
261261
262- 在雲中,這種型別的軟體可以在基礎設施即服務環境中執行 ,使用一個或多個虛擬機器(或 ** 例項** ),分配一定的 CPU、記憶體、磁碟和網路頻寬。
262+ 在雲中,這種型別的軟體可以在基礎設施即服務(IaaS)環境中執行 ,使用一個或多個虛擬機器(或 ** 例項** ),分配一定的 CPU、記憶體、磁碟和網路頻寬。
263263與物理機器相比,雲實例可以更快地配置,並且有更多種類的大小,但除此之外,它們與傳統計算機類似:你可以在上面執行任何你喜歡的軟體,但你負責自己管理它。
264264
265265相比之下,雲原生服務的關鍵思想是不僅使用由作業系統管理的計算資源,還基於較低級別的雲服務構建更高級別的服務。例如:
266266
267- * ** 物件儲存** 服務(如 Amazon S3、Azure Blob Storage 和 Cloudflare R2)儲存大檔案。它們提供比典型檔案系統更有限的 API(基本檔案讀寫),但它們的優勢在於隱藏了底層物理機器:服務自動將資料分佈在許多機器上,因此你不必擔心任何一臺機器上的磁碟空間用完。即使某些機器或其磁碟完全故障,也不會丟失資料。
268- * 許多其他服務反過來建立在物件儲存和其他雲服務之上 :例如,Snowflake 是一個基於雲的分析資料庫(資料倉庫),依賴於 S3 進行資料儲存 [ ^ 27 ] ,而一些其他服務反過來建立在 Snowflake 之上。
267+ * 使用 ** 物件儲存** 服務(如 Amazon S3、Azure Blob Storage 和 Cloudflare R2)儲存大檔案。它們提供比典型檔案系統更有限的 API(基本檔案讀寫),但它們的優勢在於隱藏了底層物理機器:服務自動將資料分佈在許多機器上,因此你不必擔心任何一臺機器上的磁碟空間用完。即使某些機器或其磁碟完全故障,也不會丟失資料。
268+ * 在物件儲存和其他雲服務之上建立更多的服務 :例如,Snowflake 是一個基於雲的分析資料庫(資料倉庫),依賴於 S3 進行資料儲存 [ ^ 27 ] ,而一些其他服務反過來建立在 Snowflake 之上。
269269
270270與計算中的抽象一樣,沒有一個正確的答案告訴你應該使用什麼。作為一般規則,更高級別的抽象往往更面向特定的用例。如果你的需求與為其設計更高級別系統的情況相匹配,使用現有的高級別系統可能會比自己從較低級別系統構建更輕鬆,且更能滿足您的需求。另一方面,如果沒有滿足你需求的高階系統,那麼從較低級別的元件自己構建它是唯一的選擇。
271271
@@ -275,15 +275,15 @@ Apache Hive、Spark SQL、Presto 和 Trino 是這種方法的例子。
275275
276276在雲中,計算例項(虛擬機器)也可能有本地磁碟連線,但云原生系統通常將這些磁碟更多地視為臨時快取,而不是長期儲存。這是因為如果關聯的例項出現故障,或者為了適應負載變化而將例項替換為更大或更小的例項(在不同的物理機器上),本地磁碟就會變得不可訪問。
277277
278- 作為本地磁碟的替代方案,雲服務還提供可以從一個例項分離並附加到另一個例項的虛擬磁碟儲存(Amazon EBS、Azure 託管磁碟和 Google Cloud 中的持久磁碟)。這種虛擬磁碟實際上不是物理磁碟,而是由一組單獨的機器提供的雲服務,它模擬磁碟的行為(** 塊裝置** ,其中每個塊通常為 4 KiB 大小)。這項技術使得在雲中執行傳統的基於磁碟的軟體成為可能,但塊裝置模擬引入了在從頭為雲設計的系統中可以避免的開銷 [ ^ 25 ] 。它還使應用程式對網路故障非常敏感,因為虛擬塊裝置上的每個 I/O 實際上都是網路呼叫 [ ^ 28 ] 。
278+ 作為本地磁碟的替代方案,雲服務還提供可以從一個例項分離並附加到另一個例項的虛擬磁碟儲存(Amazon EBS、Azure 託管磁碟和 Google Cloud 中的持久磁碟)。這種虛擬磁碟實際上不是物理磁碟,而是由一組單獨的機器提供的雲服務,它模擬磁碟的行為(** 塊裝置** ,其中每個塊通常為 4 KiB 大小)。這項技術使得在雲中執行傳統的基於磁碟的軟體成為可能,但塊裝置模擬所引入的開銷在一開始就為雲設計的系統中是可以避免的 [ ^ 25 ] 。它還使應用程式對網路故障非常敏感,因為虛擬塊裝置上的每個 I/O 實際上都是網路呼叫 [ ^ 28 ] 。
279279
280- 為了解決這個問題,雲原生服務通常避免使用虛擬磁碟,而是建立在針對特定工作負載最佳化的專用儲存服務之上。物件儲存服務(如 S3)設計用於長期儲存相當大的檔案,大小從數百千位元組到幾千兆位元組不等 。資料庫中儲存的單個行或值通常比這小得多;因此,雲資料庫通常在單獨的服務中管理較小的值,並將較大的資料塊(包含許多單個值)儲存在物件儲存中 [ ^ 26 ] [ ^ 29 ] 。我們將在[ 第 4 章] ( /tw/ch4#ch_storage ) 中看到這樣做的方法。
280+ 為了解決這個問題,雲原生服務通常避免使用虛擬磁碟,而是建立在針對特定工作負載最佳化的專用儲存服務之上。物件儲存服務(如 S3)設計用於長期儲存相當大的檔案,大小從數百 KB 到幾 GB 不等 。資料庫中儲存的單個行或值通常比這小得多;因此,雲資料庫通常在單獨的服務中管理較小的值,並將較大的資料塊(包含許多單個值)儲存在物件儲存中 [ ^ 26 ] [ ^ 29 ] 。我們將在[ 第 4 章] ( /tw/ch4#ch_storage ) 中看到這樣做的方法。
281281
282282在傳統的系統架構中,同一臺計算機負責儲存(磁碟)和計算(CPU 和 RAM),但在雲原生系統中,這兩個職責已經在某種程度上分離或 ** 解耦** [ ^ 9 ] [ ^ 27 ] [ ^ 30 ] [ ^ 31 ] :例如,S3 只儲存檔案,如果你想分析該資料,你必須在 S3 之外的某個地方執行分析程式碼。這意味著透過網路傳輸資料,我們將在[ "分散式與單節點系統"] ( /tw/ch1#sec_introduction_distributed ) 中進一步討論。
283283
284284此外,雲原生系統通常是 ** 多租戶** 的,這意味著不是每個客戶都有一臺單獨的機器,而是來自幾個不同客戶的資料和計算由同一服務在同一共享硬體上處理 [ ^ 32 ] 。
285285
286- 多租戶可以實現更好的硬體利用率、更容易的可伸縮性和雲提供商更容易的管理,但它也需要仔細的工程設計,以確保一個客戶的活動不會影響其他客戶的系統性能或安全性 [ ^ 33 ] 。
286+ 多租戶可以實現更好的硬體利用率、更容易的可伸縮性和雲提供商更容易的管理,但它也需要仔細的工程設計,以確保一個客戶的活動不會影響其他客戶的系統的效能或安全性 [ ^ 33 ] 。
287287
288288### 雲時代的運維 {#sec_introduction_operations}
289289
0 commit comments