Julian Browne
julianbrowne.com · Personal blog · on HN since 2009
Julian Browne, a software architect, writes about distributed systems, scalability, and architecture, including an explanation of Brewer's CAP theorem.
What HN saysHN commenters link his CAP theorem article as background reading and his space-based architecture example.
16HN people shared it
7linked it in comments
10stories submitted
55story points
8 years agolast shared
2009people per year2026
Most-shared posts
- 1Brewer's CAP Theorem12 people · 38 points · first shared 2009 · 1 comments on HN
- 2Gangstas Don't Scale1 people · 11 points · first shared 2009 · 1 comments on HN
- 3Hammer Time1 people · 3 points · first shared 2010 · discussion on HN
- 4Death by Customer1 people · 2 points · first shared 2019 · discussion on HN
- 5The Attraction of Laws1 people · 1 points · first shared 2011 · discussion on HN
- 6Space based architecture example1 people · first shared 2011
What HN people wrote when they linked it
ColinWright · 2011-08-18
The paper with the actual proof (making this a theorem and not just a conjecture or vague speculation) is here:
http://lpd.epfl.ch/sgilbert/pubs/BrewersConjecture-SigAct.pdf
This is surprisingly readable, and the introduction is quite good. In addition, here is a blog post that talks about the terms, their meanings, various implications, and the proof:
http://danweinreb.org/blog/what-does-the-proof-of-the-cap-theorem-mean
Finally, despite the shaky start, this is also a good read:
http://www.julianbrowne.com/article/viewer/brewers-cap-theorem
candresbolanos · 2015-07-30
Epidemic broadcast that you mention, usually happens when you have a fully connected topology and distribution model works with full replication. But the main advantage with riak_core is that you are able to set the replication factor and quorums, which enables you to setup different distribution models --like sharding or peer-to-peer replication + sharding (common case)-- and balance consistency/availability levels --please review CAP theorem (http://www.julianbrowne.com/article/viewer/brewers-cap-theorem).
In case of ErlBus, you can also set these parameters (replication factor and quorums), even the quorum of each operation (sub, pub, unsub, subscribers, etc.) can be set independently. So riak_core gives you the flexibility to choose the best distribution model depending on what you really need, and ErlBus inherits those features when you run it on top of riak_core.
So, you have to consider some variables to choose what distribution model to use:
1. Number of nodes
2. Network traffic (Messages/second)
3. Number of subscriptions (because both pg2 and gproc uses ETS tables)
Most of the cases is enough default ErlBus with PG2, but if you need a more flaxible and scalable distribution model, well, you probably should go for ErlBus with riak_core.
I really hope have answered your question, otherwise, you just let me know.
Thanks!
dansingerman · 2012-05-01
"Performance & scalability mean shyte if you can't guarantee correctness" - well that depends...
I take it you are aware of Brewer's CAP theorem? (http://www.julianbrowne.com/article/viewer/brewers-cap-theorem) If not, you should be.
calculon · 2011-05-25
Brewer's CAP Theorem
The first link is the paper which constituted the proof of the theorem, the other two provide more context and background.
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.20.1495&r…
http://en.wikipedia.org/wiki/CAP_theorem
http://www.julianbrowne.com/article/viewer/brewers-cap-theorem
cromulent · 2011-03-03
Virgin Mobile, apparently.
http://www.julianbrowne.com/article/viewer/space-based-architecture-ex…
linuxhansl · 2010-12-30
Yep... I never quite bought the NoSQL hype.
The only valid point was to relax some of the guarantees (like consistency) in order to achieve better scalability.
In the end once cannot escape the CAP theorem (http://www.julianbrowne.com/article/viewer/brewers-cap-theorem)
kellros · 2012-07-20
What web framework are you using?
It's possible to model inheritance/abstraction within database design but it's not always optimal. You can 'extend' an existing table by specifying the child identifier as a primary and foreign key referencing the parent table (this is called 1 to 1 mapping).
Most of the time when you see 1 to 1 mapping you won't see it, because in relational databases you add those columns to the same table. There are some scenarios where it makes sense to split the table into two tables, such as a User and an Account table (AccountId = UserId), so you can better model the relationships.
Most people would advise against it and tell you to denormalize those tables (put everything on the user table), but if you use an orm that does class-per-table mapping it really reduces friction (ex. anything referencing an Account is accessable from an account, everything referencing a User specifically won't be directly accessable via the Account).
There's also a difference between key-value stores and object-oriented-databases (both being NOSQL). The reason why using NOSQL is 'closer' to your actual objects is because you would be storing actual objects (they get serialized into a graphs and stored).
I'd also suggest you check out Brewer's CAP Theorem: http://www.julianbrowne.com/article/viewer/brewers-cap-theorem