Lineのインフラセミナーに参加してきました。
昨日、LINE Developer Conference(テーマ:インフラ)に参加してきましたので、備忘録的にメモ。
1. Systemのお話し(講演の途中から参加)
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とかじゃダメなのかな?
お土産までいただきました。ありがとうございます!
Comments