SlideShare a Scribd company logo
1 of 23
Download to read offline
Beanstalkd 习
                   陈




11   11   11
绍


               • Beanstalkd       队
                 统




11   11   11
设计

               •
               •队
               • Producer-Comsumer


11   11   11
11   11   11
• job               处           务,
                 Beanstalkd            单   ,
                 tube

               • tube         务队   ,           储
                 jobs.   producer consumer          对



11   11   11
• producer Job     产    ,   过Put
                   job          tube

               • consumer Job      费       过reserve/
                 release/bury/delete       获   job     变
                 job     态



11   11   11
Beanstalkd jobs
11   11   11
协议

               • Beanstalk   应   层协议,运      TCP协议
                     .

               • Beanstalk 协议     ASCII编码




11   11   11
协议
               •   协议      户     发过               ,       们
                    规        处    这       ,
                        给对   .

               •       http协议规        务
                   时      传给     务        这   骤       ,
                                 务    处   ,       给       户



11   11   11
协议

               •Beanstalkd   协议         rn标
                  传输结

               •put<pri><delay>   <ttr><bytes>
                rn



11   11   11
码

               typedef struct job {
                   unsigned int pri;
                   int data_size;
                   int data_read;
                   unsigned char data[];
               } *job;



11   11   11
typedef struct conn {
                   int fd;
                   char state;
                   struct event evq;
                   char cmd[LINE_BUF_SIZE];
                   int cmd_len;
                   int cmd_read;
                   const char *reply;
                   int reply_len;
                   int reply_sent;
                   job job;
               } *conn;


11   11   11
过


               • listen_socket =make_server_socket
                   (HOST, PORT);
               •           Socket链   监   3232




11   11   11
过


               • set_sig_handlers();
               • 对SIGPIPE 进            获




11   11   11
过

               • event_set(&listen_evq, listen_socket,
                   EV_READ | EV_PERSIST, (evh)
                   h_accept,&listen_evq);
               •               listen_evq,绑
                   listen_socket.



11   11   11
过

               • event_add(&listen_evq, NULL);
               • event_dispatch();
               •          listen_evq, 让      进   环,
                     绪   处        .




11   11   11
过

               •              发,执   h_accept()   .

               • h_accept()           conn 设     state为
                 STATE_WANTCOMMAND.




11   11   11
过

               • event_set(&c->evq, c->fd, flags, c-
                 >evq.ev_callback ? : handler, c);
               • event_add(&c->evq, NULL);
               •            c->evq, 绑                 c->fd.
                           .



11   11   11
过

               •   发    c->evq,执     h_conn

               •   c->state 为STATE_WANTCOMMAND
                    寻     结        rn.      do_cmd()




11   11   11
过

               •     c->state 为STATE_WANTDATA读
                     ,          Job.     conn
                   Job.
               •          这   Job      Tube .(这
                     还    )



11   11   11
过


               •     c->state 为STATE_SENDWORD时,   c-
                   >fd




11   11   11
过


               • do_cmd()    负责处   put,peek,reserve
                     ,      对Job   处   .




11   11   11
谢谢!



11   11   11

More Related Content

Viewers also liked

Viewers also liked (8)

PFZ WorkshopDay Linux - Advanced
PFZ WorkshopDay Linux - AdvancedPFZ WorkshopDay Linux - Advanced
PFZ WorkshopDay Linux - Advanced
 
15 protips for mysql users pfz
15 protips for mysql users   pfz15 protips for mysql users   pfz
15 protips for mysql users pfz
 
Level db
Level dbLevel db
Level db
 
Paxos introduction
Paxos introductionPaxos introduction
Paxos introduction
 
Leveldb background
Leveldb backgroundLeveldb background
Leveldb background
 
Heroku CIを触ってみる
Heroku CIを触ってみるHeroku CIを触ってみる
Heroku CIを触ってみる
 
