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](media/best-practice-massive-regions-performance-improvement/3.png)
图 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 集群中。 ![图 5 chaos-demo-1](media/chaos-mesh/5.gif) @@ -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 协议获取返回结果,这是目前各种应用开发常使用的方式。