2014年4月16日水曜日

Lineのインフラセミナーに参加してきました。

昨日、LINE Developer Conference(テーマ:インフラ)に参加してきましたので、備忘録的にメモ。

1. Systemのお話し(講演の途中から参加)

  • 年末年始の障害、redisのレスポンスが悪化し、コネクションバースト。redisの処理とNIC割り込みを同じコアで処理していた。/proc/interruptをwatchして発見し、tasksetで解決。
2. データベースのお話し
  • Lineツムツムのデータベースのお話し。multimasterのmysql replication。PerconaのMMM Managerを使用。write VIPとread VIPをMMMが管理。Failover時にVIPを移動。
  • Shardの自動追加。すべてのUIDに対しハッシュ関数を通しグループIDを発行。グループIDに対しshardを割り当てる。
  • MMMはカスタマイズして使っている。主に障害判断の部分。
  • shardの追加時には、移動するグループに対しselect/insert(update?)を複数回に分けて実行する。更新時刻でソートして実行しているので、マイグレーション中に更新されたデータも、もれなく移動することができる。
3.ネットワークのお話し
  • 内部ネットワーク。Core-Pod-Edgeの3階層。unknown unicast flooding により、ギガビット大半の帯域を消費していた。Pod当たり数千台のサーバ。L2セグメントはPod単位だったのを、L2セグメントをEdge単位にした。
  • ロードバランサL3DSR採用。L2セグメントを小さくしたので必要になった。DSCP方式。Tosフィールドのdscp=1などを設定し、それに応じてソースアドレスをリアルサーバで付け替える。
  • ラックは24kVA 51U。スイッチは背面設置。サーバの排熱を避けるためにスイッチ3台を囲えるダクトを作成。
  • 海外拠点はアメリカ、アジア3ヶ所、ヨーロッパ。リングトポロジー。専用線を節約し、冗長性を確保。MPLSでPseudo Wire。出来るだけルーティングに関与せずに、拠点間接続。
  • サーバ間接続とユーザーエッジへの接続を、別々のネットワークにした。ユーザーがどの拠点に接続するか、登録時のユーザー情報をもとにスタティックにマッピング。クライアント側で実装。
  • TCPコネクションはりっぱなし。ロードバランサのセッション、コネクションテーブルサイズがボトルネックになっていた。→ Stateless SLB ハッシュテーブルに基づいて、リクエストを分散。ソースIPをキーにハッシュ値計算すればいい。サーバが落ちるとハッシュ再計算。
  • ハッシュの再計算を部分的に行うタイプの機器で、Stateless SLBを実現。今年一月から。
  • 箱物のロードバランサを使っているらしい。LVSとかじゃダメなのかな?

お土産までいただきました。ありがとうございます!