SlideShare a Scribd company logo
Submit Search
Upload
NanoStrand
Report
Share
M
Masashi Umezawa
Manager at 合同会社ソフトウメヤ
Follow
•
1 like
•
818 views
1
of
26
NanoStrand
•
1 like
•
818 views
Report
Share
Download Now
Download to read offline
Software
Introduction of NanoStrand. Smalltalk bindings for nanomsg.
Read more
M
Masashi Umezawa
Manager at 合同会社ソフトウメヤ
Follow
Recommended
Raspberry Piにdiskless modeのalpine linuxを導入してみる by
Raspberry Piにdiskless modeのalpine linuxを導入してみる
Kenichiro MATOHARA
5.6K views
•
34 slides
オープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみる by
オープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみる
Kenichiro MATOHARA
2.1K views
•
27 slides
hpingで作るパケット by
hpingで作るパケット
Takaaki Hoyo
14.9K views
•
21 slides
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか by
OpenFlowでいろんなプロトコルを 話そうとするとどうなるか
Masaru Oki
2K views
•
12 slides
ちょっと古いマシンにLinuxを by
ちょっと古いマシンにLinuxを
Kenichiro MATOHARA
1.4K views
•
11 slides
about Tcpreplay by
about Tcpreplay
@ otsuka752
29.5K views
•
23 slides
More Related Content
What's hot
「Dockerはいいぞ」 for Laboratory LT by
「Dockerはいいぞ」 for Laboratory LT
ShimpeiIwamaru
78 views
•
16 slides
20110205.linux 0.01 by
20110205.linux 0.01
YAMANE Toshiaki
741 views
•
17 slides
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome) by
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
Kenichiro MATOHARA
3.1K views
•
40 slides
Tarantubeでメッセージキューを使い倒す by
Tarantubeでメッセージキューを使い倒す
Masashi Umezawa
412 views
•
29 slides
Bossan dentoo by
Bossan dentoo
kubo39
1.2K views
•
24 slides
#mailerstudy 01 LT POP/IMAP入門 by
#mailerstudy 01 LT POP/IMAP入門
Takashi Takizawa
2.6K views
•
21 slides
What's hot
(19)
「Dockerはいいぞ」 for Laboratory LT by ShimpeiIwamaru
「Dockerはいいぞ」 for Laboratory LT
ShimpeiIwamaru
•
78 views
20110205.linux 0.01 by YAMANE Toshiaki
20110205.linux 0.01
YAMANE Toshiaki
•
741 views
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome) by Kenichiro MATOHARA
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
Kenichiro MATOHARA
•
3.1K views
Tarantubeでメッセージキューを使い倒す by Masashi Umezawa
Tarantubeでメッセージキューを使い倒す
Masashi Umezawa
•
412 views
Bossan dentoo by kubo39
Bossan dentoo
kubo39
•
1.2K views
#mailerstudy 01 LT POP/IMAP入門 by Takashi Takizawa
#mailerstudy 01 LT POP/IMAP入門
Takashi Takizawa
•
2.6K views
Open stack+lagopus できるかな by Masaru Oki
Open stack+lagopus できるかな
Masaru Oki
•
1.4K views
Tide - SmalltalkでSPA by Masashi Umezawa
Tide - SmalltalkでSPA
Masashi Umezawa
•
1.4K views
Lagopus performance by Masaru Oki
Lagopus performance
Masaru Oki
•
2.4K views
Boost sg msgpack by Takatoshi Kondo
Boost sg msgpack
Takatoshi Kondo
•
4K views
Janogia20120921 yoshinotakeshi by Keisuke Ishibashi
Janogia20120921 yoshinotakeshi
Keisuke Ishibashi
•
2.2K views
Nltk for biginer by Atsushi Hayakawa
Nltk for biginer
Atsushi Hayakawa
•
5.8K views
import dpkt したよ #ssmjp 2014/02/28 by th0x0472
import dpkt したよ #ssmjp 2014/02/28
th0x0472
•
3.4K views
Ruby&Active Support for expert 3 by xibbar
Ruby&Active Support for expert 3
xibbar
•
795 views
Rustのタスクモデルについて by zigen
Rustのタスクモデルについて
zigen
•
1.9K views
マスタリングJUNOS DHCP by ZenSekibe
マスタリングJUNOS DHCP
ZenSekibe
•
75 views
Pub/Sub model, msm, and asio by Takatoshi Kondo
Pub/Sub model, msm, and asio
Takatoshi Kondo
•
1.6K views
Lagopus, raw socket build by Masaru Oki
Lagopus, raw socket build
Masaru Oki
•
2.5K views
Ssaw08 0617 by Atsushi Tadokoro
Ssaw08 0617
Atsushi Tadokoro
•
1.7K views
Viewers also liked
Mayer, james 2015 by
Mayer, james 2015
James Mayer
283 views
•
3 slides
Pillarの紹介 by
Pillarの紹介
Masashi Umezawa
333 views
•
35 slides
Podsumowanie 13. edycji akcji charytatywnej "Czapka św. Mikołaja" by
Podsumowanie 13. edycji akcji charytatywnej "Czapka św. Mikołaja"
MRMRybnika
573 views
•
11 slides
MAYER, James 2015 by
MAYER, James 2015
James Mayer
201 views
•
3 slides
BLVC-plannen_Brochure by
BLVC-plannen_Brochure
Peter Veringmeier
172 views
•
8 slides
Improving UX checkout by
Improving UX checkout
Myriam Jessier
536 views
•
26 slides
Viewers also liked
(9)
Mayer, james 2015 by James Mayer
Mayer, james 2015
James Mayer
•
283 views
Pillarの紹介 by Masashi Umezawa
Pillarの紹介
Masashi Umezawa
•
333 views
Podsumowanie 13. edycji akcji charytatywnej "Czapka św. Mikołaja" by MRMRybnika
Podsumowanie 13. edycji akcji charytatywnej "Czapka św. Mikołaja"
MRMRybnika
•
573 views
MAYER, James 2015 by James Mayer
MAYER, James 2015
James Mayer
•
201 views
BLVC-plannen_Brochure by Peter Veringmeier
BLVC-plannen_Brochure
Peter Veringmeier
•
172 views
Improving UX checkout by Myriam Jessier
Improving UX checkout
Myriam Jessier
•
536 views
Islamic Finance Course work (3) by Temitope Ologburo
Islamic Finance Course work (3)
Temitope Ologburo
•
457 views
Fucking with algorithms by Myriam Jessier
Fucking with algorithms
Myriam Jessier
•
1.4K views
The Poet in You: A mini-workshop on poetry writing by Miguel De Jesús
The Poet in You: A mini-workshop on poetry writing
Miguel De Jesús
•
5.2K views
Similar to NanoStrand
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る by
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る
Kenichiro MATOHARA
3.7K views
•
37 slides
Hacking Vox and Plagger by
Hacking Vox and Plagger
Tatsuhiko Miyagawa
2.7K views
•
47 slides
Reading NATS by
Reading NATS
Katsunori Kawaguchi
11.3K views
•
36 slides
WebRTC SFU mediasoup sample by
WebRTC SFU mediasoup sample
mganeko
5.1K views
•
21 slides
おまえらこのライブラリ使ってないの? m9 (2013-07) by
おまえらこのライブラリ使ってないの? m9 (2013-07)
Toru Furukawa
3.1K views
•
32 slides
WebRTC meetup Tokyo 1 by
WebRTC meetup Tokyo 1
mganeko
4.2K views
•
73 slides
Similar to NanoStrand
(20)
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る by Kenichiro MATOHARA
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る
Kenichiro MATOHARA
•
3.7K views
Hacking Vox and Plagger by Tatsuhiko Miyagawa
Hacking Vox and Plagger
Tatsuhiko Miyagawa
•
2.7K views
Reading NATS by Katsunori Kawaguchi
Reading NATS
Katsunori Kawaguchi
•
11.3K views
WebRTC SFU mediasoup sample by mganeko
WebRTC SFU mediasoup sample
mganeko
•
5.1K views
おまえらこのライブラリ使ってないの? m9 (2013-07) by Toru Furukawa
おまえらこのライブラリ使ってないの? m9 (2013-07)
Toru Furukawa
•
3.1K views
WebRTC meetup Tokyo 1 by mganeko
WebRTC meetup Tokyo 1
mganeko
•
4.2K views
Fabricによるcloud stackインストール自動化 by hiroyuki nakajima
Fabricによるcloud stackインストール自動化
hiroyuki nakajima
•
723 views
How to run P4 BMv2 by Kentaro Ebisawa
How to run P4 BMv2
Kentaro Ebisawa
•
9K views
サーバー実装いろいろ by kjwtnb
サーバー実装いろいろ
kjwtnb
•
1.9K views
[Basic 6] DNS / ソケット通信 / その他 by Yuto Takei
[Basic 6] DNS / ソケット通信 / その他
Yuto Takei
•
661 views
WebRTC SFU Mediasoup Sample update by mganeko
WebRTC SFU Mediasoup Sample update
mganeko
•
4.3K views
plotnetcfg入門 | Introduction to plotnetcfg by Kentaro Ebisawa
plotnetcfg入門 | Introduction to plotnetcfg
Kentaro Ebisawa
•
2.6K views
ICHIGEKI-MT 2015/03/14 by Yasutaka Hamada
ICHIGEKI-MT 2015/03/14
Yasutaka Hamada
•
2.6K views
The basic of performance tuning by Higepon Taro Minowa
The basic of performance tuning
Higepon Taro Minowa
•
980 views
Puppet on AWS by Sugawara Genki
Puppet on AWS
Sugawara Genki
•
5.4K views
tcpdump & xtrabackup @ MySQL Casual Talks #1 by Ryosuke IWANAGA
tcpdump & xtrabackup @ MySQL Casual Talks #1
Ryosuke IWANAGA
•
5.5K views
配布用Beginnerならきっと役立つmaster slave環境 by yut148atgmaildotcom
配布用Beginnerならきっと役立つmaster slave環境
yut148atgmaildotcom
•
1.8K views
Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf) by VirtualTech Japan Inc.
Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf)
VirtualTech Japan Inc.
•
2.7K views
Docker 18.09 新機能 by Akihiro Suda
Docker 18.09 新機能
Akihiro Suda
•
4.5K views
OpenStack + Common Lisp by irix_jp
OpenStack + Common Lisp
irix_jp
•
4.6K views
NanoStrand
1.
NanoStrand Smalltalkで分散ネットワーキング 第77回Smalltalk勉強会 合同会社ソフトウメヤ 梅澤真史
2.
NanoStrandとは?? ● nanomsgのラッパー ● 気軽に高速なネットワークシステムが組めるよう にするためのライブラリ ●
Smalltalk間はもちろん他言語とのやりとりもス ムーズに ● https://github.com/mumez/NanoStrand
3.
nanomsgのこと ● 一言でいうと、Mini ZeroMQ
(in C) ● マルチプラットフォーム ● 様々な通信パターン(Scalability Protocol)を提供 ○ PUSH/PULL, REQ/REP, PUB/SUB, PAIR, SURVEY, BUS ● マルチトランスポート ○ TCPのみならずIPC、INPROCも ● 豊富な言語バインディング ○ http://nanomsg.org/documentation.html
4.
NanoStrandの構成 ● NanoStrand-FFI ○ FFIでnanomsg
APIを呼ぶ部分 ■ nanomsgのAPIをほぼそのまま使っている ■ NativeBoost版のみ (NanoStrand-NativeBoost-FFI) ● Legacy FFI版を作るとSqueakやCuisでも利用可能になる ● DLLCC版だとVisualWorks ● NanoStrand-Core ○ 上記FFI部を使いOO的なAPIを提供する ■ NnSocket(とそのサブクラス群)
5.
インストール(1) ● nanomsgのビルド ○ 32bitのCog
VMを使う場合、32bit指定でコンパイル ○ Windowsの場合は32, 64bit用が両方できるので楽 ● ビルドした共有ライブラリ(libnanomsg)をVMのディレクトリに コピー CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 ./configure
6.
インストール(2) ● ConfigurationOfNanoStrandのロード ● 共有ライブラリを置いていないと定数初期化に失敗する ○
NnNbNanoMessageConstantsプールに値が入らない ○ 失敗した場合、ライブラリを置いて ”NnNbNanoMessageConstants initialize”すること Gofer new url: 'http://smalltalkhub.com/mc/MasashiUmezawa/NanoStrand/main'; package: 'ConfigurationOfNanoStrand'; load. (Smalltalk at: #ConfigurationOfNanoStrand) load
7.
例: PULL/PUSHを書いてみる(1) "Setup PULL
socket" sock1 := NnPullSocket withBind: 'tcp://*:5575'. sock1 onReceiveReady: [:sock | Transcript cr; show: '#PULL: ', sock receive asString]. "Setup PUSH socket" sock2 := NnPushSocket withConnect: 'tcp://127.0.0.1:5575'. sock2 onSendReady: [:sock | sock send: '#PUSH: ', Time now asString]. ● パイプラインな処理 ● NnPullSocketで受信、NnPushSocketで送信
8.
例: PULL/PUSHを書いてみる(2) "Start a
Poller for multiplexing" poller := NnPoller startWithSockets: {sock1. sock2}. ● NnPollerでポーリング ● 異なるプロトコル、エンドポイントのSocketをまとめて登録できる ● 適切なタイミングで、onReceiveReady:, onSendReady:のコールバックが呼 び出される
9.
例: PULL/PUSHを書いてみる(3) 1 seconds
wait. "The process ends after a second" poller stopAndCloseSockets. ● stopAndCloseSocketsでNnPollerを止める ● 実際にはensure:で確実に止めるようにしたほうが良い
10.
結果 ● Transcriptに表示させなければ20000qpsほど捌ける
11.
例: PUB/SUBで他言語との連携 (1) #
PUSHのクライアント起動。"HelloWorld"を1秒ごとに送る $ nanocat --push --connect tcp://127.0.0.1:5585 -- data HelloWorld -i 1 ● クライアント側をnanocatに ○ Cで書かれたnanomsgの公式クライアント。テストに便利。
12.
例: PUB/SUBで他言語との連携 (2) #
SUBのクライアント起動。全てのイベントを受け付ける $ nanocat --sub --connect tcp://127.0.0.1:5586 -A ● PUSHの他、SUB役のクライアントを2つ起動 # SUBのクライアント起動。"Evt:Rem0"イベントを受け付ける $ nanocat --sub --connect tcp://127.0.0.1:5586 --subscribe Evt:Rem0 -A
13.
例: PUB/SUBで他言語との連携 (3) ●
サーバ側はPharo ○ PULLで受け取ったメッセージの数を10で割った余り(rem)を 計算 ○ 余りが0または5のときイベントとしてPUBLISHする
14.
例: PUB/SUBで他言語との連携 (4) received
:= OrderedCollection new. "A message box" "Setup PULL socket" sock1 := NnPullSocket withBind: 'tcp://127.0.0.1:5585'. sock1 onReceiveReady: [:sock | | rec | rec := (sock receiveFor: 200 timeoutDo: ['']) asString. rec ifNotEmpty: [ received add: rec. "Stock the received message" Transcript cr; show: 'Received:', rec, ':', Time now printString]. ].
15.
例: PUB/SUBで他言語との連携 (5) "Setup
PUB socket" sock2 := NnPubSocket withBind: 'tcp://127.0.0.1:5586'. sock2 onSendReady: [:sock | |rem | rem := received size rem: 10. "10で割った余りを出す" "余りが0か5の時、イベントとして送る" rem = 0 ifTrue: [sock send: 'Evt:Rem0:', Time now printString]. rem = 5 ifTrue: [sock send: 'Evt:Rem5:', Time now printString]. ].
16.
例: PUB/SUBで他言語との連携 (6) poller
:= NnPoller new. poller startWithSockets: {sock1. sock2}. 30 seconds wait. poller stopAndCloseSockets. ● 30秒ほどポーリングして終了させる ○ 実際にはensure:を使ってstopさせること
18.
今後は? ● Smalltalk-Smalltalk間 ○ FFI部を充実させ、Squeak,
CuisやVWに展開 ○ シリアライザとしてはMessagePackや StOMPを使える ● 他言語間 ○ Node.jsやVert.xなどとつなぐと広がりがありそう
19.
NanoStrand-RPC ● RPCのI/Fを提供し便利に使えるようにする ○ ZeroMQに対するZeroRPC的な位置づけ ■
http://www.zerorpc.io ● 同期、非同期、oneway(送りっぱなし)をサポートする予定 ○ 現在は同期のみの実装 ○ http://smalltalkhub.com/#!/~MasashiUmezawa/NanoStrand-RPC
20.
例: 足し算サービスの利用 (1) ●
足し算するのみの簡単なサービスクラスを用意 NnRpcSampleService class >> plus: a with: b ^a+b ● #RpcSampleServiceという名前で登録しておく NnRpcServer addService: NnRpcSampleService named: #RpcSampleService
21.
例: 足し算サービスの利用 (2) ●
サーバの起動 server := NnRpcServer bind: 'tcp://127.0.0.1:6677'. server start. ● クライアントの接続、RPC呼び出し client := NnRpcClient connect: 'tcp://127.0.0.1:6677'. client invoke: #RpcSampleService selector: #plus:with: arguments: {1. 2}. ”=> 3”
22.
速度は? ● 500回起動で80ms程度 [500 timesRepeat:
[client invoke: #RpcSampleService selector: #plus: with: arguments: {1. 2}]] timeToRun. ”=> 0:00:00:00.078” ● なかなか速い ● Pure Smalltalkで書かれたRPCライブラリと比べてどうなのだろう か?
23.
Remote Messagint Toolkit
(RMT) ● 昔書いたPure SmalltalkのRPCライブラリ ○ http://smalltalkhub.com/#!/~MasashiUmezawa/RemoteMessagingToolkit ● 同期とonewayをサポート ● 某基幹系で毎日動いている ● Squeak用であったが、最近Pharo用に復活 ○ シリアライザはDataStreamからFuelに置き換えた
24.
RMTで計測 ● 500回起動で1300ms程度 service :=
(RmtTcpService on: 4566) acceptorClass: RmtRpcAcceptor. service start. RmtRpcAcceptor receiverDictionary at: #RpcSampleService put: NnRpcSampleService. client := RmtRpcConnector connect: 'localhost' port: 4566. [500 timesRepeat: [client invoke: #RpcSampleService selector: #plus:with: arguments: {1. 2}]] timeToRun. ”=> 0:00:00:01.33”
25.
RPC系の予定 ● 非同期のサポート ○ Futureを返し、値の取得後にコールバックされる仕組み ●
ORB? ○ 非同期ベースでいまさらORBっぽいものを作りたい ○ E言語に似た感じの何か
26.
まとめ ● NanoStrandで、気軽に高速なネットワークプログラムが書け る ● いろいろなものとつないで楽しみましょう ●
今後の拡張にご期待ください!!