マイクロサービスとOSSのおいしい関係
For Speee Cafe Meetup #07
5/23/2017
FiNC, inc. / Engineering
Fumiya Shinozuka
2
自己紹介
篠塚史弥 (@shinofumijp)
サーバサイドエンジニア
Rubyを主に使っている
最近はJavaエンジニア見習い
気になっているOSS
Apache tinkerpop, JanusGraph
JanusGraph
http://janusgraph.org/
Linux Foundationによるプロジェクト
本番で使っているユーザ
実績のないOSSも積極的に使っていきます(!)
質問です
みなさん
OSS開発の経験はありますか?
普段からバリバリ開発しているよって方
本日はご清聴ありがとうございました
興味はあるけどやり方がわからない、
時間が取れない方が多いと思います
OSS活動をするにもまずはOSS選定か
ら
ということで
今日はOSS選定に関する話をします
(※Ruby寄り)
ただ
OSS選定もまずは使ってみてから
日々の業務の中で様々な
OSSを試す時間はとりづらい
実践で試す機会はさらに稀
というわけで
本番環境で、
影響範囲を小さく、
いいOSSを見つけられるように、
FiNCで実際に行っている方法を紹介します
OSSは品質が高いとは限らない
例えば、
メンテナンスされていない
APIが微妙
パフォーマンスが考慮されていない
どのOSSを選択するかは非常に大事
OSSを選択する観点は様々だが、
目的に合っていて、枯れている
OSSを選ぶことが多い
ただ
枯れているからいいわけでもない
枯れていないけどいいOSSを選びたい
どうやっていいOSSを選択する?
ググる?
ソースを読む?
スター数、フォーク数を見る?
実際に使ってみてわかることもある
- 使いやすさ、運用しやすさ
- 同時リクエスト
- 負荷に応じた挙動
テストプロジェクトを立てる?
本番で試せる方が早い
(ただし影響範囲は小さく)
そこで
マイクロサービスでOSSを試すことを
おすすめします
FiNCではマイクロサービスを採用し、
マイクロサービスでOSSを試しています
(参考)
FiNCとマイクロサービス
https://www.slideshare.net/fumiyashinoz
uka/finc-52564251
マイクロサービス
アプリケーションを複数の小さなサービスの
組み合わせで構築する設計、開発方法
(特徴はたくさんあるけど)
疎結合
マイクロサービスでは、
原則WebAPIを通じて
各サービスがデータを共有する
技術異質性
各サービスは
それぞれに適した技術の利用が可能
要は
サービスが小さく別れているので、
影響範囲が小さく、様々な技術が試せます
ということ
FiNCでの実例の紹介
まず前提
FiNCでの
1番コードベースの大きいRailsアプリの
モデル数(≒テーブル数)
1016
あまりやんちゃな変更したくない
新しいアプリケーションのモデル数
たかだか20程度
1016 vs 20
影響範囲のレベルが違う
前提おしまい
例1. APIライブラリの選定
[背景]
json_schemaの利用とそれに合わせたAPIライ
ブラリの選定を行っていた
元々grape+rablというRubygemsを利用してい
た
[問題]
規模の大きいアプリケーションに
最初から導入してるのはコストが大きかった
ディレクトリの構成、リソースの粒度、オプション
設定、レスポンス構造のルールなど
(参考)
FiNCのWeb API開発事情
https://www.slideshare.net/fumiyashinozuk
a/api-developmentinfinc-71710309
[対応]
新しく立ち上げたアプリケーションに導入し、
使い勝手と設定を試行錯誤し、
ベストプラクティスを見つけた後で、
他のアプリケーションに導入した
[おまけ]
リクエストバリデーション、型変換周りが、
元々使用していたライブラリにはあったが、
新しいライブラリになく不便だったので
PRを送ったらマージされた
(参考)
FiNCでのOSSとのつきあい方
https://www.slideshare.net/ota42y/fincoss
業務としてOSS活動ができる!
例2. 論理削除ライブラリの導入
失敗談です
paranoiaというRubygemの利用
Githubスター数 1950, フォーク数 404
メンテナンスもされている
テストプロジェクトで試してみても使いやすかった
メインアプリに投入(!)
…しかし
DB周りのRubygemは
Railsのバージョンアップ時に壊れやすい
意図しない物理削除の挙動
本番のデータ構造ならではの不整合
論理削除って本当に必要だった、、、?
(ちゃんと見通してやれという話ではある)
[教訓]
なるべく小さい範囲で試しに運用して
だめなことがわかったら、影響範囲が広がる前に
消せることが大事
冒頭で紹介したJanusGraphも
マイクロサービスから使い始めました
その他にも、
非同期ライブラリ、
HTTPクライアント、
などなど大小諸々のOSSを
マイクロサービスから試して比較選定しました
まとめ
1. OSSの品質はピンきり
2. 実際に使わないとわからないこともある
3. 影響範囲が小さく試せる方法があると便利
本日はご清聴ありがとうございました
FiNCではエンジニアを募集しています
Railsアプリケーション開発, マイクロサービス,
OSS, AI, GraphDB, 機械学習, Hadoopなどなど
ご興味のある方はぜひご応募ください
https://finc.com/recruit

マイクロサービスとOSSのおいしい関係