From edd4ab62de75a11943a44ebd2baf32e93a973437 Mon Sep 17 00:00:00 2001 From: Alden Date: Thu, 11 Jun 2026 09:06:47 +0800 Subject: [PATCH 1/3] Fix wording in chapter 1 zh and tw --- content/tw/ch1.md | 10 +++++----- content/zh/ch1.md | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/content/tw/ch1.md b/content/tw/ch1.md index 549a4ab..9525f86 100644 --- a/content/tw/ch1.md +++ b/content/tw/ch1.md @@ -105,7 +105,7 @@ breadcrumbs: false 在事務型系統中,通常不允許使用者構建自定義 SQL 查詢並在資料庫上執行它們,因為這可能會允許他們讀取或修改他們沒有許可權訪問的資料。此外,他們可能編寫執行成本高昂的查詢,從而影響其他使用者的資料庫效能。出於這些原因,OLTP 系統主要執行嵌入到應用程式程式碼中的固定查詢集,只偶爾使用一次性的自定義查詢來進行維護或故障排除。另一方面,分析資料庫通常讓使用者可以自由地手動編寫任意 SQL 查詢,或使用 Tableau、Looker 或 Microsoft Power BI 等資料視覺化或儀表板工具自動生成查詢。 -還有一種型別的系統是為分析型的工作負載(對許多記錄進行聚合的查詢)設計的,但嵌入到面向使用者的產品中。這一類別被稱為 **產品分析** 或 **即時分析**,為這種用途設計的系統包括 Pinot、Druid 和 ClickHouse [^6]。 +還有一種型別的系統是為分析型任務(對許多記錄進行聚合的查詢)而設計,但嵌入到面向使用者的產品中。這一類別被稱為 **產品分析** 或 **即時分析**,為這種用途設計的系統包括 Pinot、Druid 和 ClickHouse [^6]。 ### 資料倉庫 {#sec_introduction_dwh} @@ -260,7 +260,7 @@ Apache Hive、Spark SQL、Presto 和 Trino 是這種方法的例子。 相比之下,雲原生服務的關鍵思想是不僅使用由作業系統管理的計算資源,還基於較低級別的雲服務構建更高級別的服務。例如: -* 使用 **物件儲存** 服務(如 Amazon S3、Azure Blob Storage 和 Cloudflare R2)儲存大檔案。它們提供比典型檔案系統更有限的 API(基本檔案讀寫),但它們的優勢在於隱藏了底層物理機器:服務自動將資料分佈在許多機器上,因此你不必擔心任何一臺機器上的磁碟空間用完。即使某些機器或其磁碟完全故障,也不會丟失資料。 +* 使用 **物件儲存** 服務(如 Amazon S3、Azure Blob Storage 和 Cloudflare R2)儲存大檔案。它們提供的 API 比典型檔案系統更有限(基本檔案讀寫),但它們的優勢在於隱藏了底層物理機器:服務自動將資料分佈在許多機器上,因此你不必擔心任何一臺機器上的磁碟空間用完。即使某些機器或其磁碟完全故障,也不會丟失資料。 * 在物件儲存和其他雲服務之上建立更多的服務:例如,Snowflake 是一個基於雲的分析資料庫(資料倉庫),依賴於 S3 進行資料儲存 [^27],而一些其他服務反過來建立在 Snowflake 之上。 與計算中的抽象一樣,沒有一個正確的答案告訴你應該使用什麼。作為一般規則,更高級別的抽象往往更面向特定的用例。如果你的需求與為其設計更高級別系統的情況相匹配,使用現有的高級別系統可能會比自己從較低級別系統構建更輕鬆,且更能滿足您的需求。另一方面,如果沒有滿足你需求的高階系統,那麼從較低級別的元件自己構建它是唯一的選擇。 @@ -287,7 +287,7 @@ Apache Hive、Spark SQL、Presto 和 Trino 是這種方法的例子。 運維的作用是確保服務可靠地交付給使用者(包括配置基礎設施和部署應用程式),並確保穩定的生產環境(包括監控和診斷可能影響可靠性的任何問題)。對於自託管系統,運維傳統上涉及大量在單個機器級別的工作,例如容量規劃(例如,監控可用磁碟空間並在空間用完之前新增更多磁碟)、配置新機器、將服務從一臺機器移動到另一臺機器,以及安裝作業系統補丁。 -許多雲服務提供了 API 來隱藏實際實現服務的單個機器。例如,雲端儲存用 **計量計費** 替換固定大小的磁碟,你可以儲存資料而無需提前規劃容量需求,然後根據實際使用的空間收費。此外,即使在單個機器發生故障時,許多雲服務仍能保持高可用性(參見["可靠性與容錯"](/tw/ch2#sec_introduction_reliability))。 +許多雲服務會透過 API 隱藏其背後具體承載服務的機器。例如,雲端儲存用 **計量計費** 替換固定大小的磁碟,你可以儲存資料而無需提前規劃容量需求,然後根據實際使用的空間收費。此外,即使在單個機器發生故障時,許多雲服務仍能保持高可用性(參見["可靠性與容錯"](/tw/ch2#sec_introduction_reliability))。 從單個機器到服務的重點轉移伴隨著運維角色的變化。提供可靠服務的高階目標保持不變,但流程和工具已經發展。DevOps/SRE 理念更加強調: @@ -324,13 +324,13 @@ ETL(參見["資料倉庫"](#sec_introduction_dwh))只是故事的一部分 : 如果你的應用程式需要在一臺機器(或幾臺機器、網路或整個資料中心)發生故障時繼續工作,你可以使用多臺機器為你提供冗餘。當一臺故障時,另一臺可以接管。參見["可靠性與容錯"](/tw/ch2#sec_introduction_reliability)和[第 6 章](/tw/ch6#ch_replication)關於複製的內容。 可伸縮性 -: 如果你的資料量或計算需求增長超過單臺機器的處理能力,你可以潛在地將負載分散到多臺機器上。參見["可伸縮性"](/tw/ch2#sec_introduction_scalability)。 +: 如果你的資料量或計算需求增長超過單臺機器的處理能力,你可以考慮將負載分散到多臺機器上。參見["可伸縮性"](/tw/ch2#sec_introduction_scalability)。 延遲 : 如果你在世界各地都有使用者,你可能希望在全球各個地區都有伺服器,以便每個使用者都可以從地理位置接近他們的伺服器獲得服務。這避免了使用者必須等待網路資料包繞地球半圈才能回答他們的請求。參見["描述效能"](/tw/ch2#sec_introduction_percentiles)。 彈性 -: 如果你的應用程式在某些時候很忙,在其他時候很空閒,雲部署可以根據需求向上或向下伸縮,因此你只需為實際使用的資源付費。這在單臺機器上更困難,它需要按處理最大負載的情況進行配置,即使在幾乎不使用的時候也是如此。 +: 如果你的應用程式在某些時候很忙,在其他時候很空閒,雲部署可以根據需求向上或向下伸縮,因此你只需為實際使用的資源付費。這在單臺機器上更難做到,因為即使大部分時間幾乎用不上這些資源,也必須按最大負載來預配置資源。 使用專用硬體 : 系統的不同部分可以利用不同型別的硬體來匹配其工作負載。例如,物件儲存可能使用具有許多磁碟但很少 CPU 的機器,而資料分析系統可能使用具有大量 CPU 和記憶體但沒有磁碟的機器,機器學習系統可能使用具有 GPU 的機器(GPU 在訓練深度神經網路和其他機器學習任務方面比 CPU 效率高得多)。 diff --git a/content/zh/ch1.md b/content/zh/ch1.md index 5f2dbc6..dc3260c 100644 --- a/content/zh/ch1.md +++ b/content/zh/ch1.md @@ -105,7 +105,7 @@ breadcrumbs: false 在事务型系统中,通常不允许用户构建自定义 SQL 查询并在数据库上运行它们,因为这可能会允许他们读取或修改他们没有权限访问的数据。此外,他们可能编写执行成本高昂的查询,从而影响其他用户的数据库性能。出于这些原因,OLTP 系统主要运行嵌入到应用程序代码中的固定查询集,只偶尔使用一次性的自定义查询来进行维护或故障排除。另一方面,分析数据库通常让用户可以自由地手动编写任意 SQL 查询,或使用 Tableau、Looker 或 Microsoft Power BI 等数据可视化或仪表板工具自动生成查询。 -还有一种类型的系统是为分析型的工作负载(对许多记录进行聚合的查询)设计的,但嵌入到面向用户的产品中。这一类别被称为 **产品分析** 或 **实时分析**,为这种用途设计的系统包括 Pinot、Druid 和 ClickHouse [^6]。 +还有一种类型的系统是为分析型任务(对许多记录进行聚合的查询)而设计,但嵌入到面向用户的产品中。这一类别被称为 **产品分析** 或 **实时分析**,为这种用途设计的系统包括 Pinot、Druid 和 ClickHouse [^6]。 ### 数据仓库 {#sec_introduction_dwh} @@ -260,7 +260,7 @@ Apache Hive、Spark SQL、Presto 和 Trino 是这种方法的例子。 相比之下,云原生服务的关键思想是不仅使用由操作系统管理的计算资源,还基于较低级别的云服务构建更高级别的服务。例如: -* 使用 **对象存储** 服务(如 Amazon S3、Azure Blob Storage 和 Cloudflare R2)存储大文件。它们提供比典型文件系统更有限的 API(基本文件读写),但它们的优势在于隐藏了底层物理机器:服务自动将数据分布在许多机器上,因此你不必担心任何一台机器上的磁盘空间用完。即使某些机器或其磁盘完全故障,也不会丢失数据。 +* 使用 **对象存储** 服务(如 Amazon S3、Azure Blob Storage 和 Cloudflare R2)存储大文件。它们提供的 API 比典型文件系统更有限(基本文件读写),但它们的优势在于隐藏了底层物理机器:服务自动将数据分布在许多机器上,因此你不必担心任何一台机器上的磁盘空间用完。即使某些机器或其磁盘完全故障,也不会丢失数据。 * 在对象存储和其他云服务之上建立更多的服务:例如,Snowflake 是一个基于云的分析数据库(数据仓库),依赖于 S3 进行数据存储 [^27],而一些其他服务反过来建立在 Snowflake 之上。 与计算中的抽象一样,没有一个正确的答案告诉你应该使用什么。作为一般规则,更高级别的抽象往往更面向特定的用例。如果你的需求与为其设计更高级别系统的情况相匹配,使用现有的高级别系统可能会比自己从较低级别系统构建更轻松,且更能满足您的需求。另一方面,如果没有满足你需求的高级系统,那么从较低级别的组件自己构建它是唯一的选择。 @@ -287,7 +287,7 @@ Apache Hive、Spark SQL、Presto 和 Trino 是这种方法的例子。 运维的作用是确保服务可靠地交付给用户(包括配置基础设施和部署应用程序),并确保稳定的生产环境(包括监控和诊断可能影响可靠性的任何问题)。对于自托管系统,运维传统上涉及大量在单个机器级别的工作,例如容量规划(例如,监控可用磁盘空间并在空间用完之前添加更多磁盘)、配置新机器、将服务从一台机器移动到另一台机器,以及安装操作系统补丁。 -许多云服务提供了 API 来隐藏实际实现服务的单个机器。例如,云存储用 **计量计费** 替换固定大小的磁盘,你可以存储数据而无需提前规划容量需求,然后根据实际使用的空间收费。此外,即使在单个机器发生故障时,许多云服务仍能保持高可用性(参见["可靠性与容错"](/ch2#sec_introduction_reliability))。 +许多云服务会通过 API 隐藏其背后具体承载服务的机器。例如,云存储用 **计量计费** 替换固定大小的磁盘,你可以存储数据而无需提前规划容量需求,然后根据实际使用的空间收费。此外,即使在单个机器发生故障时,许多云服务仍能保持高可用性(参见["可靠性与容错"](/ch2#sec_introduction_reliability))。 从单个机器到服务的重点转移伴随着运维角色的变化。提供可靠服务的高级目标保持不变,但流程和工具已经发展。DevOps/SRE 理念更加强调: @@ -324,13 +324,13 @@ ETL(参见["数据仓库"](#sec_introduction_dwh))只是故事的一部分 : 如果你的应用程序需要在一台机器(或几台机器、网络或整个数据中心)发生故障时继续工作,你可以使用多台机器为你提供冗余。当一台故障时,另一台可以接管。参见["可靠性与容错"](/ch2#sec_introduction_reliability)和[第 6 章](/ch6#ch_replication)关于复制的内容。 可伸缩性 -: 如果你的数据量或计算需求增长超过单台机器的处理能力,你可以潜在地将负载分散到多台机器上。参见["可伸缩性"](/ch2#sec_introduction_scalability)。 +: 如果你的数据量或计算需求增长超过单台机器的处理能力,你可以考虑将负载分散到多台机器上。参见["可伸缩性"](/ch2#sec_introduction_scalability)。 延迟 : 如果你在世界各地都有用户,你可能希望在全球各个地区都有服务器,以便每个用户都可以从地理位置接近他们的服务器获得服务。这避免了用户必须等待网络数据包绕地球半圈才能回答他们的请求。参见["描述性能"](/ch2#sec_introduction_percentiles)。 弹性 -: 如果你的应用程序在某些时候很忙,在其他时候很空闲,云部署可以根据需求向上或向下伸缩,因此你只需为实际使用的资源付费。这在单台机器上更困难,它需要按处理最大负载的情况进行配置,即使在几乎不使用的时候也是如此。 +: 如果你的应用程序在某些时候很忙,在其他时候很空闲,云部署可以根据需求向上或向下伸缩,因此你只需为实际使用的资源付费。这在单台机器上更难做到,因为即使大部分时间几乎用不上这些资源,也必须按最大负载来预配置资源。 使用专用硬件 : 系统的不同部分可以利用不同类型的硬件来匹配其工作负载。例如,对象存储可能使用具有许多磁盘但很少 CPU 的机器,而数据分析系统可能使用具有大量 CPU 和内存但没有磁盘的机器,机器学习系统可能使用具有 GPU 的机器(GPU 在训练深度神经网络和其他机器学习任务方面比 CPU 效率高得多)。 From be02bd308230cb0cffa123dba1849efbeb5d3b80 Mon Sep 17 00:00:00 2001 From: Alden Date: Fri, 19 Jun 2026 11:03:21 +0800 Subject: [PATCH 2/3] Improve microservice API wording in zh and tw --- content/tw/ch1.md | 2 +- content/zh/ch1.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/tw/ch1.md b/content/tw/ch1.md index 9525f86..14849a6 100644 --- a/content/tw/ch1.md +++ b/content/tw/ch1.md @@ -369,7 +369,7 @@ ETL(參見["資料倉庫"](#sec_introduction_dwh))只是故事的一部分 另一方面,擁有許多服務本身可能會帶來複雜性:每個服務都需要用於部署新版本、調整分配的硬體資源以匹配負載、收集日誌、監控服務健康狀況以及在出現問題時向值班工程師發出警報的基礎設施。**編排** 框架(如 Kubernetes)已成為部署服務的流行方式,因為它們為這種基礎設施提供了基礎。在開發期間測試服務可能很複雜,因為你還需要執行它所依賴的所有其他服務。 -微服務 API 的演進可能具有挑戰性。呼叫 API 的客戶端期望 API 具有某些欄位。開發人員可能希望根據業務需求的變化向 API 新增或刪除欄位,但這樣做可能會導致客戶端失敗。更糟糕的是,這種失敗通常直到開發週期的後期才被發現,當更新的服務 API 部署到預生產或生產環境時。API 描述標準(如 OpenAPI 和 gRPC)有助於管理客戶端和伺服器 API 之間的關係;我們將在[第 5 章](/tw/ch5#ch_encoding)中進一步討論這些。 +微服務 API 的演進可能具有挑戰性。呼叫 API 的客戶端期望 API 具有某些欄位。開發人員可能希望根據業務需求的變化向 API 新增或刪除欄位,但這樣做可能會導致客戶端失敗。更糟的是,這類問題往往要到開發週期後期,更新後的服務 API 部署到預生產或生產環境時才會被發現。API 描述標準(如 OpenAPI 和 gRPC)有助於管理客戶端和伺服器 API 之間的關係;我們將在[第 5 章](/tw/ch5#ch_encoding)中進一步討論這些。 微服務主要是人員問題的技術解決方案:允許不同的團隊獨立取得進展,而無需相互協調。這在大公司中很有價值,但在沒有很多團隊的小公司中,使用微服務可能是不必要的開銷,最好以最簡單的方式實現應用程式 [^52]。 diff --git a/content/zh/ch1.md b/content/zh/ch1.md index dc3260c..1127193 100644 --- a/content/zh/ch1.md +++ b/content/zh/ch1.md @@ -369,7 +369,7 @@ ETL(参见["数据仓库"](#sec_introduction_dwh))只是故事的一部分 另一方面,拥有许多服务本身可能会带来复杂性:每个服务都需要用于部署新版本、调整分配的硬件资源以匹配负载、收集日志、监控服务健康状况以及在出现问题时向值班工程师发出警报的基础设施。**编排** 框架(如 Kubernetes)已成为部署服务的流行方式,因为它们为这种基础设施提供了基础。在开发期间测试服务可能很复杂,因为你还需要运行它所依赖的所有其他服务。 -微服务 API 的演进可能具有挑战性。调用 API 的客户端期望 API 具有某些字段。开发人员可能希望根据业务需求的变化向 API 添加或删除字段,但这样做可能会导致客户端失败。更糟糕的是,这种失败通常直到开发周期的后期才被发现,当更新的服务 API 部署到预生产或生产环境时。API 描述标准(如 OpenAPI 和 gRPC)有助于管理客户端和服务器 API 之间的关系;我们将在[第 5 章](/ch5#ch_encoding)中进一步讨论这些。 +微服务 API 的演进可能具有挑战性。调用 API 的客户端期望 API 具有某些字段。开发人员可能希望根据业务需求的变化向 API 添加或删除字段,但这样做可能会导致客户端失败。更糟的是,这类问题往往要到开发周期后期,更新后的服务 API 部署到预生产或生产环境时才会被发现。API 描述标准(如 OpenAPI 和 gRPC)有助于管理客户端和服务器 API 之间的关系;我们将在[第 5 章](/ch5#ch_encoding)中进一步讨论这些。 微服务主要是人员问题的技术解决方案:允许不同的团队独立取得进展,而无需相互协调。这在大公司中很有价值,但在没有很多团队的小公司中,使用微服务可能是不必要的开销,最好以最简单的方式实现应用程序 [^52]。 From 1eb7a5d1191c13135fa9620036c9c1223a4145f8 Mon Sep 17 00:00:00 2001 From: Alden Date: Fri, 19 Jun 2026 11:16:06 +0800 Subject: [PATCH 3/3] Improve data storage risk wording in zh and tw --- content/tw/ch1.md | 2 +- content/zh/ch1.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/tw/ch1.md b/content/tw/ch1.md index 14849a6..37c8de0 100644 --- a/content/tw/ch1.md +++ b/content/tw/ch1.md @@ -403,7 +403,7 @@ ETL(參見["資料倉庫"](#sec_introduction_dwh))只是故事的一部分 目前,我們對於哪些特定技術或系統架構應被視為“符合 GDPR”沒有明確的指導方針。法規故意不強制要求特定技術,因為隨著技術的進步,這些技術可能會迅速變化。相反,法律文字規定了需要解釋的高層級原則。這意味著如何遵守隱私法規的問題沒有簡單的答案,但我們將透過這個視角來看待本書中的一些技術。 -一般來說,我們儲存資料是因為我們認為其價值大於儲存它的成本。然而,值得記住的是,儲存成本不僅僅是你為 Amazon S3 或其他服務支付的賬單:成本效益計算還應該考慮到如果資料被洩露或被對手入侵的責任和聲譽損害風險,以及如果資料的儲存和處理被發現不符合法律的法律成本和罰款風險 [^51]。 +一般來說,我們儲存資料是因為我們認為其價值大於儲存它的成本。然而,值得記住的是,儲存成本不僅僅是你為 Amazon S3 或其他服務支付的賬單:成本效益計算還應考慮其他風險。如果資料洩露,或被攻擊者攻破,可能帶來責任追究和聲譽損害;如果資料的儲存和處理被認定不合規,還可能產生法律成本和罰款 [^51]。 政府或警察部隊也可能迫使公司交出資料。當存在資料可能暴露犯罪行為的風險時(例如,在幾個中東和非洲國家的同性戀,或在幾個美國州尋求墮胎),儲存該資料會為使用者創造真正的安全風險。例如,去墮胎診所的行程很容易被位置資料洩露,甚至可能透過使用者 IP 地址隨時間的日誌(表示大致位置)洩露。 diff --git a/content/zh/ch1.md b/content/zh/ch1.md index 1127193..faaf120 100644 --- a/content/zh/ch1.md +++ b/content/zh/ch1.md @@ -403,7 +403,7 @@ ETL(参见["数据仓库"](#sec_introduction_dwh))只是故事的一部分 目前,我们对于哪些特定技术或系统架构应被视为“符合 GDPR”没有明确的指导方针。法规故意不强制要求特定技术,因为随着技术的进步,这些技术可能会迅速变化。相反,法律文本规定了需要解释的高层级原则。这意味着如何遵守隐私法规的问题没有简单的答案,但我们将通过这个视角来看待本书中的一些技术。 -一般来说,我们存储数据是因为我们认为其价值大于存储它的成本。然而,值得记住的是,存储成本不仅仅是你为 Amazon S3 或其他服务支付的账单:成本效益计算还应该考虑到如果数据被泄露或被对手入侵的责任和声誉损害风险,以及如果数据的存储和处理被发现不符合法律的法律成本和罚款风险 [^51]。 +一般来说,我们存储数据是因为我们认为其价值大于存储它的成本。然而,值得记住的是,存储成本不仅仅是你为 Amazon S3 或其他服务支付的账单:成本效益计算还应考虑其他风险。如果数据泄露,或被攻击者攻破,可能带来责任追究和声誉损害;如果数据的存储和处理被认定不合规,还可能产生法律成本和罚款 [^51]。 政府或警察部队也可能迫使公司交出数据。当存在数据可能暴露犯罪行为的风险时(例如,在几个中东和非洲国家的同性恋,或在几个美国州寻求堕胎),存储该数据会为用户创造真正的安全风险。例如,去堕胎诊所的行程很容易被位置数据泄露,甚至可能通过用户 IP 地址随时间的日志(表示大致位置)泄露。