as someone who just listens in and is not technically savvy ...but is helping build interactive television and film production to be browser based...  I really want to hear more about this.<br /><br />On Jan 19, 2010 11:59am, Andrew de Andrade <andrew@deandrade.com.br> wrote:<br />> I have an idea for a possible use case that as far as I can tell from<br />> <br />> previous discussions on this list has not been considered or at least<br />> <br />> not in the form I present below.<br />> <br />> <br />> <br />> I have a friend whose company produces and licenses online games for<br />> <br />> social networks such as Facebook, Orkut, etc.<br />> <br />> <br />> <br />> One of the big problems with these games is the shear amount of static<br />> <br />> content that must be delivered via HTTP once the application becomes<br />> <br />> popular. In fact, if a game becomes popular overnight, the scaling<br />> <br />> problems with this static content quickly becomes a technical and<br />> <br />> financial problem.<br />> <br />> <br />> <br />> To give you an idea of the magnitude and scope, more than 4 TB of<br />> <br />> static content is streamed on a given day for one of the applications.<br />> <br />> It's very likely that others with similarly popular applications have<br />> <br />> encountered the same challenge.<br />> <br />> <br />> <br />> When thinking about how to resolve this, I took my usual approach of<br />> <br />> thinking how do we decentralize the content delivery and move towards<br />> <br />> an agent-based message passing model so that we do not have a single<br />> <br />> bottleneck technically and so we can dissipate the cost of delivering<br />> <br />> this content.<br />> <br />> <br />> <br />> My idea is to use web-sockets to allow the browser function more a<br />> <br />> less like a bit-torrent client. Along with this, web-workers would<br />> <br />> provide threads for handling the code that would function as a server,<br />> <br />> serving the static content to peers also using the program.<br />> <br />> <br />> <br />> If you have lots of users (thousands) accessing the same application,<br />> <br />> you effectively have the equivalent of one torrent with a large swarm<br />> <br />> of users, where the torrent is a package of the most frequently<br />> <br />> requested static content. (I am assuming that the static content<br />> <br />> requests follow a power law distribution, with only a few static files<br />> <br />> being responsible for the overwhelming bulk of static data<br />> <br />> transferred.).<br />> <br />> <br />> <br />> As I have only superficial knowledge of the technologies involved and<br />> <br />> the capabilities of HTML5, I passed this idea by a couple of<br />> <br />> programmer friends to get their opinions. Generally they thought is<br />> <br />> was a very interesting idea, but that as far as they know, the<br />> <br />> specification as it stands now is incapable of accommodating such a<br />> <br />> use case.<br />> <br />> <br />> <br />> Together we arrived at a few criticisms of this idea that appear to be<br />> <br />> resolvable:<br />> <br />> <br />> <br />> -- Privacy issues<br />> <br />> -- Security issues (man in the middle attack).<br />> <br />> -- content labeling (i.e. how does the browser know what content is<br />> <br />> truly static and therefore safe to share.)<br />> <br />> -- content signing (i.e. is there some sort of hash that allows the<br />> <br />> peers to confirm that the content has not been adulterated).<br />> <br />> -- privacy issues<br />> <br />> <br />> <br />> All in all, many of these issues have been solved by the many talented<br />> <br />> programmers that have developed the current bit-torrent protocol,<br />> <br />> algorithms and security features. The idea would simply to design the<br />> <br />> HTML5 in such a way that it can permit the browser to function as a<br />> <br />> full-fledged web-application bit-torrent client-server.<br />> <br />> <br />> <br />> Privacy issues can be resolved by possibly defining something such as<br />> <br />> "browser security zones" or "content label" whereby the content<br />> <br />> provider (application developer) labels content (such as images and<br />> <br />> CSS files) as safe to share (static content) and labels dynamic<br />> <br />> content (such as personal photos, documents, etc.) as unsafe to share.<br />> <br />> <br />> <br />> Also in discussing this, we come up with some potentially useful<br />> <br />> extensions to this use case.<br />> <br />> <br />> <br />> One would be the versioning of the "torrent file", such that the<br />> <br />> torrent file could represent versions of the application. i.e. I<br />> <br />> release an application that is version 1.02 and it becomes very<br />> <br />> popular and there is a sizable swarm. At some point in the future I<br />> <br />> release a new version with bug-fixes and additional features (such as<br />> <br />> CSS sprites for the social network game). I should be able to<br />> <br />> propagate this new version to all clients in the swarm so that over<br />> <br />> some time window such as 2 to 4 hours all clients in the swarm<br />> <br />> discover (via push or pull) the new version and end up downloading it<br />> <br />> from the peers with the new version. The only security feature I could<br />> <br />> see that would be required would be that once a client discovers that<br />> <br />> their is a new version, it would hit up the original server to<br />> <br />> download a signature/fingerprint file to verify that the new version<br />> <br />> that it is downloading from its peers is legitimate.<br />> <br />> <br />> <br />> The interesting thing about this idea is that it would permit large<br />> <br />> portions of sites to exist in virtual form. Long-term I can imagine<br />> <br />> large non-profit sites such as Wikipedia functioning on top of this<br />> <br />> structure in such a way that it greatly reduces the amount of funding<br />> <br />> necessary. It would be partially distributed with updates to wikipedia<br />> <br />> being distributed via lots of tiny versions from super-nodes à la a<br />> <br />> Skype type P2P model.<br />> <br />> <br />> <br />> This would also take a lot of power out of the hands of those telcos<br />> <br />> that are anti-net neutrality. This feature would basically permit a<br />> <br />> form of net neutrality by moving content to the fringes of the<br />> <br />> network.<br />> <br />> <br />> <br />> Let me know your thoughts and if you think this would be possible<br />> <br />> using Web-sockets and web-workers, and if not, what changes would be<br />> <br />> necessary to allow this to evolve.<br />> <br />> <br />> <br />> Sincerely,<br />> <br />> <br />> <br />> Andrew J. L. de Andrade<br />> <br />> São Paulo, Brazil<br />> <br />> <br />> <br />> (P.S. I consider myself a pretty technical person, but I don't really<br />> <br />> program. I only dabble in programming as a hobby and to better<br />> <br />> understand my colleagues. Feel free to be as technical as you want in<br />> <br />> your reply, but please forgive me if I make or made any bonehead<br />> <br />> mistakes.)<br />>