braft试用

2020年3月22日 发表评论 阅读评论 996 次浏览

raft是一个分布式一致性复制协议算法,其基本功能就是可以实现在多个进程之间对某个(某些)值达成强一致性,前面文章介绍的Zookeeper和Etcd就利用了raft(以及类似协议zab、paxos等)。而braft是百度实现的基于brpc的raft协议工业级C++实现,抛开各种理论说明不谈,只需知道利用braft可以帮助解决分布式系统中的数据一致性以及延伸问题,比如:
1,分布式锁:锁信息的一致性
2,分布式存储:存储数据的一致性
3,主备高可用:元数据的一致性
等等。

除了braft,自然还有很多其他的raft的实现,比如SOFAJRaft等,具体见备注。下面就主要试用一下braft。

一,测试环境
$ cat /etc/issue
Ubuntu 18.04.3 LTS \n \l
$ uname -a
Linux lenky-virtual-machine 5.0.0-27-generic #28~18.04.1-Ubuntu SMP Thu Aug 22 03:00:32 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

二,准备依赖环境
依赖brpc,见:lenky.info/?p=2718

三,编译
$ tar xf braft-1.1.0.tar.gz
$ cd braft-1.1.0/
$ mkdir bld
$ cd bld/
$ #先把brpc的两个路径export到cmake的查找路径里,否则cmake会报错找不到brpc
$ export CMAKE_INCLUDE_PATH=/home/lenky/brpc/incubator-brpc-0.9.7-rc03/output/include
$ export CMAKE_LIBRARY_PATH=/home/lenky/brpc/incubator-brpc-0.9.7-rc03/output/lib
$ cmake ..
$ make
不出意外,就能成功编译出libbraft.so、libbraft.a、braft_cli在output目录下。

四,编译运行示例程序
帮助:https://github.com/baidu/braft/tree/master/example
示例有三个,试试Counter吧。
$ cd example/counter/
$ cmake .
$ make

先执行Server:
$ bash run_server.sh –server_num=5
通过 sudo netstat -nap | grep counter 可以看到默认启了5个监听服务端进程。

再执行Client:
$ bash run_client.sh –thread_num=1 –log_each_request=true

就可以看到请求的每一次返回值(value)会增1,因为这个示例程序的逻辑就是客户端的每一次请求就让服务端的数据自增1(可以通过参数修改自增几),同时这个数据会被自动同步到各个服务端进程,实现数据一致性。
比如在kill掉客户端请求的服务端Leader进程(比如127.0.1.1:8100:0)之后,客户端的请求会被自动转到新的Leader进程(比如127.0.1.1:8101:0),此时返回的value数据仍然是在之前的数据上自增1(并不是从初始值0开始),这说明服务端127.0.1.1:8100:0和127.0.1.1:8101:0的数据是高度一致的。
因此,如果这几个服务端进程是热备业务进程,数据是业务数据,然后当其中一个挂掉后,也不会影响到业务的正常运行,因为他们的业务数据是高度一致的,并不会因为某个服务进程挂掉导致数据不可用的情况。

备注:
1,https://github.com/baidu/braft
2,https://github.com/sofastack/sofa-jraft
3,https://github.com/lni/dragonboat/

转载请保留地址:http://www.lenky.info/archives/2020/03/2740http://lenky.info/?p=2740


备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.