SlideShare ist ein Scribd-Unternehmen logo
1 von 46
Downloaden Sie, um offline zu lesen
Node.jsのオートスケールをFRPで管理する
#wakateweb
2015/10/16
DaikiTaniguchi (@kidach1)
Akatsuki inc.
谷口 大樹 / kidach1
・Github https://github.com/kidach1
・Twitter https://twitter.com/kidach1
・Qiita http://qiita.com/kidach1
・Akatsuki Inc.
・Node / JavaScript /TypeScript
 Ruby / Rails / Android
 Dvorak Keyboard
まだwakateだと信じたい26の秋
大規模Node.jsを支える
ロードバランスとオートスケール
の独自実装
スライド80枚
1スライド 6秒
大規模Node.jsを支える
ロードバランスとオートスケール
の独自実装
断念
こっちで話します!
こっちで話します!
http://qiita.com/kidach1/items/b75882edd4f715ebc213
学園祭事前資料
本題
Node.jsのオートスケールをFRPで管理する
Architecture
Realtime
Cluster
LB Cluster
Redis
Cluster
API
Cluster
背景
・Websocket / socket.ioの特性に紐づく制限もろもろ
続きは学園祭(ry
Autoscaling
Redis内で刻々と更新されていくインスタンス毎のコネク
ション数をもとに、オートスケールの発火を管理する
Autoscaling
Redis内で刻々と更新されていくインスタンス毎のコネク
ション数をもとに、オートスケールの発火を管理する
Autoscaling
_人人人人人_
> F R P <
 ̄Y^Y^Y^Y ̄
※ 今回は活用事例なので、基礎的な話は飛ばし気味で...
・Redisから取得したデータを基軸とした一本のストリーム
・ストリームに対して様々な制御(オペレーション)
・スケーリングイベントの発火
Design
Autoscaling
オートスケールの発火条件
・負荷(※今回は接続数)に応じてトリガー
・事前に設定したクラスタごとの最低稼働台数を下回った際トリガー
・指定時刻にトリガー
Design
Implementation
Implementation
Implementation
Implementation
Anti Pattern
冗長なストリームを避ける
Anti Pattern
・ Not DRY
・ Fat I/O
Observable
Hot / Cold
Hot / Cold
・Cold -> Observable : Observer = 1 : 1
・Hot -> Observable : Observer = 1 : n
・特定のオペレータ(publish等)を使うと
 Cold→Hotに変換可能
・特定のオペレータ(connect等)を使うと
 HotObservableの値がObserver達に一斉通知
Autoscaling
・mainStreamをHotObservableに変換(publish)
・各observer(checkByXXX)に分岐した後にconnect
Hot Observable
手続き型との比較
FRP比:
・プリミティブな制御構造(今回は主に条件分岐)が
随所に登場し、全体の流れを俯瞰しにくい
FRP ver
FRPによって
・リストとして扱うことでオペレータ(filterやmapなど)
を適用でき、制御構造が抽象化/隠 される
・非同期処理もストリームの一部として違和感なく扱える
結果として「コード全体の見通し向上」
つまり「本質的な処理に集中」できる
ReactiveX
・代表的なFRP支援ライブラリ
・豊富な言語実装
 http://reactivex.io/languages.html
Java: RxJava
JavaScript: RxJS
C#: Rx.NET
C#(Unity): UniRx
Scala: RxScala
Clojure: RxClojure
C++: RxCpp
Ruby: Rx.rb
Python: RxPY
Groovy: RxGroovy
JRuby: RxJRuby
Kotlin: RxKotlin
Swift: RxSwift
RxMarbles: Interactive diagrams of Rx Observables
http://rxmarbles.com/
各種オペレーターの視覚的ダイアグラム
Conclusion
・FPR→コードの見通し↑でなかなか良い
・インフラの制御はだいたいイベント駆動なので相性◎
・まずはRx眺めてみると良いかも
クライアントはもちろんですが、
バックエンド/インフラでも使っていきましょう!
Thank you !

Weitere ähnliche Inhalte

Was ist angesagt?

Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!ymmt
 
コマンドなしでぼくはAndroid開発できない話
コマンドなしでぼくはAndroid開発できない話コマンドなしでぼくはAndroid開発できない話
コマンドなしでぼくはAndroid開発できない話Shinobu Okano
 
SwaggerとAPIのデザイン
SwaggerとAPIのデザインSwaggerとAPIのデザイン
SwaggerとAPIのデザインKazuhiro Hara
 
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状についてClojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状についてKazuhiro Hara
 
Re-frame and A-Frame
Re-frame and A-FrameRe-frame and A-Frame
Re-frame and A-FrameKazuhiro Hara
 
React VR ことはじめ
React VR ことはじめReact VR ことはじめ
React VR ことはじめKazuhiro Hara
 
Riotjsハンズオン
RiotjsハンズオンRiotjsハンズオン
Riotjsハンズオンomi end
 
React.js・ReactNative・Redux入門
React.js・ReactNative・Redux入門React.js・ReactNative・Redux入門
React.js・ReactNative・Redux入門Kazuhiro Yoshimoto
 
実践 Redux Saga -Practical Redux Saga-
実践 Redux Saga -Practical Redux Saga-実践 Redux Saga -Practical Redux Saga-
実践 Redux Saga -Practical Redux Saga-Shinichiro Yoshida
 
Atlフェス2017 言霊holo lens
Atlフェス2017 言霊holo lensAtlフェス2017 言霊holo lens
Atlフェス2017 言霊holo lensMasaki Yamamoto
 
JAWS Osaka July 2014, Opsworks + Node.js
JAWS Osaka July 2014, Opsworks + Node.js JAWS Osaka July 2014, Opsworks + Node.js
JAWS Osaka July 2014, Opsworks + Node.js Martin Heidegger
 
いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたいまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたKouji Matsui
 
僕はどうしてAngular2をテーマに登壇することになってしまったのか
僕はどうしてAngular2をテーマに登壇することになってしまったのか僕はどうしてAngular2をテーマに登壇することになってしまったのか
僕はどうしてAngular2をテーマに登壇することになってしまったのかTomohiro Noguchi
 
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料mihararyosuke
 
The History of Reactive Extensions
The History of Reactive ExtensionsThe History of Reactive Extensions
The History of Reactive ExtensionsYoshifumi Kawai
 
これからの「async/await」の話をしよう
これからの「async/await」の話をしようこれからの「async/await」の話をしよう
これからの「async/await」の話をしようKouji Matsui
 

Was ist angesagt? (20)

Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!
 
コマンドなしでぼくはAndroid開発できない話
コマンドなしでぼくはAndroid開発できない話コマンドなしでぼくはAndroid開発できない話
コマンドなしでぼくはAndroid開発できない話
 
SwaggerとAPIのデザイン
SwaggerとAPIのデザインSwaggerとAPIのデザイン
SwaggerとAPIのデザイン
 
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状についてClojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
 
Re-frame and A-Frame
Re-frame and A-FrameRe-frame and A-Frame
Re-frame and A-Frame
 
React Native 入門
React Native 入門React Native 入門
React Native 入門
 
React VR ことはじめ
React VR ことはじめReact VR ことはじめ
React VR ことはじめ
 
Riotjsハンズオン
RiotjsハンズオンRiotjsハンズオン
Riotjsハンズオン
 
Yapc2012資料
Yapc2012資料Yapc2012資料
Yapc2012資料
 
Github of project
Github of projectGithub of project
Github of project
 
React.js・ReactNative・Redux入門
React.js・ReactNative・Redux入門React.js・ReactNative・Redux入門
React.js・ReactNative・Redux入門
 
実践 Redux Saga -Practical Redux Saga-
実践 Redux Saga -Practical Redux Saga-実践 Redux Saga -Practical Redux Saga-
実践 Redux Saga -Practical Redux Saga-
 
Atlフェス2017 言霊holo lens
Atlフェス2017 言霊holo lensAtlフェス2017 言霊holo lens
Atlフェス2017 言霊holo lens
 
JAWS Osaka July 2014, Opsworks + Node.js
JAWS Osaka July 2014, Opsworks + Node.js JAWS Osaka July 2014, Opsworks + Node.js
JAWS Osaka July 2014, Opsworks + Node.js
 
いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたいまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitした
 
僕はどうしてAngular2をテーマに登壇することになってしまったのか
僕はどうしてAngular2をテーマに登壇することになってしまったのか僕はどうしてAngular2をテーマに登壇することになってしまったのか
僕はどうしてAngular2をテーマに登壇することになってしまったのか
 
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
 
The History of Reactive Extensions
The History of Reactive ExtensionsThe History of Reactive Extensions
The History of Reactive Extensions
 
これからの「async/await」の話をしよう
これからの「async/await」の話をしようこれからの「async/await」の話をしよう
これからの「async/await」の話をしよう
 
Angular2実践入門
Angular2実践入門Angular2実践入門
Angular2実践入門
 

Ähnlich wie Node.jsのオートスケールをFRPで管理する

Nodeにしましょう
NodeにしましょうNodeにしましょう
NodeにしましょうYuzo Hebishima
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And JekyllYoji Shidara
 
mod_perlプログラマーがYAPCで語るレガシー開発論
mod_perlプログラマーがYAPCで語るレガシー開発論mod_perlプログラマーがYAPCで語るレガシー開発論
mod_perlプログラマーがYAPCで語るレガシー開発論鉄次 尾形
 
Vagrantで即席クラウドストレージ
Vagrantで即席クラウドストレージVagrantで即席クラウドストレージ
Vagrantで即席クラウドストレージYoshimi Tominaga
 
Skinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaSkinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaKazuhiro Sera
 
Xcode で gulp を使うお話
Xcode で gulp を使うお話Xcode で gulp を使うお話
Xcode で gulp を使うお話Yoichiro Sakurai
 
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)崇之 清水
 
