Adam Bosworth argues for the 'worse is better' philosophy of web services eloquently in his ISCOC talk and blog entry.
I have a lot of sympathy for this point of view. I'm also
skeptical about the benefits of the WS-* paradigm. They seem to
me to be well designed to sell development tools and enterprise
consulting services.
Monday, November 22, 2004
Sunday, November 14, 2004
Why Aggregation Matters
Sometimes, I feel like I'm banging my head against a wall trying to describe just why feed syndication and aggregation is important. In an earlier post,
I tried to expand the universe of discourse by throwing out as many
possible uses as I could dream up. Joshua Porter has written a
really good article about why aggregation is a big deal, even just
considering its impact on web site design: Home Alone? How Content Aggregators Change Navigation and Control of Content.
Monday, November 1, 2004
Prediction is Difficult, Especially the Future
My
second hat at AOL is development manager for the AOL Polls system.
This means I've had the pleasure of watching the conventions and
debates in real time while sitting on conference calls watching the
performance of our instant polling systems. Which had some potential
issues, but which, after a lot of work, seem to be just fine now.
Anyway: The interesting thing about the instant polling during the
debates was how different the results were from the conventional
instant phone polls. For example, after the final debate the AOL
Instapoll respondents gave the debate win to Kerry by something like
60% to 40%. The ABC news poll was more like 50%/50%. Frankly, I don't
believe any of these polls. However, I'll throw this thought out: The
online insta polls are taken by a self selected group of people who are
interested in the election and care about making their opinions known.
Hmmm... much like the polls being conducted tomorrow.
I'll go out on a limb and make a prediction based on the various poll results and on a lot of guesswork: Kerry will win the popular vote by a significant margin. And, he'll win at least half of the "battleground" states by a margin larger than the last polls show. But, I make no predictions about what hijinks might ensue in the Electoral College.
Update 11/11: Well, maybe not...
I'll go out on a limb and make a prediction based on the various poll results and on a lot of guesswork: Kerry will win the popular vote by a significant margin. And, he'll win at least half of the "battleground" states by a margin larger than the last polls show. But, I make no predictions about what hijinks might ensue in the Electoral College.
Update 11/11: Well, maybe not...
Monday, October 18, 2004
Random Note: DNA's Dark Matter
Scientific American's The Hidden Genetic Program of Complex Organisms
grabbed my attention last week. This could be the biological
equivalent of the discovery of dark matter. Basically, the 'junk'
or intron DNA that forms a majority of our genome may not be junk at
all, but rather control code that regulates the expression of other
genes.
The programming analogy would be, I think, that the protein-coding parts of the genome would be the firmware or opcodes while the control DNA is the source code that controls when and how the opcodes are executed. Aside from the sheer coolness of understanding how life actually works, there's a huge potential here for doing useful genetic manipulation. It's got to be easier to tweak control code than to try to edit firmware... (Free link on same subject: The Unseen Genome.)
The programming analogy would be, I think, that the protein-coding parts of the genome would be the firmware or opcodes while the control DNA is the source code that controls when and how the opcodes are executed. Aside from the sheer coolness of understanding how life actually works, there's a huge potential here for doing useful genetic manipulation. It's got to be easier to tweak control code than to try to edit firmware... (Free link on same subject: The Unseen Genome.)
Monday, October 11, 2004
Things in Need of a Feed
Syndicated feeds are much bigger than blogs and news stories; they're a
platform. A bunch of use cases, several of which actually exist in some form, others just things I'd like to see:
- Blog entries for blogs I'm interested in
- Feed of all comments on entries I've authored
- News stories matching a custom filter I've set up
- Traffic conditions on my customary route(s)
- Fedex shipping feed giving status and history for all of my packages
- Customer support feed giving status and history for all my issues (any company)
- Product safety/recall information for everything I buy
- Amazon feed of new books matching my preferences
- All new material by a specific author (on any blog or online source)
- Feed of new feeds, of various types:
- Just my friends
- Authored by people whose blogs I already subscribe to
- Filtered on personal profile/interests
- House for sale listings
- Newly discovered prime numbers (okay, a niche audience)
- Airport flight status alerts
- Movies in my Netflix queue and recommendations
- Audio / video content pushed onto my iPod (Podcasting)
- Auction information
- Multiplayer game results feed
- New government publications feed
- New computer virus alerts feed (with metadata giving virus signatures)
- Book queue
Tuesday, October 5, 2004
Niche Markets
Niche markets are where it's at: Chris Anderson's The Long Tail
is exactly right. The Internet not only eliminates the overhead of
physical space but also, more importantly, reduces the overhead of
finding what you want to near-zero. When your computer tracks your
preferences and auto-discovers new content that you actually want, it enables new markets that couldn't otherwise exist.
Update 10/11: Joi Ito's take.
Update 10/11: Joi Ito's take.
Sunday, August 1, 2004
Network Protocols and Vectorization
Doing things in parallel is one of the older performance tricks. Vector SIMD machines -- like the Cray supercomputers -- attack problems that benefit from doing the same thing to lots
of different pieces of data simultaneously. It's just a performance
trick, but it drove the design and even the physical shape of those
machines because the problems they're trying to tackle -- airflow
simulation, weather prediction, nuclear explosion simulation, etc. --
are both important and difficult to scale up. (More recently, we're
seeing massively parallel machines built out of individual commodity
PCs; conceptually the same, but limited mostly by network
latency/bandwidth.)
So what does this have to do with network protocols? Just as the problems of doing things like a matrix-vector multiply very, very fast drove the designs of supercomputers, the problems of moving data from one place to another very quickly, on demand drive the designs of today's network services. The designs of network APIs (whether REST, SOAP, XML-RPC, or whatever) need to take these demands into account.
In particular, transferring lots of small pieces of data in serial fashion over a network can be a big problem. Lots of protocols that are perfectly fine when run locally or over a LAN fail miserably when expected to deal with 100-200ms latencies on a WAN or the Internet. HTTP does a decent job of balancing out performance/latency issues for retrieving human readable pages -- a page comes down as a medium-sized chunk of data, followed by, if necessary, associated resources such as scripts, style sheets, and binary images, which can all be retrieved in parallel/behind the scenes. Note, that this is achieved only through lots of work on the client side and deep knowledge of the interactions between HTML, HTTP, and the final UI. The tradeoff is complexity of protocol and implementation.
How does this apply to network protocols in general? One idea is to carefully scrutinize protocol requests that transfer a single small piece of data. Often a single small piece of data isn't very useful on its own. Are there common use cases where a system will do this in a loop, perhaps serially, to get enough data to process or present to a user? If so, perhaps it would be a good idea to think of "vectorizing" that part of the protocol. Instead of returning a single piece of data, for example, return a variable-length collection of those pieces of data. The semantics of the request may change only slightly -- from "I return an X" to "I return a set of X". Ideally, the length should be dynamic and the client should be able to ask for "no more than N" on each request.
For example, imagine a protocol that requires a client to first retrieve a set of handles (say, mailboxes for a user) then query each one in turn to get some data (say, the number of unread messages). If this is something that happens often -- for example, automatically every two minutes -- there are going to be a lot of packets hitting servers. If multiple mailboxes are on one server, it would be fairly trivial to vectorize the second call and effectively combine the two queries into one -- call it "get mailbox state(s)". This would let a client retrieve the state for all mailboxes on a given server, with better latency and far less bandwidth than the first option. Of course there's no free lunch; if a client is dealing with multiple servers, it now has to group the mailboxes for each server for purposes of retrieving state. But conceptually, it's not too huge of a leap.
There are other trade-offs. If the "extra" data is large -- like a binary image -- it might well be better to download it separately, perhaps in parallel with other things. If it's cacheable, but the main data isn't, it may again be better to separate it out so you can take advantage of things like HTTP caching.
To summarize, one might want to vectorize part of a network protocol if:
So what does this have to do with network protocols? Just as the problems of doing things like a matrix-vector multiply very, very fast drove the designs of supercomputers, the problems of moving data from one place to another very quickly, on demand drive the designs of today's network services. The designs of network APIs (whether REST, SOAP, XML-RPC, or whatever) need to take these demands into account.
In particular, transferring lots of small pieces of data in serial fashion over a network can be a big problem. Lots of protocols that are perfectly fine when run locally or over a LAN fail miserably when expected to deal with 100-200ms latencies on a WAN or the Internet. HTTP does a decent job of balancing out performance/latency issues for retrieving human readable pages -- a page comes down as a medium-sized chunk of data, followed by, if necessary, associated resources such as scripts, style sheets, and binary images, which can all be retrieved in parallel/behind the scenes. Note, that this is achieved only through lots of work on the client side and deep knowledge of the interactions between HTML, HTTP, and the final UI. The tradeoff is complexity of protocol and implementation.
How does this apply to network protocols in general? One idea is to carefully scrutinize protocol requests that transfer a single small piece of data. Often a single small piece of data isn't very useful on its own. Are there common use cases where a system will do this in a loop, perhaps serially, to get enough data to process or present to a user? If so, perhaps it would be a good idea to think of "vectorizing" that part of the protocol. Instead of returning a single piece of data, for example, return a variable-length collection of those pieces of data. The semantics of the request may change only slightly -- from "I return an X" to "I return a set of X". Ideally, the length should be dynamic and the client should be able to ask for "no more than N" on each request.
For example, imagine a protocol that requires a client to first retrieve a set of handles (say, mailboxes for a user) then query each one in turn to get some data (say, the number of unread messages). If this is something that happens often -- for example, automatically every two minutes -- there are going to be a lot of packets hitting servers. If multiple mailboxes are on one server, it would be fairly trivial to vectorize the second call and effectively combine the two queries into one -- call it "get mailbox state(s)". This would let a client retrieve the state for all mailboxes on a given server, with better latency and far less bandwidth than the first option. Of course there's no free lunch; if a client is dealing with multiple servers, it now has to group the mailboxes for each server for purposes of retrieving state. But conceptually, it's not too huge of a leap.
There are other trade-offs. If the "extra" data is large -- like a binary image -- it might well be better to download it separately, perhaps in parallel with other things. If it's cacheable, but the main data isn't, it may again be better to separate it out so you can take advantage of things like HTTP caching.
To summarize, one might want to vectorize part of a network protocol if:
- Performance is important, and network latency is high and/or variable;
- The data to be vectorized are always or often needed together in common use cases;
- It doesn't over-complexify the protocol;
- There's no other way to achieve similar performance in other ways (parallel requests, caching, etc.)
Subscribe to:
Posts (Atom)
