Www.texperts.com Intellectual Scalability Solving a Large Problem with Multiple Cooperating Rails...
-
Upload
robyn-smith -
Category
Documents
-
view
214 -
download
0
Transcript of Www.texperts.com Intellectual Scalability Solving a Large Problem with Multiple Cooperating Rails...
www.texperts.com
Intellectual ScalabilitySolving a Large Problem with Multiple Cooperating Rails Apps
Frederick Cheung, Chief Wizard, TexpertsPaul Butcher, CTO, Texperts
www.texperts.com
What is the least scalable element of your project?
www.texperts.com
www.texperts.com
Our Problem
+----------------------+-------+-------+---------+---------+-----+-------+| Name | Lines | LOC | Classes | Methods | M/C | LOC/M |+----------------------+-------+-------+---------+---------+-----+-------+| Controllers | 7435 | 6169 | 116 | 687 | 5 | 6 || Helpers | 1726 | 1504 | 0 | 167 | 0 | 7 || Models | 18030 | 14598 | 359 | 1428 | 3 | 8 || Libraries | 4357 | 2934 | 38 | 227 | 5 | 10 || APIs | 91 | 74 | 11 | 0 | 0 | 0 || Components | 0 | 0 | 0 | 0 | 0 | 0 || Functional tests | 12808 | 10286 | 178 | 1177 | 6 | 6 || Unit tests | 24099 | 18762 | 237 | 1514 | 6 | 10 |+----------------------+-------+-------+---------+---------+-----+-------+| Total | 68546 | 54327 | 939 | 5200 | 5 | 8 |+----------------------+-------+-------+---------+---------+-----+-------+ Code LOC: 25279 Test LOC: 29048 Code to Test Ratio: 1:1.1
www.texperts.com
Our Problem
www.texperts.com
The Solution
• Multiple Apps!
… but …• How do they talk to each other?• How do they share code?• How do we roll them out?• How do we test them?
… and most importantly …• How do we make it all appear seamless?
www.texperts.com
Headlines
• Apps developed and rolled out in “lock-step”• Simple directory structure
• All apps under a single root directory• Code sharing through shared plugins*
• Hacked version of Capistrano• All applications rolled out simultaneously
• Cross-application testing with Selenium
* http://www.texperts.com/2007/06/21/on-sharing-code-between-rails-apps/
www.texperts.com
Inter-App
Communication
• Each app has its own database• No communication via the database• Apps could run on separate machines
• Hybrid server- and client-side communication• Server-side communication via RESTful APIs• Client-side communication via UI framework
www.texperts.com
UI Framework
• Integrated UI✘Multiple URLs✘Multiple logins✘Multiple windows✔Appears to be a single app
• Problems• Efficient client-side communication• Single Origin Policy
www.texperts.com
Architecture
foo.example.com
bar.example.com
baz.example.com
app.example.com/foo
app.example.com/bar
app.example.com/baz
Load Balancer/Rewriter
www.texperts.com
Apache Rewrite Rules
<VirtualHost *:80> ServerName app.example.com
...
RewriteEngine On RewriteRule ^/foo/(.*)$ http://foo.example.com/$1 [P,QSA,L] RewriteRule ^/bar/(.*)$ http://bar.example.com/$1 [P,QSA,L] RewriteRule ^/baz/(.*)$ http://baz.example.com/$1 [P,QSA,L]</VirtualHost>
www.texperts.com
UI Framework
• Single “portal” application• Applications implement “widgets”• Widgets loaded via AJAX
Portal
App1 App1
App2
App3
App2
www.texperts.com
Demonstration
www.texperts.com
Status
• In production since June 2008• 5 applications integrated (and counting)• Texperts report:
✔Better UI responsiveness✔Higher productivity✘Doesn’t work well on high-latency connections
www.texperts.com
Questions
www.texperts.com
Support Slides
www.texperts.com
Why IFRAMEs Don’t
Work
• Each IFRAME is its own independent HTML document• Difficult to resize• Difficult to communicate between• Difficult to style consistently
• Makes Darren (our web-standards guy) cry