brpc负载均衡load balance和服务发现name servicing

1.SharedLoadBalancer(load_balancer.h):包含LoadBalancer指针_lb,AddServersInBatch

2.LoadBalancerWithNaming:继承SharedLoadBalancer和NamingServiceWatcher

2.1Init函数:SharedLoadBalancer::Init,new一个load balance对象(服务发现线程,也是操作actions->owner是NamingServiceThread线程对象->watchers->LoadBalanceWithNamingService(继承NamingServiceWatcher和SharedLoadBalancer)->OnAddedServers->AddServersInBatch(LoadBalance对象))

2.2GetNamingServiceThread函数:(details/naming_service_thread.cpp):

2.2.0生成一个naming service对象

const NamingService* source_ns = NamingServiceExtension()->Find(protocol);

2.2.1g_nsthread_map如果没有初始化,则创建一个并且初始化

2.2.2查看当前g_nsthread_map是否创建过service_name和protocol的为hash key的线程,没有创建过new_thread为true,创建一个NamingServiceThread(主要成员变量是actions和_watchers)

2.2.3nsthread->Start(sources_ns->New),bthread_start_urgent创建一个协程RunThis->Run->_ns->RunNamingService,_ns是NamingService的对象(可以看下6和7节)

3.Channel:包含LoadBalancerWithNaming的指针_lb,new LoadBalancerWithNaming,lb->Init

4.RandomizedLoadBalancer:继承LoadBalancer,包含_db_servers

5.NamingService

6.PeriodicNamingService:继承NamingService,方法RunNamingService是一个死循环

 actions->ResetServers(servers);

7.BaiduNamingService:继承PeriodicNamingService,实现GetServers方法

8.NamingServiceThread:(details/naming_service_thread.cpp)

    Actions _actions;
    std::map<NamingServiceWatcher*, const NamingServiceFilter*> _watchers;

主要函数:AddWatcher()

9.Actions:(details/naming_service_thread.cpp)

_owner:存储的是NamingServiceThread对象指针,在NamingServiceThread构造函数设置_actions(this)

NamingServiceThread::Actions::ResetServers函数中:这里面的owner->watcher就是LoadBalancerWithNaming对象,OnAddedServers->AddServersInBatch,OnRemovedServers->RemoveServersInBatch

    {BAIDU_SCOPED_LOCK(_owner->_mutex);_last_servers.swap(_servers);_owner->_last_sockets.swap(_sockets);for (std::map<NamingServiceWatcher*,const NamingServiceFilter*>::iteratorit = _owner->_watchers.begin();it != _owner->_watchers.end(); ++it) {if (!_removed_sockets.empty()) {it->first->OnRemovedServers(removed_ids);}std::vector<ServerId> added_ids;ServerNodeWithId2ServerId(_added_sockets, &added_ids, it->second);if (!_added_sockets.empty()) {it->first->OnAddedServers(added_ids);}}}

10.RandomizedLoadBalancer:继承LoadBalancer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/646450.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

梯度的计算

文章目录 import torch as tc# 以函数f(x) x^2 为例子&#xff0c;求梯度 x1 tc.tensor(1,dtypetc.float64,requires_gradTrue) g1 tc.autograd.grad(x1**2,x1)[0] print(f"The grad of x**2 at {x1} is {g1}")(x1 ** 2).backward() print(f"The grad of x*…

四、MySQL之增删改

一、插入数据 1.1、VALUES的方式添加 使用这种语法一次只能向表中插入一条数据。 1.1.1、为表的所有字段按默认顺序插入数据 INSERT INTO 表名 VALUES (value1,value2,....);// 值列表中需要为表的每一个字段指定值&#xff0c;并且值的顺序必须和数据表中字段定义时的顺序相…

浅谈WPF之UI布局

一个成功的软件&#xff0c;离不开人性化的UI设计&#xff0c;如何抓住用户第一视觉&#xff0c;让用户产生依赖感&#xff0c;合适优雅的布局必不可少。本文以一些简单的小例子&#xff0c;简述WPF中布局 面板 控件的使用&#xff0c;仅供学习分享使用&#xff0c;如有不足之处…

AWS 云监控工具

Amazon Web Services&#xff08;AWS&#xff09;是 Amazon 提供的云计算平台&#xff0c;为企业提供技术服务&#xff0c;包括计算能力、存储和数据库。借助 AWS&#xff0c;企业无需购买、拥有或维护物理数据中心和服务器&#xff0c;而 AWS 的即用即付方法使企业能够避免与 …

vcruntime140.dll找不到的多种解决方法分享,修复vcruntime140.dll文件

当操作电脑软件的过程中弹出一个错误提示“vcruntime140.dll已加载,但找不到入口点”&#xff0c;这通常意味着程序所依赖的vcruntime140.dll文件可能已经丢失、遭到破坏&#xff0c;或者该文件的路径及位置在软件开发时未被正确配置。此外&#xff0c;这种情况还有可能是因为电…

Windows11 Copilot助手开启教程(免费GPT-4)

Windows11上开启Copilot助手教程踩坑指南 Copilot介绍Copilot开启步骤1、更新系统2、更改语言和区域3、下载 ViVeTool 工具4、开启Copilot 使用 Copilot介绍 Windows Copilot 是 Windows 11 中的一个新功能&#xff0c;它可以让你与一个智能助理进行对话&#xff0c;获取信息&…

