Skip to content

Commit 8fe4ce7

Browse files
Add docs for Zookeeper Data Store.
1 parent fc7e155 commit 8fe4ce7

File tree

1 file changed

+41
-2
lines changed

1 file changed

+41
-2
lines changed

components/lock.rst

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ Store Scope Blocking Expiring
175175
:ref:`MemcachedStore <lock-store-memcached>` remote no yes
176176
:ref:`RedisStore <lock-store-redis>` remote no yes
177177
:ref:`SemaphoreStore <lock-store-semaphore>` local yes no
178+
:ref:`ZookeeperStore <lock-store-zookeeper>` remote no no
178179
============================================ ====== ======== ========
179180

180181
.. _lock-store-flock:
@@ -281,6 +282,28 @@ the stores.
281282
working when a single server fails (because this strategy requires that the
282283
lock is acquired in more than half of the servers).
283284

285+
.. _lock-store-zookeeper:
286+
287+
ZookeeperStore
288+
~~~~~~~~~~~~~~
289+
290+
The ZookeeperStore saves locks on a Zookeeper server, it requires a Zookeeper
291+
connection implementing the ``\Zookeeper`` class. This store does not
292+
support blocking and expiration but the lock is automatically released when the
293+
PHP process is terminated
294+
295+
use Symfony\Component\Lock\Store\ZookeeperStore;
296+
297+
$zookeeper_server = 'localhost:2181'; // For High Availablity Cluster you can pass 'localhost1:2181,localhost2:2181,localhost3:2181'
298+
$zookeeper = new \Zookeeper($zookeeper_server);
299+
300+
$store = new ZookeeperStore($zookeeper);
301+
302+
.. note::
303+
304+
Zookeeper does not require a TTL as the nodes used for locking are ephemeral and die when the PHP process is terminated.
305+
306+
284307
Reliability
285308
-----------
286309

@@ -290,8 +313,8 @@ the component is used in the following way.
290313
Remote Stores
291314
~~~~~~~~~~~~~
292315

293-
Remote stores (:ref:`MemcachedStore <lock-store-memcached>` and
294-
:ref:`RedisStore <lock-store-redis>`) use an unique token to recognize the true
316+
Remote stores (:ref:`MemcachedStore <lock-store-memcached>`,
317+
:ref:`RedisStore <lock-store-redis>` and :ref:`RedisStore <lock-store-zookeeper>`) use an unique token to recognize the true
295318
owner of the lock. This token is stored in the
296319
:class:`Symfony\\Component\\Lock\\Key` object and is used internally by the
297320
``Lock``, therefore this key must not be shared between processes (session,
@@ -493,6 +516,22 @@ can be two running containers in parallel.
493516
concurrent process on a new machine, check that other process are stopped
494517
on the old one.
495518

519+
ZookeeperStore
520+
~~~~~~~~~~
521+
522+
The way ZookeeperStore works is by maintaining locks in ephemeral nodes within PHP_LOCK_NODE on the server. That means that by using
523+
the :ref:`ZookeeperStore <lock-store-zookeeper>` the locks will be automatically released at the end of the session
524+
in case the client cannot unlock for any reason.
525+
526+
If the Zookeeper service or the machine hosting it restarts, every lock would
527+
be lost without notifying the running processes.
528+
529+
.. tip::
530+
531+
To use Zookeeper's High Availability feature, you can setup a cluster of multiple servers so that in case one of
532+
the server goes down, the majority will still be up and serving the requests. All the available servers in the
533+
cluster will see the same state.
534+
496535
Overall
497536
~~~~~~~
498537

0 commit comments

Comments
 (0)