1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>The Replication APIs</title>
<link rel="stylesheet" href="gettingStarted.css" type="text/css" />
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
<link rel="start" href="index.html" title="Getting Started with Replicated Berkeley DB Applications" />
<link rel="up" href="introduction.html" title="Chapter 1. Introduction" />
<link rel="prev" href="repadvantage.html" title="Replication Benefits" />
<link rel="next" href="elections.html" title="Holding Elections" />
</head>
<body>
<div xmlns="" class="navheader">
<div class="libver">
<p>Library Version 11.2.5.3</p>
</div>
<table width="100%" summary="Navigation header">
<tr>
<th colspan="3" align="center">The Replication APIs</th>
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="repadvantage.html">Prev</a> </td>
<th width="60%" align="center">Chapter 1. Introduction</th>
<td width="20%" align="right"> <a accesskey="n" href="elections.html">Next</a></td>
</tr>
</table>
<hr />
</div>
<div class="sect1" lang="en" xml:lang="en">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a id="apioverview"></a>The Replication APIs</h2>
</div>
</div>
</div>
<div class="toc">
<dl>
<dt>
<span class="sect2">
<a href="apioverview.html#repframeworkoverview">Replication Manager Overview</a>
</span>
</dt>
<dt>
<span class="sect2">
<a href="apioverview.html#repapioverview">Replication Base API Overview</a>
</span>
</dt>
</dl>
</div>
<p>
There are two ways that you can choose to implement
replication in your transactional application. The first,
and preferred, mechanism is to use the pre-packaged
Replication Manager that comes with the
DB distribution. This framework should be sufficient
for most customers.
</p>
<p>
If for some reason the Replication Manager
does not meet your application's technical requirements,
you will have to use the Replication Base APIs available
through the Berkeley DB library to write your own custom
replication framework.
</p>
<p>
Both of these approaches are described in slightly greater
detail in this section. The bulk of the chapters later in
this book are dedicated to these two replication
implementation mechanisms.
</p>
<div class="sect2" lang="en" xml:lang="en">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a id="repframeworkoverview"></a>Replication Manager Overview</h3>
</div>
</div>
</div>
<p>
DB's pre-packaged Replication Manager exists
as a layer on top of the DB library. The Replication Manager is a
multi-threaded implementation that allows you to easily add
replication to your existing transactional application.
<span>
You access and manage the Replication Manager using methods that are
available off the
<code class="classname">DB_ENV</code>
class.
</span>
</p>
<p>
The Replication Manager:
</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>
Provides a multi-threaded communications layer
using pthreads (on Unix-style systems and
similar derivatives such as Mac OS X), or
Windows threads on Microsoft Windows systems.
</p>
</li>
<li>
<p>
Uses TCP/IP sockets. Network traffic is
handled via threads that handle inbound and
outbound messages. However, each
process uses a single socket
that is shared using <code class="function">select()</code>.
</p>
<p>
Note that for this reason, the Replication Manager is
limited to a maximum of 60 replicas (on
Windows) and approximately 1000 replicas (on
Unix and related systems), depending on how
your system is configured.
</p>
</li>
<li>
<p>
Requires that only one instance of the
environment handle be used.
</p>
</li>
<li>
<p>
Upon application startup, a master can be
selected either manually or via elections.
After startup time, however, during the course of
normal operations it is possible for the
replication group to need to locate a new master (due
to network or other hardware related problems,
for example) and in this scenario elections are
always used to select the new master.
</p>
</li>
</ul>
</div>
<p>
If your application has technical requirements that do
not conform to the implementation provided by the
Replication Manager, you must write implement replication
using the DB Replication Base APIs. See
the next section for introductory details.
</p>
</div>
<div class="sect2" lang="en" xml:lang="en">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a id="repapioverview"></a>Replication Base API Overview</h3>
</div>
</div>
</div>
<p>
The Replication Base API is a series of Berkeley DB library
classes and methods that you can use to build your own
replication infrastructure. You should use the
Base API only if the Replication Manager does not meet your
application's technical requirements.
</p>
<p>
To make use of the Base API, you must write your
own networking code. This frees you from the technical
constraints imposed by the Replication Manager. For example, by
writing your own framework, you can:
</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>
Use a threading package other than
pthreads (Unix) or Windows threads
(Microsoft Windows). This might be interesting
to you if you are using a platform
whose preferred threading package
is something other than (for
example) pthreads, such as is the case for
Sun Microsystem's Solaris operating systems.
</p>
</li>
<li>
<p>
Implement your own sockets. The
Replication Manager uses TCP/IP sockets. While
this should be acceptable for the
majority of applications, sometimes
UDP or even raw sockets might be
desired.
</p>
</li>
</ul>
</div>
<p>
For information on writing a replicated application
using the Berkeley DB Replication Base APIs, see the
<em class="citetitle">Berkeley DB Programmer's Reference Guide</em>.
</p>
</div>
</div>
<div class="navfooter">
<hr />
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left"><a accesskey="p" href="repadvantage.html">Prev</a> </td>
<td width="20%" align="center">
<a accesskey="u" href="introduction.html">Up</a>
</td>
<td width="40%" align="right"> <a accesskey="n" href="elections.html">Next</a></td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Replication Benefits </td>
<td width="20%" align="center">
<a accesskey="h" href="index.html">Home</a>
</td>
<td width="40%" align="right" valign="top"> Holding Elections</td>
</tr>
</table>
</div>
</body>
</html>
|