|
Project Information
Links
|
OverviewThe GeoWeb is inspired by the Web itself and particularly the rich set of tools built for Weblogs. Publishing, distributing and consuming maps and spatial data is as simple as publishing a weblog and running an RSS aggregator. However there is a crucial component missing in the GeoWeb: Ping servers, exemplified by Weblogs.com and blo.gs, which provide a simple central point to receive updates of new content, and distribute those updates to interested consumers. geoping hopes to serve the commons, so that all parts of the GeoWeb have equal access to updates. Technical OverviewThis overview is intended to give a high level sketch of the technical solution. There are four components to the service:
Implementationgeoping is built with Erlang, a functional programming language, which is ideally suited for concurrent, reliable applications. Erlang achieves this by using lightweight processes, and message passing between these processes. Further it has no shared state threading, thus allowing for lock-free concurrency and keeping the entire system more robust. Overview of different processesHere is a brief overview of the different Erlang processes inside the Erlang virtual machine:
Update notifications will be stored in a queue. A spam checking process will check the frequency of update of each resource, rejecting those occurring too often. And as a crude change detection, it will make a HEAD request to see if the size has changed since last update. If the resource has been updated, information on that resource will be updated in the database. A separate process, the update checker, will periodically query for the latest changes from the database, publish changes in html and xml, and archive the published list. Finaly, a Webserver together with the database and file storage engine, will respond to REST or RPC pings and also serve the static webpages. Initial prototypeTo benchmark the Erlang server, a Merb server will be quickly prototyped. Merb, which is a simple and extremely fast Ruby framework, is also ideal for a ping server. If the content-type of the RPC calls are the ones for xml or json, Merb automatically converts the call to a Ruby params hash-table, which can then be processed and a resulting hash-table can be coerced into a xml or json response, without the need for templates which would slow the service down. Further, Merb comes with a background worker, which can execute some action after the request dispatch has finished. Such a worker, could then be used as a spam checker and also to query the latest updates periodically. Site mock-upsThe initial site mock-ups are on this wiki page: SiteMockups Proposed Schedule (TODO)Week 1Initial prototype and benchmark:
Week 3Initial work on the spam checking worker task/process:
Week 5Initial work on the database query task/process:
Week 7Basic REST api and webforms
Week 8Add the Geo component to the service. |