株式会社ユーザベースの技術チームブログです。的な何かを作ってみたTweet技術チームの竹内(@chimerast)です。的な何かを作ってみた」という題でLTしてきたので内容を少し書いてみようと思います。当日は自分以外基本Android勢の発表で、サーバサイドの自分にとっては、とてもアウェイな雰囲気でしたがめげずに発表してきました。RxJavaっていうとサーバサイドでは普通は使う機会がないですからね。APIを提供するサービスをぽこぽこ立ち上げており、その中の一つという位置づけです。API」という3つのAPIが動いています。これらにリクエストを投げて得たデータを元に最終的なチャートのJSONを構築します。APIだけがAWS上に配置され、それ以外がオンプレのデータセンター上にありデータセンター間通信となってしまうこと最終的なレスポンスを返すまでに複数回(多いときには20回以上)バックエンドのAPIにリクエストを投げる必要があるということという二点です。APIへの1リクエストが10スレッド以上立ち上げてバックエンドAPIの返りを待つ必要があるという残念な状態になってしまします。http://vertx.io/Nettyの上に作られ、ノンブロッキングI/Oで通信を行う事のできる高レベルAPI群です。サブプロジェクトがたくさんありDBとの通信を行うことの出来るモジュールなんかもあります。これのサブプロジェクトの一つである、Vert.x-WebをつかってRESTなAPIをつくりつつ、バックエンドAPIに対して1スレッドからノンブロッキングで複数リクエストを投げるみたいな使い方をしました。Vert.xの問題点として、全てがコールバックで返る非同期APIなため、例えば単純なDBのSELECT&UPDATEをするだけでも何段ものインデントが必要な書き方になります。メソッドを分けるという単純な解決法もありますが宣言的に書けるところは宣言的に書きたいです。これを解決するためにRxJavaを使います。https://github.com/ReactiveX/RxJavaRxJavaは、Streamとしての側面とPromiseとしての側面を併せ持ったライブラリです。いろいろな使い方ができ自分も全てのメソッドの使い道をうまく把握出来ていません。Android勢はJava8がまだ使えないためStreamの代わりとして使っていたり、非同期処理も多いのでPromiseとしての使い方をしたり色々しているようです。今回のサーバサイドの開発では、Promiseとしての側面しか使っていません。コールバック地獄から抜け出すため(flatMap)、そして、複数の非同期処理をひとまとめにするため(zip)に主に使っています。最終的には組み合わせて以下みたいなコードになっています。感想あまり長い文を書いても読みづらくなるだけなので、あとの細かい所はスライドを見てみてください。Vert.xは巨大なモノリシックなサービスを作るのにはあまり向いていない気がしていますが、今回のように小さいサービスを作るには軽くて向いていると思えました。並列でバックエンドのAPIに丸投げして待つみたいなものを作る時にはスレッドの数を考える必要が無いという大きな利点があると思います。RxJavaは非同期処理を気持ちよく書けるライブラリです。Vert.x、RxJavaともにJava8に対応しているためラムダ式でがしがし書くことができます。株式会社ユーザベース、および、株式会社ニューズピックスではエンジニアを募集しています。ご興味があればお気軽にご連絡ください。的な何かを作ってみたTweet関連記事2018-04-03はじめてのDuctSPEEDA開発の中村です。〜PrometheusにGrafanaを...こんにちは、SPEEDAのSREチームの阿南です。Openはじめまして。(ryoqun)です。BOTをつくってみたはじめまして。NewsPicks技術チームの井原です。»プロフィール『経済情報で、世界を変える』をミッションに、企業・業界情報プラットフォーム「SPEEDA」やソーシャル経済ニュース「NewsPicks」、ABMを強力にサポートする「FORCAS」、スタートアップの情報収集を圧倒的効率化「entrepedia」などを提供する株式会社ユーザベースの技術チームブログです。多国通貨」をハンズオンしたら快適で楽しかったGo言語でオブジェクト指向プログラミングの基本(型編)月別アーカイブ検索@Uzabase_Techさんのツイートスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。