非同期処理をちょっとはラクに。Promises:aほか
 非同期処理をちょっとはラクに。Promises:aほか 非同期処理をちょっとはラクに。Promises:aほか
非同期処理をちょっとはラクに。Promises:aほかMasakazu Muraoka
 
GraphQLについての5分間
GraphQLについての5分間GraphQLについての5分間
GraphQLについての5分間Matsuo Obu
 
javascript を Xcode でテスト
javascript を Xcode でテストjavascript を Xcode でテスト
javascript を Xcode でテストYoichiro Sakurai
 
Node.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript FrameworkNode.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript Frameworkkamiyam .
 
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみたYoshiki Shibukawa
 
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
CouchDB+OpenSocial - OSC 2009/Fall TokyoCouchDB+OpenSocial - OSC 2009/Fall Tokyo
CouchDB+OpenSocial - OSC 2009/Fall TokyoYohei Sasaki
 
リモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみたリモートデバッグツール Weinerをつかってみた
リモートデバッグツール WeinerをつかってみたMasakazu Muraoka
 
minneで学ぶクラウド脳
minneで学ぶクラウド脳minneで学ぶクラウド脳
minneで学ぶクラウド脳Uchio Kondo
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理Kouji Matsui
 
HTML5時代のwebクリエイターに必要なこと
HTML5時代のwebクリエイターに必要なことHTML5時代のwebクリエイターに必要なこと
HTML5時代のwebクリエイターに必要なことMasakazu Muraoka
 

