Let's make your CDN with RUBY

2,026 views

Published on

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

No Downloads
Views
Total views
2,026
On SlideShare
0
From Embeds
0
Number of Embeds
32
Actions
Shares
0
Downloads
0
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Let's make your CDN with RUBY

  1. 1. Rubyによるお手軽CDN作成のすすめLet’s make CDN withRuby<br />荒木靖宏<br />ARAKI Yasuhiro <br />&lt;ar@debian.org&gt;<br />DebianProject<br />First of all, thanks ruby! <br />http://wiki.debian.org/DebianGeoMirror<br />
  2. 2. Self introduction<br />Name:<br />荒木靖宏ARAKI, Yasuhiro<br />Debian Project Member<br />Ph.D student of Univ. of Tokyo<br />Researcher of Hewlett-Packard Labs <br />現在求職中です。<br />I am seeking a JOB.<br />CV is available<br />http://wiki.debian.org/DebianGeoMirror<br />
  3. 3. Why CDN?<br />ftp.jp.debian.org stopped frequently<br />Storage Trouble<br />結局ここ二ヶ月くらいで ftp.jp.debian.orgには下記のトラブルが起き,ハードウェア,OS 共に丸ごと入れ替わってしまいました.これ以上トラブルが起きないことを切に願っております・・・.1, サーバのハードウェアが壊れた    -&gt; 代替サーバに交換2, ストレージ(1)のディスクが壊れた    -&gt; ストレージ(1)を切り離して残りのストレージでやりくり3, ストレージ(2)のディスク x 3 が壊れた    -&gt; 予備のディスクに交換4, ストレージ(2)本体が壊れた    -&gt; 新ストレージを手配,ストレージ(2) からデータを移行 <br />Electricity Shutdown<br />[debian-users:45154] ftp.jp.debian.org 障害 現在発生している ftp.jp.debian.orgの障害のため,みなさまにご迷惑をおかけしており申し訳ありません.現状としては,サーバを何度再起動してもすぐに落ちてしまうため,代替機を準備中です.すみませんが,もうしばらくお待ちください.<br />fscking!!!!!<br />
  4. 4. cdn.debian.net<br />http://wiki.debian.org/DebianGeoMirror<br /><ul><li>Since 2007, Feb
  5. 5. 42 countries, more than 120 hosts
  6. 6. Keep alive every 2 min
  7. 7. Geo routing w/ GeoIP
  8. 8. Weighted DNS Round-Robin</li></li></ul><li>cdn.debian.net<br />Surrogate@topstudio<br />debianprimary<br />Surrogate@kyushu-u,hokudai<br />Surrogate@Kyoto-u<br />Surrogate@naist<br />ftp.XX.debian.org<br />ftp.us.debian.org<br />Japan primary<br />= hanzubon.jp<br />rsync<br />Content Location Manager = deb.cdn.araki.net<br />Japan mirrors<br />CDN Control Plane<br />rsync<br />rsync<br />rsync<br />rsync<br />apt-get update &&<br />apt-get dist-upgrade<br />rsync<br />
  9. 9. Pros<br />http://wiki.debian.org/DebianGeoMirror<br />Run without server modify<br />You can use any server without modify.<br />Run for simple client<br />cf. No need“REDIRCT”<br />◎ gem use redirect<br />× apt<br />
  10. 10. gem use redirect<br />http://wiki.debian.org/DebianGeoMirror<br />cfardm-2:~/Downloads$ gem source -l<br />*** CURRENT SOURCES ***<br />http://gems.rubyforge.org/<br />cfardm-2:~/Downloads$ curl http://gems.rubyforge.org/<br />&lt;html&gt;<br />&lt;body&gt;<br />&lt;h1&gt;Welcome to the RubyGems distribution website&lt;/h1&gt;<br />To download the yaml index select &lt;a href=&quot;yaml&quot;&gt;yaml&lt;/a&gt;&lt;br&gt;&lt;br&gt;<br />To view the available gems via your browser select &lt;a href=&quot;http://gems.rubyforge.org/gems/&quot;&gt;gems&lt;/a&gt;&lt;br&gt;&lt;br&gt;<br />To download and install RubyGems please visit &lt;a href=&quot;http://rubygems.rubyforge.org&quot;&gt;rubygems&lt;/a&gt;<br />&lt;/html&gt;<br />
  11. 11. Cons<br />Smart Client does not need this CDN!<br />In some case, server rejects HTTP ping.<br />http://wiki.debian.org/DebianGeoMirror<br />
  12. 12. Programs<br />DNS type CDN based on DNS-Balance<br />Original Author: Yokota-san!<br />Modify points<br />Check HTTP response code<br />Temporally ignore slow response server<br />use rsynctracefile<br />/debian/project/trace/#{tracefile}<br />Country and Continent detection by GeoIP.<br />http://wiki.debian.org/DebianGeoMirror<br />
  13. 13. Gather surrogate candidates<br />Same directory structure (Mandatory)<br />Good:<br />ftp.XX.debian.org/debian<br />Bad:<br />ftp.jaist.jp/pub/Linux/Debian<br />now changed to “/debian”<br />http://wiki.debian.org/DebianGeoMirror<br />
  14. 14. LETS MAKE YOUR CDN<br />http://wiki.debian.org/DebianGeoMirror<br />
  15. 15. Prepare script<br /><ul><li>svn co https://osdn.debian.or.jp/repos/cdn/trunk/</li></ul>http://wiki.debian.org/DebianGeoMirror<br />
  16. 16. Prepare configuration<br />vi JPN_hoge_cdn_araki_net.rb<br />$tracefile = &apos;hanzubon.jp&apos; # hanzubon 2007apr5<br />$first_surrogate = &apos;61.115.118.67&apos;<br />$surrogates = {<br /> &apos;203.178.137.175&apos; =&gt; &apos;9000&apos;, # naist<br /> &apos;150.65.7.130&apos; =&gt; &apos;9&apos;, # jaist<br />}<br />http://wiki.debian.org/DebianGeoMirror<br />
  17. 17. Let’s work<br />cdkeepd && ruby ./keepd.rb<br />set cron<br />*/2 * * * * ruby check-surrogates.rb<br />ruby ./dns_balance.rb<br />or<br />/etc/init.d/dns_balance_keepd start<br />/etc/init.d/dns_balance start<br />http://wiki.debian.org/DebianGeoMirror<br />
  18. 18. Future work<br />Now testing..<br />SSLDRbfor information sharing and remote control<br />Tweet<br />Apply others and Code clean<br />Available on REQUEST!<br />http://wiki.debian.org/DebianGeoMirror<br />
  19. 19. cdn.debian.or.jpの信頼性<br />更新頻度<br />2分に一度<br />DNS cacheは60秒<br />1997年2月8日の動作開始以来ノンストップです<br />cdn.debian.or.jpはのDNSは3箇所<br />ファイルの信頼性は他のdebianミラーと同じ<br />md5/sha1 sumを見てaptが選別<br />
  20. 20. Country – Access in 3 month<br />
  21. 21. サーバのえらびかた<br /><ul><li>世界150カ国、月間100万以上で使われています(誇張あり)</li></ul>http://wiki.debian.org/DebianGeoMirror<br />
  22. 22. http://wiki.debian.org/DebianGeoMirror<br />fin<br />Reference& code<br />http://wiki.debian.org/DebianGeoMirror<br />
  23. 23. http://wiki.debian.org/DebianGeoMirror<br />
  24. 24. cdn.debian.or.jpの実装<br />動作部分は以下<br />サロゲートへのrsync<br />ネットワークの情報収集<br />ネットワークがボトルネックじゃどうしょうもない<br />サロゲートのステータスを管理<br />眠ってるサロゲートにはサービスさせない<br />クライアントをサロゲートに誘導する<br />DNSでcdn.debian.or.jpを解決すると<br />cdn.debian.or.jpのリストを返す<br />
  25. 25. approach<br />Load balance by DNS+cache<br />Why DNS?<br />Client Protocol: DNS,HTTPand FTP<br />Almost all mirrors provide HTTP only<br />apt (Debian client) can not use REDIRECT<br />よってDNSに頼ることに<br />キャッシュはミラーサーバがあるじゃん<br />ミラーサーバには手を入れないことにした<br />今あるものに乗っかりたい<br />

×