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

这篇具有很好参考价值的文章主要介绍了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*>::iterator
                 it = _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文章来源地址https://www.toymoban.com/news/detail-815123.html

到了这里,关于brpc负载均衡load balance和服务发现name servicing的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springCloudAlibaba组件-Nacos-服务发现与负载均衡(三)

    如果项目使用微服务架构,如果A微服务需要访问B微服务,需要http请求进行调用,当然需要B微服务的地址与端口号,微服务可以向之前提到的服务中心进行获取B服务的ip地址和端口号,这就是服务发现 1.客户端主动获取 客户端: 流程: 1.先是故障转移机制判断是否去本地文

    2024年02月10日
    浏览(41)
  • 传统DNS、负载均衡服务发现框架与专业服务发现框架(Eurek、nacos)分析

    DNS 服务器可以在一定程度上用作服务发现的机制,以下是其冲动服务发现的一些利弊 优势 广泛性 : DNS是互联网的标准协议之一,已经广泛地被支持和使用。因此,使用DNS作为服务发现的机制可以借助现有的网络基础设施,无需引入新的工具。 简单性 : DNS的域名解析机制

    2024年02月12日
    浏览(33)
  • Go gRPC etcd实现服务注册发现与负载均衡

    如果不了解go + grpc 调用方式和实现细节,可以参考上一篇文章 golang grpc配置使用实战教程 技术点 版本 描述 golang 1.19 基础版本 grpc v1.41.0 gRPC golang包 etcd server 3.5.0 注册中心 etcd client v3.5.8 客户端服务发现和负载均衡 服务注册依赖etcd的 key-value操作,key作为gRPC服务唯一标识,

    2024年02月05日
    浏览(55)
  • 【SpringCloud】二、服务注册发现Eureka与负载均衡Ribbon

    服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务) 服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口) 很明显,这是一个相对的概念。 上一篇中,远程调用时,url参数是写死在代码中的,而不同的测试、生产、

    2024年02月06日
    浏览(46)
  • SpringCloud入门Day01-服务注册与发现、服务通信、负载均衡与算法

    伴随互联网的发展,使用互联网的人群越来越多,软件应用的体量越来越大和复杂。 而传统单体应用 可能不足以支撑大数据量以及发哦并发场景 应用的框架也随之进行演变 从最开始的单体应用架构到分布式(SOA)架构到 今天比较火的微服务框架,以及微服务网格架构。 ​

    2024年02月13日
    浏览(40)
  • 如何从eureka-server上进行服务发现,负载均衡远程调用服务

    在spring cloud的maven的pom文件中添加eureka-client的依赖坐标 添加运行服务的名称以及eureka-server的地址 需要在RestTemplate这个Bean添加一个@LoadBalanced注解,实现负载均衡策略 在调用远程服务的方法处自动注入RestTemplate,用远程调用的对象服务名代替服务IP地址以及端口号,比如当前

    2024年02月04日
    浏览(50)
  • 【云原生】k8s Service 实现服务发现和负载均衡

    在容器编排系统中,如 Kubernetes,Pod 是最小的部署单元。而一组 Pod 通常对外提供某种服务。在 Kubernetes 中,Service 就是用来对外暴露一组 Pod 的服务的资源对象。Service 可以通过 IP 地址和端口号访问,从而对外提供服务。 Service 是 Kubernetes 中一个非常重要的概念,它可以将一

    2023年04月16日
    浏览(39)
  • SpringCloud学习笔记(上):服务注册与发现:Eureka、Zookeeper、Consul+负载均衡服务调用:Ribbon

    SpringCloud=分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶。 springboot版本选择: git源码地址:https://github.com/spring-projects/spring-boot/releases/ SpringBoot2.0新特性:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release springcloud版本选

    2024年02月08日
    浏览(43)
  • 【Spring Cloud】深入探索 Nacos 注册中心的原理,服务的注册与发现,服务分层模型,负载均衡策略,微服务的权重设置,环境隔离

    在微服务架构中,服务注册中心是整个体系中的关键组件之一。它负责服务的注册、发现和管理,为微服务之间的通信提供了基础设施。在这方面,Nacos(Namespace Aware Clustered Object Storage)作为一种服务发现和配置管理系统,提供了丰富的功能,旨在简化微服务架构中的服务注

    2024年02月06日
    浏览(168)
  • 【云原生】aws平台使用eks发布load balancer暴露服务到外网

    区域:中国北京区 网络负载均衡: 搭建ingress一定要参考aws官网教程文档:https://docs.amazonaws.cn/eks/latest/userguide/network-load-balancing.html 开启外网在svc 上添加注释:

    2024年02月11日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包