Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 99eb26e

Browse files
committed
docs(high-concurrency): update es and redis desc
* Fix typos * Update docs description
1 parent a774169 commit 99eb26e

File tree

3 files changed

+13
-11
lines changed

3 files changed

+13
-11
lines changed

‎docs/high-concurrency/es-production-cluster.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ es 生产集群的部署架构是什么?每个索引的数据量大概有多
1515

1616
- es 生产集群我们部署了 5 台机器,每台机器是 6 核 64G 的,集群总内存是 320G。
1717
- 我们 es 集群的日增量数据大概是 2000 万条,每天日增量数据大概是 500MB,每月增量数据大概是 6 亿,15G。目前系统已经运行了几个月,现在 es 集群里数据总量大概是 100G 左右。
18-
- 目前线上有 5 个索引(这个结合你们自己业务来,看看自己有哪些数据可以放 es 的),每个索引的数据量大概是 20G,所以这个数据量之内,我们每个索引分配的是 8 个 shard,比默认的 5 个 shard 多了 3 个shard
18+
- 目前线上有 5 个索引(这个结合你们自己业务来,看看自己有哪些数据可以放 es 的),每个索引的数据量大概是 20G,所以这个数据量之内,我们每个索引分配的是 8 个 shard,比默认的 5 个 shard 多了 3 个 shard
1919

2020
大概就这么说一下就行了。

‎docs/high-concurrency/redis-master-slave.md‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ slave 不会过期 key,只会等待 master 过期 key。如果 master 过期
4747
## 复制的完整流程
4848
slave node 启动时,会在自己本地保存 master node 的信息,包括 master node 的`host``ip`,但是复制流程没开始。
4949

50-
slave node 内部有个定时任务,每秒检查是否有新的 master node 要连接和复制,如果发现,就跟 master node 建立 socket 网络连接。然后 slave node 发送 `ping` 命令给 master node。如果 master 设置了 requirepass,那么 slave node 必须发送 masterauth 的口令过去进行认证。master node **第一次执行全量复制**,将所有数据发给slave node。而在后续,master node 持续将写命令,异步复制给 slave node。
50+
slave node 内部有个定时任务,每秒检查是否有新的 master node 要连接和复制,如果发现,就跟 master node 建立 socket 网络连接。然后 slave node 发送 `ping` 命令给 master node。如果 master 设置了 requirepass,那么 slave node 必须发送 masterauth 的口令过去进行认证。master node **第一次执行全量复制**,将所有数据发给 slave node。而在后续,master node 持续将写命令,异步复制给 slave node。
5151

5252
![redis-master-slave-replication-detail](/images/redis-master-slave-replication-detail.png)
5353

@@ -64,8 +64,8 @@ client-output-buffer-limit slave 256MB 64MB 60
6464

6565
### 增量复制
6666
- 如果全量复制过程中,master-slave 网络连接断掉,那么 slave 重新连接 master 时,会触发增量复制。
67-
- master 直接从自己的 backlog 中获取部分丢失的数据,发送给 slave node,默认 backlog 就是1MB
68-
- msater就是根据 slave 发送的 psync 中的 offset 来从 backlog 中获取数据的。
67+
- master 直接从自己的 backlog 中获取部分丢失的数据,发送给 slave node,默认 backlog 就是 1MB
68+
- msater 就是根据 slave 发送的 psync 中的 offset 来从 backlog 中获取数据的。
6969

7070
### heartbeat
7171
主从节点互相都会发送 heartbeat 信息。
@@ -84,6 +84,6 @@ master 每次接收到写命令之后,先在内部写入数据,然后异步
8484

8585
redis 的高可用架构,叫做 `failover` **故障转移**,也可以叫做主备切换。
8686

87-
master node 在故障时,自动检测,并且将某个 slave node 自动切换位 master node的过程,叫做主备切换。这个过程,实现了 redis 的主从架构下的高可用。
87+
master node 在故障时,自动检测,并且将某个 slave node 自动切换为 master node 的过程,叫做主备切换。这个过程,实现了 redis 的主从架构下的高可用。
8888

89-
后面会详细说明 redis **基于哨兵的高可用性**
89+
后面会详细说明 redis [基于哨兵的高可用性](/docs/high-concurrency/redis-sentinel.md)

