This is an automated email from the ASF dual-hosted git repository.

zhangduo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/master by this push:
     new 91354a0003e HBASE-26489 Update ref guide about the new changes for 
RpcConnectionRegistry (#5744)
91354a0003e is described below

commit 91354a0003e438cca966272c3678d6a5fca03c57
Author: Duo Zhang <zhang...@apache.org>
AuthorDate: Thu Mar 7 17:27:09 2024 +0800

    HBASE-26489 Update ref guide about the new changes for 
RpcConnectionRegistry (#5744)
    
    Signed-off-by: Nick Dimiduk <ndimi...@apache.org>
---
 src/main/asciidoc/_chapters/architecture.adoc | 84 ++++++++++++++++++++++++---
 1 file changed, 77 insertions(+), 7 deletions(-)

diff --git a/src/main/asciidoc/_chapters/architecture.adoc 
b/src/main/asciidoc/_chapters/architecture.adoc
index 12bdc09ac76..3ff09fac63f 100644
--- a/src/main/asciidoc/_chapters/architecture.adoc
+++ b/src/main/asciidoc/_chapters/architecture.adoc
@@ -261,8 +261,10 @@ For region name, we only accept `byte[]` as the parameter 
type and it may be a f
 Information on non-Java clients and custom protocols is covered in 
<<external_apis>>
 
 [[client.masterregistry]]
-
 === Master Registry (new as of 2.3.0)
+Starting from 2.5.0, MasterRegistry is deprecated. It's functionality is 
completely superseded by
+the RpcConnectionRegistry. Please see <<client.rpcconnectionregistry>> for 
more details.
+
 Client internally works with a _connection registry_ to fetch the metadata 
needed by connections.
 This connection registry implementation is responsible for fetching the 
following metadata.
 
@@ -294,25 +296,29 @@ HMasters instead of ZooKeeper ensemble`
 To reduce hot-spotting on a single master, all the masters (active & stand-by) 
expose the needed
 service to fetch the connection metadata. This lets the client connect to any 
master (not just active).
 Both ZooKeeper-based and Master-based connection registry implementations are 
available in 2.3+. For
-2.3 and earlier, the ZooKeeper-based implementation remains the default 
configuration.
-The Master-based implementation becomes the default in 3.0.0.
+2.x and earlier, the ZooKeeper-based implementation remains the default 
configuration. For 3.0.0,
+RpcConnectionRegistry becomes the default configuration, as the alternate to 
MasterRegistry.
 
 Change the connection registry implementation by updating the value configured 
for
 `hbase.client.registry.impl`. To explicitly enable the ZooKeeper-based 
registry, use
 
 [source, xml]
+----
 <property>
     <name>hbase.client.registry.impl</name>
     <value>org.apache.hadoop.hbase.client.ZKConnectionRegistry</value>
- </property>
+</property>
+----
 
 To explicitly enable the Master-based registry, use
 
 [source, xml]
+----
 <property>
     <name>hbase.client.registry.impl</name>
     <value>org.apache.hadoop.hbase.client.MasterRegistry</value>
- </property>
+</property>
+----
 
 ==== MasterRegistry RPC hedging
 
@@ -338,14 +344,78 @@ management.
 For more implementation details, please refer to the 
https://github.com/apache/hbase/tree/master/dev-support/design-docs[design doc] 
and
 https://issues.apache.org/jira/browse/HBASE-18095[HBASE-18095].
 
+[[client.rpcconnectionregistry]]
+=== Rpc Connection Registry (new as of 2.5.0)
+As said in the <<client.masterregistry>> section, there are some disadvantages 
and limitations
+for MasterRegistry, especially that it puts master in the critical path of 
read/write operations.
+In order to address these problems, we introduced a more generic 
RpcConnectionRegistry.
+
+It is also rpc based, like MasterRegistry, with several differences
+
+. Region server also implements the necessary rpc service, so you can config 
any nodes in the cluster
+as bootstrap nodes, not only masters
+. Support refreshing bootstrap nodes, for spreading loads across the nodes in 
the cluster, and also
+remove the dead nodes in bootstrap nodes.
+
+To explicitly enable the Master-based registry, use
+
+[source, xml]
+----
+<property>
+    <name>hbase.client.registry.impl</name>
+    <value>org.apache.hadoop.hbase.client.RpcConnectionRegistry</value>
+</property>
+----
+
+To configure the bootstrap nodes, use
+[source, xml]
+----
+<property>
+    <name>hbase.client.bootstrap.servers</name>
+    <value>server1:16020,server2:16020,server3:16020</value>
+</property>
+----
+
+If not configured, we will fallback to use master addresses as the bootstrap 
nodes.
+
+RpcConnectionRegistry is available in 2.5+, and becomes the default client 
registry implementation in 3.0.0.
+
+==== RpcConnectionRegistry RPC hedging
+Hedged read is still supported, the configuration key is now 
_hbase.client.bootstrap.hedged.fanout_, and
+its default value is still 2.
+
+==== RpcConnectionRegistry bootstrap nodes refreshing
+There are basically two reasons for us to refresh the bootstrap nodes
+
+* Periodically. This is for spreading loads across the nodes in the cluster. 
There are two configurations
+  . _hbase.client.bootstrap.refresh_interval_secs_: the refresh interval in 
seconds, default 300. A value
+  less than or equal to zero means disable refreshing.
+  . _hbase.client.bootstrap.initial_refresh_delay_secs_: the initial refresh 
interval in seconds, the
+  default value is 1/10 of _hbase.client.bootstrap.refresh_interval_secs_. The 
reason why we want to
+  introduce a separated configuration for the delay for first refreshing is 
that, as end users could
+  configure any nodes in a cluster as the initial bootstrap nodes, it is 
possible that different end
+  users will configure the same machine which makes the machine over load. So 
we should have a shorter
+  delay for the initial refresh, to let users quickly switch to the bootstrap 
nodes we want them to
+  connect to.
+* When there is a connection error while requesting the nodes, we will refresh 
immediately, to remove
+the dead nodes. To avoid putting too much pressure to the cluster, there is a 
configuration
+_hbase.client.bootstrap.min_secs_between_refreshes_, to control the minimum 
interval between two
+refreshings. The default value is 60, but notice that, if you change
+_hbase.client.bootstrap.refresh_interval_secs_ to a small value, you need to 
make sure to also change
+_hbase.client.bootstrap.min_secs_between_refreshes_ to a value smaller than
+_hbase.client.bootstrap.refresh_interval_secs_, otherwise an 
IllegalArgumentException will be thrown.
+
+
 '''
-NOTE: (Advanced) In case of any issues with the master based registry, use the 
following
+NOTE: (Advanced) In case of any issues with the rpc/master based registry, use 
the following
 configuration to fallback to the ZooKeeper based connection registry 
implementation.
 [source, xml]
+----
 <property>
     <name>hbase.client.registry.impl</name>
     <value>org.apache.hadoop.hbase.client.ZKConnectionRegistry</value>
- </property>
+</property>
+----
 
 [[client.filter]]
 == Client Request Filters

Reply via email to