Scala Meetup Finagle & GraphQL at Strava

Masashi Nakane
アメリカに引っ越ししました
5 min readJul 19, 2019

Meetup 日記

2019年7月17日水曜日 7PM サンフランシスコのStravaオフィスのMeetupに行った。Scala SF Meetupの主催。

SF Strava Office

Stravaは、自分が毎朝ランニングの時に使用してるアプリなので、ユーザーとしてオフィスに行くのは、とても楽しみだった。ユーザーバイアスもあると思うが、世界で最も使用されているスポーツSNSアプリなんではないだろうか。場所は、SFのダウンタウンから少し離れてるからか、車で行ったけど、近所の道に余裕で路駐できた。

Talkは2つあって、StravaのエンジニアによるFinagleというScala フレームワークへRubyから移行してよかった話。2つ目は、このブログを書かせてもらっているMedium社がNodejsからGraphQL+Scalaへの移行をやったここ数年こと。

Finagle + Scala

StravaのJeff PollardさんによるScala&Finagle最強!の話。Stravaは、6年前にRubyからScala+Finagle使い始めて、今に至るが、このコンビネーションは、いまだに、まったく問題ないので使い続ける。なぜあの時、RubyからScalaへ変えたか?

なぜScala?

  1. Javaのライブラリーは使いたいが、Javaを書くと長いのしんどい
  2. Scalaは、Javaだけよりも広いJVMのエコシステムを利用できる。AWS SDKとか便利。
  3. ベイエリアにScalaコミュニティができつつあった
  4. 移行先の言語として必要な条件を満たしていた

なぜFinagle?

  1. Client側とServer側両方をカバーするFramework
  2. Finagle Futureが素晴らしい。(Scala のFutureじゃないよ)
  3. 今後起こるかもしれないまだ知られてない問題に対応しやすい(Performance,Metricst,Retry等)
  4. ビジネスロジックに集中できる、チューニングほどんと不要

Scala & Finagleの悪いところ、

  1. 勉強することが多く、Learning Curveが非常に急
  2. Scala経験者のEngineerが少ない
  3. Finagleは、巨大で複雑で、理解するのが難しい
  4. 社内教育への投資がでかい

そして移行した結果、Rubyでは、6~8 RPS/CPUだったのが、140 RPS/CPUと激速になった。(RPS/CPU = web request per second per CPU)

GraphQL + Scala

元Medium Engineering Tech Leadの Sasha Solomonさんの話(現在は、TwitterのGraphSQLチーム)。どうやって古いMediumのアーキテクチャーから React.js +GraphQL へ移行したか。

Mediumは、旧はNode.jsモノリスなAPIサービスだったが、マイクロサービス化したかった、そのため、フロントの一部分をまずは、React.jsに移行してAPIとの橋渡しにGraphQLをインターフェースレイヤにした。GraphQLとAPIの間は、protocol bufferでスキーマの地固めをし、徐々に、gRPCを使ったマイクロサービスへ移していった。GraphQLのクライアント側は、Apolloで、GraphQLサーバーには、ScalaのフレームワークであるSangriaを使用。

詳細は、彼女のMedium Engineeringチームのブログで。

普段オフィスとかでは、白人かインド人ばかりのエンジニアと絡んでるが、今回 隣で 知り合いになったのは、なんとメキシコからきてるScalaとC#が大好きなエンジニアだった。自分の中では、珍しい組み合わせなので、とっても、刺激になる。まだまだ知らないことだらけ。ほんとにScalaは、Javaより早いのか?!Scala勉強するぞい。

--

--