20101220 pixiv tech_meeting

8,002 views
7,885 views

Published on

Published in: Technology
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,002
On SlideShare
0
From Embeds
0
Number of Embeds
35
Actions
Shares
0
Downloads
47
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

20101220 pixiv tech_meeting

  1. 1. 6GbpsをさばくオレオレCDN構築術
  2. 2. アジェンダ1.自己紹介2.はじめに3.システムの構成4.やったらおどろいた5.終わりに
  3. 3. 自己紹介・ 飯田祐基 (いいだゆうき)・ まいんど (だーいー)・ 2009年8月 入社・ 前職は某ISPで3年ほどピクシブでは主にネットワークまわり、広告配信システム、データセンタの構築を担当
  4. 4. はじめに
  5. 5. はじめにpixivのメインコンテンツ それは...
  6. 6. はじめにイラスト
  7. 7. はじめにイラスト(画像)にたくさんのアクセスが来ます ↓画像を保存してるサーバ(オリジン)だけでは捌けません! ↓他のサーバにもキャッシュ(同じデータを持たせて)して助けてもらいましょう!
  8. 8. はじめにCDN(Contents Delivery Network)とは?
  9. 9. はじめにWebコンテンツをインターネット経由で配信するために最適化されたネットワークのことである by wikipedia要はコンテンツの配信を良い感じに手伝ったり、肩代わりしてくれるもの専門的にやってる業者がいる → akamai, IIJ, etc
  10. 10. はじめにということで、データセンタ借りて画像配信用キャッシュクラスタ(オレオレCDN)を作ってみましたよ!というお話
  11. 11. はじめに・初夏にかけて徐々にサイトが重い状態 (トラフィックが頭打ち)・キャパ的に拡張余地がなかった (建物、プロバイダetc)・以前の構成はかなり酷かった (無茶しやがって...) データセンタを借りることに・時間がなかった(データセンタの選定も含め2,3ヶ月?)・データセンタ作業経験者が自分だけだった・ネットワークの見直し(L3スイッチ導入)も同時並行でしてた・ちょうどハテブのホッテントリにnginxを使ったクラスタの話が ※ただし、配信してみたタグはついてなかった (参考にしたエントリはこちら → http://p.tl/2vYq)
  12. 12. はじめにkamipo先生「イメージ配信クラスタ略してイメクラですね!!」自分「*・゜゚・*:.。..。.:*・゜(n‘∀‘)η゚・*:.。. .。.:*・゜゚・」
  13. 13. はじめに結論
  14. 14. はじめに
  15. 15. システム構成
  16. 16. システム構成 ユーザーのアクセス6Gbps占有でDNS RR データセンタ フロントA フロントB フロントC フロントD (nginx) (nginx) (nginx) (nginx)Consistent Hashing キャッシュA キャッシュB キャッシュC キャッシュD (squid) (squid) (squid) (squid)ローカルのnginxに再度 ディスパッチャ ディスパッチャ ディスパッチャ ディスパッチャ (nginx) (nginx) (nginx) (nginx) オリジン オリジン 旧社屋
  17. 17. システム構成 メリット・構成が均一(各サーバのconfigが一緒!)なので管理が楽!・スケールアウト(台数を増やしての拡張)が楽! そんなふうに考えていた時期が俺にもありました...・なんか工夫してるっぽくてカッコいい・正直やってみたかった、反省はしてない
  18. 18. オレオレCDNやったらおどろいた!!
  19. 19. オレオレCDN やったらおどろいた 其の一
  20. 20. オレオレCDN やったらおどろいた 入れ過ぎるな危険
  21. 21. オレオレCDN やったらおどろいた ユーザーのアクセス6Gbps占有でDNS RR データセンタ フロントA フロントB フロントC フロントD (nginx) (nginx) (nginx) (nginx) DNSラウンドロビンにたくさんアドレスを登録 DNSサーバの返答が512byteを超える(TCPに切り替わる) クライアント側が対応していない → 見られない
  22. 22. オレオレCDN やったらおどろいた 解決方法 登録してる台数を減らした
  23. 23. オレオレCDN やったらおどろいた 其の二
  24. 24. オレオレCDN やったらおどろいた 偏る
  25. 25. オレオレCDN やったらおどろいた フロント (nginx)Consistent Hashing キャッシュA キャッシュB キャッシュC キャッシュD (squid) (squid) (squid) (squid) ハッシュによるキャッシュへのリクエストが偏る (多いとこ、少ないとこで10倍くらいの差が) 特定のサーバの負荷が高くなる
  26. 26. オレオレCDN やったらおどろいた 解決方法 weightをいじって調節 upstream cache_server { consistent_hash $host$request_uri; server 192.168.32.2:8080 weight=100; server 192.168.32.6:8080 weight=110; server 192.168.32.7:8080 weight=106; server 192.168.32.8:8080 weight=110; server 192.168.32.9:8080 weight=160; … }
  27. 27. オレオレCDN やったらおどろいた 其の三
  28. 28. オレオレCDN やったらおどろいた バッファロー限界説
  29. 29. オレオレCDN やったらおどろいた L3 Switch 過負荷 Switch Switchリクエス フロント フロント フロント フロントト キャッシュ キャッシュ キャッシュ キャッシュ ホストA ホストB ホストC ホストD L3 Switch ↔ Switch 700Mbps (L3 Switchを経由する場合)Nginxが 大量のconnection timeoutを吐くように
  30. 30. オレオレCDN やったらおどろいた 解決方法timeout値を上げた(とりあえず) proxy_connect_timeout 4;
  31. 31. オレオレCDN やったらおどろいた L3 Switch Switch Switch フロント フロント フロント フロント ×リクエスト キャッシュ キャッシュ キャッシュ キャッシュ ホストA ホストB ホストC ホストD 特定種類の画像を同じSwitch内のホストにのみ任せる 所属してるSwitchごとにconfigを変える必要性
  32. 32. オレオレCDN やったらおどろいた upstream cache_server_switch_a { consistent_hash $host$request_uri; server 192.168.32.3:8080 weight=100; ... } upstream cache_server_wtich_b { consistent_hash $host$request_uri; server 192.168.32.13:8080 weight=100; ... }・ホストA、B → cache_server_switch_a・ホストC、D → cache_server_switch_b
  33. 33. 終わりに
  34. 34. 終わりに・ やったからこそわかる事がある・ varnishとかに変えてみたい・ 局所的にアクセスの多い部分を分割・ 詳しいことは懇親会で・ 弊社ではこんなのやってる!ってのも是非・ みんなも真似できる構成

×