‎docs/high-concurrency/redis-single-thread-model.md‎

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,27 @@ redis 相比 memcached 来说,拥有[更多的数据结构](/docs/high-concurr
2020
由于 redis 只使用**单核**,而 memcached 可以使用**多核**,所以平均每一个核上 redis 在存储小数据时比 memcached 性能更高。而在 100k 以上的数据中,memcached 性能要高于 redis。虽然 redis 最近也在存储大数据的性能上进行优化,但是比起 memcached,还是稍有逊色。
2121

2222
### redis 的线程模型
23-
redis 内部使用文件事件处理器 `file event handler`,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket, socket 产生的事件压入内存队列中,事件分派器根据 socket 上的事件来选择对应的事件处理器进行处理
23+
redis 内部使用文件事件处理器 `file event handler`,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,将产生事件的 socket 压入内存队列中,事件分派器根据 socket 上的事件类型来选择对应的事件处理器进行处理
2424

2525
文件事件处理器的结构包含 4 个部分:
2626
- 多个 socket
2727
- IO 多路复用程序
2828
- 文件事件分派器
2929
- 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)
3030

31-
多个 socket 可能会并发产生不同的操作,每个操作对应不同的文件事件,但是 IO 多路复用程序会监听多个 socket,会将 socket 产生的事件放入队列中排队,事件分派器每次从队列中取出一个事件,把该事件交给对应的事件处理器进行处理
31+
多个 socket 可能会并发产生不同的操作,每个操作对应不同的文件事件,但是 IO 多路复用程序会监听多个 socket,会将产生事件的 socket 放入队列中排队,事件分派器每次从队列中取出一个 socket,根据 socket 的事件类型交给对应的事件处理器进行处理
3232

3333
来看客户端与 redis 的一次通信过程:
3434

3535
![redis-single-thread-model](/images/redis-single-thread-model.png)
3636

37-
首先要明白,通信是通过 socket 来完成的,不懂的同学可以先去看一看 socket 网络编程。
37+
要明白,通信是通过 socket 来完成的,不懂的同学可以先去看一看 socket 网络编程。
3838

39-
客户端 socket01 向 redis 进程的 server socket 请求建立连接,此时 server socket 会产生一个 `AE_READABLE` 事件,IO 多路复用程序监听到 server socket 产生的事件后,将该事件压入队列中。文件事件分派器从队列中获取该事件,交给**连接应答处理器**。连接应答处理器会创建一个能与客户端通信的 socket01,并将该 socket01 `AE_READABLE` 事件与命令请求处理器关联
39+
首先,redis 服务端进程初始化的时候,会将 server socket 的 `AE_READABLE` 事件与连接应答处理器关联
4040

41-
假设此时客户端发送了一个 `set key value` 请求,此时 redis 中的 socket01 会产生 `AE_READABLE` 事件,IO 多路复用程序将事件压入队列,此时事件分派器从队列中获取到该事件,由于前面 socket01 的 `AE_READABLE` 事件已经与命令请求处理器关联,因此事件分派器将事件交给命令请求处理器来处理。命令请求处理器读取 socket01 的 `key value` 并在自己内存中完成 `key value` 的设置。操作完成后,它会将 socket01 的 `AE_WRITABLE` 事件与命令回复处理器关联。
41+
客户端 socket01 向 redis 进程的 server socket 请求建立连接,此时 server socket 会产生一个 `AE_READABLE` 事件,IO 多路复用程序监听到 server socket 产生的事件后,将该 socket 压入队列中。文件事件分派器从队列中获取 socket,交给**连接应答处理器**。连接应答处理器会创建一个能与客户端通信的 socket01,并将该 socket01 的 `AE_READABLE` 事件与命令请求处理器关联。
42+
43+
假设此时客户端发送了一个 `set key value` 请求,此时 redis 中的 socket01 会产生 `AE_READABLE` 事件,IO 多路复用程序将 socket01 压入队列,此时事件分派器从队列中获取到 socket01 产生的 `AE_READABLE` 事件,由于前面 socket01 的 `AE_READABLE` 事件已经与命令请求处理器关联,因此事件分派器将事件交给命令请求处理器来处理。命令请求处理器读取 socket01 的 `key value` 并在自己内存中完成 `key value` 的设置。操作完成后,它会将 socket01 的 `AE_WRITABLE` 事件与命令回复处理器关联。
4244

4345
如果此时客户端准备好接收返回结果了,那么 redis 中的 socket01 会产生一个 `AE_WRITABLE` 事件,同样压入队列中,事件分派器找到相关联的命令回复处理器,由命令回复处理器对 socket01 输入本次操作的一个结果,比如 `ok`,之后解除 socket01 的 `AE_WRITABLE` 事件与命令回复处理器的关联。
4446

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /