Skip to content

Commit d94f3b5

Browse files
committed
some update
1 parent 06d0d42 commit d94f3b5

File tree

4 files changed

+59
-1
lines changed

4 files changed

+59
-1
lines changed

docs/codegen/index.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616

1717
假如使用了 SQL 数据库,那么可以从数据库中提取表结构,生成对应的结构体定义,也可以生成 IDL 再进一步转译。
1818

19+
### 项目重构
20+
21+
在面临大规模的 API 变动以及项目重构等情况,可以使用代码分析工具先对源代码进行分析,然后做一定变换再输出。
22+
1923
## 节约重复劳动
2024

2125
有时候有一些代码需要有大块的包装函数,这时候使用宏会非常复杂,难以调试;或者是需要跨越多个文件添加代码,例如添加了一个 API,需要对应地添加处理器等;或者是需要生成一些模板没有能力生成的部分,例如生成函数签名等;有的时候生成代码有大量条件判断来生成不同的代码,这时候使用模板就不太灵活。

docs/debugging/gdb.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
## 对特定线程打印断点
2+
3+
在 gdb 中,默认打断点会应用到全部线程上,这时候如果多个线程同时执行了同样的代码,那么断点就会在不同线程来回切换,不方便跟踪。gdb 可以使用 `break xxx thread yyy` 的语法,只对某个线程打断点[^1]
4+
5+
## 参考资料
6+
7+
[^1]: [https://sourceware.org/gdb/onlinedocs/gdb/Thread_002dSpecific-Breakpoints.html](https://sourceware.org/gdb/onlinedocs/gdb/Thread_002dSpecific-Breakpoints.html)

docs/deployment/systemd.md

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,41 @@ Linux 没有规定程序以及配置必须安装在哪个目录下,但为了
1616

1717
配置文件一般有全局的配置文件,也有用户的配置文件。通常而言,全局配置文件由系统管理员管理,存放在 `/etc` 目录下。例如,`nginx` 程序的配置文件就存放在 `/etc/nginx` 目录下。而用户特定的配置文件,一般可以存放在 `~/.config` 目录下,或者 `~/.$APP` 目录下,例如,如果你写了一个服务器程序叫 `my-server`,可以将配置文件放到 `~/.my-server` 中。
1818

19-
不同的程序对于配置文件的搜索过程不一样,有的程序会内置若干个搜索路径,并按照优先级依次覆盖配置,有的程序必须手动指定一个配置文件路径,或者使用默认的配置文件路径启动。
19+
不同的程序对于配置文件的搜索过程不一样,有的程序会内置若干个搜索路径,并按照优先级依次覆盖配置,有的程序必须手动指定一个配置文件路径,或者使用默认的配置文件路径启动。
20+
21+
## 编写 Unit 文件
22+
23+
通过 systemd 服务,我们可以让程序开机自启,并在崩溃退出的时候由系统自动重新启动。一般来说,我们需要在配置文件中指定:
24+
25+
- 服务的信息
26+
- 服务的依赖
27+
- 启停命令
28+
- 运行环境
29+
30+
要创建一个 Unit,我们可以使用命令 `systemctl edit --full --force --user my-server.service` 来创建并编辑一个 Unit 文件。
31+
32+
在编辑器中,按照以下模板编写内容:
33+
34+
=== "my-server.service"
35+
```ini
36+
[Unit]
37+
Description=my-server
38+
39+
[Service]
40+
WorkingDirectory=/home/my-server
41+
Type=simple
42+
Environment=LOGLEVEL=info
43+
Environment=SECRET_KEY=secret
44+
ExecStart=/home/my-server/bin/my-server --port=8080
45+
Restart=on-failure
46+
User=my-server
47+
Group=my-server
48+
LimitCORE=infinity
49+
50+
[Install]
51+
WantedBy=multi-user.target
52+
```
53+
54+
其中 `ExecStart` 表示程序启动的命令,`WorkingDirectory` 表示程序运行的时候的工作目录,而 `Environment` 则表示程序运行时的环境变量。
55+
56+
保存退出编辑器之后,systemd 就会将文件内容放到合适的地方。这时候还不能自动启动程序,还需要执行 `systemctl --user enable my-server` 将程序加入到开机启动的列表中,然后执行 `systemctl --user start my-server` 将程序启动。我们还可以通过 `systemctl --user status my-server` 来查看程序运行的状态,通过 `journalctl --user -u my-server` 可以看到程序的标准输出内容。

docs/paradigms/system-design.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,16 @@ vector<RangeInfo> ranges;
3939
4040
## 计算存储分离
4141
42+
43+
44+
## 计算存储耦合
45+
46+
由于计算存储分离之后数据的存取需要通过网络进行,而常见的以太网络所能提供的带宽有限,而且一旦计算服务器与存储服务器物理距离变大,那么数据存取的延迟也会上升。为了节省带宽以及减少延迟,可以采取将计算程序尽可能靠近存储程序的策略。一个很常见的例子就是,我们在使用 SQL 数据库的时候,既可以使用简单的 SQL 语句将大量数据发送到应用程序再进行计算,也可以编写一些复杂的 SQL,将计算交给数据库本身去做。
47+
48+
一些分布式数据库例如 TiDB,尽管采取了计算节点与存储节点分离的设计,但 TiKV 本身仍有 Coprocessor 功能,也可以承担一部分的计算任务。
49+
50+
当然,当计算量上升的时候,就会对存储节点本身造成计算压力,而存储节点扩容则没有那么容易。
51+
4252
## 冷热分离
4353
4454
冷热分离和分片的想法类似,都是按照某种方法来将数据划分成子集。不过,数据分片,不同分片之间存储的机器配置通常是一样的。而冷热分离,则相当于给某些分片打上了不同属性,不同属性的数据根据特点存放到不同配置的机器上。例如,我们刷朋友圈,看到的几乎都是几天以内的照片,最好是马上就能加载出来,这部分照片占的容量比较小;几天以外的照片则很少被访问到,而且对访问速度要求也不高,但是它们加起来的占用空间非常大。提供高速访问的 SSD 容量小、价格高,而便宜量大的 HDD 访问速度则比较慢。根据这种特点,我们就可以将比较“旧”的照片存放到 HDD 存储,而将最近的照片存放到 SSD。同时,比较“旧”的照片可以使用压缩算法,用解压时间来换取更少的空间占用。

0 commit comments

Comments
 (0)