blob: ba950a3da8e54583b274b6cad6d18f2e522ca774 [file] [log] [blame]
Saryu Shahf96ef832019-06-03 16:23:04 +00001
2.. This work is licensed under a Creative Commons Attribution 4.0 International License.
3.. http://creativecommons.org/licenses/by/4.0
4
jhh108dd8f2020-06-12 17:01:24 -05005 .. _feature-pool:
6
Saryu Shahf96ef832019-06-03 16:23:04 +00007****************
8Feature: Pooling
9****************
10
Saryu Shahf96ef832019-06-03 16:23:04 +000011The Pooling feature provides the ability to load-balance work across a pool of active-active Drools-PDP hosts. This particular implementation uses a DMaaP topic for communication between the hosts within the pool.
12
13The pool is adjusted automatically, with no manual intervention when:
14 * a new host is brought online
15 * a host goes offline, whether gracefully or due to a failure in the host or in the network
16
17Assumptions and Limitations
jhh108dd8f2020-06-12 17:01:24 -050018===========================
Saryu Shahf96ef832019-06-03 16:23:04 +000019 * Session persistence is not required
20 * Data may be lost when processing is moved from one host to another
21 * The entire pool may shut down if the inter-host DMaaP topic becomes inaccessible
22
23 .. image:: poolingDesign.png
24
25
26Key Points
jhh108dd8f2020-06-12 17:01:24 -050027==========
Saryu Shahf96ef832019-06-03 16:23:04 +000028 * Requests are received on a common DMaaP topic
29 - DMaaP distributes the requests randomly to the hosts
30 - The request topic should have at least as many partitions as there are hosts
31 * Uses a single, internal DMaaP topic for all inter-host communication
32 * Allocates buckets to each host
33 - Requests are assigned to buckets based on their respective request IDs
34 * No session persistence
35 * No objects copied between hosts
36 * Requires feature(s): distributed-locking
37 * Precludes feature(s): session-persistence, active-standby, state-management
38
39Example Scenario
jhh108dd8f2020-06-12 17:01:24 -050040================
41
Saryu Shahf96ef832019-06-03 16:23:04 +000042 1. Incoming DMaaP message is received on a topic all hosts are listening, but only one random host receives the message
43 2. Decode message to determine request ID key (message-specific operation)
44 3. Hash request ID to determine the bucket number
45 4. Look up host associated with hash bucket (most likely remote)
46 5. Publish forward message to internal DMaaP topic, including remote host, bucket number, DMaaP topic information, and message body
47 6. Remote host verifies ownership of bucket, and routes the DMaaP message to its own rule engine for processing
48
49 The figure below shows several different hosts in a pool. Each host has a copy of the bucket assignments, which specifies which buckets are assigned to which hosts. Incoming requests are mapped to a bucket, and a bucket is mapped to a host, to which the request is routed. The host table includes an entry for each active host in the pool, to which one or more buckets are mapped.
50
51 .. image:: poolingPdps.png
52
53Bucket Reassignment
jhh108dd8f2020-06-12 17:01:24 -050054===================
55
Saryu Shahf96ef832019-06-03 16:23:04 +000056 * When a host goes up or down, buckets are rebalanced
57 * Attempts to maintain an even distribution
58 * Leaves buckets with their current owner, where possible
59 * Takes a few buckets from each host to assign to new hosts
60
61 For example, in the diagram below, the left side shows how 32 buckets might be assigned among four different hosts. When the first host fails, the buckets from host 1 would be reassigned among the remaining hosts, similar to what is shown on the right side of the diagram. Any requests that were being processed by host 1 will be lost and must be restarted. However, the buckets that had already been assigned to the remaining hosts are unchanged, thus requests associated with those buckets are not impacted by the loss of host 1.
62
63 .. image:: poolingBuckets.png
64
65Usage
jhh108dd8f2020-06-12 17:01:24 -050066=====
Saryu Shahf96ef832019-06-03 16:23:04 +000067
68For pooling to be enabled, the distributed-locking feature must be also be enabled.
69
70 .. code-block:: bash
71 :caption: Enable Feature Pooling
72
73 policy stop
74
75 features enable distributed-locking
76 features enable pooling-dmaap
77
78 The configuration is located at:
79
80 * $POLICY_HOME/config/feature-pooling-dmaap.properties
81
82
83 .. code-block:: bash
84 :caption: Start the PDP-D using pooling
85
86 policy start
87
88
89 .. code-block:: bash
90 :caption: Disable the pooling feature
91
92 policy stop
93 features disable pooling-dmaap
94 policy start
95
96
97End of Document
98
99.. SSNote: Wiki page ref. https://wiki.onap.org/display/DW/Feature+Pooling
100
101