Weitere ähnliche Inhalte Ähnlich wie AP4R on RubyKaigi2007 (English only) (20) Kürzlich hochgeladen (20) AP4R on RubyKaigi2007 (English only)5. Kiwamu Kato
• Majored in Civil Engineering
• Has Enhanced and maintained
messaging middleware in company
5 6. Kiwamu Kato
• Started Ruby since last year
• Leader of the AP4R team
• http://d.hatena.ne.jp/kiwamu/
6 11. What is AP4R ?
• Asynchronous Processing for Ruby
• Loose coupling by messaging
11 12. What can we do w/ AP4R ?
• Quicker response to users
• Load distribution
12 30. it may lead to
message lost and
message duplication
30 34. No matter what happens
• Database trouble
• Network trouble
• Server down
• Busy and timeout
• ... etc
34 38. We use messaging a lot
• Pure Java
• Its own protocol, API (≠ JMS)
• Time-proven on various systems
38 39. One of illustrative cases
Mission critical system
in transportation business
http://japan.internet.com/linuxtoday/20061228/5.html
39 40. PJ summary
• Over 100 million package data per day
• Load distribution and parallel processing
on 8 nodes of Oracle 10g RAC
40 46. From RtFA to AP4R
• Based on implementation/experiences with Java,
kept good parts, improved bad parts
• Focus on ease of use API, configuration
46 53. Loose coupling
AP4R
Client Rails Rails × 3
Payment
Order Sleep 1
53 58. WWR
• is who’s who for Rails developers
• listed 7,000 people
from 104 countries
58 61. WWR solution
• Queue Feeds
• Fetch async’ly
quot;Getting Distributed with Ruby on Railsquot;
slide #44 (from slideshare)
61 64. Briefing
• Work sheet management app.
newly-building in Ruby
• Labor cost accounting app.
existing in Java
64 70. Separate loads from UI
Client Server Messaging Server
Create summary data,
Send mails, etc.
68 75. Utilize Async! when
• Needless proc. for responce data
• Disjoined transactions are allowable
• External calls (often slow, unstable)
70 80. Class ShopController < ApplicationController
def order # synchronous side
...
ap4r.async_to({:action => ‘payment’},
{:id => 1})
redirect_to ...
end
def payment # asynchronous side
id = params[:id]
...
render :text => “true”
end
end
75 82. User Apache Rails AP4R
77 83. User Apache Rails AP4R
order
message put
78 84. User Apache Rails AP4R
dispatch
79 85. User Apache Rails AP4R
payment
80 87. User Apache Rails AP4R
82 88. Architecture
AP4R
HTTP
AP4R DRB druby DRB
reliable-msg
SOAP
XML
-RPC
AP4R MySQL
mongrel
HTTP
83 89. Thanks to
DRb
4%
10%
reliable-msg
20%
mongrel
66%
rails 97. start
CRUD
commit
end
90 98. start
CRUD
commit
message put / commit
end
90 99. start
CRUD
commit
message put / commit
end
data
90 100. start
CRUD
commit
message put / commit
end
data messages
90 101. Ensure (some)
Atomicness
of
updating database and
message creation
91 115. start
CRUD
commit
message put / commit
end
data messages
100 116. start
CRUD
commit
message put / commit
end
data messages
100 117. start
CRUD
commit
message put / commit
end
data messages
101 118. start
CRUD
commit
message put / commit
end
data messages
101 119. start
CRUD
commit
message put / commit
☠
end
data messages
101 120. start
CRUD
commit
message put / commit
☠
end
data messages
101 121. start
CRUD
commit
message put / commit
☠
end
data messages
101 122. start
CRUD
commit
counterchange
message put / commit
end
data messages
102 123. start
CRUD
message put / commit
counterchange
commit
end
data messages
103 124. start
CRUD
message put / commit
commit
end
data messages
104 125. start
CRUD
message put / commit
commit
end
data messages
104 126. start
CRUD
message put / commit
commit
end
data messages
105 127. start
CRUD
message put / commit
commit
end
data messages
105 128. start
CRUD
message put / commit
commit
☠
end
data messages
105 129. start
CRUD
message put / commit
commit
☠
end
data messages
105 130. start
CRUD
message put / commit
commit
☠
end
data messages
105 131. Better Safe than Sorry
• Database trouble
• Network trouble
• Server down
• busy and timeout
• ... etc
106 134. CRUD
start
SAF create
commit
message put / commit
SAF update
end
data messages
109 135. CRUD
start
SAF create
commit
message put / commit
SAF update
end
data messages
110 136. CRUD
start
SAF create
commit
message put / commit
SAF update
end
data messages
110 137. CRUD
start
SAF create
commit
message put / commit
SAF update
end
data messages
111 138. CRUD
start
SAF create
commit
message put / commit
SAF update
end
data messages
111 139. CRUD
start
SAF create
commit
message put / commit
SAF update
end
data messages
111 140. CRUD
start
SAF create
commit
message put / commit
SAF update
☺
end
data messages
111 141. CRUD
start
SAF create
commit
message put / commit
SAF update
☺
end
data messages
111 142. CRUD
start
SAF create
commit
message put / commit
SAF update
☺
end
data messages
111 143. CRUD
start
SAF create
commit
message put / commit
SAF update
end
data messages
112 144. CRUD
start
SAF create
commit
message put / commit
SAF update
end
data messages
112 145. CRUD
start
SAF create
commit
message put / commit
SAF update
end
data messages
113 146. CRUD
start
SAF create
commit
message put / commit
SAF update
end
data messages
113 147. CRUD
start
SAF create
commit
message put / commit
SAF update
end
data messages
messages
113 148. CRUD
start
SAF create
commit
message put / commit
SAF update
☺
end
data messages
messages
113 149. CRUD
start
SAF create
commit
message put / commit
Recoverable
SAF update
☺
end
data messages
messages
113 150. CRUD
start
SAF create
commit
message put / commit
SAF update
☺
end
data messages
messages
113 151. CRUD
start
SAF create
commit
message put / commit
SAF update
☺
end
data messages
messages
113 152. CRUD
start
SAF create
commit
message put / commit
SAF update
end
data messages
114 153. CRUD
start
SAF create
commit
message put / commit
SAF update
end
data messages
114 154. CRUD
start
SAF create
commit
message put / commit
SAF update
end
data messages
115 155. CRUD
start
SAF create
commit
message put / commit
SAF update
end
data messages
messages
115 156. CRUD
start
SAF create
commit
message put / commit
SAF update
☺
end
data messages
messages
115 157. CRUD
start
SAF create
commit
message put / commit
Duplicated
SAF update
☺
end
data messages
messages
115 158. CRUD
start
SAF create
commit
message put / commit
SAF update
☺
end
data messages
messages
115 159. CRUD
start
SAF create
commit
message put / commit
SAF update
☺
end
data messages
messages
115 163. • Messaging with simple API,
simple configuration.
• Seamless collaboration with
Rails
119 169. Step to large scale ver.0.5.x
□ Dynamic configuration
□ Automatic recovery
□ Long running
125 172. • Future Architect logo belong to Future Architect, Inc.
Japan. All rights reserved.
• Rails logo are trademarks of David Heinemeier
Hansson. All rights reserved.
• The Ruby logo is copyright c 2006, Yukihiro
Matsumoto. It is released under the terms of the
Creative Commons Attribution-ShareAlike 2.5 License.
128