{"id":24284,"date":"2015-06-02T14:14:30","date_gmt":"2015-06-02T12:14:30","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/?p=24284"},"modified":"2015-06-02T14:14:30","modified_gmt":"2015-06-02T12:14:30","slug":"software-engineering-radio-cap-theorem","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2015\/06\/02\/software-engineering-radio-cap-theorem\/","title":{"rendered":"Software Engineering Radio : CAP Theorem"},"content":{"rendered":"<!-- google_ad_section_start -->\n<p>On the way to work today I enjoyed an excellent <a href=\"http:\/\/www.se-radio.net\/2015\/05\/the-cap-theorem-then-and-now\/\">episode of Software Engineering Radio<\/a> which featured an interview with <a href=\"http:\/\/en.wikipedia.org\/wiki\/Eric_Brewer_%28scientist%29\">Eric Brewer<\/a>, a VP of Infrastructure at Google, \u00a0probably more famous for his <a href=\"http:\/\/en.wikipedia.org\/wiki\/CAP_theorem\">CAP Theorem<\/a>.<\/p>\n<blockquote><p>In theoretical computer science, the <b>CAP theorem<\/b>, also known as <b>Brewer&#8217;s theorem<\/b>, states that it is impossible for a distributed computer system to simultaneously provide all three of the following guarantees:<\/p>\n<ul>\n<li><i>Consistency<\/i> (all nodes see the same data at the same time)<\/li>\n<li><i>Availability<\/i> (a guarantee that every request receives a response about whether it succeeded or failed)<\/li>\n<li><i>Partition tolerance<\/i> (the system continues to operate despite arbitrary message loss or failure of part of the system)<\/li>\n<\/ul>\n<\/blockquote>\n<p>The discussion around &#8220;2 out of 3&#8221; was very thought-provoking and, at first, a little bit counter-intuitive. \u00a0If you don&#8217;t want to listen to the show, read though <a href=\"http:\/\/www.infoq.com\/articles\/cap-twelve-years-later-how-the-rules-have-changed\">this page<\/a>, which covers the important bits.<\/p>\n<blockquote><p>The easiest way to understand CAP is to think of two nodes on opposite sides of a partition. Allowing at least one node to update state will cause the nodes to become inconsistent, thus forfeiting C. Likewise, if the choice is to preserve consistency, one side of the partition must act as if it is unavailable, thus forfeiting A. Only when nodes communicate is it possible to preserve both consistency and availability, thereby forfeiting P. The general belief is that for wide-area systems, designers cannot forfeit P and therefore have a difficult choice between C and A. In some sense, the NoSQL movement is about creating choices that focus on availability first and consistency second; databases that adhere to ACID properties (atomicity, consistency, isolation, and durability) do the opposite.<\/p><\/blockquote>\n<p>This puts some of the current trends into perspective.<\/p>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>On the way to work today I enjoyed an excellent episode of Software Engineering Radio which featured an interview with Eric Brewer, a VP of Infrastructure at Google, \u00a0probably more famous for his CAP Theorem. In theoretical computer science, the CAP theorem, also known as Brewer&#8217;s theorem, states that it is impossible for a distributed &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2015\/06\/02\/software-engineering-radio-cap-theorem\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Software Engineering Radio : CAP Theorem<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Software Engineering Radio : CAP Theorem #ComputerScience #scalabiilty #databases","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_links_to":"","_links_to_target":""},"categories":[1,133,62,1334],"tags":[2366,1192,1559,3348,2068,1281],"keyring_services":[],"class_list":["post-24284","post","type-post","status-publish","format-standard","hentry","category-general","category-sysadmin","category-technology","category-web-work","tag-cloud-computing","tag-computer-science","tag-databases","tag-eric-brewer","tag-google","tag-scalability"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":15472,"url":"https:\/\/mamchenkov.net\/wordpress\/2011\/09\/06\/bayes-theorem-history\/","url_meta":{"origin":24284,"position":0},"title":"Bayes theorem history","author":"Leonid Mamchenkov","date":"September 6, 2011","format":false,"excerpt":"A fascinating read on the Bayes theorem history: The German codes, produced by Enigma machines with customizable wheel positions that allowed the codes to be changed rapidly, were considered unbreakable, so nobody was working on them. This attracted\u00a0Alan Turing\u00a0to the problem, because he liked solitude. He built a machine that\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":18922,"url":"https:\/\/mamchenkov.net\/wordpress\/2013\/12\/09\/bayesdb-a-bayesian-database-table-for-querying-the-probable-implications-of-data\/","url_meta":{"origin":24284,"position":1},"title":"BayesDB &#8211; a Bayesian database table for querying the probable implications of data","author":"Leonid Mamchenkov","date":"December 9, 2013","format":"link","excerpt":"BayesDB - a Bayesian database table for querying the probable implications of data BayesDB, a Bayesian database, lets users query the probable implications of their data as easily as a SQL database lets them query the data itself. Using the built-in Bayesian Query Language (BQL), users with no statistics training\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":28124,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/10\/20\/periodic-table-of-software-engineering\/","url_meta":{"origin":24284,"position":2},"title":"Periodic Table of Software Engineering","author":"Leonid Mamchenkov","date":"October 20, 2017","format":false,"excerpt":"I came across this Periodic Table of Software Engineering, and I think it's an excellent visualization.\u00a0 For those working their way to become software engineers, it provides a nice map of skills, topics, and knowledge areas to cover.\u00a0 For the rest, it clearly explains why software is so much more\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2017\/10\/periodic-table-of-software-engineering-500x350.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":29238,"url":"https:\/\/mamchenkov.net\/wordpress\/2019\/01\/21\/professional-programming\/","url_meta":{"origin":24284,"position":3},"title":"Professional Programming","author":"Leonid Mamchenkov","date":"January 21, 2019","format":false,"excerpt":"Professional Programming is yet another excellent list of resources, such as books, articles, and courses, for people pursuing programming as a professional career. The more, the better, I say.","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":27331,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/02\/11\/software-engineering-at-google\/","url_meta":{"origin":24284,"position":4},"title":"Software Engineering at Google","author":"Leonid Mamchenkov","date":"February 11, 2017","format":false,"excerpt":"Fergus Henderson, who has been a software engineer at Google for 10 years, published the PDF document\u00a0entitled \"Software Engineering at Google\", where he collects and describes key software engineering practices the company is using. It covers the following: software development - version control, build system, code review, testing, bug tracking,\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":9617,"url":"https:\/\/mamchenkov.net\/wordpress\/2005\/10\/28\/daily-del-icio-us-bookmarks\/","url_meta":{"origin":24284,"position":5},"title":"Daily del.icio.us bookmarks","author":"Leonid Mamchenkov","date":"October 28, 2005","format":false,"excerpt":"Shared bookmarks for del.icio.us user tvset on 2005-10-27 The Object Oriented Programming Web -- Programming and Computer Science Tutorials, Lecture notes and online books Tagged as: algorithms books development programming tutorials Dictionary of Algorithms and Data Structures Tagged as: algorithm algorithms computers concepts data development dictionary documentation education engineering howto\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/24284","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=24284"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/24284\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=24284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=24284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=24284"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=24284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}