Ähnlich wie Node.jsのオートスケールをFRPで管理する (20)

Nodeにしましょう
NodeにしましょうNodeにしましょう
Nodeにしましょう
 
いまさら触るAwt
いまさら触るAwtいまさら触るAwt
いまさら触るAwt
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And Jekyll
 
mod_perlプログラマーがYAPCで語るレガシー開発論
mod_perlプログラマーがYAPCで語るレガシー開発論mod_perlプログラマーがYAPCで語るレガシー開発論
mod_perlプログラマーがYAPCで語るレガシー開発論
 
Vagrantで即席クラウドストレージ
Vagrantで即席クラウドストレージVagrantで即席クラウドストレージ
Vagrantで即席クラウドストレージ
 
Skinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaSkinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scala
 
Xcode で gulp を使うお話
Xcode で gulp を使うお話Xcode で gulp を使うお話
Xcode で gulp を使うお話
 
0831 node学園lt
0831 node学園lt0831 node学園lt
0831 node学園lt
 
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
 
非同期処理をちょっとはラクに。Promises:aほか
 非同期処理をちょっとはラクに。Promises:aほか 非同期処理をちょっとはラクに。Promises:aほか
非同期処理をちょっとはラクに。Promises:aほか
 
GraphQLについての5分間
GraphQLについての5分間GraphQLについての5分間
GraphQLについての5分間
 
javascript を Xcode でテスト
javascript を Xcode でテストjavascript を Xcode でテスト
javascript を Xcode でテスト
 
Node.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript FrameworkNode.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript Framework
 
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた
 
SocketStream入門
SocketStream入門SocketStream入門
SocketStream入門
 
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
CouchDB+OpenSocial - OSC 2009/Fall TokyoCouchDB+OpenSocial - OSC 2009/Fall Tokyo
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
 
リモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみたリモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみた
 
minneで学ぶクラウド脳
minneで学ぶクラウド脳minneで学ぶクラウド脳
minneで学ぶクラウド脳
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
 
HTML5時代のwebクリエイターに必要なこと
HTML5時代のwebクリエイターに必要なことHTML5時代のwebクリエイターに必要なこと
HTML5時代のwebクリエイターに必要なこと
 

Node.jsのオートスケールをFRPで管理する