SERF中去中心化系统的原理和实现

本文深入探讨了开源项目SERF的原理和实现,它使用gossip协议构建去中心化集群,被Docker和Consul等项目用于服务发现。文章通过实例介绍了SERF的集群管理、User Event和Query功能,分析了Vivaldi算法、SWIM协议和Lamport Timestamp在分布式系统中的作用,并简要剖析了部分源码。最后,讨论了SERF的集群参数调优和适用场景。
摘要由CSDN通过智能技术生成

杨谕黔,FreeWheel基础架构部高级软件工程师。 目前主要从事服务化框架、容器化平台相关的研发与推广。关注和感兴趣的技术主要有Golang, Docker, Kubernetes等。


serf是出自Hashicorp的开源项目, 实现了去中心化的gossip(八卦)协议,其中gossip协议定义了一种类似病毒感染的消息传播过程。 一些著名的开源项目,如DockerConsul,网络管理和服务发现的核心组件是基于serf实现的,然而它们背后的serf似乎还鲜为人知,一方面其复杂的理论以及不完善的文档让人望而却步;另一方面,gossip协议天然的数据弱一致性也制约了serf的使用场景。


本文希望从serf背后的分布式系统理论和部分源码实现出发,为项目中serf的使用带来一些启发,分为四个部分:

·      serf初体验

·      serf背后的分布式系统理论

·      serf部分源码分析

·      serf集群参数与调优


SERF初体验

serf提供了一种轻量级的方式来管理去中心化集群,并基于这个集群提供了UserEventQuery等接口,处理一些用户层的事件,如服务发现、自动化部署等。本节通过具体的例子,介绍serf中的一些基本特性。

集群管理

基于serf搭建去中心化集群非常简单:在每个节点上启动serf agent,然后通过每个agent上的rpc接口(或使用serf命令行工具),就可以让agent快速建立连接并形成集群。

1.1.1 启动独立的serf agent

1.1.1 中启动了三个独立的serf agent,配置分别为:

Node

Bind Address

RPC Address

node1

127.0.0.1:5001

127.0.0.1:7473

node2

127.0.0.1:5002

127.0.0.1:7474

node3

127.0.0.1:5003

127.0.0.1:7475

顺便提一下,agent启动时需要指定两个addressbind addressrpc address,分别提供集群间的通信接口和客户端操作集群的接口,serf默认采用UDP来广播gossip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值