Author: zznate
Date: Mon Dec 3 18:17:21 2018
New Revision: 1848087
URL: http://svn.apache.org/viewvc?rev=1848087&view=rev
Log:
CASSANDRA-14851 - Blog post for transient replication by Ariel Weisberg -
published parts
Added:
cassandra/site/publish/blog/2018/12/
cassandra/site/publish/blog/2018/12/03/
cassandra/site/publish/blog/2018/12/03/introducing-transient-replication.html
cassandra/site/publish/img/blog-post-introducing-transient-replication/
cassandra/site/publish/img/blog-post-introducing-transient-replication/diagram-hash-ring-with-transient-replica.gif
cassandra/site/publish/img/blog-post-introducing-transient-replication/diagram-hash-ring.gif
cassandra/site/publish/img/blog-post-introducing-transient-replication/diagram-rapid-write-protection.gif
cassandra/site/publish/img/blog-post-introducing-transient-replication/diagram-regular-write.gif
cassandra/site/publish/img/blog-post-introducing-transient-replication/diagram-transient-write-down-node.gif
cassandra/site/publish/img/blog-post-introducing-transient-replication/diagram-transient-write.gif
Modified:
cassandra/site/publish/blog/index.html
cassandra/site/publish/feed.xml
Added:
cassandra/site/publish/blog/2018/12/03/introducing-transient-replication.html
URL:
http://svn.apache.org/viewvc/cassandra/site/publish/blog/2018/12/03/introducing-transient-replication.html?rev=1848087&view=auto
==============================================================================
---
cassandra/site/publish/blog/2018/12/03/introducing-transient-replication.html
(added)
+++
cassandra/site/publish/blog/2018/12/03/introducing-transient-replication.html
Mon Dec 3 18:17:21 2018
@@ -0,0 +1,287 @@
+<!DOCTYPE html>
+<html>
+
+
+
+
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="description" content="Transient Replication is a new
experimental feature soon to be available in 4.0. When enabled, it allows for
the creation of keyspaces where replication fact...">
+ <meta name="keywords" content="cassandra, apache, apache cassandra,
distributed storage, key value store, scalability, bigtable, dynamo" />
+ <meta name="robots" content="index,follow" />
+ <meta name="language" content="en" />
+
+ <title>Introducing Transient Replication</title>
+
+ <link rel="canonical"
href="http://cassandra.apache.org/blog/2018/12/03/introducing-transient-replication.html">
+
+ <link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"
integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7"
crossorigin="anonymous">
+ <link rel="stylesheet" href="./../../../../css/style.css">
+
+
+
+ <link rel="stylesheet"
href="https://use.fontawesome.com/releases/v5.2.0/css/all.css"
integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ"
crossorigin="anonymous">
+
+ <link type="application/atom+xml" rel="alternate"
href="http://cassandra.apache.org/feed.xml" title="Apache Cassandra Website" />
+</head>
+
+ <body>
+ <!-- breadcrumbs -->
+<div class="topnav">
+ <div class="container breadcrumb-container">
+ <ul class="breadcrumb">
+ <li>
+ <div class="dropdown">
+ <img class="asf-logo" src="./../../../../img/asf_feather.png" />
+ <a data-toggle="dropdown" href="#">Apache Software Foundation <span
class="caret"></span></a>
+ <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
+ <li><a href="http://www.apache.org">Apache Homepage</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a
href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a
href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+ <li><a href="http://www.apache.org/security/">Security</a></li>
+ </ul>
+ </div>
+ </li>
+
+
+ <li><a href="./../../../../">Apache Cassandra</a></li>
+
+
+
+
+ <li>Introducing Transient Replication</li>
+
+
+
+
+
+
+ </ul>
+ </div>
+
+ <!-- navbar -->
+ <nav class="navbar navbar-default navbar-static-top" role="navigation">
+ <div class="container">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#cassandra-menu" aria-expanded="false">
+ <span class="sr-only">Toggle navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="./../../../../"><img
src="./../../../../img/cassandra_logo.png" alt="Apache Cassandra logo" /></a>
+ </div><!-- /.navbar-header -->
+
+ <div id="cassandra-menu" class="collapse navbar-collapse">
+ <ul class="nav navbar-nav navbar-right">
+ <li><a href="./../../../../">Home</a></li>
+ <li><a href="./../../../../download/">Download</a></li>
+ <li><a href="./../../../../doc/">Documentation</a></li>
+ <li><a href="./../../../../community/">Community</a></li>
+ <li>
+ <a href="./../../../../blog">Blog</a>
+ </li>
+ </ul>
+ </div><!-- /#cassandra-menu -->
+
+
+ </div>
+ </nav><!-- /.navbar -->
+</div><!-- /.topnav -->
+
+ <div class="content">
+ <div class="container">
+ <h2>Introducing Transient Replication</h2>
+ <p>Posted on December 03, 2018 by The Apache Cassandra Community</p>
+ <h5><a href="/blog">« Back to the Apache Cassandra Blog</a></h5>
+ <hr />
+ <p>Transient Replication is a new experimental feature soon to be available
in 4.0. When enabled, it allows for the creation of keyspaces where replication
factor can be specified as a number of copies (full replicas) and temporary
copies (transient replicas). Transient replicas retain the data they replicate
only long enough for it to be propagated to full replicas, via incremental
repair, at which point the data is deleted. Writing to transient replicas can
be avoided almost entirely if monotonic reads are not required because it is
possible to achieve a quorum of acknowledged writes without them.</p>
+
+<p>This results in a savings in disk space, CPU, and IO. By deleting data as
soon as it is no longer needed, transient replicas require only a fraction of
the disk space of a full replica. By not having to store the data indefinitely,
the CPU and IO required for compaction is reduced, and read queries are faster
as they have less data to process.</p>
+
+<p>So what are the benefits of not actually keeping a full copy of the data?
Well, for some installations and use cases, transient replicas can be almost
free if <a
href="https://en.wikipedia.org/wiki/Consistency_model#Monotonic_Read_Consistency">monotonic
reads</a> are disabled. In future releases where monotonic reads are supported
with Transient Replication, enabling monotonic reads would reduce the savings
in CPU and IO, but even then they should still be significant.</p>
+
+<p>Transient Replication is designed to be transparent to applications:</p>
+
+<ul>
+ <li>Consistency levels continue to produce the same results for queries.</li>
+ <li>The number of replicas that can be lost before data loss occurs is
unchanged.</li>
+ <li>The number of replicas that can be unavailable before some queries start
to timeout or return unavailable is unchanged (with the exception of ONE).</li>
+</ul>
+
+<p>With Transient Replication, you can go from 3 replicas to 5 replicas, two
of which are transient, without adding any hardware.</p>
+
+<p>If you are running an active-passive 2 DC setup with 3 replicas in each DC,
you can make one replica in each DC transient and still have four full copies
of the data in total.</p>
+
+<h2 id="feature-support">Feature support</h2>
+
+<p>Transient Replication is not intended to fully replace Cassandraâs
existing approach to replication. There are features that currently donât
work with transiently replicated keyspaces and features that are unlikely ever
to work with them.</p>
+
+<p>You can have keyspaces with and without Transient Replication enabled in
the same cluster, so it is possible to use Transient Replication for just the
use cases that are a good fit for the currently available functionality.</p>
+
+<h3 id="currently-unsupported-but-coming">Currently unsupported but
coming:</h3>
+
+<ul>
+ <li>Monotonic reads</li>
+ <li>Batch log</li>
+ <li>LWT</li>
+ <li>Counters</li>
+</ul>
+
+<h3 id="will-never-be-supported">Will never be supported:</h3>
+
+<ul>
+ <li>Secondary indexes</li>
+ <li>Materialized views</li>
+</ul>
+
+<h2 id="how-transient-replication-works">How Transient Replication works</h2>
+
+<h3 id="overview">Overview</h3>
+
+<p>Transient replication extends Cassandraâs existing consistent hashing
algorithm to designate some replicas of a point or range on the consistent hash
ring as transient and some as full. The following image depicts a consistent
hash ring with three replicas <strong>A</strong>, <strong>B</strong>, and
<strong>C</strong>. The replicas are located at tokens 5, 10, 15 respectively.
A key <strong><em>k</em></strong> hashes to token 3 on the ring.</p>
+
+<p><img
src="/img/blog-post-introducing-transient-replication/diagram-hash-ring.gif"
alt="A consistent hash ring without Transient Replication" title="A consistent
hash ring without Rransient Replication" /></p>
+
+<p>Replicas are selected by walking the ring clockwise starting at the point
on the ring the key hashes to. At RF=3, the replicas of key <strong><em>k
**</em>are **A</strong>, <strong>B</strong>, <strong>C</strong>.
+With Transient Replication, the last N replicas (where N is the configured
number of transient replicas) found while walking the ring are designated as
transient.</p>
+
+<p>There are no nodes designated as transient replicas or full replicas. All
nodes will fully replicate some ranges on the ring and transiently replicate
others.</p>
+
+<p>The following image depicts a consistent hash ring at RF=3/1 (three
replicas, one of which is transient). The replicas of
<strong><em>k</em></strong> are still <strong>A</strong>, <strong>B</strong>,
and <strong>C</strong>, but <strong>C</strong> is now transiently replicating
<strong><em>k</em></strong>.</p>
+
+<p><img
src="/img/blog-post-introducing-transient-replication/diagram-hash-ring-with-transient-replica.gif"
alt="A consistent hash ring with Transient Replication" title="A consistent
hash ring with Transient Replication" /></p>
+
+<p>Normally all replicas of a range receive all writes for that range, as
depicted in the following image.</p>
+
+<p><img
src="/img/blog-post-introducing-transient-replication/diagram-regular-write.gif"
alt="Normal write behavior" title="Normal write behavior" /></p>
+
+<p>Transient replicas do not receive writes in the normal write path.</p>
+
+<p><img
src="/img/blog-post-introducing-transient-replication/diagram-transient-write.gif"
alt="Transient write behavior" title="Transient write behavior" /></p>
+
+<p>If sufficient full replicas are unavailable, transient replicas will
receive writes.</p>
+
+<p><img
src="/img/blog-post-introducing-transient-replication/diagram-transient-write-down-node.gif"
alt="Transient write with unavailable node" title="Transient write with
unavailable node" /></p>
+
+<p>This optimization, which is possible with Transient Replication, is called
Cheap Quorums. This minimizes the amount of work that transient replicas have
to do at write time, and reduces the amount of background compaction they will
have to do.</p>
+
+<p><strong>Cheap Quorums and monotonic reads:</strong> Cheap Quorums may end
up being incompatible with an initial implementation of monotonic reads, and
operators will be able to make a conscious trade off between performance and
monotonic reads.</p>
+
+<h3 id="rapid-write-protection">Rapid write protection</h3>
+
+<p>In keyspaces utilizing Transient Replication, writes are sent to every full
replica and enough transient replicas to meet the requested consistency level
(to make up for unavailable full replicas). In addition, enough transient
replicas are selected to reach a quorum in every datacenter, though unless the
consistency level requires it, the write will be acknowledged without ensuring
all have been delivered.</p>
+
+<p>Because not all replicas are sent the write, itâs possible that
insufficient replicas will respond, causing timeouts. To prevent this, we
implement rapid write protection, similar to rapid read protection, that sends
writes to additional replicas if sufficient acknowledgements to meet the
consistency level are not received promptly.</p>
+
+<p>The following animation shows rapid write protection in action.</p>
+
+<p><img
src="/img/blog-post-introducing-transient-replication/diagram-rapid-write-protection.gif"
alt="Animation of rapid write protection preventing a write timeout"
title="Rapid write protection preventing a write timeout" /></p>
+
+<p>Rapid write protection is configured similarly to rapid read protection
using the table option <code
class="highlighter-rouge">additional_write_policy</code>. The policy determines
how long to wait for acknowledgements before sending additional mutations. The
default is to wait for P99 of the observed latency.</p>
+
+<h3 id="incremental-repair">Incremental repair</h3>
+
+<p>Incremental repair is used to clean up transient data at transient replicas
and propagate it to full replicas.</p>
+
+<p>When incremental repair occurs transient replicas stream out transient
data, but donât receive any. Anti-compaction is used to separate transient
and fully replicated data so that only fully replicated data is retained once
incremental repair completes.</p>
+
+<p>The result of running an incremental repair is that all full replicas for a
range are synchronized and can be used interchangeably to retrieve the repaired
data set for a query.</p>
+
+<h3 id="read-path">Read path</h3>
+
+<p>Reads must always include at least one full replica and can include as many
replicas (transient or full) as necessary to achieve the desired consistency
level. At least one full replica is required in order to provide the data not
available at transient replicas, but it doesnât matter which full replica is
picked because incremental repair synchronizes the repaired data set across
full replicas.</p>
+
+<p>Reads at transient replicas are faster than reads at full replicas because
reads at transient replicas are unlikely to return any results if monotonic
reads are disabled, and they havenât been receiving writes.</p>
+
+<h2 id="creating-keyspaces-with-transient-replication">Creating keyspaces with
Transient Replication</h2>
+
+<p>Transient Replication is supported by SimpleStrategy and
NetworkTopologyStrategy. When specifying the replication factor, you can
specify the number of transient replicas in addition to the total number of
replicas (including transient replicas). The syntax for a replication factor of
3 replicas total with one of them being transient would be â3/1â.</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>ALTER KEYSPACE foo
WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'DC1' : '3/1'};
+ALTER KEYSPACE foo WITH REPLICATION = {'class' : 'SimpleStrategy',
'replication_factor' : '3/1'};
+</code></pre>
+</div>
+
+<p>Monotonic reads are not supported with Transient Replication in 4.0, so any
existing tables in the keyspace must have monotonic reads disabled by setting
<code class="highlighter-rouge">read_repair = 'NONE'</code></p>
+
+<p>Once the keyspace has been altered, you will need to run incremental repair
and then nodetool cleanup to ensure transient data is cleaned up.</p>
+
+<h2 id="operational-matters">Operational matters</h2>
+
+<p>Transient replication requires rolling incremental repair to be run
regularly in order to move data from transient replicas to full replicas. By
default transient replicas will receive 1% of writes for transiently replicated
ranges due to rapid write protection. If a node is down for an extended period
of time, its transient replicas will receive additional write load and that
data should be cleaned up using incremental repair. Running incremental repair
regularly will ensure that the size of each repair is small.</p>
+
+<p>Itâs also a good idea to run a small number of vnodes with transient
replication so that when a node goes down the load is spread out over several
other nodes that transiently replicate that range. Larges numbers of vnodes are
known to be problematic, so itâs best to start with a cluster that is already
close to or at its maximum size so that a small number of vnodes will be
sufficient. If you intend to grow the cluster in the future, you will need to
be cognizant of how this will interact with the number of vnodes you select.</p>
+
+<p>While the odds of any data loss should multiple nodes be permanently lost
remain the same with transient replication, the magnitude of potential data
loss does not. With 3/1 transient replication the permanent loss of two nodes
could result in the loss of the entirety of the repaired data set. If you are
running a multi-DC setup with a high level of replication such as 2 DCs, with
3/1 replicas in each, then you will have 4 full copies total and the added risk
of transient replication is minimal.</p>
+
+<h2 id="experimental-features">Experimental features</h2>
+
+<p>Experimental features are a relatively new idea for Apache Cassandra.
Although we recently voted to make materialized views an experimental feature
retroactively, Transient Replication is the first experimental feature to be
introduced as such.</p>
+
+<p>The goal of introducing experimental features is to allow for incremental
development across multiple releases. In the case of Transient Replication, we
can avoid a giant code drop that heavily modifies the code base, and the
associated risks with incorporating a new feature that way.</p>
+
+<p>What it means for a feature to be experimental doesnât have a set
definition, but for Transient Replication itâs intended to set expectations.
As of 4.0, Transient Replicationâs intended audience is expert operators of
Cassandra with the ability to write the book on how to safely deploy Transient
Replication, debug any issues that result, and if necessary contribute code
back to address problems as they are discovered.</p>
+
+<p>Itâs expected that the feature set for Transient Replication will not
change in minor updates to 4.0, but eventually it should be ready for use by a
wider audience.</p>
+
+<h2 id="next-steps-for-transient-replication">Next steps for Transient
Replication</h2>
+
+<p>If increasing availability or saving on capacity sounds good to you, then
you can help make transient replication production-ready by testing it out or
even deploying it. Experience and feedback from the community is one the of the
things that will drive transient replication bug fixing and development.</p>
+
+ </div>
+</div>
+
+ <hr />
+
+<footer>
+ <div class="container">
+ <div class="col-md-4 social-blk">
+ <span class="social">
+ <a href="https://twitter.com/cassandra"
+ class="twitter-follow-button"
+ data-show-count="false" data-size="large">Follow @cassandra</a>
+ <script>!function(d,s,id){var
js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document,
'script', 'twitter-wjs');</script>
+ <a href="https://twitter.com/intent/tweet?button_hashtag=cassandra"
+ class="twitter-hashtag-button"
+ data-size="large"
+ data-related="ApacheCassandra">Tweet #cassandra</a>
+ <script>!function(d,s,id){var
js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document,
'script', 'twitter-wjs');</script>
+
+ </span>
+ <a class="subscribe-rss icon-link" href="/feed.xml" title="Subscribe to
Blog via RSS">
+ <span><i class="fa fa-rss"></i></span>
+ </a>
+ </div>
+
+ <div class="col-md-8 trademark">
+ <p>© 2016 <a href="http://apache.org">The Apache Software
Foundation</a>.
+ Apache, the Apache feather logo, and Apache Cassandra are trademarks of
The Apache Software Foundation.
+ <p>
+ </div>
+ </div><!-- /.container -->
+</footer>
+
+<!-- Javascript. Placed here so pages load faster -->
+<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
+<script src="./../../../../js/underscore-min.js"></script>
+<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"
integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS"
crossorigin="anonymous"></script>
+
+
+
+<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"));
+
+ try {
+ var pageTracker = _gat._getTracker("UA-11583863-1");
+ pageTracker._trackPageview();
+ } catch(err) {}
+</script>
+
+
+ </body>
+</html>
Modified: cassandra/site/publish/blog/index.html
URL:
http://svn.apache.org/viewvc/cassandra/site/publish/blog/index.html?rev=1848087&r1=1848086&r2=1848087&view=diff
==============================================================================
--- cassandra/site/publish/blog/index.html (original)
+++ cassandra/site/publish/blog/index.html Mon Dec 3 18:17:21 2018
@@ -102,6 +102,15 @@
<ul class="blog-post-listing">
<li class="blog-post">
+ <h4><a
href="/blog/2018/12/03/introducing-transient-replication.html">Introducing
Transient Replication</a></h4>
+ <p>Posted on December 03, 2018 by The Apache Cassandra Community</p>
+ <p>Transient Replication is a new experimental feature soon to be
available in 4.0. When enabled, it allows for the creation of keyspaces where
replication factor can be specified as a number of copies (full replicas) and
temporary copies (transient replicas). Transient replicas retain the data they
replicate only long enough for it to be propagated to full replicas, via
incremental repair, at which point the data is deleted. Writing to transient
replicas can be avoided almost entirely if monotonic reads are not required
because it is possible to achieve a quorum of acknowledged writes without
them.</p>
+
+
+ <h5><a
href="/blog/2018/12/03/introducing-transient-replication.html">Read more
»</a></h5>
+ </li>
+
+ <li class="blog-post">
<h4><a href="/blog/2018/10/29/audit_logging_cassandra.html">Audit
Logging in Apache Cassandra 4.0</a></h4>
<p>Posted on October 29, 2018 by the Apache Cassandra Community</p>
<p>Database audit logging is an industry standard tool for
enterprises to
Modified: cassandra/site/publish/feed.xml
URL:
http://svn.apache.org/viewvc/cassandra/site/publish/feed.xml?rev=1848087&r1=1848086&r2=1848087&view=diff
==============================================================================
--- cassandra/site/publish/feed.xml (original)
+++ cassandra/site/publish/feed.xml Mon Dec 3 18:17:21 2018
@@ -1,5 +1,137 @@
-<?xml version="1.0" encoding="utf-8"?><feed
xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/"
version="3.4.3">Jekyll</generator><link
href="http://cassandra.apache.org/feed.xml" rel="self"
type="application/atom+xml" /><link href="http://cassandra.apache.org/"
rel="alternate" type="text/html"
/><updated>2018-10-30T11:50:41+13:00</updated><id>http://cassandra.apache.org/</id><title
type="html">Apache Cassandra Website</title><subtitle>The Apache Cassandra
database is the right choice when you need scalability and high availability
without compromising performance. Linear scalability and proven fault-tolerance
on commodity hardware or cloud infrastructure make it the perfect platform for
mission-critical data. Cassandra's support for replicating across multiple
datacenters is best-in-class, providing lower latency for your users and the
peace of mind of knowing that you can survive regional outages.
-</subtitle><entry><title type="html">Audit Logging in Apache Cassandra
4.0</title><link
href="http://cassandra.apache.org/blog/2018/10/29/audit_logging_cassandra.html"
rel="alternate" type="text/html" title="Audit Logging in Apache Cassandra 4.0"
/><published>2018-10-29T20:00:00+13:00</published><updated>2018-10-29T20:00:00+13:00</updated><id>http://cassandra.apache.org/blog/2018/10/29/audit_logging_cassandra</id><content
type="html"
xml:base="http://cassandra.apache.org/blog/2018/10/29/audit_logging_cassandra.html"><p>Database
audit logging is an industry standard tool for enterprises to
+<?xml version="1.0" encoding="utf-8"?><feed
xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/"
version="3.4.3">Jekyll</generator><link
href="http://cassandra.apache.org/feed.xml" rel="self"
type="application/atom+xml" /><link href="http://cassandra.apache.org/"
rel="alternate" type="text/html"
/><updated>2018-12-04T07:14:05+13:00</updated><id>http://cassandra.apache.org/</id><title
type="html">Apache Cassandra Website</title><subtitle>The Apache Cassandra
database is the right choice when you need scalability and high availability
without compromising performance. Linear scalability and proven fault-tolerance
on commodity hardware or cloud infrastructure make it the perfect platform for
mission-critical data. Cassandra's support for replicating across multiple
datacenters is best-in-class, providing lower latency for your users and the
peace of mind of knowing that you can survive regional outages.
+</subtitle><entry><title type="html">Introducing Transient
Replication</title><link
href="http://cassandra.apache.org/blog/2018/12/03/introducing-transient-replication.html"
rel="alternate" type="text/html" title="Introducing Transient Replication"
/><published>2018-12-03T21:00:00+13:00</published><updated>2018-12-03T21:00:00+13:00</updated><id>http://cassandra.apache.org/blog/2018/12/03/introducing-transient-replication</id><content
type="html"
xml:base="http://cassandra.apache.org/blog/2018/12/03/introducing-transient-replication.html"><p>Transient
Replication is a new experimental feature soon to be available in 4.0. When
enabled, it allows for the creation of keyspaces where replication factor can
be specified as a number of copies (full replicas) and temporary copies
(transient replicas). Transient replicas retain the data they replicate only
long enough for it to be propagated to full replicas, via incremental repair,
at which point the data is deleted. Writing to transi
ent replicas can be avoided almost entirely if monotonic reads are not
required because it is possible to achieve a quorum of acknowledged writes
without them.</p>
+
+<p>This results in a savings in disk space, CPU, and IO. By deleting
data as soon as it is no longer needed, transient replicas require only a
fraction of the disk space of a full replica. By not having to store the data
indefinitely, the CPU and IO required for compaction is reduced, and read
queries are faster as they have less data to process.</p>
+
+<p>So what are the benefits of not actually keeping a full copy of the
data? Well, for some installations and use cases, transient replicas can be
almost free if <a
href="https://en.wikipedia.org/wiki/Consistency_model#Monotonic_Read_Consistency">monotonic
reads</a> are disabled. In future releases where monotonic reads are
supported with Transient Replication, enabling monotonic reads would reduce the
savings in CPU and IO, but even then they should still be significant.</p>
+
+<p>Transient Replication is designed to be transparent to
applications:</p>
+
+<ul>
+ <li>Consistency levels continue to produce the same results for
queries.</li>
+ <li>The number of replicas that can be lost before data loss occurs is
unchanged.</li>
+ <li>The number of replicas that can be unavailable before some queries
start to timeout or return unavailable is unchanged (with the exception of
ONE).</li>
+</ul>
+
+<p>With Transient Replication, you can go from 3 replicas to 5 replicas,
two of which are transient, without adding any hardware.</p>
+
+<p>If you are running an active-passive 2 DC setup with 3 replicas in
each DC, you can make one replica in each DC transient and still have four full
copies of the data in total.</p>
+
+<h2 id="feature-support">Feature support</h2>
+
+<p>Transient Replication is not intended to fully replace Cassandraâs
existing approach to replication. There are features that currently donât
work with transiently replicated keyspaces and features that are unlikely ever
to work with them.</p>
+
+<p>You can have keyspaces with and without Transient Replication enabled
in the same cluster, so it is possible to use Transient Replication for just
the use cases that are a good fit for the currently available
functionality.</p>
+
+<h3 id="currently-unsupported-but-coming">Currently
unsupported but coming:</h3>
+
+<ul>
+ <li>Monotonic reads</li>
+ <li>Batch log</li>
+ <li>LWT</li>
+ <li>Counters</li>
+</ul>
+
+<h3 id="will-never-be-supported">Will never be
supported:</h3>
+
+<ul>
+ <li>Secondary indexes</li>
+ <li>Materialized views</li>
+</ul>
+
+<h2 id="how-transient-replication-works">How Transient
Replication works</h2>
+
+<h3 id="overview">Overview</h3>
+
+<p>Transient replication extends Cassandraâs existing consistent
hashing algorithm to designate some replicas of a point or range on the
consistent hash ring as transient and some as full. The following image depicts
a consistent hash ring with three replicas <strong>A</strong>,
<strong>B</strong>, and <strong>C</strong>. The
replicas are located at tokens 5, 10, 15 respectively. A key
<strong><em>k</em></strong> hashes to token 3 on the
ring.</p>
+
+<p><img
src="/img/blog-post-introducing-transient-replication/diagram-hash-ring.gif"
alt="A consistent hash ring without Transient Replication"
title="A consistent hash ring without Rransient Replication"
/></p>
+
+<p>Replicas are selected by walking the ring clockwise starting at the
point on the ring the key hashes to. At RF=3, the replicas of key
<strong><em>k **</em>are **A</strong>,
<strong>B</strong>, <strong>C</strong>.
+With Transient Replication, the last N replicas (where N is the configured
number of transient replicas) found while walking the ring are designated as
transient.</p>
+
+<p>There are no nodes designated as transient replicas or full replicas.
All nodes will fully replicate some ranges on the ring and transiently
replicate others.</p>
+
+<p>The following image depicts a consistent hash ring at RF=3/1 (three
replicas, one of which is transient). The replicas of
<strong><em>k</em></strong> are still
<strong>A</strong>, <strong>B</strong>, and
<strong>C</strong>, but <strong>C</strong> is now
transiently replicating
<strong><em>k</em></strong>.</p>
+
+<p><img
src="/img/blog-post-introducing-transient-replication/diagram-hash-ring-with-transient-replica.gif"
alt="A consistent hash ring with Transient Replication"
title="A consistent hash ring with Transient Replication"
/></p>
+
+<p>Normally all replicas of a range receive all writes for that range,
as depicted in the following image.</p>
+
+<p><img
src="/img/blog-post-introducing-transient-replication/diagram-regular-write.gif"
alt="Normal write behavior" title="Normal write behavior"
/></p>
+
+<p>Transient replicas do not receive writes in the normal write
path.</p>
+
+<p><img
src="/img/blog-post-introducing-transient-replication/diagram-transient-write.gif"
alt="Transient write behavior" title="Transient write
behavior" /></p>
+
+<p>If sufficient full replicas are unavailable, transient replicas will
receive writes.</p>
+
+<p><img
src="/img/blog-post-introducing-transient-replication/diagram-transient-write-down-node.gif"
alt="Transient write with unavailable node" title="Transient
write with unavailable node" /></p>
+
+<p>This optimization, which is possible with Transient Replication, is
called Cheap Quorums. This minimizes the amount of work that transient replicas
have to do at write time, and reduces the amount of background compaction they
will have to do.</p>
+
+<p><strong>Cheap Quorums and monotonic reads:</strong> Cheap
Quorums may end up being incompatible with an initial implementation of
monotonic reads, and operators will be able to make a conscious trade off
between performance and monotonic reads.</p>
+
+<h3 id="rapid-write-protection">Rapid write
protection</h3>
+
+<p>In keyspaces utilizing Transient Replication, writes are sent to
every full replica and enough transient replicas to meet the requested
consistency level (to make up for unavailable full replicas). In addition,
enough transient replicas are selected to reach a quorum in every datacenter,
though unless the consistency level requires it, the write will be acknowledged
without ensuring all have been delivered.</p>
+
+<p>Because not all replicas are sent the write, itâs possible that
insufficient replicas will respond, causing timeouts. To prevent this, we
implement rapid write protection, similar to rapid read protection, that sends
writes to additional replicas if sufficient acknowledgements to meet the
consistency level are not received promptly.</p>
+
+<p>The following animation shows rapid write protection in
action.</p>
+
+<p><img
src="/img/blog-post-introducing-transient-replication/diagram-rapid-write-protection.gif"
alt="Animation of rapid write protection preventing a write timeout"
title="Rapid write protection preventing a write timeout"
/></p>
+
+<p>Rapid write protection is configured similarly to rapid read
protection using the table option <code
class="highlighter-rouge">additional_write_policy</code>.
The policy determines how long to wait for acknowledgements before sending
additional mutations. The default is to wait for P99 of the observed
latency.</p>
+
+<h3 id="incremental-repair">Incremental repair</h3>
+
+<p>Incremental repair is used to clean up transient data at transient
replicas and propagate it to full replicas.</p>
+
+<p>When incremental repair occurs transient replicas stream out
transient data, but donât receive any. Anti-compaction is used to separate
transient and fully replicated data so that only fully replicated data is
retained once incremental repair completes.</p>
+
+<p>The result of running an incremental repair is that all full replicas
for a range are synchronized and can be used interchangeably to retrieve the
repaired data set for a query.</p>
+
+<h3 id="read-path">Read path</h3>
+
+<p>Reads must always include at least one full replica and can include
as many replicas (transient or full) as necessary to achieve the desired
consistency level. At least one full replica is required in order to provide
the data not available at transient replicas, but it doesnât matter which
full replica is picked because incremental repair synchronizes the repaired
data set across full replicas.</p>
+
+<p>Reads at transient replicas are faster than reads at full replicas
because reads at transient replicas are unlikely to return any results if
monotonic reads are disabled, and they havenât been receiving
writes.</p>
+
+<h2
id="creating-keyspaces-with-transient-replication">Creating
keyspaces with Transient Replication</h2>
+
+<p>Transient Replication is supported by SimpleStrategy and
NetworkTopologyStrategy. When specifying the replication factor, you can
specify the number of transient replicas in addition to the total number of
replicas (including transient replicas). The syntax for a replication factor of
3 replicas total with one of them being transient would be â3/1â.</p>
+
+<div class="highlighter-rouge"><pre
class="highlight"><code>ALTER KEYSPACE foo WITH REPLICATION
= {'class' : 'NetworkTopologyStrategy', 'DC1' : '3/1'};
+ALTER KEYSPACE foo WITH REPLICATION = {'class' : 'SimpleStrategy',
'replication_factor' : '3/1'};
+</code></pre>
+</div>
+
+<p>Monotonic reads are not supported with Transient Replication in 4.0,
so any existing tables in the keyspace must have monotonic reads disabled by
setting <code class="highlighter-rouge">read_repair =
'NONE'</code></p>
+
+<p>Once the keyspace has been altered, you will need to run incremental
repair and then nodetool cleanup to ensure transient data is cleaned
up.</p>
+
+<h2 id="operational-matters">Operational matters</h2>
+
+<p>Transient replication requires rolling incremental repair to be run
regularly in order to move data from transient replicas to full replicas. By
default transient replicas will receive 1% of writes for transiently replicated
ranges due to rapid write protection. If a node is down for an extended period
of time, its transient replicas will receive additional write load and that
data should be cleaned up using incremental repair. Running incremental repair
regularly will ensure that the size of each repair is small.</p>
+
+<p>Itâs also a good idea to run a small number of vnodes with
transient replication so that when a node goes down the load is spread out over
several other nodes that transiently replicate that range. Larges numbers of
vnodes are known to be problematic, so itâs best to start with a cluster that
is already close to or at its maximum size so that a small number of vnodes
will be sufficient. If you intend to grow the cluster in the future, you will
need to be cognizant of how this will interact with the number of vnodes you
select.</p>
+
+<p>While the odds of any data loss should multiple nodes be permanently
lost remain the same with transient replication, the magnitude of potential
data loss does not. With 3/1 transient replication the permanent loss of two
nodes could result in the loss of the entirety of the repaired data set. If you
are running a multi-DC setup with a high level of replication such as 2 DCs,
with 3/1 replicas in each, then you will have 4 full copies total and the added
risk of transient replication is minimal.</p>
+
+<h2 id="experimental-features">Experimental features</h2>
+
+<p>Experimental features are a relatively new idea for Apache Cassandra.
Although we recently voted to make materialized views an experimental feature
retroactively, Transient Replication is the first experimental feature to be
introduced as such.</p>
+
+<p>The goal of introducing experimental features is to allow for
incremental development across multiple releases. In the case of Transient
Replication, we can avoid a giant code drop that heavily modifies the code
base, and the associated risks with incorporating a new feature that
way.</p>
+
+<p>What it means for a feature to be experimental doesnât have a set
definition, but for Transient Replication itâs intended to set expectations.
As of 4.0, Transient Replicationâs intended audience is expert operators of
Cassandra with the ability to write the book on how to safely deploy Transient
Replication, debug any issues that result, and if necessary contribute code
back to address problems as they are discovered.</p>
+
+<p>Itâs expected that the feature set for Transient Replication will
not change in minor updates to 4.0, but eventually it should be ready for use
by a wider audience.</p>
+
+<h2 id="next-steps-for-transient-replication">Next steps for
Transient Replication</h2>
+
+<p>If increasing availability or saving on capacity sounds good to you,
then you can help make transient replication production-ready by testing it out
or even deploying it. Experience and feedback from the community is one the of
the things that will drive transient replication bug fixing and
development.</p></content><author><name>The Apache Cassandra
Community</name></author><summary type="html">Transient Replication is a new
experimental feature soon to be available in 4.0. When enabled, it allows for
the creation of keyspaces where replication factor can be specified as a number
of copies (full replicas) and temporary copies (transient replicas). Transient
replicas retain the data they replicate only long enough for it to be
propagated to full replicas, via incremental repair, at which point the data is
deleted. Writing to transient replicas can be avoided almost entirely if
monotonic reads are not required because it is possible to achieve a quorum of
acknowledged
writes without them.</summary></entry><entry><title type="html">Audit Logging
in Apache Cassandra 4.0</title><link
href="http://cassandra.apache.org/blog/2018/10/29/audit_logging_cassandra.html"
rel="alternate" type="text/html" title="Audit Logging in Apache Cassandra 4.0"
/><published>2018-10-29T20:00:00+13:00</published><updated>2018-10-29T20:00:00+13:00</updated><id>http://cassandra.apache.org/blog/2018/10/29/audit_logging_cassandra</id><content
type="html"
xml:base="http://cassandra.apache.org/blog/2018/10/29/audit_logging_cassandra.html"><p>Database
audit logging is an industry standard tool for enterprises to
capture critical data change events including what data changed and who
triggered the event. These captured records can then be reviewed later
to ensure compliance with regulatory, security and operational
policies.</p>
Added:
cassandra/site/publish/img/blog-post-introducing-transient-replication/diagram-hash-ring-with-transient-replica.gif
URL:
http://svn.apache.org/viewvc/cassandra/site/publish/img/blog-post-introducing-transient-replication/diagram-hash-ring-with-transient-replica.gif?rev=1848087&view=auto
==============================================================================
---
cassandra/site/publish/img/blog-post-introducing-transient-replication/diagram-hash-ring-with-transient-replica.gif
(added)
+++
cassandra/site/publish/img/blog-post-introducing-transient-replication/diagram-hash-ring-with-transient-replica.gif
Mon Dec 3 18:17:21 2018
@@ -0,0 +1,103 @@
+GIF89a æ
+
+H° Á*\Ȱ¡Ã#JH±¢Å3jÜȱ£Ç
CI²¤É(Sª\ɲ¥Ë0cÊI³¦Í8sêÜɳç'+õI´(§!*]ÊtéÅ*]`HjRªÏ|pá§«×®(4ðÊj¬ÈÌ¢5ʯpÿãÆuj°·^5ÂÛUo³%ä
+ÖÐÄ_?~Nܶ1³Ã#]ÛkñÞ¯5A!Y0eP
vLZtçÓ]7
!6@þºbÔpZ·scæM}äB³g_8.àÓ=¶Àûç0ÄÍL;¼®èÆW_rsFM3÷%þ®.ØuH;ÄUX(ýÁ}
c#>pön¹7p¡ `"ÿùA!hâ²`$
+ó #Ýyµ!FÓ\ªá{$øÊ%æXá~×¢!´Dp´ \ÿ,°a|?FÒD%©A
c9d;XÜ
+èW´ `<IpQ
+²@3Þ£ai%b~Åæ"Àµh£AÚf§0êh\²6ò©dúGªE:Þ
+ËaFæ!cúPlW¬Z(o2òb§-ÜYLêUa@è¦-×Á²~;¨ak °]àÈ
+L%Rmº
+òܼ§©È¸¨¡
+#"è¦o_¡àkÿkáþب±^\)Å~¸pIÄ]9k Ée^S¬òf±
àÔqÉ=÷Ö]Gói7gmHÍ~¥AÂö,×4iC#¢³·¨ÄÆu±Ý~d:HË}Æ)ÝÏH¦IÉ(ûG~Z²,
+º®%Üc¾ÇµY£î¾Þé©ïTPp ¯µ5ëZ
$ì±`.íy!-ª÷¯Î¦3ÿÏP+lÎïØe¤ÿa-ùOHñ]
¶«p>ã-xÀ(_òØ'8B
+
+Ñ6nß]=µµzÝÏ+ékÚA0¯`eÁ@
P(r¨b\_!d°áÒ÷þÁ5hóÊÌ!¸\Ì;õ<Ørù¦pÄØcµÍ4ì
Ö8ÇÌÐÏ(ìaWø,+À]gre5¶lôë\cÈ"Ǻcñ7+º`§*&3ÆÿF1c¿à0
âVZÕôI:ò!Ê"¢F&íÔK:ÛÄî/r¨O~©`V %½IWÒÑSDZYEd6V
Ä(c3úpqá¢ÖÌ9®RÏl¤vÀ+.pç«'yá&éî ί¸Pìl%cMXRj¯¬c6Cé³Gñî+¦j
+SX5S"
+ÕçÉ&I91Ûc(æ$HÒ&¢UkV
+Ñ.e4¥Ä@éÅ®ÓpÙI£
æd{PÓcÜÑPkSuøcF
+>ý V¾1 s¬¢jQ£Ïÿ¬¦U¿ÙT¯`Ï3Ý(\,z.¤
+b§M¨OµiVEÀfDµªHµ[B©êck
+C"jâTn!ZúºLFµðMÓU
×ÃÐtPÉJdÛø¤~q]*B¨PQ'1ê\jÓ¨Kî§ICæö°ÊÀ2aËé;¸Ví
'«V#ÇÉDöðê¼LëÂïö¢{lB¿¢çu*¬e¸yÏ"YOáçAKzQOfâ¡q(g6dýÎ(£ÛÚyó5s
qC¯X2«j!"©W :`Q<ÀxSübW¼ñ묩V,Ðãeêÿý3d»z¿8ð
Lç¬WÑÆÕâJíÞS»Ïê½hlG ±P
´èlÕë®óI(»O5ååO.;£VêYµHw´rmüMîÂÝ%÷õäü½&oܲ޸]go·Üybö:¤9sX
+Pã=µuGý49.ë×M~ vf¤¹b8¬'5@£xÛ³jÿl§¸bk³;õ4öÈìe÷
eò/¿Q¢Ü
µâ©V¯ál~.·¤üièheËü¤
¯<«³p[»Óµ.ýê'W+¿9&Ø>n»7uReï&ÿ!zÃ}"Wpâú>i|IU=ëe²¤"Í<7"$ÚÏ#³¾Ò2DA
ÞÜýã¢ýίÔìÖO´?Jm
+RX
X
£p
ZØ
^H[÷
b8ldxhH{fl
c%DØr8tXvxxz¸|Ø~ø8Xx¸Øø8Xx¸Øø
¢8¤X¦x¨ª¸¬Ø®ø°²8´X¶x¸º¸¼Ø¾øÀÂ8ÄXÆxÈÊ¸ÌØÎøÐÒ8ÔXÖxØÚ¸ÜØÞøàâ8ÿäXñÀê¨,pæøðàðxð§?þøúüø
+`G @ð3PYóè/`GÐ^ÁÙy?à à
+ð$0ÿx_!^¡
+°
+ê P¡Ê0 ¡2#£¡@&*¢2 »Àÿ**#J¢.£(ª¢,Z j £2𣠤`¢
@;:¥2@¤*:¤Z¤pz
À¤@£³0
+ &j¥µp¤;z1
+1 ¢À¡Ñy;j¦
:oJ qjð© ¥2
+Éz Û©Å1Zëª+±ê±0°ÈJ¤º®[w*
+¬0Z@±kke°
+µj°³M[{©§»qZ¦ßja2V³}j¦¯ªÿ¡$ë²ÞjfKE&J¸
À§D+·;J²¢¢:&À¯{û¯'k©>[ÚÚ
QÐ;³Á%®z¬:»û¬ª·
+½0
+À&»ë´Ûªª{½áÛ¼4¼ÿ¼ ¾¶:´Z{¥ú[½&ËÁþ
àµëZ¹Hë¾¶ÂP»?,D¼£2ÌA,¸iJ¹Ó[±Á»ºÀñ:¥ijj²TÎËÄP\¼¾g¿Ã¿
+
+½S]Ï8Ñø¼ºC}®dÛ»10¢(K)à«É,äKÏ)l¨Ê²è|»ñ[1kÑ©Ðpº
̬³ëzÿݪÐÀ˱Im:+Á¼Éµò<f²þ\É[M̽£@ªÌؽÙ;
+]à½pàñ
+ |Z´. Þ
káÌ'îÿ)Î+®¢-¾
p«í¬+¸:ãõmÏqã;ã@5D¾£màGÞI~K®¢m
+
Ú¾í¡9°¿îî;¼íçî¡ðíî¾ï¾1îZP
õnïÑ*P
+À%@@1
+¿ùø, §Ñø"0ïÇ "@ù§!,
°H/@
&¨/3!0úÒéS*éÔÿWÐò!È?Ë/ûW
+:@ÅMêê å7aí|öN©Õ«X³jµÆ#[oáp3§«©z]˶۷¼}Cñ.(Щc
ÖÝ¿
xãܱ%*~ÕAÅon¨ê«v±åË3ëBòøX](ðm T«^ͺµkE%J_PýÚTÿ}°2!íÚÀ
;@Ã\ÃSñÈ{LCÔF©KN]h×c
¨8ã<×?¾ Ð_ÀÀ%3t #L6Ù
0¦%'0z¡pÀ'£f:ÏZ²Än`¢@`1¦¨¦*,ªù2ª´ÖzͲ«àhë¯ÀâÆ1 ÒºÁ1`«ì²
+³±ù²³ÔV«~P¬¡¾hí·àþ¡/,ÛK|á¦KØÕ ìÞù¢ºôþ:`p*³s`i
+3àhë÷áàK
+mïÜÜK4úìVMS¿@.í¼[¥¸%M%:ôn<P¸N·×vSâëñÐt
/Ím%WD¯}FZÂúÜjÀmêöä;/1ô}¾%éï>>o[ÂDÍ^?À%(ýþþñ@áF~k/^Å¿#
+6©Äóü<?
+`6ÆU ÉÑ;H7HDÿ Ù$ØÆÁCmå´à¹ð
´°\p:ù¡s0Ìa,ràîwðØ
+²M ³»ß$
+µèJ
+jÐðÀZ0~ÞöGÑù²ÈÇM³0ø×È7|ÉîÿûË$*Ý·ÊKbÓ6ö´F
~³sàÂÈgOíë>©ÂÈ
¨@ ¤g¨Â5x¤ýÉ9ØðBlð
ôá¢Í¨F7ÊÑzô£
iFàÁCÊÒºô¥0õ'Ð`Snc%6àúô§@
êO=PÃ=`
+1MªRÊT|Nºä$zY¾[RÂÕx
{¤¦°]:¬m¤×rñás4Ä#±@¡»mиwQËøÇýFè0[ÀÅ<Þ±ÿÌd|à zý
^'ÙÅKn2Ñ@RF0°Ôű쵳à
+#þå 0Ï(æ¹ZÀT
xbî8Ö.Ýõ FPÐaxP*^ç3ðô^
±ð"à +qA¸Z±lØ@ö²
R 7ÐYñAÀAÚ át|Àã|FºcÉAsSÇ_}× 0x¶Ø¸Åû9mAH½èhyKQ÷{z[øÕ
!ºA0ë_íº Ðâ
e j øµ´ÒK%r[¿tå=Éÿ)ô·ÿç]2,$Y
6¼«(üEq.;(Ío}×`zôÛWè»÷§¸ÿÌç?(a¬ø®"þï&ü ÒØÒ§¹O`ìW>
Ú¶6ªÿ:àÁKg gDgø³nBo`ezP5¨g[·Ow7¶7^ö÷Oqr I%
ø2\ücT<÷QÌ÷¬gWÉ'lð¢'Tà>§vÓçRyõ÷m2åN°q0ÕHIHûc
+Ø
àb¹ÔG÷§{yO´Çr0µ÷¶øGg
'A3yÙÿQÈ~!ÕÐ?5Ùh©i1Ûæødl¸ùt÷Ç{©O×X·Hɹ°w.d@~ÆR~9¨yQfu~¡¹Q¢¨¨0
n
+è U¢ðRù©Pvo008W**S®yt@
9£ùd
+¹¦§éS¦w@)JÐÕ§æOÂàI
+lÄó¨lÊÆeÎQÊ&@
+R$Én0¤Nꩽ%öªùj'ÆA¥æ§fƪ!el§9§ãÅgL ¬ðÖ*ÿ=f ÆsÎ
+`OÊWÛgÔêdX XÞcg&Ð'©dÐt`®çzO\9l¨
+Z¦§¬6®{%¨çúde4eUF¦ñ¥ÎÉc¯¨%ÿd@dücdî
+`ÛhôJ±Fc`Ncûjò5± +Y%6¬T¬Ç¬(`gS++bæ%Ö*V@f Ù
+3K³^¡7;^Ó5AvDÿ5´)ë5»u´\à _Ô_X÷¯PXgSZTK`ª5»^í%
ðÕµËÕX¶äEYÔE~ü]Úµª¶õ^£Wn;^\ÂÑS\@+
É
··Õ\hÓ·ã5
¬åZû[6
j¸ ©Ë¸,+
±»Ye¹%Z}£RYð·Óà¯ûCXÔpX¢ëYÕ7Uðô4§ÛTc
jGÝJ;ne p5
r»v
WðRåTE>V/Öð
|<«tÂ:Ì;¤J q=¢tªA=ص_¼³À ÄÐÓ½~UÆó¼âŽӴ
|¼#Á`XÌ;zÄG¼ãGÆÇcÿnÐ:CGph<;FPFú9*ëdzL[4;^¦z
=ÕZSTEìÃòD<|ÈÐÃCüú9,Dl<2ÀcCì;ɳcn~ B£¼Ç<GÅzÆcCù3ÊH£Å~ð½ª|:d
aF7
$1Ëã?0|8CL ò¡ËÆ?±¥½$c?Þ#¸ÂL9ëS í37Jc
X³ÌÆÓ=ÓÂ]3p#ØLͳsÃP=^s=PÃÞÜ;
$
Ѽ8Ã.cÈ}<9åâL2!
Ë:Ís9
%0z³5'=LBCÌ Ê/=;úÜ0³J}ÓÑÒ0Í3e+Ë>}:Ñ
Gý-OÓBG½=>óÁÊÌ,]ýÔä£G3dÌ´/¾`ÊX
='£ôs~Ð2aM>D½ü- ãîÖÇcÖb°Ô¿R1d-×åS0ø³Î¿¢0¾
6zM>@=Å,sÀZE=ØîÔ¨ÄÕâÕòÂØïCAÿ¬,úìÁLÙî³Ð",äÍ?R< b+Q] W<Úå3,¾PÇ¡,¬m@
tÖq½(±B˳A2dÿÛ»"+½Û§£°tÖ°í'¢²Ý,Üîã(ÇpÚÚËÌ-A8ÚÊcÓÕ]>qr*Ür'Ç
+@z^
@
+µn @ ²òPl
À%@ï
+ÌÅo Á*\Xp¡Ã#JôÖp¢Åÿ3jUq£Ç CÜn¤É(S"쨲¥Ë0ñI³¦Íç\áÜɳ§ÏU3
+J´(IF*]Ê3(Ó§P£ft*µªÕ«©bÝʵk;^Ã
,Ù³hÓ3«¶Û·°ØÂK·.'¹vóêÝ»/ß¿çú
L¸ðØÁ+®x±ãÇECLù¦äÊ3§¼¬¹³ç?ý04éÓ¨Nͺ5-/El|iЧ¶íÛ¸sëÞÍ»·ïßÀ{ñ`£×È;*â!¸óçУKïí¡òëÊàν»÷ï¶q<ÀN>õvðèӫߣ¼{ÑEÖËÞúûû½è¡ÿÏ¿t=Çá'
cøgà¾E0àÙàÖföEøE
îE[
Î×@$Öâò¨â[(¶Þ0¦åâÝÅhãX4æÝ<v¥ãÁõ(äU@ÙÛHFeä¹%éäRLFYÛT%eUfùÓLjéåNÜMÀRôg
¼ál É
À@R¼éT$«Äzäªoÿ:êlت۹¦jÛ©0 j±ÜbtloÔ
+BÅwH´È[¸ÀnÛí»}ËÛ¹·Y+oèþA©sðü¼»@ª½àkÛ¨¸Á°À#D°nþáðzô*«[²þÎ{ðÄПé;µéuüµý:¨nRÔK²É8ërm@ñ|.ÃÜͼý*¬o9'¢H,_лy0ȸ½¬è°Jg=ÓÔÀ²zPë6oV߬õÙëpÓ`ÛØ»5Úté¦nº+!w<í6np<ÈÕÀÕmx9;ÛæÈ¨Ù¶Çÿ-¸
ÿÿvøåá$~ÈT·,ùµS#;¸Ùnæ 23xßFôn2núìÎ n!׺mF9Ès´?í1î9ä¸É-ö 5
+w
+6
+ëÛ\ù#Ã>o9Ô!H
+¢@7Äß±ÿl`ÜÔrA&zÑ.ÚSås&7 À
ø»¾ÈÆO¸ÈSÚânÚHG0¢Hj!£ëêÈÇL h÷ØÇBREåhÈFJEÀ
õèÈJ:b@²¤&Émòè¤@ùIQæ4%P©IUÎt¥`YIY¶´%pÙÈ
èD#âe!W÷ËmH}tP1#4!dò1{Ë4ÏÙFýDA
©HGJÒô¤(M©JWÊÒºô¥0©LgJÓÚô¦8Í©NwÊÓúô§@
ªPJÔ¢õ¨HMªRÊÔ¦:õ©PªT§JÕªZõªXͪV·ÊÕ®zõ«`
«XÇJÖ²õ¬hM«Z×ÊÖ¶ºõp«\çJ׺Úõ®xk
2Là¯
¬`KØÂ
+!DèA^¹U
!¬d'KÙÊZ²B»*>Lá²
h%;
ÍrÖP#jWKÙ¶P=(kg»Ú2(öµ_"mw;Z"àöKYàp/
ßzI¶ÃM®ÿdË`\-M@¹Ð
Ã¥çF7¹Ó¥.¬{]áfW»Nânwwû]ð"I¼ãmyÍ+$ô¦wµëmD8@ßúÚ÷¾÷}A3^Pß^ð¾ãø/!àÀ¾ú¨{ß;Úø2ÐpYÐ
¼b82ApØjÆ&º`ÖÁ°Wl
+3ãóPñ ãpÔø7^
A`¨Ä&V¯$^À"¹ÈÁ<â_8;¦ñ¿qã«"Ê¿à°(@ÑÙ²(Ä!fl,ÂÊÛ@s
Af_¨Ø
+èòá»1cÄÌ8²7Ô,<ó" VðUÿfIØj r ¡ÀÈø±$>
ïnS<äÈ÷ºÛ= ìj·+(PoF[Ú¥6$¬MÿlÜ×ø¹WÛ?FthP
ÝV8Ña¤¯xé¹ÃÝÝa5Ýàк¾sChÜ÷Ô¯m
+l\¶w¹®¦ë:@A=mV»^÷½=IÀ ÔðöCå½9ÎuþBź¾ý
0ûÅï^äÌ/Zê~A^ðèÍ·9Ç=NrXPÍêÐ@é]àÐwè@
/ÙküóÃÿáç5WDE,ØBõ´·ý³UüõÙ×Þ}ýÜåÎtWè2o1!\ïyG¿ð=/|¿»ú×7í|
Tÿ@n<+±y?¸øýÇy%yÒFy`yðf©÷¼zqw|`qZFsæxãg×}r7æu
àrp&e@zmö¤vaÈ60tûWvc}6t~
+ ÎxaGÀ bXÇaÖz¨
Oö.8C×h(~ðP*æ=ã:È
õxqÈÊèê26¨
+ètÖP´øe¶Ø©QØ
º¦
+cö¨Éý6ù.èyp¿8¶ùnªïfs÷Á@Ç lYß9?Ð
ÿp÷P¿É`ÁYCégðxo" G'LI¶ævw Íö JîgÚheN¨¨çÉ:è ú¡ÝÈN¹))æ
GÚn Ø{£ïH
+ê
+¹vw7ÚþxYû)è·üÙ£§sÉG eq)vdù[éªg-èú%s;*FZ~ð¤
bá£HPi#æ|ù-Ú\ª ,`
:Pùù^?: ýjV¥i nI_"5¦c'_íW¢\ê¢*o÷x")
©ÊI}ïØ¦â(ÿ:¨ç(wÖ¨¨³Ùf¾¸¦°ÃרèF
¨bHÁp¨µ§éÕ§lú§©~Úïfr¤ùY¢ow{ôHQJ¡½fJ¢
+§ÚoÉjj
+±oG¯ðn]ÚP¸:^øÊ«X¥@ lY'Èw©æ¯Â:wÿÉÍÆÿWRú|
Él`Ö¬+pÁæ«ryüø[J`͵¹
+@@?GxycG`HûO}
+"ði´&cwµ´*O·6¨®ç¡@K Ûù~¦³h¯`½j®8ÊbHi²Éù¯
+xnöIfj°ªK±»nbÆ{¼§¾é¸÷
+¹A¹ ¸Ï×w®èbDëŨ»ò7h6§6O
+º¨+ºãz³:±¦9k¬zO*c÷~G¦ð&½|W²Ð½Ë¹Ëÿ½6¾í{Ò¶vÁ
+Ì æ³¼Ëz(±2tA«LÄOìj
+oºµ6'À¥«<1tDZÄÉ^p³ÝÅÅ8¡ºÆbL d|]f|ú¦ª}6kÌÆZ<mVQVùfyÊ
+j\ÇÐÆÑõÆ0±_lÈðXwYÌU
+È0et¬ÈYi`?`ÿdX<lÉðY<¢l#p ÈØ§l#ºuǾÕÊ1²d
Åd°²l#[0ªÌZ0¸Ë7SÉSÂ,$°IðÌÐÍÒ<ÍÔ\ÍϼU°ÌÚ¼ÍÜÜÍÞüÍàÎâ<Îä\Îæ|ÎÐó
+½Ð®a-b5`ÐÀTBm3RN!*Ò¨áK.&"Á´Ò¤ÑÒÀÓ§!ÓòÒ_:}_ÀªNI_p
>]¨êê×ÿ_reÓÓÜù`fáP]Éó -ÌVJ!LMßùÔÊÕà0ÕÈ{
+bÇÁ¹PëVY
![]©×WéÕ Öß Ö¥+
+eMýÀiµÖ] i(
+bÍ×Öȫ׿ «§«Ö3ÒÖ¥9Ö¡0Øã`تؾàÊØ.âØ\{×
Ùªpkzpj¬Ö½lÆ"Åld×]k¢mÚ k®ýÉð)¸ÁÍ6É[å×ÂÙ¦ëÙíÙksýÕ
~\è|ìºörÎÙqGtºËnbºÜ+§¬K9ù©«¿í¿²xvåÆÖÞï»9ÿ¼K³rìUÄ} Æ¥È-¹ÊÝf
=¤P|PuM¸¹GÑ»_ktv]Î ¼î¹bÞÎbËhåÍ4H4Ô_ußß¹ßDé
¢Ø9þ|4[¦ÞWd`ûµ[d
+`è¦É]²}_;lbgfK£uó¥ôrIÇ:î¶P¸eÌ;î©Ö¿»ofV"î$~â£zÞtâynr»µJIr1G
\sáhþáÇݤ¸,ltÛµ¿@`qsþ½Ùæ³ `§¸3ÀÛöÝØýÆyÕUúÿÅfúâZ«
+
±ú¦èãüti°p¬zºÉj|î¸åí|},Þµ)»V_Þa^¤¶yégÎÜÞ§jCÖ*¢Uª¨ÇkIv¦@hÞÆç|ÊV_Ù>eµ]¥¶ÆrWoö°×wYßcõëüìò8쨩
-:hq¡ §èº~Ø©áåê©hþ²$lî0¿sYÛ:ؾ}EþÚ Ø4KØëNéÓJÕý]ÃÞíßåª_)Ù`
×vnÕεXæ^ ±
~ëW±nq?'ò´àðÙ«Ù-âî~
+ÙâÆ®ñx©ëIøÿm7 h¿Fòá[â?~âò(ñíáñÚ°ÄþçößV Ê
Ñ}VìÞÏîóö©N¬8¶ëÝKßÉô½âûôXæï`ò§©á²]«ô[G`5¾ô@õïëÿ»fßÝ@ñy)¢«çK
Iÿ|d¡ÃF±=n(ôðw·~õ¿xù̧&اø_k§:"<¿«©0tB/ô"z¡\©f}_ñ5[kÌØùc-§Eöik®ï£_á
{ ?~Ìοè³ïå¿ÕÿôéÇsó>J"h
}ª«¬®¯°±
3¶¹~·À,
+Ç~
+,GÎ@×j3¿ÂÀã""À»¾ÝÏÑâÔ@åzIc¤
+<úêÿAK.ÙüCÂ`ËhÓª]˶۷p+fKWc-|X¦üðáS¼ä
+¶ tà"2¾Ç"49È9£-C2"BBb!gnW#\véå`²¥!dªâ¡%|}%&G°
ùCÜùÁ°-à |UrorPkÚèG=?°
+ÀçzÚ'$$8
+©|ÀJÚH¦,¼Æj,ø¶ãV
A\Q5xmöÙh§bcÄÚpÇ-÷ÜðFÛ²¼Ý|÷í7Ý 0 4Þ¬HÁÀÞ'®øâZ×`A4
ùäWnùåae3îùç
.úè¤nú騧®úꬷîúë°Ç.ûì´×nûí¸ç®ûî¼÷îûïÀ/üðÄoüñÈ'¯üòÌ7ïüóÐG/aýôÔWoýõØg¯ýöÜwïý÷à/þøäoþù觯þúì·ïþûðÇ/ÿüô×oÿýøç¯ÿþü÷ïÿÿ
+ZðÌ õ
\ No newline at end of file
Added:
cassandra/site/publish/img/blog-post-introducing-transient-replication/diagram-hash-ring.gif
URL:
http://svn.apache.org/viewvc/cassandra/site/publish/img/blog-post-introducing-transient-replication/diagram-hash-ring.gif?rev=1848087&view=auto
==============================================================================
---
cassandra/site/publish/img/blog-post-introducing-transient-replication/diagram-hash-ring.gif
(added)
+++
cassandra/site/publish/img/blog-post-introducing-transient-replication/diagram-hash-ring.gif
Mon Dec 3 18:17:21 2018
@@ -0,0 +1,74 @@
+GIF89a ëæ
+
+H° Á*\Ȱ¡Ã#JH±¢Å3jÜȱ£Ç CI²¤É(Sª\ɲ¥Ë0cÊI³¦Í8sêÜɳç§õI´('
+>Ä_?~Nܶ1³Ã#]ÛkñÞ¯¡ Y0eP
vLZtçÓ]
¿jë.ÆUî@þzaÔpZ·scæM}äB³g8®àÓ=Àûç
+ó #Ýyå!F³\ªá{$øÊ%æXá~×¢!lðÀDù
+@3Þ£)i%b~Åæ" Àµh£AÚf§0êh\²6ò©dúGªE:ÞËaFæ!c¾PlW
+¬Z(o2òb§ÜYLêU)@è¦-·À²~;¨ak °]EàÈL%Rmº
+òܼ§©È¸¨Q
+#"è¦o_Qàkÿkáþ¸
àÔqÉ=÷Ö]Gói7gmHÍ~u@Âö,×4iC#¢³·¨ÄÆu±Ý~d:HË}Æ)ÝÏHæ
IÉûG~Z²,º®%Üc¾ÇµY£î¾Þé©ïTPpE ¯µëZ
¶«p>cxÀ_òØ'8B
+Ñ6nß]=µµzÝÏ+ékÚA0¯`eQ@P(r¨b\_!d
+°áÒ÷þÁ5hóÊÌ!¸\Ì;õ<Ørù¦pÄØcµÍ4ì
Ö8ÇÌÐÏ(ìaWø,À]gre5¶lôë\cÈ"Ǻcñ7+º`§*&3ÆÿF1c¿à0
âVZÕôI:ò!Ê"¢F&íÔK:Û
+SX5S"
+ÕçÉ I91Ûc(æ$HÒ&¢UkV
+Ñ.e4¥Ä@éÅ®ÓpÙI£
æd{PÓcÜÑPkSuøcF
+>ý V¾1 s¬¢jQ£Ïÿ¬¦U¿ÙT¯`Ï3Ý(\,z.¤
+b§M¨OµiVEÀfDµªHµ[B©êck
+C"jâTn!ZúºLFµðMÓU
×ÃÐtPÉJdÛø¤~q]*B¨PQ'1ê\jÓ¨Kî§ICæö°ÊÀ2aËé;¸Ví
'«V#ÇÉDöðê¼LëÂïö¢{lB¿¢çu*¬e¸yÏ"YOáçAKzQOfâ¡q(g6dýÎ(£ÛÚyó5s
qC¯X2«j!"©W :`Q<ÀxSübW¼ñ묩V,Ðãeêÿý3d»z¿8ð
Lç¬WÑÆÕâJíÞS»Ïê½hlG ±P
´èlÕë®óI(»O5õåO..£VêYµHw´rmüMîÂÝ÷õäü½&oܲ޸]go·Üybö:¤9s
+
+Âä4¤tö:»Èïmª=;aÌlúëÌÚ¦üÛ
+Pã=µuGý49.ë×M~ vf¤¹b8¬'5@£xÛ³jÿl§¸bk³;õ4öÈìe÷
eò/¿Q¢Ü
µâ©V¯ál~.·¤üièheËü¤ ¯<«³p[»Óµ.ýê'W+¿9
Ø>n»7uReï&ÿ!zÃ}"Wpâú>i|IU=ëe²¤"Í<7"$ÚÏ#ã¾Òò¤@ÞÜýã¢ýίÔìÖO´?Jm
+RX
X
£p
ZØ
^H[÷
b8ldxhH{fl
c%DØr8tXvxxz¸|Ø~ø8Xx¸Øø8Xx¸Øø
¢8¤X¦x¨ª¸¬Ø®ø°²8´X¶x¸º¸¼Ø¾øÀÂ8ÄXÆxÈÊ¸ÌØÎøÐÒ8ÔXÖxØÚ¸ÜØÞøàâ8ÿäXñê¨0Pæøð
àðx§Á8þøúüø
Pø(&E06æãX]
+zd ÿ
0£
+P£\z^º+
+¦p§ § O¦`ºµp¥
+¨ §¦ð¤[jÚ´©zÀ¢ezª#ªdÀ
+|Zd
+`¬¤~j²(»:,ʬó¤k±²@¢òÚ²® § ÛìÊ¥«FZ²ûò¥
+±8ûDë³M§ §M¥èY%Ë»:£ÌJ³,ÀÉ
+³
@³½Ú®ÁWÚ
À©%KE=Û¢ø©¶Ç×µ¯Z¯¼µX
+ƺ¯3*ª@»ÿ¢¥ZJ]ûnʦ§´l;£°£Òù².§Ð³T¢:jn>k¶{£
+® ¥
+¼pµµÒ«¡
+Ü
l¢é{FÚÀÕúg©0°Á
§
kó[Áж«
+<»Û»¬ÿÁpÁ Ã
+@
+
+Ï:¬ðÆGú¨³L»LÊ\®Z¼Ü¡lË]|ÿÈÑ<%k»XFP½¥<ìd
Åî,ÅÂܤ¸I̼;Éz\ÉLÄþûª¹Æï»Ì=®Á,¿mLÂ
ü¤^[Dß*¢é|Ð-ì±wü¸ÊÏùÜÄjkÏ´¼ÍÖÜÅmÉ,½HÌÆ@¨=ó+¯}.ÊXʽM¾
Ѻò·«K\ Ó<ÕÃFêÈбkÍW|=ë¨%-óK³,²Ë¬è,Ã-Ï@¡ZÕVý¡!]
ÒÐÒ8ÅÏ|¬Î]»£xû¤([·QǼÑKýóÛ³!ÜÏ3£[Z¿²0´KË
É:ÿ·Ï5²
`ÊJÀUëÖżÇÇ?Ð
Ê#Ko|Ó«
Ç-{Ôp½Çòʽ«·¢=ÒOTª´ÉëÓÚ±Ó¥ÜÚ9Z¢û¿¼À¯¶½Å=½d=£q×{Ú¿dlݧýÕMÚ @Å
ú¹ª
Ïåͽ(
+½;®º¥ÿ}¿ðºØ*ࣰkÚãÍz®ê 4ϾÚ9Íz(ºÌ`¯ ánܧ§. &.âŰᬵ!.
(jÝ*ÿ,.F°¦'þwª¿35nP
Øüâ¢^ýã¼äþ0äZäÝ`¯;Îw:×LþNÎP΢R¾
0¬®Â:ßY>[®]>£_~æ;æø°æ3zàæ¤çö ç,g`çwNâû çÊç~þçÎåð¦^èçò
è°èÞ.éÞîÞçÞè^þé1ê¤ê.ê¥êl±ééê°Né¡néþ¤¯^ëF!ëæ@ë¼^40"
àî'a
+@`Æqà
OðA+à¿·ð¯
?Õðñ _PBX7Ð$p
Å
@
À±.ÐÍõRßPõ ó9@äJR
+ @Kï>Ð>O?ø!.`örñ
+à
+À÷Yø¹>礯ù±',pPåº`p,'°¿ù²0ß·OÞÎ4@ðû§¡
3
Ô"j(²¥Ë0cÊ)a)3iMiÀP4ÐèåJ´¨Ñ£HG!ÐaRX
vÖ¾*,t²çÏ Cc³Ë.
Ѥld<¸gÔ°cËmª¦ÿ8
+1h±KÏU¯uN´ Ç~T\|Ò
+?Ä50*xóëØ³kÕqùX`Ú)1tìSÖë_Ï>#q?,kéèÇ JO¿¿ÿÿÚLpÀm*
+½ñrf ðgàFè
+iÇ0Ìp85x<a(â$FçÈwñ'ª(ã
+S-Àà!\8ª©´Öj
8`ªÄÀ{¢ïÁI³
+ëì³ÚÄÁ£!?$
J@ºF8ñï-y/j8âàE¤
ð@ë7xðÿóà!@ÈÁæc|PÀÚúfJ2¡
½^ÅtàE¹fÈCm00àéüç¡H´Æ;ðÂI"3ÐC¼Mwh#D,(Å.²ÂsÀî¦À
Ãyñ®H8p¼ü pdÅ
+xQ¼ØÑÏT£Ka²H-
ðÁ);¢ Òk ÉHJ`n+òæë5òxÓü°/éõVÂ$&hpñt
hEÙÈ,úAcç£!®ÈJB:ñ@ßxÁ¼ZÆÑ) 0_îP!c걸AÏ7úAÿÎD#0
qþa®Å̦)iFônâôbKIþ¡e7Lgéû
°¤<{HI*
+ÌÜ'5@3àí-3@7¸LnJðHæBMèÆB`+'ZÂ8 «g´Á!~
ðÕ¶ºU§¨Áé®p·Úõ®x}éôpaú!\g!
¤ ¯Ík
+"7;$ö±
ÿª¬Ahg°æe§qØÈz¶«)Ø\>KÚÒÂT¬Ô0$½JHÄ:J£¦Nå¸.HA¶¸
¬:ÛU¾µÆäÛâÊTW=ËÜ»$"K¨HC
êý¶·ÓÞ-¶W-Ù¸ÒP!v8Ãû¡ÁÓ8³]Í,gÜJØ¡j
È:»Î]-C 7~¶©4Rtg;NtW
Õ5ÀACh¢%aa!ëE 4gNsÒ:-@!Ǫ®é MëZ׺[e
Ad$¹H¶E[`bA
XF5NÓ0
+ì
+þh§é±ø¢Oâð.÷ËWµB5-IÞU¹¯¡0¹]±ÎÿóªOÿCïu
ë}«x>ê[uÀ§<jÌ%/0Ô·CÕìoiðápW|ÿûKî¼S»¾üÒb}ç÷føóÊJâ
AhÓ·ªz_Çok¼ËßVeÏÔ¡'[çW~ûWjÐuC`y'DöBÖ÷T].sZ÷V
{¬'~9xø×\XSÐu¸w·Ð2§AHÄ7/|Ã7lgr7xjQå1å«°|£
+ PÅJ¸ì°´
+ùX÷· Qu
ìøRçWn¥QUB©SÌÐHÔ~ðó§SÅ(
+ÚW¨ùw8%èÇXSÈÁà~Iò7yNsìX1çY9ypÃUèrgwE.Uyé7dy
ÑDÔ÷FO¹lXSrPÕuSéR#ÙÉ[EåW<W|C·UzÙRù{IzY®D±W³dN ©
¹UÁÈ/ÅyY°¹$¨}~8SÙÿRÁ0õyÝèTwgB72Õ[ç<tY¨z¼éRçXQõygl:'|ÚèÙ1UêÁøx´°vHÔvä®9%wG)6õj
øähOUá9 f0äÙ_YFèH)JGL×CêJ{9ÕuISW8ü9m
+UÁéRºI ^Xx·@ú4Cò©7({>÷R!jS\iAú*z}o
+H' 15
++°q£U«ÿ['v*&A,æGçZ±Ú7ßå±5^ÒÀa3ôan×±"kʵ²õ\ÒaÕà.+SNP[òu³nµ¼Å
øeú%Cüåþ5
o*²nÙ7_0a<ÛUN°_@
[?p^^[
íõ´._slàµ.gÖbÓÅAÕÕbØE¶-Õ]ãGà´nS(`dS
ÁfðeÂ0\d\ó[·7µS{
ÊÊAÈj
°åµ´Å9]
u³¡eRtáW
@å2
7ºHAV¸ÃAhµ
kå±qE»|QÿéÂAFÅ
W Ke³¦æXPZ\¾;e«Ä$õ¼$¯&?n&eÖ»?(ëÝAåÖ½ñ³K¥¤ªçP
PæË=ýôOiù¾òCO·?·£ô{>ë,°°ñóN°ºû{>´JñCJíPÀüCOá+?ã«¿
¼=wZÒ$?Õ¤§,?È$?ßÛL,?¶ë?~V!Ì=K K¼ÂòãJ°Ä=²ä§
ÃÛÃo¦Ä=©¤8?6°I#w<ôÉ·úÃÒCOB0»,DIÄÇ£Z~¶Æ³¶
àZP=}ä.v<(&HY>stXl:RGaÌÿ=jĽ±#¯DÆÜÃo~
F±3è2¦p¼;TdE»#¯àÇèó½)ÖD¼à·l<?t|Æ9DÄtÈçSC|:\/ÉÔ4*Ä9-XÉÇ#B@Bó7À8
|>´3
+L;ã@
À³¼=DtGl66`M¼ËÒSÉp¿qãxEÌñS
@¯fó®
+38Ñû37~P77á,ÒüãJ~ 6Ó6|¬ÒüÃ5¼¡
+s¡~062}@ýh0VÃÙ»ÓçÓHóÑ¡DA:óB¿¼.?óÔ4Ñ.SRí"3½ÑT½=6L\*0}2]-AK¤*s
\ÖäÍõÌ.¸¬7lÍA#LN-$í(<×/¼0ÄÁB0Õ|½ADä?0Ô¦r.¼0Ì
AjØm)=TaýØÇCØM*Ør#²ÙD,ùQ+yíÈ¢=C¸bö\)qxÚ*ÇP-#®r
,2²ÍÿC$¡]&d°ÅÀ±ÝÛ£M©JtR~¥EÜ=t'Ç 'tÒ'Ç
+à
+pè Rs.ï<M@Üq$*îÓ°ÿ
+*ÒÑ£Hîü©´©Ó§BJµ*@©V³jݺ+ׯ`ÃVó*¶¬Ù³
®Ô(
H·pãÊK·®Ý»xóê½Ëf@WÐ
+\²Æ½+^Ìøî#K®h EãË3kÂÀäÏ
ZÞLº´éº)B«^¯Æé×°KCfM»¶º+rbëÞ½XN`ÛÀ{Ó»¸q¼Z+_>ÄñçÐß`N½ú1,ѳÇb½»÷]nµMä»ù󲯫¾½ûRëã~O¿>'ùø1ÛßÿÏRþÿõ'à
+2fh:¦è9WªZê_jW°«q
¨]°þÁ%bÿ¸&»®uÁ¦¯
0Ȫw¡+墼Å`@¯i ×rÇ|¬È0çDr#±\+Ûåñ¿1÷ìRcÚ¨ ÀñZÎ8ß|nË<ûìôIÃ5
ò-ß÷-¶ázÚµf¿µ³Êÿ`pxâ?ä7\<Yä}üGÍsñYíå§Ðæ}ÐÊàÕgËålÙu®ÞªçþÏæTb4ì÷Þu¨ÕI
&êº'ßßvW6¯è}PûÇñqíP츸+ï==P!þøäBzè*õ½«êr¶cßý÷ô·33#ÜÃ~cÔ÷1ûÆf(
¤Ç¶úÐ~ûѱä²?Æô¯u `HAtܯ0C8.æ}(Õ6æ¹ VðáÏÔ÷©ÁjÀÉl
ÂC>fäbÃ~#>»Ý9çÃ"^c=ðûåø7#:Që1f¸Ã'ZÿëiCÆÄ+z1L<ÐÇX0h
Æ6êbÿq£mÇüÌñé©£|ðÈGWèq}$|þ¸AR,ä!Ù $R<åa¤$31·G>;Ìd%cÉèLG
q: äòÀ
)ãTºr®YeqfóÊZb4²MjlÉËB ¹M<ÓËbÂ0Á$ÍcÉÌA\AlqB2ã,@¿i¦6·ÉÍnzóà
§8ÇIÎróèL§:×ÉÎvºóð§<çIÏzÚóøÌ§>÷ÉÏ~úó
¨@JÐô M¨BÊÐ:ô¡ÿ¨D'JÑZô¢Í¨F7ÊÑzô£
©HGJÒô¤(M©JWÊÒºô¥0©LgJÓÚô¦8Í©NwÊÓúô§@
ªPJÔ¢õ¨HMªRÊÔ¦:õ©PªT§JÕªZõªXͪV·ÊÕ®zõ«1
+úªÂ¾À/\Õåf§¿XwG±`ìjÁµp° ¼"4Ä&o$4\S¸ò
Q
DתÁbR¸ø"ð!ÓX8AE@DÄP2FEáÁ1cE!ÈÞ²!¢`*[B¾Ø°
®ü6·¹ÉKÍ1`WâG<9¾uþÃÿ_UTù6Vqÿ@ÂÎ ÞÈÕàlÝ<?0à6°å4à¹<¥õ
]àÓÍõ¨iM7C# ÄuM¸zhª³ãDôØÎy®´Ô¼ç¬bÐ
pÀ*þLhêúPöy°êeß:ÕÌÆó°
æ?àÑÏ
.!^j³÷¹(6tÍM2 º¹D3D0\Ûâfê®ÓkDüÚw&õ¶ÏMìöÂÕ2@«ÐBûA÷ºý
+zk»àÿäOèeÇÿçõO4Ë\k¢³é@vË'dàf¤§àïwS5}vEg×ǵ§}V6bKç~c·
+ødw@õ5þ7d'(pð·aøf@³ö{%« $¨
+î'b<`fx×E§k÷ÿÖgðGa9èy{~
ms÷wF`)Ø~¾Æï}3 WfqqWÑFtW(`)nQ
+ùVÐÈj¶r^wì(À÷|Y 8°vâ§G÷p8°t¢hyþy)éd¸g~É}
+ÙX](§xÂÖxGHæ(IÙàjXÐ|®7q~P*Îè\©êJfÙ'@n·6Íéx\h~}g(
_$÷w_§nîu]7IE°
`~éùkXyæÇ²èQ(UÌiI(
m°©¦XWYP=§eà·|©&Íùn>Ðf"0k
SÇd8t¾pÏ`0ÿt«I]ÚÝÙNør0§n*×@8÷¦¹Ç9Ó&ya`0qºéu¶^Ã÷÷æ
¦I*Êlq ]=xclHbz^*q×7¡¹i¾ÕÉTÅIÿ( j÷\iä)ù
"Ø:d®fØ~Ík¤7`ÇÔõuEP¤Ô
0j{×öRú¤0Nª¥ÀÝf~XIZ emÆP0à
+hJ¨0¦XÖ§Ëf4VA÷¤W#0\jt'Gÿ[Щ¨xV¤NW¦Ò |· ¯
5ú J
®úª«§1«Âдp«¸Jºj¼º;irÀ¬
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]