Dropwizardでオペレーション駆動型のサービスを開発する

http://www.youtube.com/watch?v=cDBdzxwQh6k

1 comment | 0 points | by WazanovaNews 4年弱前


Jshiike 4年弱前 | ▲upvoteする | link

Rent the RunwayのHead of EngineeringのCamille Fournierが、Dropwizardを利用して、オペレーション駆動型のサービスづくりをしている取組みを紹介しています。

ドレス服レンタルサービスのRent the Runwayは、Founder二人がnon-technicalだったこともあり、最初のサイトはDrupalでつくられたシンプルなもので、サービスが複雑になってきてメンテしづらくなり、パフォーマンス的にも対応できなくなった。そこで全てを一度に書き直すのではなく、機能を順次切り出し、Javaでつくるアプローチをとった。Javaにした理由は、自分がよく理解していて、信頼して使えるものだったから。そもそも他の新しいものに冒険できるような状況ではなかった。DrupalサーバのPHPコードからJSON APIにした。移行には相当時間がかかったし、人にはお勧めしたくないほど大変ではあった。

その間、本番環境ではサービスが半年で2から10+に増えた。アーキテクチャとしては、複数のサービスからデータをまとめ、JSONペイロードをフロントに渡す仕組み。あまり美しいかたちにはなってないが、ひとまずワークしている。データベースはシェアされているが、テーブルは厳密にサービスごと。

複雑になる構成の中、ユーザに提供するサービスのレベルを維持するために、オペレーションを第一に開発を進めていくことにした。機能が複雑な相互依存になるのでなく、ツリー構造になっているか。パフォーマンスが問題ないか。診断 + Nagios。いくつスレッドが走っているか。メモリは?時系列のデータもいる。とにかく計測する。

予約システムというのはとにかく複雑。何がレンタルされていて、何が空いているか、過去に何がレンタルされたかなど、複雑なクエリが走る。パフォーマンスの問題がでたときに原因の切り分けに苦労した。そこでYammerのMetricsを使った。計測の切り口のバラエティが多いのが魅力。

Playフレームワークにトライして苦労しているときに、Dropwizardに出会った。

  • オープンソース
  • モジュール型のJavaウェブサービスコンポーネント
  • プラットフォームのスタックを拾ってくる必要がない。全部ある。
  • 好みは分かれる。コアコンポーネントが好きになれなければ、使わないこと。
  • 開発者はフレームワークではなく、ビジネスロジックにフォーカスできる
  • 簡単、メンテしやすい、うまく動く。

構成は、

  • Jersey: REST
  • Jackson: JSON
  • Jetty: ウェブサーバ
  • Metrics: モニタリング
  • YAML: 設定
  • Dropwizard: 全部をうまくまとめたもの

うまくいっているか常に診断するのが大事。大丈夫かどうかの定義をしっかり決めること。(DB接続、クライアント接続、デッドロック数など)Dropwizardでは、Metricsのプラットフォームツールが利用可能(Jetty, JVM, Log Counts etc.)。

Story Telling

どうしてそうなるのか、ストーリーで説明できるようにする。

グリッドが遅いのは何故?

  • loadのせい?
  • 依存しているサービスの遅延?
  • 昨日と比べてどうなの?

JVMのメモリ使い切った。何が問題なのか?

  • ガベージコレクタのjigsawはどんな様子?
  • いつから状況が変わったのか?
  • ロードの増加と相関関係はあるのか?

パフォーマンス改善策は効いているのか?

  • 計測しないとわからない。ベース数値と新しい数値は?

Operational Excellence

Dropwizard + Graphite + New Relicでかなりのことができる。

  • Application Instrumentation (Dropwizard)
  • Time Series Data & Graphing (Graphite, D3)
  • Centralized logging & log parsing (Rsyslog, Logstash, Nagios)
  • Automated alerting & escalation (Pagerduty)

Graphiteは見た目はよくないけど、とにかく機能がパワフル。Tasseoで色分けして可視化するとわかりやすい。

[参考: Graphite Dashboard] [参考: Tasseo dashboard (D3) ]

Free Lunch? Not really

気にかけていなければいけないことはまだ下記のこともある。

  • DB connection monitoring
  • http client connection pool monitoring
  • JVM Heap & GC info
  • http server response counts
  • http server connection info
  • endpoint duration & throughput stats

Twilio: DropwizardサービスをJEEサーバにアップできるオープンソースライブラリ


#java #dropwizard #devops #オープンソース

Back