Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Chinese (Simplified) Translation #62

Open
wants to merge 16 commits into
base: main
Choose a base branch
from
Open

Conversation

ictar
Copy link

@ictar ictar commented Nov 22, 2023

Closes: #54

@yitian-reevo
Copy link

I will review it, hopefully, finish by this weekend.


# 系统设计 101(System Design 101)

使用图片和简单术语来解释复杂系统。
Copy link

@yitian-reevo yitian-reevo Nov 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

visuals 可视化


使用图片和简单术语来解释复杂系统。

无论你是在准备系统设计面试,还是单纯想了解系统的底层工作原理,我们都希望这个存储库可以帮助你得偿所愿。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

repository 仓库

- [CI/CD](#cicd)
- [简单解释 CI/CD 管道](#简单解释-cicd-管道)
- [Netflix 技术栈(CI/CD 管道)](#netflix-技术栈cicd-管道)
- [设计模式](#设计模式)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

架构模式

我觉得设计模式应该是 design pattern

- [简单解释 CI/CD 管道](#简单解释-cicd-管道)
- [Netflix 技术栈(CI/CD 管道)](#netflix-技术栈cicd-管道)
- [设计模式](#设计模式)
- [MVC, MVP, MVVM, MVVM-C, and VIPER](#mvc-mvp-mvvm-mvvm-c-and-viper)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and:和

- [MVC, MVP, MVVM, MVVM-C, and VIPER](#mvc-mvp-mvvm-mvvm-c-and-viper)
- [每一位开发者都必须知道的 18 个关键设计模式](#每一位开发者都必须知道的-18-个关键设计模式)
- [数据库](#数据库)
- [关于云服务中不同类型的数据库的一个很好的备忘单](#关于云服务中不同类型的数据库的一个很好的备忘单)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cheat sheet 翻译成速查表,前面加 nice,是否考虑翻成:便携速查表

- [每一位开发者都必须知道的 18 个关键设计模式](#每一位开发者都必须知道的-18-个关键设计模式)
- [数据库](#数据库)
- [关于云服务中不同类型的数据库的一个很好的备忘单](#关于云服务中不同类型的数据库的一个很好的备忘单)
- [为数据库提供支持的八种数据结构](#为数据库提供支持的八种数据结构)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

考虑:8 种支撑数据库的数据结构

- [为数据库提供支持的八种数据结构](#为数据库提供支持的八种数据结构)
- [一条 SQL 语句是如何在数据库中执行的?](#一条-sql-语句是如何在数据库中执行的)
- [CAP 理论](#cap-理论)
- [内存和存储类型](#内存和存储类型)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

我觉得 Types 同时修饰 Memory 和 storage,建议改成:内存和存储的类型。

- [可视化 SQL 查询](#可视化-sql-查询)
- [SQL 语言](#sql-语言)
- [缓存](#缓存)
- [随处缓存数据](#随处缓存数据)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

考虑:缓存无处不在

- [世界各地的支付系统系列(第一部分):印度的统一支付接口(Unified Payments Interface,UPI)](#世界各地的支付系统系列第一部分印度的统一支付接口unified-payments-interfaceupi)
- [开发运营](#开发运营)
- [DevOps vs. SRE vs. 平台工程(Platform Engineering)。有何不同?](#devops-vs-sre-vs-平台工程platform-engineering有何不同)
- [k8s (Kubernetes)是什么?](#k8s-kubernetes是什么)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

收括号后是否少一空格

- [信用卡为何被称为“银行最赚钱的产品”?VISA/万事达卡是如何赚钱的?](#信用卡为何被称为银行最赚钱的产品visa万事达卡是如何赚钱的)
- [当我们在商家处刷卡时,VISA 是如何运作的?](#当我们在商家处刷卡时visa-是如何运作的)
- [世界各地的支付系统系列(第一部分):印度的统一支付接口(Unified Payments Interface,UPI)](#世界各地的支付系统系列第一部分印度的统一支付接口unified-payments-interfaceupi)
- [开发运营](#开发运营)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DevOps是术语,不用翻译

- [Git 的工作原理](#git-的工作原理)
- [Git merge vs. Git rebase](#git-merge-vs-git-rebase)
- [云服务](#云服务)
- [关于不同云服务的一个不错的备忘录(2023 年版本)](#关于不同云服务的一个不错的备忘录2023-年版本)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

不同云服务的速查表

- [安全](#安全)
- [HTTPS 是如何工作的?](#https-是如何工作的)
- [简明扼要解释下 Oauth 2.0。](#简明扼要解释下-oauth-20)
- [身份验证机制的前四种形式](#身份验证机制的前四种形式)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

考虑:常见的四中身份认证机制

- [如何将密码安全地存储到数据库中,以及如何验证密码?](#如何将密码安全地存储到数据库中以及如何验证密码)
- [向一个十岁小孩解释 JSON Web Token (JWT)](#向一个十岁小孩解释-json-web-token-jwt)
- [Google Authenticator(或者其它类型的两步认证器)是如何工作的?](#google-authenticator或者其它类型的两步认证器是如何工作的)
- [现实世界中的案例学习](#现实世界中的案例学习)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

考虑:真实案例研究

REST

- 使用标准的 HTTP 方法,例如 GET、POST、DELETE, 来进行 CRUD 操作
- 当你需要在独立服务或者应用之间的简单统一接口时,工作良好

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

当你需要在独立服务或应用程序之间实现简单、统一的接口时,这种架构风格表现良好。

GraphQL

- 为客户端提供单一端点,从而实现所需数据的精确查询。
- 客户端在嵌套查询中指定所需的确切字段,而服务端返回仅包含这些字段的优化负载。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

payload 在计算机里翻译成数据体比较好点。编写GraphQL 查询的时候需要在请求体里指定需要返回的字段,也就是说返回结果中字段是固定的,GraphQL 可以在查询时根据实际情况做一些优化,减少返回的数据量。

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

payload 在计算机里翻译成数据体比较好点。编写GraphQL 查询的时候需要在请求体里指定需要返回的字段,也就是说返回结果中字段是固定的,GraphQL 可以在查询时根据实际情况做一些优化,减少返回的数据量。

赞成。会根据原文作相应调整。


- 为客户端提供单一端点,从而实现所需数据的精确查询。
- 客户端在嵌套查询中指定所需的确切字段,而服务端返回仅包含这些字段的优化负载。
- 支持数据修改和实时通知订阅

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mutations 变更和 Subscription 订阅是GraphQL 的两个名词。我觉得翻译是需要点出来:支持变更(Mutation)用于修改数据、订阅(Sub...)用于实时通知。

- 但是,它将复杂性转移到了前端,并且如果没有适当保护,则可能会允许滥用查询。
- 缓存策略可能比 REST 更复杂。

REST 和 GraphQL之间哪一个是最佳选择取决于应用和开发团队之间的特定需求。GraphQL 非常适合复杂或频繁变化的前端需求,而 REST 则适合那些更倾向于简单和一致的应用程序。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

specific:具体的


REST 和 GraphQL之间哪一个是最佳选择取决于应用和开发团队之间的特定需求。GraphQL 非常适合复杂或频繁变化的前端需求,而 REST 则适合那些更倾向于简单和一致的应用程序。

这两种 API 方法都不是灵丹妙药。仔细评估要求和权衡对于选择正确的 API 方法非常重要。REST 和 GraphQL 都是公开数据和支持现代应用程序的有效选项。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

考虑:仔细评估需求并做好评估对选择对的 API 方法非常重要。两者都是暴露数据、支撑现在应用的有效选择。


步骤 2 - 4:订单服务(gRPC 客户端)收到 REST 调用后,对其进行转换,然后向支付服务发起一个 RPC 请求。gRPC 将**客户端存根(client stub)**编码为二进制格式,然后将其发送到低层的传输层。

步骤 5:使用 HTTP2,gRPC 向网络发送数据包。由于二进制编码和网络优化,gRPC 据说比 JSON 快 5 倍。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

考虑;gRPC 通过网络发送数据包


这样就改变了编程范式,并且支付服务不再需要浪费资源来轮询支付状态。

那如果 PSP 用不回调怎么办?我们可以设置一个内部任务,每小时检查付款状态。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

从不

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

从不

typo, fixed


分页(Pagination)

当结果很大的时候,常用此种优化方式。结果会流回客户端以提高服务响应能力。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

我觉得这里不能简单说流回,但也不是流式传输。它强调的应该是数据结果会被分页,分割成编号的小分片,这些分片像一份一份传回来,类似流的形式。


打包:包和依赖项打包到 Amazon 系统映像 (AMI) 中以供发布。

测试:测试强调生产文化对构建混乱工具的关注。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

chaos tool :混沌工具
混沌测试是一种手段,随机在系统里触发一些故障,看系统的反映情况。

- MVC,最古老的模式,最早可追溯到近 50 年前
- 每一种模式都有一个“视图”(view, V),负责显示内容和接收用户输入
- 大部分的模式都包括一个“模型(model,M)”,用来管理业务数据
- “控制器(Controller)”、“控制器(Presenter)”和“视图模型(View-Model)”是在视图和模型(VIPER 模式中的“实体”)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Presenter:主持人

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

是在视图和模型....(后面没有翻译完)

<img src="../../images/18-oo-patterns.png" />
</p>

- 抽象工厂(Abstract Factory)模式:家庭创造者 —— 制作相关项的组合。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

考虑:族群创建者 - 创建一组或多组相关对象。


## 数据库

### 关于云服务中不同类型的数据库的一个很好的备忘单

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cheat sheet:速查表

<img src="../../images/cloud-dbs2.png" />
</p>

为你的项目选择正确的数据是一项复杂的任务。许多数据库选项都适合不同的场景,这很快就会导致决策疲劳。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

为你的项目选择正确的数据“库”是一项复杂的任务。很多数据库都有各自的应用场景,互不重复,这很容易导致决策疲劳。


为你的项目选择正确的数据是一项复杂的任务。许多数据库选项都适合不同的场景,这很快就会导致决策疲劳。

我们希望这份备忘单能够提供高级指导,以帮你找到符合项目需求的正确服务,并避免潜在陷阱。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

备忘单 -> 速查表

下面是一些用于索引数据的最流行的数据结构:

- 跳跃表(Skiplist):常见的内存索引类型。在 Redis 中使用
- 哈希索引(Hash index):“Map” 数据结构(或者“Collection”)的一个非常见的实现

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

非常见 -> 非常常见


### 随处缓存数据

下图说明了在典型架构中,我们缓存数据的位置。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

典型 -> 经典

</p>


## 开发运营

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

不用翻译 DevOps


- 控制平面组件(Control Plane Components)

1. API 服务器

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

考虑末尾加上(API Server)


### Docker 的工作原理

下图显示了 Docker 的机构,以及当我们运行了“docker build”、“docker pull”和“docker run”时,它是如何工作的。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

机构:架构

<img src="../../images/jwt.jpg" />
</p>

想象一下,你有一个特殊的盒子,叫做 JWT。这个盒子里有三个部分:一个头部、一个负载和一个签名。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

payload:数据体

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

下同,不再重复


Amazon 和 Netflix 是微服务理念的主要簇拥者。这种方法自然地将服务代码分开存储在不同的存储库中。它能更快地扩展,但后期可能会导致治理方面的问题。

在 Monorepo 中国呢,每个服务都是一个文件夹,每一个文件夹都有一个 BUILD 配置和 OWNERS 权限控制。每一个服务成员负责他们自己的文件夹。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

在 Monorepo 中

Copy link

@yitian-reevo yitian-reevo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello, translation has been reviewed. Please note that all my comments are only suggestions, and whether you adopt them or not is entirely up to you. You don't have to follow them too closely.

@ictar
Copy link
Author

ictar commented Nov 27, 2023

Hello, translation has been reviewed. Please note that all my comments are only suggestions, and whether you adopt them or not is entirely up to you. You don't have to follow them too closely.

Thank you for your review! I have considered them and made the modifications accordingly. Plz check again when you're free.

- 哈希索引(Hash index):“Map” 数据结构(或者“Collection”)的一个非常常见的实现
- SSTable:不可变的磁盘 “Map” 实现
- LSM 树:Skiplist + SSTable。高写入吞吐量
- B 树(B-tree):基于磁盘的方案。一致读写性能
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

一致读写性能? 上面图上写的不是最常用的数据库索引实现吗

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

一致读写性能? 上面图上写的不是最常用的数据库索引实现吗

但是原文确实是:Consistent read/write performance

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

感觉这里是修饰 B Tree 读写性能比较平均,比如平衡二叉树的查询和插入都能在对数时间完成,所以读写性能比较一致。Ref to https://zh.wikipedia.org/wiki/B%E6%A0%91

- B 树(B-tree):基于磁盘的方案。具有一致的读写性能。

Copy link

@leelaylay leelaylay left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestions


使用可视化和简单术语来解释复杂系统。

无论你是在准备系统设计面试,还是单纯想了解系统的底层工作原理,我们都希望这个仓库可以帮助你得偿所愿。

This comment was marked as resolved.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

第一点,我觉得这边是否强调单复数好像没啥区别,所以保持不改了。

第二点,采纳最后一种译法。


## 通信协议

架构风格定义了应用编程接口(application programming interface,API)的不同组件之间是如何相互交互的。结果就是,通过提供设计和构建 API 的标准方法,它们一起保证了效率、可靠性以及与其他系统集成的便捷性。以下是最常用的风格:

This comment was marked as resolved.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed


成熟、全面、基于 XML

最适合企业应用

This comment was marked as resolved.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed


查询语言、请求特定数据

减少网络开销,更快的响应速度

This comment was marked as resolved.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good. Fixed


- gRPC:

现代、高性能协议缓冲

This comment was marked as resolved.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed


### REST API vs. GraphQL

当涉及到 API 设计的时候,REST 和 GraphQL 分别都有其优劣。

This comment was marked as resolved.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed


- 为客户端提供单一端点,从而实现所需数据的精确查询。
- 客户端在嵌套查询中指定需要返回的字段,而服务端返回仅包含这些字段的已优化数据体。(译注:返回结果中字段是固定的,GraphQL 可以在查询时根据实际情况做一些优化,减少返回的数据量。)
- 支持变更(Mutation),用于数据修改,以及支持订阅(Subscription),用于实时通知。

This comment was marked as resolved.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

GraphQL

- 为客户端提供单一端点,从而实现所需数据的精确查询。
- 客户端在嵌套查询中指定需要返回的字段,而服务端返回仅包含这些字段的已优化数据体。(译注:返回结果中字段是固定的,GraphQL 可以在查询时根据实际情况做一些优化,减少返回的数据量。)

This comment was marked as resolved.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

关于 payload 的翻译,前面根据 @wfgydbu 的建议统一修改过了,这边保持全文一致,使用“数据体”


REST 和 GraphQL之间哪一个是最佳选择取决于应用和开发团队之间的具体需求。GraphQL 非常适合复杂或频繁变化的前端需求,而 REST 则适合那些更倾向于简单和一致的应用程序。

这两种 API 方法都不是灵丹妙药。仔细评估需求以及权衡其优劣,对于选择正确的 API 方法非常重要。REST 和 GraphQL 都是暴露数据和支持现代应用的有效选择。

This comment was marked as resolved.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed


步骤 1:客户端发起一个 REST 调用。请求体通常是 JSON 格式。

步骤 2 - 4:订单服务(gRPC 客户端)收到 REST 调用后,对其进行转换,然后向支付服务发起一个 RPC 请求。gRPC 将**客户端存根(client stub)**编码为二进制格式,然后将其发送到低层的传输层。

This comment was marked as resolved.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

low-level翻译成“底层”感觉不大适合,修改成“低层次”好了


步骤 2 - 4:订单服务(gRPC 客户端)收到 REST 调用后,对其进行转换,然后向支付服务发起一个 RPC 请求。gRPC 将**客户端存根(client stub)**编码为二进制格式,然后将其发送到低层的传输层。

步骤 5:使用 HTTP2,gRPC 通过网络发送数据包。由于二进制编码和网络优化,gRPC 据说比 JSON 快 5 倍。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

使用 HTTP2,gRPC 通过网络发送数据包 -> gRPC 通过 HTTP2 在网络上发送数据包

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed


步骤 5:使用 HTTP2,gRPC 通过网络发送数据包。由于二进制编码和网络优化,gRPC 据说比 JSON 快 5 倍。

步骤 6 - 8:支付服务(gRPC 服务器)收到来自网络的数据包后,对其进行解码,然后调用服务器应用。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

更加详细

调用服务器应用 -> 调用服务器应用程序

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed


步骤 6 - 8:支付服务(gRPC 服务器)收到来自网络的数据包后,对其进行解码,然后调用服务器应用。

步骤 9 - 11:服务器应用返回调用结果,将其编码后发送到传输层。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

服务器应用 -> 服务器应用程序

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed


这样就改变了编程范式,并且支付服务不再需要浪费资源来轮询支付状态。

那如果 PSP 永不回调怎么办?我们可以设置一个内部任务,每小时检查付款状态。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

housekeeping job 可能这样更符合语境

内部任务 -> 定时任务

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed


### 如何改善 API 性能?

下图显示了改善 API 性能的五种常见技巧。

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

改善 API 性能 -> 提高 API 性能

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed


如图所示,HTTP 2.0 引入了 HTTP “流”的概念:这是一种抽象,允许在同一个 TCP 连接上多路复用不同的 HTTP 交换。每个流不需要按序发送。

- HTTP 3.0 第一稿于 2020 年发布。它是 HTTP 2.0 的拟议后继者。它使用 QUIC 替代 TCP 作为底层传输协议,从而消除了传输层的 HOL 阻塞。

This comment was marked as resolved.


1. 轮询

客户端请求按顺序发送到不同服务实例。这些服务通常要求是无状态的。

This comment was marked as resolved.


为你的项目选择正确的数据库是一项复杂的任务。许多数据库选项都有各自的适用场景,互不重复,这很容易导致决策疲劳。

我们希望这份速查表能够提供高级指导,以帮你找到符合项目需求的正确服务,并避免潜在陷阱。

This comment was marked as resolved.

@leelaylay
Copy link

LGTM.

@yitian-reevo
Copy link

LGTM

@yitian-reevo
Copy link

why this PR is still open?any progress?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Translation: Chinese (Simplified)
4 participants