From d1113abba5439cdca7def8252fdac420de8fbb39 Mon Sep 17 00:00:00 2001
From: Yini Xu <34967660+YiniXu9506@users.noreply.github.com>
Date: Fri, 20 Nov 2020 14:06:40 +0800
Subject: [PATCH] chore: fix broken links (#514)
---
10mins-become-tidb-contributor-20190930.md | 2 +-
...massive-regions-performance-improvement.md | 8 ++++----
chaos-mesh-1.0-ga.md | 4 ++--
chaos-mesh.md | 20 +++++++++----------
dm-source-code-reading-4.md | 6 +++---
tidb-source-code-reading-23.md | 4 ++--
6 files changed, 22 insertions(+), 22 deletions(-)
diff --git a/10mins-become-tidb-contributor-20190930.md b/10mins-become-tidb-contributor-20190930.md
index 41a96a13..dd505df1 100644
--- a/10mins-become-tidb-contributor-20190930.md
+++ b/10mins-become-tidb-contributor-20190930.md
@@ -75,7 +75,7 @@ for rowID := range rows {
在 TiDB 的 Expression Package 上,下面几位同学的 PR 贡献数已经超过了 8 个(包括向量化相关的 PR),达到了 Active Contributor 的要求,他们分别是:[jacklightChen](https://github.com/jacklightChen),[tsthght](https://github.com/tsthght),[tangwz](https://github.com/tangwz) 和 [b41sh](https://github.com/b41sh),也恭喜他们!
-成为 Active Contributor 之后,如果继续为 Expression Package 贡献 PR,且合并的 PR 数量超过 20 个,就有机会获得提名成为 Expression Package [Reviewer](https://github.com/pingcap/community/blob/master/CONTRIBUTING.md#reviewer)。Expression Package 的 Reviewer 在技术上受到社区认可,其对 PR 的 review comments 具有技术公信力,可以和 TiDB 工程师一起 Review Expression 包的 PR,并拥有点赞的权限,当然还拥有持续发展成 TiDB Committer 的机会!
+成为 Active Contributor 之后,如果继续为 Expression Package 贡献 PR,且合并的 PR 数量超过 20 个,就有机会获得提名成为 Expression Package [Reviewer](https://github.com/pingcap/community/blob/master/special-interest-groups/sig-exec/roles-and-organization-management.md#from-active-contributor-to-reviewer)。Expression Package 的 Reviewer 在技术上受到社区认可,其对 PR 的 review comments 具有技术公信力,可以和 TiDB 工程师一起 Review Expression 包的 PR,并拥有点赞的权限,当然还拥有持续发展成 TiDB Committer 的机会!
## 未来工作
diff --git a/best-practice-massive-regions-performance-improvement.md b/best-practice-massive-regions-performance-improvement.md
index 20dccb81..ff61b77c 100644
--- a/best-practice-massive-regions-performance-improvement.md
+++ b/best-practice-massive-regions-performance-improvement.md
@@ -43,9 +43,9 @@ tags: ['性能调优','最佳实践']
* Raft Propose 下的 `Propose wait duration`
`Propose wait duration` 是发送请求给 Raftstore、到 Raftstore 真正处理请求之间的延迟。如果该延迟比较长,说明 Raftstore 比较繁忙或者 append log 比较耗时导致 Raftstore 不能及时处理请求。
-
+
参考值:最好低于 50-100ms。
-
+

图 3 查看 Propose wait duration
@@ -75,7 +75,7 @@ tags: ['性能调优','最佳实践']
>> pd-ctl config set merge-schedule-limit 8
```
-关于更多详情请参考这两个文档 [如何配置 Region Merge](https://github.com/tikv/tikv/blob/master/docs/how-to/configure/region-merge.md) 和 [PD 配置文件描述](https://pingcap.com/docs-cn/dev/reference/configuration/pd-server/configuration-file/#schedule),在此不再展开。
+关于更多详情请参考文档 [PD 配置文件描述](https://pingcap.com/docs-cn/dev/reference/configuration/pd-server/configuration-file/#schedule),在此不再展开。
同时,默认配置的 Region Merge 默认参数设置相对保守,可以根据需求参考 [《TiDB 最佳实践系列(二)PD 调度策略》](https://pingcap.com/blog-cn/best-practice-pd/#5-region-merge-%E9%80%9F%E5%BA%A6%E6%85%A2) 中提及的具体方法加快 Region Merge 速度。
@@ -113,7 +113,7 @@ follower 在 `raft-election-timeout` 间隔内未收到来自 leader 的心跳
在实际情况下,读写请求并不会均匀的打在每个 Region 上,而是主要集中在少数的 Region 上,那么对于暂时空闲的 Region 我们是不是可以尽量减少它们的消息数量。这也就是 Hibernate Region 的主要思想,在无必要的时候不进行 `raft-base-tick`,也就是不去驱动那些空闲 Region 的 Raft 状态机,那么就不会触发这些 Region 的 Raft 心跳信息的产生,极大得减小了 Raftstore 的工作负担。
-截止发稿时 Hibernate Region 还是一个实验 feature,在 master 上已经默认开启。如有需要,可酌情开启,相关配置说明请参考 [配置 Hibernate Region](https://github.com/tikv/tikv/blob/master/docs/reference/configuration/raftstore-config.md#hibernate-region)。
+截止发稿时 Hibernate Region 还是一个实验 feature,在 master 上已经默认开启。如有需要,可酌情开启,相关配置说明请参考 [配置 Hibernate Region](https://docs.pingcap.com/zh/tidb/stable/tikv-configuration-file#raftstorehibernate-regions-%E5%AE%9E%E9%AA%8C%E7%89%B9%E6%80%A7)。
## 其他可能出现的问题
diff --git a/chaos-mesh-1.0-ga.md b/chaos-mesh-1.0-ga.md
index 53027a6f..dd80aace 100644
--- a/chaos-mesh-1.0-ga.md
+++ b/chaos-mesh-1.0-ga.md
@@ -6,7 +6,7 @@ summary: 从开源到现在近一年的时间里,Chaos Mesh 在所有贡献者
tags: ['Chaos Mesh']
---
-Chaos Mesh 是一个云原生的混沌测试平台,在去年的最后一天,我们开源了这个项目,以帮助大家更好的进行混沌实验。从开源到现在近一年的时间里,Chaos Mesh 在所有贡献者的共同努力下,在不断完善新功能的同时,也在易用性和稳定性上取得了阶段性的成果。今天,我们自豪的宣布 Chaos Mesh 1.0 正式发布!
+Chaos Mesh 是一个云原生的混沌测试平台,在去年的最后一天,我们开源了这个项目,以帮助大家更好的进行混沌实验。从开源到现在近一年的时间里,Chaos Mesh 在所有贡献者的共同努力下,在不断完善新功能的同时,也在易用性和稳定性上取得了阶段性的成果。今天,我们自豪的宣布 Chaos Mesh 1.0 正式发布!
Chaos Mesh 1.0 是一个里程碑,不仅支持更多混沌注入的类型,提高了框架组件的稳定性,并且增加了 Chaos Dashboard 组件用来改善 Chaos Mesh 的易用性。下面请跟随我们的脚步梳理 Chaos Mesh 1.0 有什么样的惊喜。
@@ -64,7 +64,7 @@ Chaos Mesh 为了进一步提高混沌实验的可观测性,单独开发了 [G
## 快速体验
-大家通过 install.sh 安装脚本或者是使用 Helm 工具就可以在自己的 Kubernetes 环境下快速的部署 Chaos Mesh,具体安装步骤可以参考 [Chaos Mesh 部署文档](https://chaos-mesh.org/docs/installation/installation)。此外社区的小伙伴也贡献了在线 Chaos Mesh 简单教程,想要快速尝试的小伙伴也可以直接按照课程,在线试用,课程地址:[https://chaos-mesh.org/interactiveTutorial](https://chaos-mesh.org/interactiveTutorial)。
+大家通过 install.sh 安装脚本或者是使用 Helm 工具就可以在自己的 Kubernetes 环境下快速的部署 Chaos Mesh,具体安装步骤可以参考 [Chaos Mesh 部署文档](https://chaos-mesh.org/docs/user_guides/installation)。此外社区的小伙伴也贡献了在线 Chaos Mesh 简单教程,想要快速尝试的小伙伴也可以直接按照课程,在线试用,课程地址:[https://chaos-mesh.org/interactiveTutorial](https://chaos-mesh.org/interactiveTutorial)。
对于 1.0 GA 之前版本的用户,请参考 [1.0 Release Note](https://github.com/chaos-mesh/chaos-mesh/releases/tag/v1.0.0) 了解 1.0 的变更内容和升级指南。
diff --git a/chaos-mesh.md b/chaos-mesh.md
index 8fbf94d8..ae09ce16 100644
--- a/chaos-mesh.md
+++ b/chaos-mesh.md
@@ -44,7 +44,7 @@ tags: ['Kubernetes','Chaos Mesh']
* I/O errno:模拟文件系统 I/O 错误 。
-## 背后的思考
+## 背后的思考
从上面的介绍我们了解到,Chaos Mesh 的目标是要做一个通用的混沌测试工具,所以最开始我们就定下了几个原则。
@@ -126,7 +126,7 @@ PodChaos 可以很好模拟这样的行为,通过 `selector` 选项划定想
* Sidecar
Sidecar contianer 是一类特殊的容器,由 admission-webhooks 动态的注入到目标 Pod 中,目前在 Chaos Mesh 中实现了 chaosfs sidecar 容器,chaosfs 容器内会运行 fuse-daemon,用来劫持应用容器的 I/O 操作。
-
+
整体工作流如下:
1. 用户通过 YAML 文件或是 Kubernetes 客户端往 Kubernetes API Server 创建或更新 Chaos 对象。
@@ -144,10 +144,10 @@ Chaos-mesh 需要运行在 Kubernetes v1.12 及以上版本。Chaos Mesh 的部
如果没有 Kubernetes 集群,可以通过 Chaos Mesh 提供的脚本快速在本地启动一个多节点的 Kubernetes 集群:
```
-// 安装 kind
+// 安装 kind
curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/v0.6.1/kind-$(uname)-amd64
chmod +x ./kind
-mv ./kind /some-dir-in-your-PATH/kind
+mv ./kind /some-dir-in-your-PATH/kind
// 获取脚本
git clone https://github.com/pingcap/chaos-mesh
@@ -156,7 +156,7 @@ cd chaos-mesh
hack/kind-cluster-build.sh
```
-> 本地启动的 Kubernetes 集群,网络相关的错误注入的功能会受到影响
+> 本地启动的 Kubernetes 集群,网络相关的错误注入的功能会受到影响
等 Kubernetes 集群准备好,就可以通过 [Helm](https://helm.sh/) 和 [Kubectl](https://kubernetes.io/docs/reference/kubectl/overview/) 安装部署 Chaos Mesh 了。
@@ -197,9 +197,9 @@ spec:
"app.kubernetes.io/component": "tikv"
scheduler:
cron: "@every 1m"
-```
+```
-创建包含上述内容的 YAML 文件 `kill-tikv.yaml` 后,执行 `kubectl apply -f kill-tikv.yaml` , 对应的错误就会被注入到 chaos-demo-1 集群中。
+创建包含上述内容的 YAML 文件 `kill-tikv.yaml` 后,执行 `kubectl apply -f kill-tikv.yaml` , 对应的错误就会被注入到 chaos-demo-1 集群中。

@@ -207,18 +207,18 @@ spec:
> 更多的 YAML 文件示例参考:https://github.com/pingcap/chaos-mesh/tree/master/examples。
-### 使用 Kubernetes API
+### 使用 Kubernetes API
Chaos Mesh 使用 CRD 来定义 chaos 对象,因此我们可以直接通过 Kubernetes API 操作我们的 CRD 对象。通过这种方式,可以非常方便将我们的 Chaos Mesh 应用到我们自己的程序中,去定制各类测试场景,让混沌实验自动化并持续运行。
-例如在 [test-infra](https://github.com/pingcap/tipocket/tree/86e1cf580d30667f6db1265c6681c930cbfde746/test-infra) 项目中我们使用 Chaos Mesh 来模拟 [ETCD](https://github.com/pingcap/tipocket/blob/86e1cf580d30667f6db1265c6681c930cbfde746/test-infra/tests/etcd/nemesis_test.goo) 集群在 Kubernetes 环境中可能出现的异常情况,比如模拟节点重启、模拟网络故障、模拟文件系统故障等等。
+例如在 [test-infra](https://github.com/pingcap/tipocket/tree/86e1cf580d30667f6db1265c6681c930cbfde746/test-infra) 项目中我们使用 Chaos Mesh 来模拟 [ETCD](https://github.com/pingcap/tipocket/tree/86e1cf580d30667f6db1265c6681c930cbfde746/test-infra/tests/etcd) 集群在 Kubernetes 环境中可能出现的异常情况,比如模拟节点重启、模拟网络故障、模拟文件系统故障等等。
Kubernetes API 使用示例:
```
import (
"context"
-
+
"github.com/pingcap/chaos-mesh/api/v1alpha1"
"sigs.k8s.io/controller-runtime/pkg/client"
)
diff --git a/dm-source-code-reading-4.md b/dm-source-code-reading-4.md
index 4084ae46..ac9f3632 100644
--- a/dm-source-code-reading-4.md
+++ b/dm-source-code-reading-4.md
@@ -10,7 +10,7 @@ tags: ['DM 源码阅读','社区']
## dump 处理单元
-dump 处理单元的代码位于 [github.com/pingcap/dm/mydumper](https://github.com/pingcap/dm/tree/master/mydumper) 包内,作用是从上游 MySQL 将表结构和数据导出到逻辑 SQL 文件,由于该处理单元总是运行在任务的第一个阶段(full 模式和 all 模式),该处理单元每次运行不依赖于其他处理单元的处理结果。另一方面,如果在 dump 运行过程中被强制终止(例如在 dmctl 中执行 pause-task 或者 stop-task),也不会记录已经 dump 数据的 checkpoint 等信息。不记录 checkpoint 是因为每次运行 Mydumper 从上游导出数据,上游的数据都可能发生变更,为了能得到一致的数据和 metadata 信息,每次恢复任务或重新运行任务时该处理单元会 [清理旧的数据目录](https://github.com/pingcap/dm/blob/092b5e4378ce42cf6c2488dd06498792190a091b/mydumper/mydumper.go#L68),重新开始一次完整的数据 dump。
+dump 处理单元的代码位于 [github.com/pingcap/dm/mydumper](https://github.com/pingcap/dm/tree/release-1.0/mydumper) 包内,作用是从上游 MySQL 将表结构和数据导出到逻辑 SQL 文件,由于该处理单元总是运行在任务的第一个阶段(full 模式和 all 模式),该处理单元每次运行不依赖于其他处理单元的处理结果。另一方面,如果在 dump 运行过程中被强制终止(例如在 dmctl 中执行 pause-task 或者 stop-task),也不会记录已经 dump 数据的 checkpoint 等信息。不记录 checkpoint 是因为每次运行 Mydumper 从上游导出数据,上游的数据都可能发生变更,为了能得到一致的数据和 metadata 信息,每次恢复任务或重新运行任务时该处理单元会 [清理旧的数据目录](https://github.com/pingcap/dm/blob/092b5e4378ce42cf6c2488dd06498792190a091b/mydumper/mydumper.go#L68),重新开始一次完整的数据 dump。
导出表结构和数据的逻辑并不是在 DM 内部直接实现,而是 [通过 `os/exec` 包调用外部 mydumper 二进制文件](https://github.com/pingcap/dm/blob/092b5e4378ce42cf6c2488dd06498792190a091b/mydumper/mydumper.go#L104) 来完成。在 Mydumper 内部,我们需要关注以下几个问题:
@@ -91,7 +91,7 @@ load 处理单元的代码位于 [github.com/pingcap/dm/loader](https://github.c
+ 主线程会按照库,表的顺序读取创建库语句文件 `-schema-create.sql` 和建表语句文件 `.-schema-create.sql`,并在下游执行 SQL 创建相对应的库和表。
+ [主线程读取 `checkpoint` 信息,结合数据文件信息创建 fileJob 随机分发任务给一个工作子线程](https://github.com/pingcap/dm/blob/25f95ee08d008fb6469f0b172e432270aaa6be52/loader/loader.go#L944-L1015),fileJob 任务的结构如下所示 :
-
+
```go
type fileJob struct {
schema string
@@ -113,7 +113,7 @@ load 处理单元的代码位于 [github.com/pingcap/dm/loader](https://github.c
offset int64 // 本次导入数据在 SQL 文件的偏移量
lastOffset int64 // 上一次已导入数据对应 SQL 文件偏移量
}
-
+
// SQL 语句执行协程
doJob := func() {
for {
diff --git a/tidb-source-code-reading-23.md b/tidb-source-code-reading-23.md
index 5683157d..b1428491 100644
--- a/tidb-source-code-reading-23.md
+++ b/tidb-source-code-reading-23.md
@@ -10,7 +10,7 @@ tags: ['TiDB 源码阅读','社区']
## Prepare/Execute Statement 简介
-首先我们先简单回顾下客户端使用 Prepare 请求过程:
+首先我们先简单回顾下客户端使用 Prepare 请求过程:
1. 客户端发起 Prepare 命令将带 “?” 参数占位符的 SQL 语句发送到数据库,成功后返回 `stmtID`。
@@ -30,7 +30,7 @@ tags: ['TiDB 源码阅读','社区']
* 某些特性比如 serverSideCursor 需要是通过 Prepare statement 才能使用。
-TiDB 和 [MySQL 协议](https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html) 一样,对于发起 Prepare/Execute 这种使用访问模式提供两种方式:
+TiDB 和 [MySQL 协议](https://dev.mysql.com/doc/refman/5.7/en/sql-prepared-statements.html) 一样,对于发起 Prepare/Execute 这种使用访问模式提供两种方式:
* Binary 协议:即上述的使用 `COM_STMT_PREPARE`,`COM_STMT_EXECUTE`,`COM_STMT_CLOSE` 命令并且通过 Binary 协议获取返回结果,这是目前各种应用开发常使用的方式。