Nuts and Bolts of High Quality Internet Applications Talk
speaker notes for Philip Greenspun; revised June 2003
Site Home : Teaching : Short Talks : One Element
Introduction
- old world: desktop applications, one user at a time at the mouse
and keyboard
- Web world: many users simultaneously updating a common database
- modern world: Web world + servers talking to each other
- Today: perspective for engineering design meetings, inspiration
for the future
how an Internet server communicates with the rest of the world:
HTML, VoiceXML, SOAP, WSDL
- what's interesting about HTML: markup language instead of
programming language; you specify the application and the browser
renders the application. Result: lot of innovation in computer apps
accessible from a desktop computer.
- VoiceXML: same deal but for voice
- mobile: lots of protocols, latest is XHTML Mobile Profile
- SOAP, WSDL: server-to-server communication
how an Internet server handles simultaneous updates from 1000
users at the same time
- the relational database management system (RDBMS) and the
Structured Query Language (SQL) -- versus spreadsheet program (guy in
closet analogy)
- declarative versus imperative
- use of imperative languages has kept programmer productivity low;
only way to improve productivity (output per dollar of labor) is
moving jobs to India
- you can do this with all computer problems because Haskell is
Turing-complete
effective page design: screen space, time, words, color, standard
controls
effective interaction design: navigation, user testing
two-tiered versus three-tiered architectures
- reliability: best to have one simple physical computer; when was
the last time you saw a broken desktop PC?
- challenge of scaling: hard to predict load on a public site, may
not be able to serve whole world from a one-board PC
- draw lots of computers on board (99 percent reliability implies 10
machines have 90 percent uptime, 100 machines only 37 percent; Google
has more than 10,000 computers)
- draw layers on blackboard:
- transport-layer encryption (SSL if the site has secure HTTPS pages)
- HTTP service
- presentation layer (page composition; script execution)
- abstraction provision (sometimes called "business logic"; any layer of code on top of the raw database where each procedure is used by more than one page)
- persistence
- start with persistence layer: better to have lots of CPUs in one
box or many separate CPUs? Depends on how many updates database is
getting (communication through shared memory very fast).
- abstraction layer, where people often add a tier. Banks used to
add application server programs because a transaction touched three
databases (checking account, credit card, customer service database).
Orbitz has a layer here because searching for flights computationally
expensive.
- HTTP service: can be CPU-intensive with things like Active Server
Pages; where to put all the CPUs?
- reasonable compromise for most sites: multi-CPU database server,
multiple Web servers, load balancing router; can upgrade the operating
system on the Web servers without touching the database. Expect no
better than 10 pages per second per CPU.
the most productive software development styles
- the real design work in an Internet application is in SQL and the
page flow (interaction design); imperative programs are just glue
between the database and the Web
- the Microsoft Active Server Page style of development is very
effective because all of the code for a page is in one or two files;
easy to make changes
- systems programming languages have very powerful type systems
(C++, Lisp, Java) but these aren't useful when source of persistence
is RDBMS (limited to string, number, and date)
- if source of persistence is an object database a language like
Java would make sense
can you start with an open-source toolkit?
A little inspiration
- old days: programmer could only have impact as industrial worker
(50 people to get a CD-ROM in a package to the consumer)
- good news about modern times: one programmer can distribute via Internet
- bad news about modern times: only one software company (Microsoft
monopoly)
- you can't be smarter, harder working, or slicker at marketing than MSFT
- you can pick a problem that they haven't thought about and get a
solution into user hands ASAP
- standard product development/release cycle: 2 years, users to
marketing to product managers to programmers back to users
- what we did for ACS: shortcut by release from a running system
Text and photos (if any) Copyright 2003 Philip
Greenspun.
philg@mit.edu