A multi-group service layer for nuraft
Provides a middleware to nuRaft which manages multple NuRaft servers all multiplex'd through a single server instance and cache'd client pairs.
See the Changelog for release information.
The nuraft_mesg::Manager
provides a means to register means to instantiate nuraft::state_manager
s. This is used
whenever a group is directly created (Manager::create_group(...)
) or when the grpc::Service
receives a
RaftMessage
indicating a request to join a group which one does not already belong.
Routing of messages is handled by this library and uses a global
thread pool for nuraft::raft_server
bg threads.
Therefore scaling is only bound by available persistence (for logstores and state snapshots), and network resources.
You must still provide the following:
nuraft::state_machine
: Provides hooks to implementcommit()
,snapshot()
,rollback()
etc.nuraft::log_store
: Logstore (e.g. Jungle or Homestore).nuraft_mesg::mesg_state_mgr
: RAFT state persistence. Loads/Stores state for the state_machine, snapshots etc.
A simple echo server and client can be found in test_package/example_{client,server}.cpp
Currently this project can only be built on Linux using the GCC compiler toolchain. Work is on-going to support other platforms (e.g. MacOS) using the Clang and VSCode toolchains. Please feel free to contribute changes that support this endeavour.
This project depends on the Symbiosis Library which is currently not available in conan-center. If using conan-center one must first export this recipe to their local conan cache, example:
$ git clone https://github.com/eBay/sisl sisl
$ pip install --user conan
$ conan profile detect --name default
$ conan export sisl/ oss/master
This project is typically built from a combination of conan.io and CMake (which must be installed on the host).
$ conan create --build missing . <user>/<channel>
Copyright 2021 eBay Inc.
Primary Author: Brian Szmyd
Primary Developers: Brian Szmyd, Ravi Nagarjun Akella, Harihara Kadayam
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0.
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.