博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
etcd代理组件的开发思想
阅读量:6069 次
发布时间:2019-06-20

本文共 762 字,大约阅读时间需要 2 分钟。

最近在一个项目中,需要使用到etcd集群来实现服务发现的功能,目的是统一管理相应的服务资源,同时也可对资源做一定的负载均衡策略。然而,项目中使用的技术栈是C++语言,github上没有合适的C++开源的etcd客户端。于是需要在etcd和应用组件间加上一个etcd的代理层,利用etcd代理来沟通彼此。

etcd代理模块实现的思路:
etcd代理组件作为客户端与etcd集群建立TCP长连接,并通过区分不同的指令来与集群做不同的消息交互(数据形式:cmd+payload)。同时暴露一些接口给应用层调用,发送一些指令到集群,如注册和监听相应的服务信息。当etcd代理接收到etcd集群发送回来的tcp包时,使用回调函数,或C++信号与槽函数的关系来调用应用层的处理接口,从而可更新服务信息。

主要实现的细节和方法:

1、在etcd代理内部维持一个循环,不断等待并处理epoll事件,监听socket消息
2、定时向etcd发送心跳消息,保持socket长连接
3、通信数据格式可采用struct+Json的形式(struct用于传相关头信息及cmd,而json则为具体的数据)
4、etcd代理类采用单例模式,提供统一的对象访问接口(static instance())
5、回调函数的构建有两种方式:
    1.在etcd代理中创建一个接口类,包含相应的回调函数(虚函数),而应用层直接继承该接口类,并实现虚函数即可。etcd代理类内部维护一个接口类的指针。
    2.利用c++中的信号与槽,相应头文件“sigslot.h”,在应用层建立信号与槽函数的关联后,通过发送信号,即可实现对应用层槽函数的调用。

转载于:https://www.cnblogs.com/share-ideas/p/10485628.html

你可能感兴趣的文章
Makefile学习(一)[第二版]
查看>>
unity中的MonoBehaviour.OnMouseDown()
查看>>
编写 Unity Editor 插件
查看>>
Oracle 数据的导入和导出(SID service.msc)
查看>>
如何使用angularjs实现ajax异步请求
查看>>
yii cookie ,session 操作
查看>>
Navicat连接oracle,出现Only compatible with oci version 8.1 and&nb
查看>>
未来是两个人的事
查看>>
联想杨元庆:互联网不包治百病 概念被夸大
查看>>
OpenGLES 怎样在十天内掌握线性代数 - 希望这是真的!
查看>>
centos6.2+nginx-1.2.3+php-5.3.17安装脚本
查看>>
2015搜狐在线笔试题(内存泄露问题)(转)
查看>>
sed用法
查看>>
linux 工具: Top
查看>>
WebKit内核分析之Page
查看>>
c++解释--百度百科
查看>>
Servlet请求参数编码处理(POST & GET)
查看>>
.NET Core RC2发布在即,我们试着用记事本编写一个ASP.NET Core RC2 MVC程序
查看>>
Ubuntu系统启用Apache Mod_rewrite模块
查看>>
再论堆栈 4 -——编程的物质基础!【转】【译】
查看>>