Rubyで作った“mission critical”<br />システムについて<br />江森 真由美<br />
PROFILE<br />Mayumi Emori<br />  (@emorima)<br />KCS Carrot Corp.<br />Asakusarb<br />
PROFILE<br />2004<br />
PROFILE<br />Ruby<br />
PROFILE<br />2004<br />
PROFILE<br />CGIKit<br />
PROFILE<br />2005<br />
PROFILE<br />Ruby<br /> on<br />Rails<br />
PROFILE<br />Ruby歴 7years<br />First RubyKaigi<br />for me<br />(超初心者)<br />
Today’s point <br />not<br />webservice<br />(framework)<br />
Today’s point<br />mission<br />critical<br />
Today’s point<br />daemonprocess<br />
Today’s point<br />Ruby<br />
Today’s point<br />mission<br />critical ?<br />
mission critical<br />24時間365日、止まらないことを要求される基幹業務、あるいは、そのような業務遂行のために使用されるコンピュータシステムのこと。(中略)<br />このような業務に使用されるシステムには、極めて高い信...
mission critical<br />24 hours<br />365 days<br />cannot stop!<br />
mission critical<br />high<br />reliability<br />(高信頼性)<br />
mission critical<br />
mission critical<br />なにこれ?<br />
mission critical<br />困<br />
what<br />system?<br />
100<br />threads<br />What system?<br />
100<br />processes<br />What system?<br />
10,000<br />threads<br />What system?<br />
UDP<br />Socket<br />What system?<br />
what<br />for?<br />
collect data<br />from<br />sensors<br />on realtime<br />What for?<br />
Last night,<br />You were protected <br />by Ruby<br />
始まり<br />beginning<br />
Beginning<br />2004<br />Prototype <br />Ruby 1.6.8<br />
Beginning<br />10,000 threads<br />ちゃんと<br />起動しなかった<br />cannot execute<br />
Beginning<br />Why?<br />
Beginning<br />ディスクリプタ上限を<br />超えていた<br />Over filedescriptor limit<br />
Beginning<br />timeout<br />10,000 TimeoutError<br />もっさり<br />slow in action<br />
Beginning<br />Thread<br />いつの間にか?刺さる<br />thread stuck<br />
Beginning<br />何とか<br />しなければ<br />ならない<br />(must resolve the problem)<br />
classThreadWatch<br />definitialize(timer)<br />    @update_time = nil<br />@alive_timer = timer<br />@mutex       = Mutex...
defself.thread_main(idx, watch)<br />loop do<br />watch.update<br />#スレッド処理<br />end<br />end<br />defself.main(argv)<br /...
defself.check_threads(th_infos)<br />loop do<br />th_infos.eachdo |i, info|<br />th, w = info<br />f_restart = false<br />...
Beginning<br />Over file descriptor limit<br />root user <br />timeout<br />select()<br />thread stuck<br />own monitoring...
本番<br />renewal<br />
renewal<br />2009<br />
renewal<br />speed<br />大量データの計算処理<br />性能要件を満たすため<br />C言語で開発<br />
renewal<br />process count<br />
renewal<br />over<br />230<br />processes<br />
Ifyou developed in C<br />
fun<br />inRuby<br />
“Rubyすげぇ”<br />(Great! Ruby)<br />
Benefits of           developing in Ruby<br />Yes! This is Ruby(1)<br />直観的 (intuitive)<br />容易(easy)<br />Thread<br />UDP...
Benefits of           developing in Ruby<br />Yes! This is Ruby(2)<br />useful methods<br />yield<br />instance_eval etc.<...
Benefits of           developing in Ruby<br />Test is fun.<br /> (テストは楽に楽しく)<br />UDP/TCP Socket<br />無限Loop<br />
think about... <br />
コード量が少なく、<br />変更も容易<br />異常ケースもテストで<br />余裕でカバー<br />ThreadもSocket通信も簡単に実装<br />
Ruby<br />for <br />大規模システム<br />
But...<br />
Expectations or Hope in Ruby<br />speed<br />(速度)<br />
Expectations or Hope in Ruby<br />high<br />reliability<br />(高信頼性)<br />
まとめ<br />(summary)<br />
Today’s Summary<br />Web Service<br />以外でも<br />Ruby活躍!<br />
Thank you <br />for your attention.<br />ご清聴ありがとうございました<br />
Thank you <br />for your attention.<br />ご清聴ありがとうございました<br />
Rubyで作った“mission critical”<br />システムについて<br />江森 真由美<br />
Upcoming SlideShare
Loading in …5
×

Rubyで作った"mission critical"システムについて

1,363 views

Published on

2011/07/16 (土) @練馬文化センター

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

  • Be the first to like this

