yll 4 years ago
parent
commit
aab46847ea

+ 61 - 0
content/posts/beanstalkd.md

@@ -0,0 +1,61 @@
+---
+title: "Beanstalkd 任务队列"
+date: 2021-07-01T10:37:08+07:00
+draft: true
+---
+
+## beanstalkd 组件
+
+[beanstalkd](https://beanstalkd.github.io/) 是一个任务队列,用于解耦任务发布和任务执行。主要用于异步任务,能提高主线业务的响应速度。
+
+[beanstalkd](https://beanstalkd.github.io/) 由纯 C 写就,编译简单,有相对极其简洁的启动参数,客户端协议采用 ascii 格式,可用 telnet 调试。有几乎所有主流编程语言的客户端协议封装库。
+
+## beanstalk 内部
+
+可参阅[官方文档](https://github.com/beanstalkd/beanstalkd/tree/master/doc),包含中英文版本。
+
+### 任务的状态迁移
+
+ put with delay               release with delay
+  ----------------> [DELAYED] <------------.
+                        |                   |
+                 kick   | (time passes)     |
+                        |                   |
+   put                  v     reserve       |       delete
+  -----------------> [READY] ---------> [RESERVED] --------> *poof*
+                       ^  ^                |  |
+                       |   \  release      |  |
+                       |    `-------------'   |
+                       |                      |
+                       | kick                 |
+                       |                      |
+                       |       bury           |
+                    [BURIED] <---------------'
+                       |
+                       |  delete
+                        `--------> *poof*
+
+1. put 的 job 进入 READY , put_with_delay 的 job 进入 DELAYED (生产者)
+2. reserve 只能处理 READY 中的 job,reserve 成功后,job 进入 RESERVED 状态。(消费者)
+3. 已经 reserve 某 job 的消费者可
+    - 执行 release 使 job 进入 READY
+    - 执行 release_with_delay 使 job 进入 DELAYED
+    - 执行 bury 使 job 进入 BURIED
+    - 执行 delete 删除 job
+   如果在 job 配置的时间内未执行任何以上操作,beanstalkd 会使 job 从 RESERVED 进入 READY。可以在超时前执行
+   touch 来避免这种情况。
+4. 可以执行 kick 使 DELAYED 和 BURIED 的 job 进入 READY
+5. 可以执行 delete 删除 BURIED 和 RESERVED 的 job
+
+### 分布式
+
+从其官网上的代码可以看出 beanstalkd 是支持分布式的,如下:
+
+```c
+beanstalk = Beanstalk::Pool.new(['10.0.1.5:11300'])
+loop do
+  job = beanstalk.reserve
+  puts job.body # prints "hello"
+  job.delete
+end
+```

+ 5 - 1
content/res/best-sites.md

@@ -16,4 +16,8 @@ draft: false
 
 - [书格](https://new.shuge.org/)
 
-非常难得的是个人网站,提供大量线装图书影印版,免费。而且有一个在线论坛,有站长答疑,读者交流。
+非常难得的是个人网站,提供大量线装图书影印版,免费。而且有一个在线论坛,有站长答疑,读者交流。
+
+### 項目
+
+- [rtems OS](https://www.rtems.org/)

+ 1 - 0
content/res/docs_or_books.md

@@ -7,3 +7,4 @@ draft: true
 ## 列表
 
 - [Cocos Creator v2.4 CN](http://docs.cocos.com/creator/manual/zh/)
+- [OpenResty 最佳实践](https://moonbingbing.gitbooks.io/openresty-best-practices/content/)

+ 4 - 1
content/res/github_projects.md

@@ -10,6 +10,8 @@ draft: true
 - [Sonic](https://github.com/valeriansaliou/sonic)
 - [wukongd](https://github.com/vanderw/wukongd)
 - [hummingbot](https://github.com/CoinAlpha/hummingbot)
+
+- [minix](https://github.com/Stichting-MINIX-Research-Foundation/minix)
 - [toaruos](https://github.com/klange/toaruos)
 
 > A completely-from-scratch hobby operating system
@@ -22,4 +24,5 @@ draft: true
 ## Blog
 
 [三十分钟学会SED](https://github.com/mylxsw/growing-up/blob/master/doc/%E4%B8%89%E5%8D%81%E5%88%86%E9%92%9F%E5%AD%A6%E4%BC%9ASED.md)
-[三十分钟学会AWK](https://github.com/mylxsw/growing-up/blob/master/doc/%E4%B8%89%E5%8D%81%E5%88%86%E9%92%9F%E5%AD%A6%E4%BC%9AAWK.md)
+[三十分钟学会AWK](https://github.com/mylxsw/growing-up/blob/master/doc/%E4%B8%89%E5%8D%81%E5%88%86%E9%92%9F%E5%AD%A6%E4%BC%9AAWK.md)
+[跟我一起写Makefile](https://seisman.github.io/how-to-write-makefile/index.html)