服务发现与负载均衡 dubbo zk原理
服务发现与负载均衡
拓展阅读 : dubbo 原理概念图
内容整理自文章“实施微服务,我们需要哪些基础框架”
作者杨波
微服务架构是由一系列职责单一的细粒度服务构成的分布式网状结构,服务之间通过轻量机制进行通信
这时候必然引入一个服务注册发现问题,服务提供方要注册通告服务地址,服务的调用方要能发现目标服务,同时服务提供方一般以集群方式提供服务,也就引入了负载均衡和健康检查问题
根据负载均衡LB所在位置的不同,目前主要的服务注册发现和负载均衡方案有三种
01
集中式LB
在服务消费者和服务提供者之间有一个独立的LB,通常是专门的硬件设备如 F5,或者基于软件如 LVS,HAproxy等实现
LB上有所有服务的地址映射表,通常由运维配置注册,当服务消费方调用某个目标服务时,它向LB发起请求,由LB以某种策略(比如Round-Robin)做负载均衡后将请求转发到目标服务
LB一般具备健康检查能力,能自动摘除不健康的服务实例
服务消费方如何发现LB呢?
通常的做法是通过DNS,运维人员为服务配置一个DNS域名,这个域名指向LB集中式LB方案实现简单,在LB上也容易做集中式的访问控制,这一方案目前还是业界主流
主要问题:
(1)单点问题,所有服务调用流量都经过LB,当服务数量和调用量大的时候,LB容易成为瓶颈,且一旦LB发生故障,影响整个系统
(2)服务消费方、提供方之间增加了一级,有一定性能开销
02
进程内LB
针对上个方案的不足,此方案将LB的功能集成到服务消费方进程里,也被称为软负载(Soft Load Balancing)或者客户端负载方案
这一方案需要一个服务注册表配合支持服务自注册和自发现
服务提供方启动时,首先将服务地址注册到服务注册表,同时定期报心跳到服务注册表以表明服务的存活状态,相当于健康检查,服务消费方要访问某个服务时,它通过内置的LB组件向服务注册表查询(同时缓存并定期刷新)目标服务地址列表,然后以某种负载均衡策略选择一个目标服务地址,最后向目标服务发起请求
这一方案对服务注册表的可用性要求很高,一般采用能满足高可用分布式一致的组件(例如Zookeeper、Consul、Etcd等)来实现。
LB和服务发现能力被分散到每一个服务消费者的进程内部,同时服务消费方和服务提供方之间是直接调用,没有额外开销,性能比较好
但是,该方案以客户库的方式集成到服务调用方进程里头,如果企业内有多种不同的语言栈,就要配合开发多种不同的客户端, 有一定的研发和维护成本
另外生产环境中,后续如果要对客户库进行升级,势必要求服务调用方修改代码并重新发布,所以升级较复杂
案例是Netflix的开源服务框架,对应的组件分别是:Eureka 服务注册表,Karyon服务端框架支持服务自注册和健康检查,Ribbon客户端框架支持服务自发现和软路由
另外,阿里开源的服务框架 Dubbo 也是采用类似机制
03
独立 LB 进程
该方案是针对第二种方案的不足而提出的一种折中方案,原理和第二种方案基本类似
不同之处是,他将LB和服务发现功能从进程内移出来,变成主机上的一个独立进程,主机上的一个或者多个服务要访问目标服务时,他们都通过同一主机上的独立LB进程做服务发现和负载均衡
该方案也是一种分布式方案,没有单点问题,一个LB进程挂了只影响该主机上的服务调用方,服务调用方和LB之间是进程内调用,性能好,同时该方案还简化了服务调用方,不需要为不同语言开发客户库,LB的升级不需要服务调用方改代码
不足是部署较复杂,环节多,出错调试排查问题不方便
典型案例是Airbnb的SmartStack服务发现框架,对应组件分别是:Zookeeper 作为服务注册表,Nerve 独立进程负责服务注册和健康检查,Synapse/HAproxy 独立进程负责服务发现和负载均衡
点击 阅读原文 查看 文章列表
投诉
该文章作者已设置需关注才可以留言
写留言
写留言
了解留言功能详情
服务发现与负载均衡 dubbo zk原理相关推荐
- Docker Swarm服务发现和负载均衡原理
Docker Swarm服务发现和负载均衡原理 Docker使用的是Linux内核iptables和IPVS的功能来实现服务发现和负载均衡.Iptables是Linux内核中可用的包过滤技术,可根据数 ...
- Docker Swarm (服务发现和负载均衡原理)
本文将介绍基于 DNS 的负载均衡.基于 VIP 的负载均衡和路由网格(Routing Mesh). 使用的技术 Docker 使用了 Linux 内核 iptables 和 IPVS 的功能来实现服 ...
- 基于consul实现微服务的服务发现和负载均衡
一. 背景 随着2018年年初国务院办公厅联合多个部委共同发布了<国务院办公厅关于促进"互联网+医疗健康"发展的意见(国办发[2018]26号)>,国内医疗IT领域又迎 ...
- 从零开始入门 | Kubernetes 中的服务发现与负载均衡
作者 | 阿里巴巴技术专家 溪恒 一.需求来源 为什么需要服务发现 在 K8s 集群里面会通过 pod 去部署应用,与传统的应用部署不同,传统应用部署在给定的机器上面去部署,我们知道怎么去调用别的机 ...
- Consul + fabio 实现自动服务发现、负载均衡 1
Consul hashicorp团队开发 就是大名鼎鼎开发 vagrant 的团队. Consul 是一个提供服务发现.健康检测.K/V存储支持分布式高可用多数据中心的服务软件. 比较类似ZooKee ...
- 关于服务发现和负载均衡,你想知道的都在这儿
问题缘由 单机时代,传统软件大多是单体/巨石架构(Monolithic).大家往一个代码仓库提交CODE,这会导致应用膨胀,难以理解和修改,以及扩展受限,无法按需伸缩等诸多问题.单体架构怎么解决多人合 ...
- 基于go的微服务搭建(七) - 服务发现和负载均衡
第七节: 服务发现和负载均衡 原文地址 转载请注明原文及翻译地址 这篇文章将关注两个微服务架构的重要部分:服务发现和负载均衡.和他们是如何帮助我们2017年经常要求的横向扩展容量的 简介 负载均衡和出 ...
- Consul + fabio 实现自动服务发现、负载均衡 - DockOne.io
Consul + fabio 实现自动服务发现.负载均衡 - DockOne.io Consul + fabio 实现自动服务发现.负载均衡 - DockOne.io http://dockone.i ...
- Marathon 服务发现及负载均衡 marathon-lb
2019独角兽企业重金招聘Python工程师标准>>> Marathon 服务发现及负载均衡 marathon-lb 博客分类: 架构 mesos 1- 简介 从官网摘抄了Mesos ...
最新文章
- 为什么阿里强制 boolean 类型变量不能使用 is 开头?
- JDK13的六大重要新特性
- LeetCode Reverse Vowels of a String
- iOS15实现音乐播放器
- picker封装 uniapp_uniapp自定义picker城市多级联动组件
- linux semaphore,在CentOS 7操作系统上安装Semaphore的方法
- linux android build tools,build.gradle 文件中的 Android SDK Build Tools version
- linux自动化处理excel,将ansible执行结果进行处理,变成excel,ansibleexcel
- 日语等级考试测试网站
- Python使用修饰器强制函数只接收关键参数
- 跪求C-MAPSS下载
- 常用求导公式 高阶导公式 莱布尼兹公式
- Windows 10 (64位)下 VMware 15虚拟机下载及安装教程(内附安装包)
- Cocos2d-x之TileMap
- Could not find a declaration file for module
- 使用计算机求解问题首先要,基于计算机的问题求解,首先要完成的是( )
- UE4之Control Rig
- 羊吃草-区间端点问题
- 工业虚拟仿真软件系统解决方案
- 大工计算机基础在线作业答案,大工11春《计算机化基础》在线作业及答案.doc
热门文章
- linux snmp磁盘io,cacti利用snmpdiskio 监控服务器磁盘
- mysql connect 500_MySQL连接问题【mysql_connect和mysql_pconnect区别】
- python 修改xml_如何在python中更新/修改XML文件?
- linux 的ss看进程号,linux ss命令详解
- cudnn 安装失败_Win10下安装tensorflow环境的一些坑
- 2021年人工神经网络第一次作业:参考答案-1
- 智能车竞赛技术报告 | 双车接力组 - 大连海事大学 - 同舟拾贰队
- 通过CH340G驱动的Nano ATMEAG328P驱动板初步测试
- 看完这些、你能体会到半导体与电路集成的伟大了吗?
- 九种将元器件从PCB上拆焊下的方法