Intellectual Scalability Solving a Large Problem with Multiple Cooperating Rails Apps

Preview:

DESCRIPTION

Intellectual Scalability Solving a Large Problem with Multiple Cooperating Rails Apps. Frederick Cheung, Chief Wizard, Texperts Paul Butcher, CTO, Texperts. What is the least scalable element of your project?. Our Problem. - PowerPoint PPT Presentation

Citation preview

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

Recommended