riak / www / ops.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta name="author" content="Basho Technologies" />
	<meta name="description" content="riak - a decentralized key value store - basho technologies" />
	<meta name="keywords" content="riak nosql decentralized distributed key value store" />
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
	<link rel="stylesheet" href="css/style.css" type="text/css" />
	<title>Riak - A database that eases Web operations</title>
</head>
<body>
	<div id="content">
		<h1><span class="hr"></span><a href="/">riak</a></h1>
		<ul id="top">
			<li><a href="/">Home</a></li>
			<li><a href="http://bitbucket.org/justin/riak/">Source Code</a></li>
                        <li><a href="edoc/index.html">API Docs</a></li>
			<li><a href="faq.html">FAQ</a></li>
			<li><a href="contact.html">Contact</a></li>
		</ul>
		
		<div id="intro">
			<p>A truly fault-tolerant system, no aspect of Riak involves single points of failure.  Since no machines are special or central, the user of Riak can decide exactly how fault-tolerant they would like their application to be.</p>
		</div>
		<div id="left">
			
			<h3>Designed for availability without headaches</h3>
			<p>Anyone who has worked in Web operations knows that scalability and availability are not the same thing; there are many ways to build a system that can grow to match capacity without necessarily making it any more tolerant of failures.</p>

			<p>The designers of Riak don't just care about distributed systems, we also have a background and interest in good operations.  As a result, Riak was built from the beginning to allow operators to provide high availability and fault tolerance much more easily than with a traditional RDBMS or any system with "master" servers and other single points of failure.</p>
			
			<p>The basic architecture of Riak is shared-nothing from a data point of view.  All coordination between nodes is done via asynchronous messages, with no underlying shared state.  This means that if a given node in a Riak cluster hangs, crashes, or catches fire, the other nodes can continue without incident.  As no data is ever persistently stored on only one node, clients will generally not even notice that this has occurred.</p>

			<p>In situations like the above (where a node becomes unreachable for any reason) the system will compensate using hinted-handoff.  This means that neighbors of the errant node will receive the messages it would otherwise have handled, ensuring that features such as replication are not degraded in the window before that node is repaired or replaced.</p>

			<p>Due to use of techniques such as consistent hashing, Riak has no master nodes, "name nodes", "key nodes", or any other similar central elements of the archtecture.  Every node in the system is structurally equivalent.  This has great value operationally, as there's no system or set of systems that you have to be especially watchful or protective of; as long as a quorum of the overall network is available, you don't have to care which hosts go down.</p>

			<p>One of the effects of exposing the consistency, availability, and partition-tolerance (<a href="cap.html">CAP</a>) controls to the application developer is that the developer can work with operations like never before in making decisions about tuning the relative availability of the whole system under different circumstances -- including circumstances under which any traditional system would provide no choice but to become unavailable.</p>

			<p>Riak is also easy to administer.  If you wish to add nodes to <a href="scale.html">add capacity</a> or remove nodes to either reclaim resources or repair broken systems, there is very little operational impact.  You can leave the whole cluster running continuously, and the content will rebalance itself to best suit the new size of the cluster.  Restarting individual nodes is rarely necessary, but can be done whenever you wish without any fear of adversely affecting the other nodes in the system.</p>

			<br />
			
			
		</div>
		<div id="right">
			<h3>understanding the riak system</h3>
			<ul>
				<li><a href="arch.html">Riak's Architecture</a></li>
				<li><a href="basic-setup.html">Setting up a Riak Cluster</a></li>
				<li><a href="eventer.html">Logging, Alerting, and other Events</a></li>
			</ul>
        <img src="images/easy-ops.gif" alt="redundancy" />
        

			
		</div>
		<div id="footer">

		</div>
	</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-10051263-1");
pageTracker._trackPageview();
} catch(err) {}</script>
</body>
</html>
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.