No Downloads
Views
Total views
1,363
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Rubyで作った"mission critical"システムについて

  1. 1. Rubyで作った“mission critical”<br />システムについて<br />江森 真由美<br />
  2. 2. PROFILE<br />Mayumi Emori<br /> (@emorima)<br />KCS Carrot Corp.<br />Asakusarb<br />
  3. 3. PROFILE<br />2004<br />
  4. 4. PROFILE<br />Ruby<br />
  5. 5. PROFILE<br />2004<br />
  6. 6. PROFILE<br />CGIKit<br />
  7. 7. PROFILE<br />2005<br />
  8. 8. PROFILE<br />Ruby<br /> on<br />Rails<br />
  9. 9. PROFILE<br />Ruby歴 7years<br />First RubyKaigi<br />for me<br />(超初心者)<br />
  10. 10. Today’s point <br />not<br />webservice<br />(framework)<br />
  11. 11. Today’s point<br />mission<br />critical<br />
  12. 12. Today’s point<br />daemonprocess<br />
  13. 13. Today’s point<br />Ruby<br />
  14. 14. Today’s point<br />mission<br />critical ?<br />
  15. 15. mission critical<br />24時間365日、止まらないことを要求される基幹業務、あるいは、そのような業務遂行のために使用されるコンピュータシステムのこと。(中略)<br />このような業務に使用されるシステムには、極めて高い信頼性や耐障害性、障害発生時に被害を最小に食い止める様々な機能、万全のサポート体制などが必要となる。<br />         (IT用語辞典 e-Wordsより)<br />
  16. 16. mission critical<br />24 hours<br />365 days<br />cannot stop!<br />
  17. 17. mission critical<br />high<br />reliability<br />(高信頼性)<br />
  18. 18. mission critical<br />
  19. 19. mission critical<br />なにこれ?<br />
  20. 20. mission critical<br />困<br />
  21. 21. what<br />system?<br />
  22. 22. 100<br />threads<br />What system?<br />
  23. 23. 100<br />processes<br />What system?<br />
  24. 24. 10,000<br />threads<br />What system?<br />
  25. 25. UDP<br />Socket<br />What system?<br />
  26. 26. what<br />for?<br />
  27. 27. collect data<br />from<br />sensors<br />on realtime<br />What for?<br />
  28. 28. Last night,<br />You were protected <br />by Ruby<br />
  29. 29. 始まり<br />beginning<br />
  30. 30. Beginning<br />2004<br />Prototype <br />Ruby 1.6.8<br />
  31. 31. Beginning<br />10,000 threads<br />ちゃんと<br />起動しなかった<br />cannot execute<br />
  32. 32. Beginning<br />Why?<br />
  33. 33. Beginning<br />ディスクリプタ上限を<br />超えていた<br />Over filedescriptor limit<br />
  34. 34. Beginning<br />timeout<br />10,000 TimeoutError<br />もっさり<br />slow in action<br />
  35. 35. Beginning<br />Thread<br />いつの間にか?刺さる<br />thread stuck<br />
  36. 36. Beginning<br />何とか<br />しなければ<br />ならない<br />(must resolve the problem)<br />
  37. 37. classThreadWatch<br />definitialize(timer)<br /> @update_time = nil<br />@alive_timer = timer<br />@mutex = Mutex.new<br />end<br />defupdate<br />@mutex.synchronizedo<br />@update_time = Time.now<br />end<br />end<br />def valid?<br />@mutex.synchronizedo<br />returnfalseif!@update_time.nil? &&<br /> (Time.now - @update_time) > @alive_timer)<br /> end<br />true<br />end<br />end<br />
  38. 38. defself.thread_main(idx, watch)<br />loop do<br />watch.update<br />#スレッド処理<br />end<br />end<br />defself.main(argv)<br />th_infos = Hash.new<br />foriin0…100<br />w = ThreadWatch.new(600)<br />th = Thread.new(i, w) do |idx, watch|<br />thread_main(idx, watch)<br />end<br />th_infos[i] =[th, w]<br /> end<br />check_threads(th_infos)<br />end<br />
  39. 39. defself.check_threads(th_infos)<br />loop do<br />th_infos.eachdo |i, info|<br />th, w = info<br />f_restart = false<br />caseth.status<br />when“run”, “sleep”<br />f_restart = true unless w.valid?<br />else<br />f_restart = true<br />end<br />iff_restart<br />th.kill<br />th.join<br />th = Thread.new(i, w) do |idx, watch|<br />thread_main(idx, watch)<br />end<br />th_infos[i] = [th, w]<br /> end<br />end<br /> end<br />end<br />
  40. 40. Beginning<br />Over file descriptor limit<br />root user <br />timeout<br />select()<br />thread stuck<br />own monitoring function.<br />
  41. 41. 本番<br />renewal<br />
  42. 42. renewal<br />2009<br />
  43. 43. renewal<br />speed<br />大量データの計算処理<br />性能要件を満たすため<br />C言語で開発<br />
  44. 44. renewal<br />process count<br />
  45. 45. renewal<br />over<br />230<br />processes<br />
  46. 46. Ifyou developed in C<br />
  47. 47. fun<br />inRuby<br />
  48. 48. “Rubyすげぇ”<br />(Great! Ruby)<br />
  49. 49. Benefits of developing in Ruby<br />Yes! This is Ruby(1)<br />直観的 (intuitive)<br />容易(easy)<br />Thread<br />UDP/TCP Socket etc.<br />
  50. 50. Benefits of developing in Ruby<br />Yes! This is Ruby(2)<br />useful methods<br />yield<br />instance_eval etc.<br />
  51. 51. Benefits of developing in Ruby<br />Test is fun.<br /> (テストは楽に楽しく)<br />UDP/TCP Socket<br />無限Loop<br />
  52. 52. think about... <br />
  53. 53. コード量が少なく、<br />変更も容易<br />異常ケースもテストで<br />余裕でカバー<br />ThreadもSocket通信も簡単に実装<br />
  54. 54. Ruby<br />for <br />大規模システム<br />
  55. 55. But...<br />
  56. 56. Expectations or Hope in Ruby<br />speed<br />(速度)<br />
  57. 57. Expectations or Hope in Ruby<br />high<br />reliability<br />(高信頼性)<br />
  58. 58. まとめ<br />(summary)<br />
  59. 59. Today’s Summary<br />Web Service<br />以外でも<br />Ruby活躍!<br />
  60. 60. Thank you <br />for your attention.<br />ご清聴ありがとうございました<br />
  61. 61. Thank you <br />for your attention.<br />ご清聴ありがとうございました<br />
  62. 62. Rubyで作った“mission critical”<br />システムについて<br />江森 真由美<br />

×