際際滷

際際滷Share a Scribd company logo
PIAXで恬る
P2Pネットワ`ク
卅儲 v望
2015/10/17 Creators MeetUP #33
徭失B初
卅儲 v望
バックエンドのO _k
フレ`ムワ`クの恬撹 バイナリ?テキストQ クロ`ラ`
アルゴリズム ∀襯泪轡
和臼gOSSカフェでPROCESS WARPというシステムを恬っています
http://www.processwarp.org/
GitHub llamerada-jp
facebook ito.yuuji
blog http://llamerad-jp.hatenablog.com/
Client/Server侏
Peer-to-peer侏
宥佚がサ`バU喇で
佩われる
蒙協サ`バを隔たない
ネットワ`ク
Server
Client
Peer
蛍柊アルゴリズム
、欧襪世韻任論喘がyしい
Socket, WebRTCも、阿世
冥すアルゴリズムが駅勣
¢¢奉來を隔つPeerを冥す
喟A晒、隠贋するアルゴリズムが駅勣
蛍柊ハッシュテ`ブル(DHT), Key-Valueスト
ア
アルゴリズムが`う
C/S ★ 嶄刹鹿嶄 P2P ★ 蛍柊
Server
Client
Peer
PIAX
http://piax.org/
寄昜寄僥とNICTで恬ったP2Pフ
レ`ムワ`ク@Java
Peer冥沫ができる
Key-Valueストアが聞える
エ`ジェントC(書指は福待)
ver2.2.0まではMIT, var3.0か
らはAGPL(書指はver2.2.0)
サンプル
https://github.com/llamerada-jp/piax-
sample
コマンドラインから侘塀でPIAXのC嬬を旋
喘するgY喘アプリケ`ション
スライドは輝C嬬のコ`ドを俳りNりしてい
るので廣吭。
俊Aしよう
屡に俊AしているPeerに俊A勣箔を竃す
I尖嬬薦に噫圍があり、勉凋がLいPeerの匯Eを
聞ったり、サ`ビスプロバイダが耕協IPでseed叨
をやったり
// org.piax.trans.common.PeerLocator :
// peerのIDを砿尖する渇鵐ラス
// org.piax.trans.ts.tcp.TcpLocator :
// ●の醤鵐ラス、TCP俊Aするときに聞う
PeerLocator local = new TcpLocator(<徭蛍のIP&Port>);
PeerLocator seed = new TcpLocator(<seedのIP&Port>);
// org.piax.ov.Peer : Peerそのもの
// seedはcollectionで}方局すことも辛嬬
Peer peer = new Peer(local, seed);
peer.online();
OverlayMgr mgr = peer.getOverlayMgr();
RPCWrapper rpc = mgr.getRPCWrapper();
PeerId peerId = new PeerId(<僕佚枠>);
Object ret = rpc.remoteCall(
peerId,
Receiver.SERVICE_NAME,
"recv",
<僕佚メッセ`ジ>);
g匯PeerへのRPC
// 鞭佚箸PeerId
System.out.println(peer.getPeerId());
// 鞭佚喘クラス
public class Receiver implements OldRPCService {
static String SERVICE_NAME = <サ`ビス兆>;
@Override
public String getServiceName() {
return SERVICE_NAME;
}
public Object recv(Object message) {
// 鞭佚してからのI尖
return <鬴陬瓮奪皐`ジ>;
}
}
// 鞭佚喘インスタンスを鞠h
OverlayMgr mgr = peer.getOverlayMgr();
RPCWrapper rpc = mgr.getRPCWrapper();
Receiver receiver = new Receiver();
rpc.register(receiver);
sender receiver
Key-Valueストアなどに
秘れて局したり
マルチキャスト
PIAXのマルチキャストでは¢¢奉來をもつPeer
にメッセ`ジを僕る
奉來のNによってオ`バ`レイ(=碧アルゴ
リズム)を笋┐
へび / ハリネズミ
いぬ / ねこ / ウォンバット
ねこ / やどかり
ぞう / ハリネズミ
ねこ奉來のPeerに僕佚
マルチキャスト
// 奉來の侏によってm俳なオ`バ`レイ
String ovClassName =
mgr.getOverlayFromKeyType(<奉來>);
if (ovClassName == null)
ovClassName = MSkipGraph.class.getName();
// マルチキャスト
// Multi-key Skip Graphの栽、奉來は碧辛嬬
ReturnSet<Object> rset =
mgr.forwardQuery(
ovClassName,
new Range(<奉來>, <奉來>),
<僕佚メッセ`ジ>);
// マルチキャストY惚の函誼
while (rset.hasNext()) {
try {
Object ret = rset.getNext(
OvConfigValues.
returnSetGetNextTimeout));
} catch (Exception e) {
// エラ`I尖
}
}
public class Callback implements OverlayCallback {
@Override
public Object execQuery(Object arg0, Object arg1) {
// メッセ`ジ鞭佚rのI尖
// arg0 : メッセ`ジ鞭佚のトリガとなった奉來
// arg1 : 鞭佚メッセ`ジ
return <鬴陬瓮奪皐`ジ>;
}
@Override
public ReturnSet<Object> execQuery(
Set<Comparable<?>> arg0,
Object arg1) {
// ●と揖
return <鬴陬瓮奪皐`ジ>;
}
// 麿にもラつかあるけど福待
}
// 鞭佚喘インスタンスを鞠h
Callback callback = new Callback();
mgr.registerCallback(callback);
// 奉來をO協
String ovClassName = mgr.getOverlayFromKeyType(<奉來>);
if (ovClassName == null)
ovClassName = MSkipGraph.class.getName();
mgr.addKey(ovClassName, <奉來>);
sender receiver
アルゴリズムの蒙
LL-Net
仇尖議冥沫(業U業での冥沫みたいなこと)が誼吭
LL-Netの古勣
Multi-key Skip Graph
會原け辛嬬な奉來の碧が辛嬬
PIAXでは昧侭にこのアルゴリズムが聞われているようだ
g匯ピアに}方キ`を隠隔辛嬬とする Skip Graph 
の戻宛
アルゴリズムの蒙
PIAXにはg廾していないけど嗤兆なもの
Chord
叟乾好ップリストハッシュ、塞蛍柊が辛嬬
Chord: A Scalable Peer-to-Peer Lookup Service for Internet
Applications
ChordアルゴリズムによるDHT秘T
Kademlia
Bit-torrentなどファイル慌嗤狼アプリケ`ションで旋喘されている栽が謹
い
Kademlia: A Peer-to-peer Information System Based on the XOR Metric
DHT Kademlia
Key-Valueストア
ちゃんと俳僅した栽、、亘のPeerに隠贋さ
れる
融隼の俳僅や塚嬾墾來は音苧
DHT dht = mgr.getDHT();
dht.put(<Key>, <Value>);
DHT dht = mgr.getDHT();
Object value = dht.get(<Key>);
put get
あとしまつ
peer.offline();
peer.fin();
いろいろ
PIAXはアルゴリズムの弖紗を吭Rした恬りに
なっているようで、鏡徭のOverlay、プロトコ
ル弖紗も辛嬬なようだ。
アルゴリズムの猟はあるけどAPIドキュメン
トがoいので、コ`ドをYiむ駅勣あり。
まとめ
SocketやWebRTCを伏で聞ってもP2Pの寓{は富
ない。
PIAXで冥沫アルゴリズムを旋喘できる。
朕議にあったル`ティングアルゴリズムを聞
う。
いざとなったら徭蛍でする。
參貧
ありがとうございました

More Related Content

PIAXで恬る P2Pネットワ`ク