Bloom: A Language For Disorderly Distributed Programming
speakerdeck.com
speakerdeck.com
The fundamental idea is to build a language out of primitives which compose monotonically. A very simple example is getting a distributed count of "yes votes". The naive solution is to have each server send a "incrementVote()" RPC calls. But what happens if an RPC is retried? Will your count accidentally be too high? A better solution is to send a "vote(myUUID)" message, which adds the UUID to a set. The number of votes is now the cardinality of the set of UUIDs. Voting is idempotent and the count is monotonic. The goal of Bloom is to create a language in which the right properties are ensured by construction.
The idea is to have auto-convergent types in an AP database cluster. There are some datatypes that can do this: max function, set union, boolean or. [Say one node union-updates set {} with {'a'} and the other with {'b'}. The two operations will both auto-converge so to speak to set {'a','b'}.
If you can detect conflicts (divergent data, aka "siblings" in Riak-speak, ), you could also build you own, app specific, conflict resolution for your application. It is nice if you don't have to and your db provides it by using auto-convergent types.
https://en.wikipedia.org/wiki/UUID
UUID1 and UUID4 are common. UUID1 are the ones that use machine id and timestamp. UUID4 are supposed to be randomly generated. UUID1 can be traced to a machine that created them and are sortable somewhat, UUID4s are nice because you don't have to worry if machines somehow ended up with non-unique machines (bad VM cloning can easily do that).
I would just use UUID4 for example.
Version 4 UUIDs have the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx where x is any hexadecimal digit and y is one of 8, 9, A, or B
What is the purpose of the 4 and y?
Joe Hellerstein's RICON 2012 talk: http://vimeo.com/53904989
Neil Conway's RICON|East 2013 talk: http://www.youtube.com/watch?v=HqErn9acbto
http://en.wikipedia.org/wiki/CAP_theorem
In theoretical computer science, the CAP theorem, also
known as Brewer's theorem, states that it is impossible
for a distributed computer system to simultaneously
provide all three of the following guarantees:[1][2]
* Consistency (all nodes see the same data at the same time)
* Availability (a guarantee that every request receives a response about whether it was successful or failed)
* Partition tolerance (the system continues to operate despite arbitrary message loss or failure of part of the system)
http://es.wikipedia.org/wiki/Teorema_CAPhttp://en.wikipedia.org/wiki/ACID
ACID (Atomicity, Consistency, Isolation, Durability)Implementations may, but that is made nearly impossible by the incredible amount of vendor lock in built into every platform you listed.
Vendor lock-in exist for specialized areas (eg. documents, protocols). There are areas when some producers _must_ support common standards. Microsoft for ex. had to introduce support for native code in WP8. HTML/JS is a second area where support from vendor is a must. OpenGL is next one (not for WP, but its a minor platform, but... surprise, surprise Microsoft supports WebGL!).
For ex. nobody is forcing anyone to use native libraries for GUI (Qt, Swing, WPF). There are GUI libs completely independent from OS ( http://l33tlabs.org/ http://kivy.org/ http://www.pharo-project.org/about/screenshots ).
Smalltalk/Pharo application developed on Windows or Linux Machine can be deployed on iPad or Android and it will work without a single byte change. These things are made by single individuals as hobby projects with a great success.
You are wearing a corporate blindfold.