Airbnb と NetflixでのProductivity Engineering
昨日3月27日は、San FransiscoにあるAirbnbの本社で開催されたMeetupに参加してきた。このMeetupは、Productivity Engineering Sillicon Valleyというもので、NetflixのProductivity Teamが主催で2か月に1回くらいのペースで、開催されている。前回参加したときは、MountainViewのAtlassianだった。あとは、Neflixのあるシリコンバレーの南にあるLos Gatosでもやっている。
このNetflixのチームは、社内エンジニアやオペレーションのチームにツールやライブラリーを提供することで、Engineeringの効率と質を高めるということを目的にしている。毎回、有名どころのシリコンバレーの会社と、提携して社内の貴重な情報をプレゼンしてくれる、とても面白い。Githubで成果物をオープンソースにしてるのはもちろん、Mediumでも生の情報を提供している。世界のエンジニアリングに貢献しつつも、優秀なエンジニアを引き付けるのにも役に立っているのだろう。
今回のプレゼンは、2つで、Airbnbからは、Ruby Monolithだった社内のシステムをjava Microservice化する過程においての困難と、そこから見いだされた現時点での解の紹介。そして、Netflixで行われるReplayテストのツールのMantisでどうやって本番リリースのコンフィデンスを高めるかの紹介だった。
まずは、Airbnbの Junjie氏のプレゼン。ただの関数呼び出しだった世界から、Microservice間のネット越しのリモート呼び出しに移行する際に生まれる、複雑さをどう減らしたのか。まず、IDLをAPIのコントラクトとして表現することにし標準化と抽象化を進め、ベストプラクティスをまとめ、社内の全システムを同じ、やり方で開発することに成功した。このプロジェクトの究極の目的は、ディベロッパーにはただ、2つのことにだけ集中してもらうということだった。
- ビジネスロジック
- IDLのデザイン(API)
Httpクライアントになにを使うかとか、リモートでおきたエラーのハンドリングはどうするかとか、ログのとその解析のためのダッシュボードの考慮等、共通部分は、Thrift IDLから自動生成されたコードでカバーする。移行をスムーズにするためにも、少しずつ、ディベロッパーを教育し、少しずつ新しい方法を適用していった。ここまでくると、ディベロッパーは、トランポートレイヤーを意識しないので、上記の2つに集中できるし、自動生成されるコードの上で使われるHttpClientを新しいものへと入れかえもできるし、ということでプロダクトエンジニアとプロダクティビティチーム間でのWin-Winとなる。(自分たちプロダクティビティエンジニアにたいして、アプリケーションのディベロッパーのことを プロダクトエンジニアと表現していた。)
AirbnbのMicroService化とToolingに興味があればこちらの記事を。
2つめのNetflixのプレゼンは、Mantisと呼ばれるテストツールについてだった。Unitテスト、Integrationテスト、Functionテスト、UIテストマニュアルテストという流れのなかに、リプレイテストというのをやるということだった。なにをするかというと、本番環境のHttpのやりとりを24時間取得して、S3バケットに保存、バックエンドのエンジニアは、ツールを使って 本番のリクエストを取り出して、すきなテストケースを実行できるというものだ。これにより、本番リリースのコンフィデンスを上げるということらしい。すこし古いが、Mediumに記事があった。
Microserviceという言葉は、出てきて久しいが、シリコンバレーでも、まだまだ、移行の真っ最中のという会社もたくさんあるようだ。これらの先人から学んで、自分の仕事にも生かせることができれば、楽しいので、これからも勉強していきたい。