热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

首次探索Serf:分布式服务协调工具的入门指南

serf是出自Hashicorp的开源项目,实现了去中心化的gossip(八卦)协议,其中gossip协议定义了一种类似病毒感染的消息传播过程。一些著名的开源项目,如Docker和

serf是出自Hashicorp的开源项目, 实现了去中心化的gossip(八卦)协议,其中gossip协议定义了一种类似病毒感染的消息传播过程。 一些著名的开源项目,如Docker和Consul,网络管理和服务发现的核心组件是基于serf实现的。

serf提供了一种轻量级的方式来管理去中心化集群,并基于这个集群提供了UserEvent和Query等接口,处理一些用户层的事件,如服务发现、自动化部署等。

开始serf初体验旅程:

一、在不同的terminal上启动serf agent节点

serf agent -node=node1 -bind=127.0.0.1:5001 -rpc-addr=127.0.0.1:7473
serf agent -node=node2 -bind=127.0.0.1:5002 -rpc-addr=127.0.0.1:7474
serf agent -node=node3 -bind=127.0.0.1:5003 -rpc-addr=127.0.0.1:7475

agent启动时需要指定两个address,bind address和rpc address,分别提供集群间的通信接口和客户端操作集群的接口,serf默认采用UDP来广播gossip消息,因此在实际网络中部署时,需要为Bind Address配置相应的防火墙规则。

重点:

  • bind address: 集群间通信的接口;
  • rpc address: 客户端控制agent的接口。
二、节点之间建立连接,形成去中性化集群。
  • node2 join node1
  • node1 join node3
  • serf join node2-rpc-addr node1-bind-addr
  • serf join node1-rpc-addr node3-bind-addr

serf join -rpc-addr=127.0.0.1:7474 127.0.0.1:5001
serf join -rpc-addr=127.0.0.1:7473 127.0.0.1:5003

三、UserEvent和Query

UserEvent和Query是serf基于去中心化集群提供的高效消息封装。UserEvent是一些单向的不需要集群反馈的消息,而Query是双向的,需要集群给出反馈(QueryResponse)的消息。向集群发送消息可以针对任意节点进行,然后节点间可以互相传播这些消息。

NodeTagEvent HandlerQuery Handler
node1role=apiserverecho node1 >> node1.logecho hello,node1
node2role=uiecho node2 >> node2.logecho hello,node2
node3role=apiserverecho node3 >> node3.logecho hello,node3
为node1,2,3指定不同的Event Handler,并建立节点之间的连接形成集群(node连接参考上述命令)

其中user是UserEvent的name;greet是Query的name。

serf agent -node=node1 -bind=127.0.0.1:5001 -rpc-addr=127.0.0.1:7473 -event-handler=user:log='echo node1 >> node1.log' -event-handler=query:greet='echo hello,node1' -tag role=apiserver
serf agent -node=node2 -bind=127.0.0.1:5002 -rpc-addr=127.0.0.1:7474 -event-handler=user:log='echo node2 >> node2.log' -event-handler=query:greet='echo hello,node2' -tag role=ui
serf agent -node=node3 -bind=127.0.0.1:5003 -rpc-addr=127.0.0.1:7475 -event-handler=user:log='echo node3 >> node3.log' -event-handler=query:greet='echo hello,node3' -tag role=apiserver

以node3为例,结果如下图:

《serf初体验》 serf.png

发送一个log Event,所有节点都会处理该Event,向对应的日志文件中写入一段文本

serf event (-rpc-addr=*) (UserEvent-name) payload

serf event -rpc-addr=127.0.0.1:7473 log payload

向role=ui的节点发送一个Query,agent处理完消息之后将结果传回客户端

serf event (-rpc-addr=*) (—-) (Query-name) payload

serf query -rpc-addr=127.0.0.1:7473 -tag role=ui greet payload

为了保证一般性,这里选择向集群中的node1发送该Query,但通过-tag设置Query实际的处理节点是node2,最终可见返回的结果和日志中只有node2处理了该信息。说明节点之间是可以相互通信的。若不带tag参数,这里所有的节点都将执行greet,并对query进行信息返回。

结果如下图所示:

《serf初体验》 greet.png


推荐阅读
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • HBase运维工具全解析
    本文深入探讨了HBase常用的运维工具,详细介绍了每种工具的功能、使用场景及操作示例。对于HBase的开发人员和运维工程师来说,这些工具是日常管理和故障排查的重要手段。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 对象自省自省在计算机编程领域里,是指在运行时判断一个对象的类型和能力。dir能够返回一个列表,列举了一个对象所拥有的属性和方法。my_list[ ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
author-avatar
海木木
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有