├── Makefile ├── README.md ├── chapter1.md ├── chapter2.md ├── chapter3.md ├── chapter4.md ├── cover.eps ├── cover.odg ├── hamacro.sty ├── images ├── fig1.eps ├── fig1.svg ├── fig10.eps ├── fig10.svg ├── fig11.eps ├── fig11.svg ├── fig12.eps ├── fig12.svg ├── fig13.eps ├── fig13.svg ├── fig14.eps ├── fig14.svg ├── fig15.eps ├── fig15.svg ├── fig16.eps ├── fig16.svg ├── fig17.eps ├── fig17.svg ├── fig18.eps ├── fig18.svg ├── fig19.eps ├── fig19.svg ├── fig2.eps ├── fig2.svg ├── fig20.eps ├── fig20.svg ├── fig21.eps ├── fig21.svg ├── fig22.eps ├── fig22.svg ├── fig23.eps ├── fig23.svg ├── fig24.eps ├── fig24.svg ├── fig25.eps ├── fig25.svg ├── fig26.eps ├── fig26.svg ├── fig27.eps ├── fig27.svg ├── fig28.eps ├── fig28.svg ├── fig29.eps ├── fig29.svg ├── fig3.eps ├── fig3.svg ├── fig30.eps ├── fig30.svg ├── fig31.eps ├── fig31.svg ├── fig32.eps ├── fig32.svg ├── fig33.eps ├── fig33.svg ├── fig34.eps ├── fig34.svg ├── fig35.eps ├── fig35.svg ├── fig36.eps ├── fig36.svg ├── fig37.eps ├── fig37.svg ├── fig38.eps ├── fig38.svg ├── fig39.eps ├── fig39.svg ├── fig4.eps ├── fig4.svg ├── fig40.eps ├── fig40.svg ├── fig41.eps ├── fig41.svg ├── fig42.eps ├── fig42.svg ├── fig43.eps ├── fig43.svg ├── fig44.eps ├── fig44.svg ├── fig45.eps ├── fig45.svg ├── fig46.eps ├── fig46.svg ├── fig47.eps ├── fig47.svg ├── fig48.eps ├── fig48.svg ├── fig49.eps ├── fig49.svg ├── fig5.eps ├── fig5.svg ├── fig50.eps ├── fig50.svg ├── fig51.eps ├── fig51.svg ├── fig52.eps ├── fig52.svg ├── fig53.eps ├── fig53.svg ├── fig54.eps ├── fig54.svg ├── fig55.eps ├── fig55.svg ├── fig56.eps ├── fig56.svg ├── fig57.eps ├── fig57.svg ├── fig58.eps ├── fig58.svg ├── fig59.eps ├── fig59.svg ├── fig6.eps ├── fig6.svg ├── fig60.eps ├── fig60.svg ├── fig61.eps ├── fig61.svg ├── fig62.eps ├── fig62.svg ├── fig63.eps ├── fig63.svg ├── fig64.eps ├── fig64.svg ├── fig65.eps ├── fig65.svg ├── fig66.eps ├── fig66.svg ├── fig67.eps ├── fig67.svg ├── fig68.eps ├── fig68.svg ├── fig69.eps ├── fig69.svg ├── fig7.eps ├── fig7.svg ├── fig70.eps ├── fig70.svg ├── fig8.eps ├── fig8.svg ├── fig9.eps └── fig9.svg ├── macro.m4 ├── meta.yaml ├── noto.map ├── postface.md ├── preface.md ├── template.tex ├── title.eps └── title.odg /Makefile: -------------------------------------------------------------------------------- 1 | #LATEX=platex 2 | LATEX=uplatex 3 | PANDOC=pandoc 4 | PANDOC_OPT=--toc --toc-depth=3 --chapters 5 | DVIPDFMX=dvipdfmx 6 | DVIPDFMX_OPT=-f noto 7 | 8 | NAME=zguide-ja 9 | TEMPLATE=template.tex 10 | 11 | SRCS=macro.m4 meta.yaml preface.md chapter1.md chapter2.md chapter3.md chapter4.md postface.md 12 | MD=$(NAME).md 13 | TEX=$(NAME).tex 14 | DVI=$(NAME).dvi 15 | PDF=$(NAME).pdf 16 | EPUB=$(NAME).epub 17 | HTML=$(NAME).html 18 | 19 | EXAMPLE_LANG=C 20 | EXAMPLE_EXT=c 21 | #EXAMPLE_LANG=Perl 22 | #EXAMPLE_EXT=pl 23 | 24 | # filter original text 25 | ORIGINAL_FILTER=sed -e 's/^;.*//' 26 | #ORIGINAL_FILTER=sed -e 's/^;\(.*\)/\1/' 27 | 28 | %.dvi: %.tex 29 | $(LATEX) $< 30 | $(LATEX) $< 31 | 32 | %.pdf: %.dvi 33 | $(DVIPDFMX) $(DVIPDFMX_OPT) $^ 34 | 35 | all: $(PDF) 36 | 37 | clean: 38 | rm -rf *.log *.out *.aux *.toc $(MD) $(TEX) $(DVI) $(PDF) $(EPUB) $(HTML) 39 | 40 | $(MD): $(SRCS) 41 | m4 -DEXAMPLE_LANG=$(EXAMPLE_LANG) -DEXAMPLE_EXT=$(EXAMPLE_EXT) $^ | ${ORIGINAL_FILTER} > $@ 42 | 43 | $(EPUB): $(MD) 44 | $(PANDOC) -o $@ $< 45 | 46 | $(HTML): $(MD) 47 | $(PANDOC) -o $@ $< 48 | 49 | $(TEX): $(MD) $(TEMPLATE) 50 | $(PANDOC) -f markdown -t latex $(PANDOC_OPT) --template=$(TEMPLATE) $< | sed -e 's/\\begin{figure}\(\[.*\]\)\?/\\begin{figure}\[H\]/g' > $@ 51 | 52 | $(DVI): $(TEX) 53 | 54 | $(PDF): $(DVI) 55 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ØMQガイドブック 2 | ================ 3 | 4 | 「ØMQガイドブック」はPieter Hintjens著「[ØMQ - The Guide](http://zguide.zeromq.org/)」の和訳版です。 5 | 6 | 誤字・誤訳等ありましたら[@hamano](https://twitter.com/hamano)まで連絡下さい。 7 | 8 | # 目次 9 | * [まえがき](preface.md) 10 | * [1章 - 基礎](chapter1.md) 11 | * 2章 - ソケットとパターン 12 | * 3章 - リクエスト・応答パターンの応用 13 | * 4章 - リクエスト・応答パターンの信頼性 14 | * 5章 - Pub-Subパターンの応用 15 | * 6章 - ØMQコミュニティ 16 | * 7章 - ØMQを活用した応用アーキテクチャ 17 | * 8章 - 分散コンピューティングフレームワーク 18 | * [あとがき](postface.md) 19 | -------------------------------------------------------------------------------- /cover.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamano/zguide-ja/ea3ae5702bef243a55c4092f5550401c9bf2b8d4/cover.odg -------------------------------------------------------------------------------- /images/fig1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | 23 | 24 | 25 | 26 | 28 | 33 | 39 | 45 | 50 | 51 | 60 | 63 | 64 | 73 | 76 | 77 | 78 | 81 | 83 | 87 | TCPソケット 92 | 93 | 95 | 99 | 0MQソケット 104 | 105 | 106 | 109 | 111 | 115 | 116 | 118 | 122 | 123 | 125 | 129 | 130 | 132 | 136 | 137 | 138 | 141 | ZAP! 146 | BOOM! 151 | POW!! 156 | 全身タイツ 161 | 宇宙線 166 | ソビエトの放射性同位元素 171 | 172 | 173 | -------------------------------------------------------------------------------- /images/fig10.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | GET /index.html 31 | 32 | 13 33 | 34 | 10 35 | 36 | 13 37 | 38 | 10 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /images/fig11.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | 5 31 | 32 | H 33 | 34 | E 35 | 36 | L 37 | 38 | L 39 | 40 | O 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /images/fig2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | 23 | 24 | 25 | 26 | 28 | 33 | 39 | 45 | 50 | 51 | 60 | 63 | 64 | 73 | 76 | 77 | 78 | 81 | 83 | 87 | クライアント 92 | REQ 97 | 98 | 100 | 104 | REP 109 | サーバー 114 | 115 | 116 | 119 | 121 | 124 | 125 | 127 | 130 | 131 | 133 | 137 | 138 | 140 | 144 | 145 | 146 | 149 | Hello 154 | World 159 | 160 | 161 | -------------------------------------------------------------------------------- /images/fig21.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | 23 | 24 | 25 | 26 | 28 | 33 | 39 | 45 | 50 | 51 | 60 | 63 | 64 | 73 | 76 | 77 | 78 | 81 | 83 | 87 | ステップ1 92 | PAIR 97 | 98 | 100 | 104 | PAIR 109 | ステップ2 114 | PAIR 119 | 120 | 122 | 126 | PAIR 131 | ステップ3 136 | 137 | 138 | 141 | 143 | 146 | 147 | 149 | 152 | 153 | 155 | 158 | 159 | 161 | 164 | 165 | 167 | 170 | 171 | 173 | 177 | 178 | 180 | 183 | 184 | 186 | 190 | 191 | 192 | 195 | Ready! 200 | Ready! 205 | 206 | 207 | -------------------------------------------------------------------------------- /images/fig22.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | 23 | 24 | 25 | 26 | 28 | 33 | 39 | 45 | 50 | 51 | 60 | 63 | 64 | 73 | 76 | 77 | 78 | 81 | 83 | 87 | 92 | パブリッシャー 95 | 96 | PUB 101 | REP 106 | 107 | 109 | 113 | SUB 118 | REQ 123 | 128 | サブスクライバー 131 | 132 | 133 | 134 | 137 | 139 | 142 | 143 | 145 | 148 | 149 | 151 | 154 | 155 | 157 | 161 | 162 | 164 | 167 | 168 | 170 | 173 | 174 | 176 | 180 | 181 | 183 | 186 | 187 | 189 | 192 | 193 | 195 | 199 | 200 | 201 | 204 | (3) 209 | (2) 214 | (1) 219 | 220 | 221 | -------------------------------------------------------------------------------- /images/fig23.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | 23 | 24 | 25 | 26 | 28 | 33 | 39 | 45 | 50 | 51 | 60 | 63 | 64 | 73 | 76 | 77 | 78 | 81 | 83 | 87 | キー 92 | データ 97 | 98 | 99 | 102 | 104 | 107 | 108 | 109 | 112 | フレーム1 117 | メッセージ エンベロープ 122 | フレーム2 127 | メッセージ本文 132 | 133 | 134 | -------------------------------------------------------------------------------- /images/fig24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | 23 | 24 | 25 | 26 | 28 | 33 | 39 | 45 | 50 | 51 | 60 | 63 | 64 | 73 | 76 | 77 | 78 | 81 | 83 | 87 | キー 92 | アドレス 97 | データ 102 | 103 | 104 | 107 | 109 | 112 | 113 | 115 | 118 | 119 | 120 | 123 | フレーム1 128 | サブスクリプション キー 133 | フレーム2 138 | パブリッシャーのアドレス 143 | フレーム3 148 | メッセージ本体 153 | 154 | 155 | -------------------------------------------------------------------------------- /images/fig26.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | 0 31 | 32 | 33 | 34 | 35 | 5 36 | 37 | Hello 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | Frame 1 48 | Empty delimiter frame 49 | Frame 2 50 | Data frame 51 | 52 | 53 | -------------------------------------------------------------------------------- /images/fig27.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | REQ 31 | 32 | 33 | 34 | 35 | REP 36 | 37 | 38 | 39 | 40 | REQ 41 | 42 | 43 | 44 | 45 | ROUTER 46 | 47 | DEALER 48 | 49 | 50 | 51 | 52 | REP 53 | 54 | 55 | 56 | 57 | REQ 58 | 59 | 60 | 61 | 62 | ROUTER 63 | 64 | DEALER 65 | 66 | 67 | 68 | 69 | ROUTER 70 | 71 | DEALER 72 | 73 | 74 | 75 | 76 | REP 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /images/fig28.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | 3 31 | 32 | ABC 33 | 34 | 35 | 36 | 37 | 0 38 | 39 | 40 | 41 | 42 | 5 43 | 44 | Hello 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | Frame 1 58 | Identity of connection 59 | Frame 2 60 | Empty delimiter frame 61 | Frame 3 62 | Data frame 63 | 64 | 65 | -------------------------------------------------------------------------------- /images/fig29.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | 3 31 | 32 | ABC 33 | 34 | 35 | 36 | 37 | 0 38 | 39 | 40 | 41 | 42 | 5 43 | 44 | World 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | Frame 1 58 | Identity of connection 59 | Frame 2 60 | Empty delimiter frame 61 | Frame 3 62 | Data frame 63 | 64 | 65 | -------------------------------------------------------------------------------- /images/fig3.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | 5 31 | 32 | 33 | 34 | 35 | H 36 | 37 | e 38 | 39 | l 40 | 41 | l 42 | 43 | o 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /images/fig30.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | 0 31 | 32 | 33 | 34 | 35 | 5 36 | 37 | World 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | Frame 1 48 | Empty delimiter frame 49 | Frame 2 50 | Data frame 51 | 52 | 53 | -------------------------------------------------------------------------------- /images/fig31.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | n 31 | 32 | ... 33 | 34 | 35 | 36 | 37 | 0 38 | 39 | 40 | 41 | 42 | n 43 | 44 | ... 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | Frame 1 58 | Identity of connection 59 | Frame 2 60 | Empty delimiter frame 61 | Frame 3 62 | Data frame 63 | 64 | 65 | -------------------------------------------------------------------------------- /images/fig32.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Client 31 | 32 | REQ 33 | 34 | 35 | 36 | 37 | Client 38 | 39 | REQ 40 | 41 | 42 | 43 | 44 | Client 45 | 46 | REQ 47 | 48 | 49 | 50 | 51 | ROUTER 52 | 53 | Proxy 54 | 55 | ROUTER 56 | 57 | 58 | 59 | 60 | REQ 61 | 62 | Worker 63 | 64 | 65 | 66 | 67 | REQ 68 | 69 | Worker 70 | 71 | 72 | 73 | 74 | REQ 75 | 76 | Worker 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | Frontend 120 | Load balancer 121 | Backend 122 | 123 | 124 | -------------------------------------------------------------------------------- /images/fig33.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | 5 31 | 32 | Hello 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | Frame 1 43 | Data frame 44 | 45 | 46 | -------------------------------------------------------------------------------- /images/fig34.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | 6 31 | 32 | CLIENT 33 | 34 | 35 | 36 | 37 | 0 38 | 39 | 40 | 41 | 42 | 5 43 | 44 | Hello 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | Frame 1 58 | Client address 59 | Frame 2 60 | Empty delimiter frame 61 | Frame 3 62 | Data frame 63 | 64 | 65 | -------------------------------------------------------------------------------- /images/fig35.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | 6 31 | 32 | WORKER 33 | 34 | 35 | 36 | 37 | 0 38 | 39 | 40 | 41 | 42 | 6 43 | 44 | 45 | 46 | 47 | CLIENT 48 | 49 | 50 | 51 | 52 | 0 53 | 54 | 55 | 56 | 57 | 5 58 | 59 | Hello 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | Frame 1 73 | Address of worker 74 | Frame 2 75 | Empty delimiter frame 76 | Frame 3 77 | Identity of client 78 | Frame 4 79 | Empty delimiter frame 80 | Frame 5 81 | Data frame 82 | 83 | 84 | -------------------------------------------------------------------------------- /images/fig36.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | 6 31 | 32 | CLIENT 33 | 34 | 35 | 36 | 37 | 0 38 | 39 | 40 | 41 | 42 | 5 43 | 44 | Hello 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | Frame 1 58 | Identity of client 59 | Frame 2 60 | Empty delimiter frame 61 | Frame 3 62 | Data frame 63 | 64 | 65 | -------------------------------------------------------------------------------- /images/fig37.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Client 31 | 32 | DEALER 33 | 34 | 35 | 36 | 37 | Client 38 | 39 | DEALER 40 | 41 | 42 | 43 | 44 | ROUTER 45 | 46 | Server 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /images/fig39.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Client 31 | 32 | REQ 33 | 34 | 35 | 36 | 37 | Client 38 | 39 | REQ 40 | 41 | 42 | 43 | 44 | Client 45 | 46 | REQ 47 | 48 | 49 | 50 | 51 | ROUTER 52 | 53 | Load 54 | 55 | balancer 56 | 57 | ROUTER 58 | 59 | 60 | 61 | 62 | REQ 63 | 64 | Worker 65 | 66 | 67 | 68 | 69 | REQ 70 | 71 | Worker 72 | 73 | 74 | 75 | 76 | REQ 77 | 78 | Worker 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | Broker 122 | 123 | 124 | -------------------------------------------------------------------------------- /images/fig41.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | ROUTER 31 | 32 | 33 | 34 | 35 | ROUTER 36 | 37 | 38 | 39 | 40 | ROUTER 41 | 42 | Worker 43 | 44 | 45 | 46 | 47 | ROUTER 48 | 49 | Worker 50 | 51 | 52 | 53 | 54 | ROUTER 55 | 56 | Worker 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | Cluster 1 100 | Cluster 2 101 | 102 | 103 | -------------------------------------------------------------------------------- /images/fig43.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | C 31 | 32 | 33 | 34 | 35 | C 36 | 37 | 38 | 39 | 40 | C 41 | 42 | 43 | 44 | 45 | C 46 | 47 | 48 | 49 | 50 | Broker 51 | 52 | 53 | 54 | 55 | Broker 56 | 57 | 58 | 59 | 60 | W 61 | 62 | 63 | 64 | 65 | W 66 | 67 | 68 | 69 | 70 | W 71 | 72 | 73 | 74 | 75 | W 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | Cluster 1 119 | Cluster 2 120 | : 121 | : 122 | 123 | 124 | -------------------------------------------------------------------------------- /images/fig45.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Broker 31 | 32 | statebe 33 | 34 | bind 35 | 36 | 37 | 38 | 39 | connect 40 | 41 | statefe 42 | 43 | SUB 44 | 45 | Broker 46 | 47 | PUB 48 | 49 | statebe 50 | 51 | bind 52 | 53 | 54 | 55 | 56 | connect 57 | 58 | statefe 59 | 60 | Broker 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | state 98 | state 99 | 100 | 101 | -------------------------------------------------------------------------------- /images/fig47.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Client 31 | 32 | Retry 33 | 34 | REQ 35 | 36 | 37 | 38 | 39 | Client 40 | 41 | Retry 42 | 43 | REQ 44 | 45 | 46 | 47 | 48 | Client 49 | 50 | Retry 51 | 52 | REQ 53 | 54 | 55 | 56 | 57 | REP 58 | 59 | Server 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /images/fig50.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Client 31 | 32 | 33 | 34 | 35 | Client 36 | 37 | 38 | 39 | 40 | Client 41 | 42 | 43 | 44 | 45 | Broker 46 | 47 | 48 | 49 | 50 | "Water" 51 | 52 | Worker 53 | 54 | 55 | 56 | 57 | "Tea" 58 | 59 | Worker 60 | 61 | 62 | 63 | 64 | "Coffee" 65 | 66 | Worker 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | "Give me coffee" 95 | "Give me tea" 96 | 97 | 98 | -------------------------------------------------------------------------------- /images/fig51.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Client 31 | 32 | 33 | 34 | 35 | Client 36 | 37 | 38 | 39 | 40 | Client 41 | 42 | 43 | 44 | 45 | Broker 46 | 47 | 48 | 49 | 50 | Titanic 51 | 52 | 53 | 54 | 55 | Disk 56 | 57 | 58 | 59 | 60 | "Water" 61 | 62 | Worker 63 | 64 | 65 | 66 | 67 | "Tea" 68 | 69 | Worker 70 | 71 | 72 | 73 | 74 | "Coffee" 75 | 76 | Worker 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | Titanic, 111 | "Titanic, 112 | give me coffee" 113 | give me tea" 114 | 115 | 116 | -------------------------------------------------------------------------------- /images/fig52.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Primary 31 | 32 | "active" 33 | 34 | 35 | 36 | 37 | Backup 38 | 39 | "passive" 40 | 41 | 42 | 43 | 44 | Client 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /images/fig53.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Primary 31 | 32 | "passive" 33 | 34 | 35 | 36 | 37 | Backup 38 | 39 | "active" 40 | 41 | 42 | 43 | 44 | Client 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /images/fig54.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Primary 31 | 32 | 33 | 34 | 35 | Active 36 | 37 | 38 | 39 | 40 | Backup 41 | 42 | 43 | 44 | 45 | Error! 46 | 47 | 48 | 49 | 50 | Passive 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | Start 94 | Start 95 | Client Request 96 | Client Request 97 | Peer Backup 98 | Peer Active 99 | Peer Active 100 | Peer Active 101 | Peer Backup 102 | Peer Primary 103 | Peer Passive 104 | Client Vote 105 | 106 | 107 | -------------------------------------------------------------------------------- /images/fig55.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Client 31 | 32 | 33 | 34 | 35 | Client 36 | 37 | 38 | 39 | 40 | Client 41 | 42 | 43 | 44 | 45 | Server 46 | 47 | 48 | 49 | 50 | Server 51 | 52 | 53 | 54 | 55 | Server 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | connect 75 | connect 76 | connect 77 | bind 78 | bind 79 | bind 80 | 81 | 82 | -------------------------------------------------------------------------------- /images/fig56.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Publisher 31 | 32 | PUB 33 | 34 | 35 | 36 | 37 | SUB 38 | 39 | Subscriber 40 | 41 | PUSH 42 | 43 | 44 | 45 | 46 | PULL 47 | 48 | Worker 49 | 50 | 51 | 52 | 53 | PULL 54 | 55 | Worker 56 | 57 | 58 | 59 | 60 | PULL 61 | 62 | Worker 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | Fast box 100 | 101 | 102 | -------------------------------------------------------------------------------- /images/fig57.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Publisher 31 | 32 | PUB 33 | 34 | PUB 35 | 36 | 37 | 38 | 39 | SUB 40 | 41 | SUB 42 | 43 | Subscriber 44 | 45 | PUSH PUSH 46 | 47 | 48 | 49 | 50 | PULL 51 | 52 | Worker 53 | 54 | 55 | 56 | 57 | PULL 58 | 59 | Worker 60 | 61 | 62 | 63 | 64 | PULL 65 | 66 | Worker 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | Fast box 122 | 123 | 124 | -------------------------------------------------------------------------------- /images/fig58.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Server 31 | 32 | PUB 33 | 34 | 35 | 36 | 37 | SUB 38 | 39 | Client 40 | 41 | 42 | 43 | 44 | SUB 45 | 46 | Client 47 | 48 | 49 | 50 | 51 | SUB 52 | 53 | Client 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | updates 82 | 83 | 84 | -------------------------------------------------------------------------------- /images/fig59.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Server 31 | 32 | PUB 33 | 34 | ROUTER 35 | 36 | 37 | 38 | 39 | SUB 40 | 41 | DEALER 42 | 43 | Client 44 | 45 | 46 | 47 | 48 | SUB 49 | 50 | DEALER 51 | 52 | Client 53 | 54 | 55 | 56 | 57 | SUB 58 | 59 | DEALER 60 | 61 | Client 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | state request 105 | updates 106 | 107 | 108 | -------------------------------------------------------------------------------- /images/fig6.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | 23 | 24 | 25 | 26 | 28 | 33 | 39 | 45 | 50 | 51 | 60 | 63 | 64 | 73 | 76 | 77 | 78 | 81 | 83 | 87 | PUSH 92 | 93 | 95 | 99 | PUSH 104 | 105 | 107 | 111 | PUSH 116 | 117 | 119 | 123 | PULL 128 | 129 | 130 | 133 | 135 | 138 | 139 | 141 | 144 | 145 | 147 | 150 | 151 | 153 | 156 | 157 | 160 | 164 | 165 | 167 | 170 | 171 | 172 | 175 | R1, R2, R3 180 | R4 185 | R5, R6 190 | 平衡キューイング 195 | R1, R4, R5, R2, R6, R3 200 | 201 | 202 | -------------------------------------------------------------------------------- /images/fig60.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Server 31 | 32 | PUB 33 | 34 | ROUTER 35 | 36 | PULL 37 | 38 | 39 | 40 | 41 | SUB 42 | 43 | DEALER 44 | 45 | PUSH 46 | 47 | Client 48 | 49 | 50 | 51 | 52 | SUB 53 | 54 | DEALER 55 | 56 | PUSH 57 | 58 | Client 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | state update 114 | state request 115 | updates 116 | 117 | 118 | -------------------------------------------------------------------------------- /images/fig61.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Initial 31 | 32 | 33 | 34 | 35 | Syncing 36 | 37 | 38 | 39 | 40 | Active 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | Request snapshot 78 | INPUT 79 | Store snapshot 80 | SILENCE 81 | Failover to next 82 | KTHXBAI 83 | INPUT 84 | Store update 85 | SILENCE 86 | Failover to next 87 | 88 | 89 | -------------------------------------------------------------------------------- /images/fig62.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Primary 31 | 32 | PUB 33 | 34 | ROUTER 35 | 36 | SUB 37 | 38 | 39 | 40 | 41 | Backup 42 | 43 | PUB 44 | 45 | ROUTER 46 | 47 | SUB 48 | 49 | 50 | 51 | 52 | SUB 53 | 54 | DEALER 55 | 56 | PUB 57 | 58 | Client 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | Binary 108 | Star 109 | 110 | 111 | -------------------------------------------------------------------------------- /images/fig63.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Calling 31 | 32 | Application 33 | 34 | Frontend 35 | 36 | Object 37 | 38 | PAIR 39 | 40 | 41 | 42 | 43 | PAIR 44 | 45 | Backend 46 | 47 | Agent 48 | 49 | DEALER 50 | 51 | SUB 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | Clone class 80 | 81 | 82 | -------------------------------------------------------------------------------- /images/fig64.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Start 31 | 32 | 33 | 34 | 35 | OHAI 36 | 37 | 38 | 39 | 40 | Authenticated 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | Check Credentials 54 | 55 | 56 | -------------------------------------------------------------------------------- /images/fig65.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Authenticated 31 | 32 | 33 | 34 | 35 | ok 36 | 37 | 38 | 39 | 40 | Ready 41 | 42 | 43 | 44 | 45 | error 46 | 47 | 48 | 49 | 50 | Start 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | Send OHAI-OK 70 | Send WTF 71 | 72 | 73 | -------------------------------------------------------------------------------- /images/fig66.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Ready 31 | 32 | 33 | 34 | 35 | ICANHAZ 36 | 37 | 38 | 39 | 40 | Ready 41 | 42 | 43 | 44 | 45 | HUGZ 46 | 47 | 48 | 49 | 50 | Ready 51 | 52 | 53 | 54 | 55 | heartbeat 56 | 57 | 58 | 59 | 60 | Ready 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | Send CHEEZBURGER 86 | Send HUGZ-OK 87 | Send HUGZ 88 | 89 | 90 | -------------------------------------------------------------------------------- /images/fig67.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Z 31 | 32 | R 33 | 34 | E 35 | 36 | %x01 37 | 38 | 39 | 40 | 41 | UUID 42 | 43 | port 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | Header 63 | Body 64 | 65 | 66 | -------------------------------------------------------------------------------- /images/fig69.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | Node 31 | 32 | PUB 33 | 34 | 35 | 36 | 37 | Node 38 | 39 | PUB 40 | 41 | 42 | 43 | 44 | Node 45 | 46 | PUB 47 | 48 | 49 | 50 | 51 | SUB 52 | 53 | Collector 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /images/fig7.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | 23 | 24 | 25 | 26 | 28 | 33 | 39 | 45 | 50 | 51 | 60 | 63 | 64 | 73 | 76 | 77 | 78 | 81 | 83 | 87 | 部品A 92 | 93 | 95 | 99 | 部品B 104 | 105 | 106 | 109 | 111 | 115 | 116 | 118 | 122 | 123 | 124 | 128 | TCP 133 | 134 | 135 | -------------------------------------------------------------------------------- /images/fig70.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 29 | 30 | 1 31 | 32 | 0 33 | 34 | 1 35 | 36 | 0 37 | 38 | 1 39 | 40 | 0 41 | 42 | 1 43 | 44 | 0 45 | 46 | 47 | 48 | 49 | 1 50 | 51 | 0 52 | 53 | 1 54 | 55 | 0 56 | 57 | Signature 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | Byte 0 98 | Byte 1 99 | 100 | 101 | -------------------------------------------------------------------------------- /images/fig9.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 16 | 17 | 19 | image/svg+xml 20 | 22 | 23 | 24 | 25 | 26 | 28 | 33 | 39 | 45 | 50 | 51 | 60 | 63 | 64 | 73 | 76 | 77 | 78 | 81 | 83 | 87 | ノード 92 | ソケット 97 | 98 | 100 | 104 | ソケット 109 | ノード 114 | 115 | 116 | 119 | 121 | 124 | 125 | 127 | 130 | 131 | 135 | 141 | 142 | 146 | 1 151 | 156 | 1 161 | 162 | 163 | -------------------------------------------------------------------------------- /macro.m4: -------------------------------------------------------------------------------- 1 | changequote(<<<,>>>)dnl 2 | undefine(substr)dnl 3 | ifdef(EXAMPLE_LANG, , define(<<>>, <<>>))dnl 4 | -------------------------------------------------------------------------------- /meta.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | title: ØMQガイドブック 3 | subtitle: ØMQ - The Guide 4 | author: Pieter Hintjens 5 | translator: 濱野 司 6 | authors: Pieter Hintjens 著 / HAMANO Tsukasa 訳 7 | keywords: ZeroMQ 0MQ ZMQ ØMQ The Guide 日本語 和訳 8 | version: 0.6 9 | --- 10 | -------------------------------------------------------------------------------- /noto.map: -------------------------------------------------------------------------------- 1 | 2 | % TEXT, 90JIS 3 | uphminl-h unicode NotoSerifCJKjp-Light.otf 4 | uphminl-v unicode NotoSerifCJKjp-Light.otf 5 | uphminr-h unicode NotoSerifCJKjp-Medium.otf 6 | uphminr-v unicode NotoSerifCJKjp-Medium.otf 7 | uphminb-h unicode NotoSerifCJKjp-Bold.otf 8 | uphminb-v unicode NotoSerifCJKjp-Bold.otf 9 | uphgothr-h unicode NotoSansCJKjp-Regular.otf 10 | uphgothr-v unicode NotoSansCJKjp-Regular.otf 11 | uphgothb-h unicode NotoSansCJKjp-Bold.otf 12 | uphgothb-v unicode NotoSansCJKjp-Bold.otf 13 | uphgotheb-h unicode NotoSansCJKjp-Black.otf 14 | uphgotheb-v unicode NotoSansCJKjp-Black.otf 15 | uphmgothr-h unicode NotoSansCJKjp-Thin.otf 16 | uphmgothr-v unicode NotoSansCJKjp-Thin.otf 17 | 18 | % TEXT, JIS04 19 | uphminln-h unicode NotoSerifCJKjp-Light.otf 20 | uphminln-v unicode NotoSerifCJKjp-Light.otf 21 | uphminrn-h unicode NotoSerifCJKjp-Medium.otf 22 | uphminrn-v unicode NotoSerifCJKjp-Medium.otf 23 | uphminbn-h unicode NotoSerifCJKjp-Bold.otf 24 | uphminbn-v unicode NotoSerifCJKjp-Bold.otf 25 | uphgothrn-h unicode NotoSansCJKjp-Regular.otf 26 | uphgothrn-v unicode NotoSansCJKjp-Regular.otf 27 | uphgothbn-h unicode NotoSansCJKjp-Bold.otf 28 | uphgothbn-v unicode NotoSansCJKjp-Bold.otf 29 | uphgothebn-h unicode NotoSansCJKjp-Black.otf 30 | uphgothebn-v unicode NotoSansCJKjp-Black.otf 31 | uphmgothrn-h unicode NotoSansCJKjp-Thin.otf 32 | uphmgothrn-v unicode NotoSansCJKjp-Thin.otf 33 | -------------------------------------------------------------------------------- /postface.md: -------------------------------------------------------------------------------- 1 | # あとがき {-} 2 | 3 | ## ライセンス {-} 4 | ;I want people to reuse this text in their own work: in presentations, articles, and even other books. However, the deal is that if they remix my work, others can remix theirs. I'd like credit, and have no argument against others making money from their remixes. Thus, the text is licensed under cc-by-sa. 5 | 6 | 私は多くの人達にこのテキストを雑誌、本、プレゼンテーションなどの仕事で再利用して欲しいと思っています。 7 | 誰かがこの本を再編集したら他の誰かがまた再編集出来ることが条件になります。 8 | 誰かが再編集したものを販売してもそれは私にとって名誉であり異論はありません。 9 | このテキストはcc-by-saライセンスで公開しています。 10 | 11 | ;For the examples, we started with GPL, but it rapidly became clear this wasn't workable. The point of examples is to give people reusable code fragments so they will use ØMQ more widely, and if these are GPL, that won't happen. We switched to MIT/X11, even for the larger and more complex examples that conceivably would work as LGPL. 12 | 13 | 当初、サンプルコードはGPLで公開していましたが、上手くいかない事がすぐにわかりました。 14 | サンプルーコードはそのコード片を幅広い用途で再利用出来る必要があります。 15 | GPLではそれが困難でした。 16 | そこで、サンプルコードのライセンスをMIT/X11に切り替えました。 17 | 規模が大きくてより複雑なサンプルコードに関してはLGPLでも上手くいくだろうと考えられます。 18 | 19 | ;However, when we started turning the examples into standalone projects (as with Majordomo), we used the LGPL. Again, remixability trumps dissemination. Licenses are tools; use them with intent, not ideology. 20 | 21 | そして、サンプルコードはMajordomoの様に独立したプロジェクトに移行を始めており、そこではLGPLを使用しています。 22 | 重ねて言いますが、普及と再編集性に適しているからです。 23 | ライセンスはツールであり、目的があって選択しているのであってイデオロギーではありません。 24 | 25 | -------------------------------------------------------------------------------- /preface.md: -------------------------------------------------------------------------------- 1 | # まえがき {-} 2 | 3 | ## 訳者より {-} 4 | この本はØMQというライブラリの入門書という体裁になっていますが、もっと一般的なメッセージングシステムの設計方法を学べるように書かれています。 5 | マルチスレッドプログラミングおよびネットワークプログラミングで起こる一般的な問題の解決方法や、分散アプリケーションの設計方法などを学ぶことが出来ます。 6 | たとえば、P2Pアプリケーションや分散ハッシュテーブルなどの基盤を実装したいと考えている方にもおすすめの本です。 7 | 8 | この本の原文は全8章で構成されており、現在4章までの翻訳が完了しています。 9 | 10 | 誤字・誤訳等ありましたら[\@hamano](https://twitter.com/hamano)まで連絡下さい。 11 | 校正を手伝ってくれた亀井亜佐夫さんに感謝します。 12 | 13 | ## ØMQとは {-} 14 | ;ØMQ (also known as ZeroMQ, 0MQ, or zmq) looks like an embeddable networking library but acts like a concurrency framework. It gives you sockets that carry atomic messages across various transports like in-process, inter-process, TCP, and multicast. You can connect sockets N-to-N with patterns like fan-out, pub-sub, task distribution, and request-reply. It's fast enough to be the fabric for clustered products. Its asynchronous I/O model gives you scalable multicore applications, built as asynchronous message-processing tasks. It has a score of language APIs and runs on most operating systems. ØMQ is from iMatix and is LGPLv3 open source. 15 | 16 | ØMQ(ZeroMQ, 0MQ, zmq などとも呼ばれます)は組み込みネットワークライブラリと言うことも出来ますが、並行フレームワークの様にも機能します。 17 | ØMQはプロセス内通信、プロセス間通信、TCPやマルチキャストの様な幅広い通信手段を用いてアトミックにメッセージを転送する通信ソケットを提供します。 18 | ソケットをファンアウト、Pub-Sub、タスク分散、リクエスト・応答の様なパターンでN対Nで接続できます。 19 | 非同期I/Oモデルにより、マルチコア環境でスケーラブルな非同期メッセージ処理を行うアプリケーションを構築可能で、製品クラスタを構成する上で十分高速です。 20 | ØMQは多くのプログラミング言語向けのAPIを持ち、ほとんどのOSで動作します。 21 | ØMQは[iMatix](http://www.imatix.com/)で開発され、LGPLv3ライセンスで配布されています。 22 | 23 | ## 事の発端 {-} 24 | ;We took a normal TCP socket, injected it with a mix of radioactive isotopes stolen from a secret Soviet atomic research project, bombarded it with 1950-era cosmic rays, and put it into the hands of a drug-addled comic book author with a badly-disguised fetish for bulging muscles clad in spandex. Yes, ØMQ sockets are the world-saving superheroes of the networking world. 25 | 26 | 我々は通常のTCPを手にしている。それにソビエトの秘密研究所から盗まれた放射性同位元素が注入され、1950年代の宇宙線が放射された。 27 | それはひどい変装趣味の漫画作家に渡り、全身タイツをまとい、筋肉が盛り上がった。 28 | ええ、こうしてØMQソケットはネットワーキングの世界を守るスーパーヒーローになったのです。 29 | 30 | ![恐ろしいアクシデント](images/fig1.eps) 31 | 32 | ## ゼロの哲学 {-} 33 | ;The Ø in ØMQ is all about tradeoffs. On the one hand this strange name lowers ØMQ's visibility on Google and Twitter. On the other hand it annoys the heck out of some Danish folk who write us things like "ØMG røtfl", and "Ø is not a funny looking zero!" and "Rødgrød med Fløde!", which is apparently an insult that means "may your neighbours be the direct descendants of Grendel!" Seems like a fair trade. 34 | 35 | ØMQのØはトレードオフが本質です。 36 | まず、この奇妙な名前によってGoogleやTwitterの検索での可視性が低下しています。 37 | 一方で、デンマークのひどい奴らが「ØMG(笑)」とか「Øは変な形をしたゼロではない」とか「Rødgrød med Fløde!」(クリームがのったデンマークのおやつ)とか言ってくるのは明らかな侮辱であり、不愉快です。うん、どうやらこれはフェアなトレードだ。 38 | 39 | ;Originally the zero in ØMQ was meant as "zero broker" and (as close to) "zero latency" (as possible). Since then, it has come to encompass different goals: zero administration, zero cost, zero waste. More generally, "zero" refers to the culture of minimalism that permeates the project. We add power by removing complexity rather than by exposing new functionality. 40 | 41 | 元来、ØMQのゼロは「仲介無し」や(出来るだけ)「遅延ゼロ」(に近づける)という意味を持っていました。 42 | 以来それは「ゼロ管理」や「ゼロコスト」、「無駄がゼロ」といった別の目的を包含するようになりました。 43 | 一般的な言葉で言うと、最小主義の文化がプロジェクトに浸透している事を示しています。 44 | 私達は新たな機能を追加するというよりも、複雑さを取り除くことを重要視します。 45 | 46 | ## 対象読者 {-} 47 | ;This book is written for professional programmers who want to learn how to make the massively distributed software that will dominate the future of computing. We assume you can read C code, because most of the examples here are in C even though ØMQ is used in many languages. We assume you care about scale, because ØMQ solves that problem above all others. We assume you need the best possible results with the least possible cost, because otherwise you won't appreciate the trade-offs that ØMQ makes. Other than that basic background, we try to present all the concepts in networking and distributed computing you will need to use ØMQ. 48 | 49 | この本は、コンピューティングの未来を支配する大規模な分散ソフトウェアの作り方を学びたいプロのプログラマ向けに書かれています。 50 | ØMQは多くのプログラミング言語で使えるにも関わらず、ほとんどのサンプルコードはC言語で書かれているため、あなたがC言語を読めることを想定しています。 51 | あなたがスケーラビリティの問題を気にしていることを想定しています。 52 | あなたが最小のコストで最良の結果を必要としている事を想定しています。そうしないとØMQのトレードオフについて認識できないからです。 53 | それ以外のØMQを使う上で必要なネットワークや分散コンピューティングなどの基本的な概念は出来るだけ説明するように心がけます。 54 | 55 | ## 謝辞 {-} 56 | ;Thanks to Andy Oram for making the O'Reilly book happen, and editing this text. 57 | 58 | このテキストを[書籍](http://shop.oreilly.com/product/0636920026136.do)として出版する為に企画と編集を行なってくれたAndy Oramに感謝します。 59 | 60 | 以下の方々の貢献に感謝します: 61 | 62 | Bill Desmarais, Brian Dorsey, Daniel Lin, Eric Desgranges, Gonzalo Diethelm, Guido Goldstein, Hunter Ford, Kamil Shakirov, Martin Sustrik, Mike Castleman, Naveen Chawla, Nicola Peduzzi, Oliver Smith, Olivier Chamoux, Peter Alexander, Pierre Rouleau, Randy Dryburgh, John Unwin, Alex Thomas, Mihail Minkov, Jeremy Avnet, Michael Compton, Kamil Kisiel, Mark Kharitonov, Guillaume Aubert, Ian Barber, Mike Sheridan, Faruk Akgul, Oleg Sidorov, Lev Givon, Allister MacLeod, Alexander D'Archangel, Andreas Hoelzlwimmer, Han Holl, Robert G. Jakabosky, Felipe Cruz, Marcus McCurdy, Mikhail Kulemin, Dr. Gergő Érdi, Pavel Zhukov, Alexander Else, Giovanni Ruggiero, Rick "Technoweenie", Daniel Lundin, Dave Hoover, Simon Jefford, Benjamin Peterson, Justin Case, Devon Weller, Richard Smith, Alexander Morland, Wadim Grasza, Michael Jakl, Uwe Dauernheim, Sebastian Nowicki, Simone Deponti, Aaron Raddon, Dan Colish, Markus Schirp, Benoit Larroque, Jonathan Palardy, Isaiah Peng, Arkadiusz Orzechowski, Umut Aydin, Matthew Horsfall, Jeremy W. Sherman, Eric Pugh, Tyler Sellon, John E. Vincent, Pavel Mitin, Min RK, Igor Wiedler, Olof Åkesson, Patrick Lucas, Heow Goodman, Senthil Palanisami, John Gallagher, Tomas Roos, Stephen McQuay, Erik Allik, Arnaud Cogoluègnes, Rob Gagnon, Dan Williams, Edward Smith, James Tucker, Kristian Kristensen, Vadim Shalts, Martin Trojer, Tom van Leeuwen, Hiten Pandya, Harm Aarts, Marc Harter, Iskren Ivov Chernev, Jay Han, Sonia Hamilton, Nathan Stocks, Naveen Palli, Zed Shaw 63 | 64 | -------------------------------------------------------------------------------- /template.tex: -------------------------------------------------------------------------------- 1 | \documentclass[a4paper,12pt,uplatex]{jsbook} 2 | 3 | \usepackage{hamacro} 4 | \usepackage{float} 5 | \usepackage{pxjahyper} 6 | \usepackage{eso-pic} 7 | 8 | \usepackage[utf8]{inputenc} 9 | \usepackage[T1]{fontenc} 10 | \usepackage{textcomp} 11 | %\kcatcode`Ø=15 12 | 13 | \hypersetup{ 14 | pdfstartview={FitV}, 15 | pdftitle={$title$}, 16 | pdfsubject={$subtitle$}, 17 | pdfauthor={$authors$}, 18 | pdfkeywords={$keywords$}, 19 | } 20 | 21 | \let\cleardoublepage\clearpage 22 | 23 | % title 24 | \title{$title$} 25 | \author{$author$} 26 | \date{$date$} 27 | 28 | \newcommand\CoverPage{ 29 | \put(9,-12){ 30 | \includegraphics[width=\paperwidth,height=\paperheight]{./cover.eps} 31 | } 32 | } 33 | 34 | % document 35 | \begin{document} 36 | \begin{titlepage} 37 | \begin{center} 38 | \AddToShipoutPicture*{\CoverPage} 39 | \end{center} 40 | \clearpage 41 | \thispagestyle{empty} 42 | 43 | \begin{flushright} 44 | {\sf 第$version$版} 45 | \end{flushright} 46 | \vspace*{3em} 47 | \begin{center} 48 | {\Huge\bf{$title$}} 49 | \smallskip\\ 50 | {\huge\it{$subtitle$}} 51 | \vspace{8em}\\ 52 | {\Large\bf{$author$ 著}} 53 | \smallskip\\ 54 | {\Large\bf{$translator$ 訳}} 55 | %%\vfill 56 | %%{\Large\bf{$publisher$ 発行}} 57 | 58 | \end{center} 59 | 60 | \end{titlepage} 61 | 62 | $if(toc)$ 63 | \setcounter{tocdepth}{$toc-depth$} 64 | \tableofcontents 65 | \clearpage 66 | $endif$ 67 | 68 | $body$ 69 | \end{document} 70 | -------------------------------------------------------------------------------- /title.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamano/zguide-ja/ea3ae5702bef243a55c4092f5550401c9bf2b8d4/title.odg --------------------------------------------------------------------------------