Awk programming
Awk programming Awk programming
Awk programming
 
Czzawk
CzzawkCzzawk
Czzawk
 

Similar to Beanstalk

探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUGYingSiang Geng
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践Jackson Tian
 
為什麼 App 卡卡的
為什麼 App 卡卡的為什麼 App 卡卡的
為什麼 App 卡卡的鈺翔 林
 
Pptv lb日志实时分析平台
Pptv lb日志实时分析平台Pptv lb日志实时分析平台
Pptv lb日志实时分析平台drewz lin
 

Similar to Beanstalk (7)

探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
 
Zoo keeper
Zoo keeperZoo keeper
Zoo keeper
 
為什麼 App 卡卡的
為什麼 App 卡卡的為什麼 App 卡卡的
為什麼 App 卡卡的
 
Zabbix in PPTV
Zabbix in PPTVZabbix in PPTV
Zabbix in PPTV
 
Pptv lb日志实时分析平台
Pptv lb日志实时分析平台Pptv lb日志实时分析平台
Pptv lb日志实时分析平台
 
Zoo keeper
Zoo keeperZoo keeper
Zoo keeper
 

Beanstalk

  • 1. Beanstalkd 习 陈 11 11 11
  • 2. • Beanstalkd 队 统 11 11 11
  • 3. 设计 • •队 • Producer-Comsumer 11 11 11
  • 4. 11 11 11
  • 5. • job 处 务, Beanstalkd 单 , tube • tube 务队 , 储 jobs. producer consumer 对 11 11 11
  • 6. • producer Job 产 , 过Put job tube • consumer Job 费 过reserve/ release/bury/delete 获 job 变 job 态 11 11 11
  • 8. 协议 • Beanstalk 应 层协议,运 TCP协议 . • Beanstalk 协议 ASCII编码 11 11 11
  • 9. 协议 • 协议 户 发过 , 们 规 处 这 , 给对 . • http协议规 务 时 传给 务 这 骤 , 务 处 , 给 户 11 11 11
  • 10. 协议 •Beanstalkd 协议 rn标 传输结 •put<pri><delay> <ttr><bytes> rn 11 11 11
  • 11. typedef struct job { unsigned int pri; int data_size; int data_read; unsigned char data[]; } *job; 11 11 11
  • 12. typedef struct conn { int fd; char state; struct event evq; char cmd[LINE_BUF_SIZE]; int cmd_len; int cmd_read; const char *reply; int reply_len; int reply_sent; job job; } *conn; 11 11 11
  • 13. • listen_socket =make_server_socket (HOST, PORT); • Socket链 监 3232 11 11 11
  • 14. • set_sig_handlers(); • 对SIGPIPE 进 获 11 11 11
  • 15. • event_set(&listen_evq, listen_socket, EV_READ | EV_PERSIST, (evh) h_accept,&listen_evq); • listen_evq,绑 listen_socket. 11 11 11
  • 16. • event_add(&listen_evq, NULL); • event_dispatch(); • listen_evq, 让 进 环, 绪 处 . 11 11 11
  • 17. • 发,执 h_accept() . • h_accept() conn 设 state为 STATE_WANTCOMMAND. 11 11 11
  • 18. • event_set(&c->evq, c->fd, flags, c- >evq.ev_callback ? : handler, c); • event_add(&c->evq, NULL); • c->evq, 绑 c->fd. . 11 11 11
  • 19. • 发 c->evq,执 h_conn • c->state 为STATE_WANTCOMMAND 寻 结 rn. do_cmd() 11 11 11
  • 20. • c->state 为STATE_WANTDATA读 , Job. conn Job. • 这 Job Tube .(这 还 ) 11 11 11
  • 21. • c->state 为STATE_SENDWORD时, c- >fd 11 11 11
  • 22. • do_cmd() 负责处 put,peek,reserve , 对Job 处 . 11 11 11
  • 23. 谢谢! 11 11 11