应用协议漏洞

应用协议漏洞 一、rsync rsync是Linux下一款数据备份工具&#xff0c;支持通过rsync协议、ssh协议进行远程文件传输。其中rsync协议默认监听873端口 1.未授权访问 打开靶场 判断漏洞是否存在 rsync rsync://目标ip:端口读取文件 rsync rsync://47.99.49.128:873/src/tmp/下…

2024年的Rust与Go,你看明白了吗?

Rust和Go哪个更好&#xff1f;你应该为下一个项目选择哪种语言&#xff0c;为什么&#xff1f;两者在性能、简单性、安全性、功能特性、规模化(scale)和并发性等方面如何比较&#xff1f;它们有什么共同点&#xff0c;又有什么根本区别&#xff1f;让我们通过Rust和Go的友好且公…

浏览器打开本地应用和程序制作安装包

1、引言 最近使用python开发一款windows应用&#xff0c;有一个需求是从浏览器打开本地应用。从网上查到可以通过注册表的方法完成需求。所以就需要往注册表写内容。因此应用需要在安装的时候写注册表。 2、安装包制作工具&#xff1a;NSISVNISEdit NSIS可以制作安装包&…

JVM内存问题排查

本文又名《对JVM一窍不通的我快速开始排查应用内存问题》。主要系统性地整理了排查思路&#xff0c;为大家遇到问题时提供全面的排查流程&#xff0c;不至于漏掉某些可能性误入歧途浪费时间。 基本原则 由于本文的定位是Cookbook,基本原则是让整个流程能够系统化规范化的同时将…

Nodejs一键发布脚本

背景 前端项目或者nodejs项目分开发、测试、生产环境&#xff0c;有的没有没有接入 jenkins。每次都需要进行本地打包, 手动压缩上传到服务器目录&#xff0c;ssh 登录服务器后备份旧文件, 手动删除文件再将包解压到指定目录&#xff0c;操作流程比较繁琐&#xff0c;需要提前…

Vue2学习之第六、七章——vue-router与ElementUI组件库

路由 理解&#xff1a; 一个路由&#xff08;route&#xff09;就是一组映射关系&#xff08;key - value&#xff09;&#xff0c;多个路由需要路由器&#xff08;router&#xff09;进行管理。前端路由&#xff1a;key是路径&#xff0c;value是组件。 1.基本使用 安装vue-…

蓝桥杯基础准备2

一、排序库 1.1 数组排序 默认升序。 int[] a {1,2,5,8,3,4,6}; Arrays.sort(a); int len a.length; for(int i 0;i<len;i) {System.out.print(a[i]" "); } 用Lambda实现升序&#xff1a; //自定义排序使用lambda表达式 //一维数组要使用引用数据类型 Int…

李沐《动手学深度学习》深度学习计算

系列文章 李沐《动手学深度学习》预备知识 张量操作及数据处理 李沐《动手学深度学习》预备知识 线性代数及微积分 李沐《动手学深度学习》线性神经网络 线性回归 李沐《动手学深度学习》线性神经网络 softmax回归 李沐《动手学深度学习》多层感知机 模型概念和代码实现 李沐《…

Java设计模式中的代理模式

Java设计模式中的代理模式 代理模式是一种结构型设计模式&#xff0c;它提供了一个代理对象&#xff0c;以控制对其他对象的访问。代理可以充当中介&#xff0c;用于控制对真实对象的访问。 代码举例演示 静态代理&#xff1a; // 接口 interface Subject {void request();…

使用 LinkAi 打造自己的知识库和数字人

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、LinkAi 介绍 二、文档库 2.1 创建知识库 2.2 配置知识库 2.3 Ai配置 2.4 导入文档 2.5 接入微信 三、扩展 四、总结…

结合CSS一些样式属性和属性值进行案例演示

案例演示 图1 1.结构分析 文字部分用<p>标签定义&#xff0c;对于特殊显示的文本&#xff08;如导语、详情&#xff09;等可以用<em>、<strong>等格式化标签来定义&#xff0c;效果图如图2。 图2 2.样式分析 &#xff08;1&#xff09;控制段落文本的字体…

一种改进的小龙虾优化算法大|Crayfish optimization algorithm(COA)|首次公开—原创代码

1、简介 本文介绍一种新的全局优化算法——小龙虾优化算法Crayfish optimization algorithm&#xff08;COA&#xff09;&#xff0c;模拟了小龙虾的避暑行为、竞争行为和觅食行为。该成果于2023年9月最新发表在Artifcial Intelligence Review。 COA的灵感来自小龙虾的避暑、…

Spring Boot更换Spring fox为Springdoc

文章目录 项目场景引入使用打完收工&#xff01; 项目场景 由于项目中使用Spring fox已经不维护更新了&#xff0c;代码扫描&#xff0c;扫出问题&#xff0c;需要将Spring fox更换为Spring Doc。 由于我们封装的框架有个配置需要关掉&#xff0c;否则就会查看相关依赖&#x…

springboot农机电招平台源码和论文

随着农机电招行业的不断发展&#xff0c;农机电招在现实生活中的使用和普及&#xff0c;农机电招行业成为近年内出现的一个新行业&#xff0c;并且能够成为大群众广为认可和接受的行为和选择。设计农机电招平台的目的就是借助计算机让复杂的销售操作变简单&#xff0c;变高效。…