使用c++开发分布式框架实践
目前比较流行的分布式框架有dubbo,springcloud,JMX等,都是java实现的,但是在做c++项目时,也有分布式的需求,这时我们可以基于grpc自己设计一套分布式框架。
整体思路如下:
Consumer服务消费者,Provider服务提供者。Provider的位置对于Consumer来说是透明的,消费者通过grpc远程调用提供者。服务提供者先启动start,然后注册服务。消费订阅服务,如果没有订阅到自己想获得的服务,它会不断的尝试订阅。新的服务注册到注册中心以后,注册中心会将这些服务通过notify到消费者。
整体思路和dubbo类似,不过它是基于gRPC使用c++开发的。gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc,grpc-java,grpc-go. 其中 C 版本支持C,C++,Node.js,Python,Ruby,Objective-C,PHP和C#支持。
那么什么是RPC呢?远程过程调用(Remote Procedure Call ,缩写为RPC)是一个计算机通讯协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,就像调用本地程序一样,无需额外的为这个交互作用编程(无需关注细节)。RPC是一种服务器-客户端模式,经典实现是一个通过 发送请求-接收响应 进行信息交互的系统。
注册中心使用redis实现。redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
那么当有多个provider,不停有消费者调用服务时,就需要有相应的负载均衡策略,而不是把压力都给某个provider。Dubbo内置了4种负载均衡策略,我们都可以参考其思想自己实现:
1.随机负载均衡。随机的选择一个。
2.轮询负载均衡。轮询选择一个。
3.最少活跃调用数,相同活跃数的随机。活跃数指调用前后计数差。使慢的 Provider 收到更少请求,因为越慢的 Provider 的调用前后计数差会越大。
4.一致性哈希负载均衡。相同参数的请求总是落在同一台机器上。
使用c++开发分布式框架实践相关推荐
- 【10.24】Java后端开发SSM框架实践
瑞吉外卖问题记录 使用MyBatisPlus框架实现公共表字段的自动填充功能 创建一个集成MateObjectHandler接口的类,在其中对公共字段进行赋值 使用ThreadLocal属性来保存和获 ...
- 分布式定时任务调度框架实践
个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 分布式任务调度框架几乎是每个大型应用必备的工具,本文介绍了任务调度框架使用的需求背景和痛点,对业界普遍使用的开源分布式任务调度框架的 ...
- 实战技术:分布式定时任务调度框架实践
个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 一.业务背景 1.1 为什么需要使用定时任务调度 (1)时间驱动处理场景:整点发送优惠券,每天更新收益,每天刷新标签数据和人群数据. ...
- 转载CSDN (MVC WebAPI 三层分布式框架开发)
前言:SOA(面向服务的架构)是目前企业应用开发过程中普遍采用的技术,基于MVC WebAPI三层分布式框架开发,以此适用于企业信息系统的业务处理,是本文论述的重点.此外,插件技术的应用,富客户端JQ ...
- 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——3.3 微信开发者中心...
本节书摘来自华章计算机<微信公众平台开发:从零基础到ThinkPHP5高性能框架实践>一书中的第3章,第3.3节,作者 方倍工作室,更多章节内容可以访问云栖社区"华章计算机&qu ...
- 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——1.2 微信公众账号注册...
本节书摘来自华章计算机<微信公众平台开发:从零基础到ThinkPHP5高性能框架实践>一书中的第1章,第1.2节,作者 方倍工作室,更多章节内容可以访问云栖社区"华章计算机&qu ...
- MVC WebAPI 三层分布式框架开发
转载 CSDN (MVC WebAPI 三层分布式框架开发) 转者述:不深不浅,学习直接底部有源码! 前言:SOA(面向服务的架构)是目前企业应用开发过程中普遍采用的技术,基于MVC WebAPI三层 ...
- 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——1.3 微信公众平台的使用...
本节书摘来自华章计算机<微信公众平台开发:从零基础到ThinkPHP5高性能框架实践>一书中的第1章,第1.3节,作者 方倍工作室,更多章节内容可以访问云栖社区"华章计算机&qu ...
- 移动周刊第 182 期:谈 Android 开发技巧、 iOS 系统框架实践
写在前面 移动周刊第 182 期如约而至.如果你有好的文章以及优化建议,请发送邮件至mobilehub@csdn.net,在技术探索的道路上我们共同进步. YouTube 推出 VR 视频和 360 ...
最新文章
- PyTorch LSTM,batch_first=True对初始化h0和c0的影响
- JAVA中方法的类型转换_Java中几种常用数据类型之间转换的方法
- TeeChart经验总结 10.ZoomScroll
- webservice客户端开发
- 【行业进展】哪些公司在搞“新零售”了
- ORACLE8的分区管理
- 人工智能助力生命科学新发展 | 飞桨博士会第十一期
- VTK:Kochanek样条用法实战
- docker logstash_学会这一招,轻松测试 logstash 的配置文件
- 最简单的视音频播放示例6:OpenGL播放YUV420P(通过Texture,使用Shader)
- 国内交通产业进入新纪元 智能加码功不可没
- Log_Analysis_using_OSSEC.md
- R语言学习历程回顾总结
- oracle循环语句小结
- eclipse打开中文文件乱码问题
- struts2漏洞批量检查
- 电子技术基础(三)__电感的感抗_无功功率和电容的容抗_无功功率
- Util: Java生成文件的md5文件方法的代码
- not within a switch statement_【实用教程】Switch无法登录关联任天堂账号怎么办
- 解决The authenticity of host can’t be established ECDSA key fingerprint is SHA256
热门文章
- linux7 epel源,CentOS7安装EPEL源
- Opencv 图像处理-Contours函数提取轮廓及感兴趣区域ROI的必用且实用操作技巧-(涵盖Contours的一切使用基础,附代码段)
- HarmonyOS剪贴板开发代码演示
- 2020年下半年(第58次)全国计算机等级考试(NCRE)深圳考区报考简章
- python easygui安装_python3.7 下easygui 0.98的安装和简单教程
- EPEL到底是什么,为何经常要安装epel-release软件包
- 解决在putty下,vim powerline箭头显示乱码的问题
- Android 获取SIM卡信息
- 卫星图像三维重建技术
- SAP公司间STO里发货单过账后触发的IDoc报错 – Could not find code page for receiving system –