微服务中的服务注册与发现

传统的项目中,某个服务访问另一个服务,可以通过在配置文件中记录其他服务静态地址的
形式进行访问,通常这个配置文件也很少更新,模式如下图:

而在微服务中,每个功能可能都是一个独立的服务,如果通过传统的方式配置每个应用,配
置文件会变得很复杂多变,所以我们需要服务的注册与发现。

注册与发现的原理
服务的注册与发现是通过服务注册表实现的,应用端(每个服务)通过配置文件像服务注册
表提交自己的注册信息,当服务启动时,服务注册表会检索到该应用,并将该应用的网络地
址添加到表中,同样当服务终止,服务注册表会删除服务的地址。服务注册表是通过心跳机
制实现的。当其他应用访问已注册的服务时,负载均衡会通过服务注册表,实现服务的发
现。

什么是 Zookeeper
Zookeeper 是 Apache 公司为分布式应用设计的协调服务,起初是 Hadoop 的子项目,现在是
一个独立项目。ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和
性能高效、功能稳定的系统提供给用户。

Zookeeper 的特点
Zookeeper 作为服务注册与发现的解决方案,它有如下优点:
1. 它提供的简单 API
2. 支持多语言的客户端
3. 通过 Watcher 机制实现 Push 模型,服务注册信息的变更能够及时通知服务消费方。
Zookeeper 管理服务的方式依赖于之前提到的服务注册表;Zookeeper 相比于其他注册与发现
解决方案,多了角色,Zookeeper 有三个角色:Leader,Follower,Observer。
Zookeeper 中的服务在启动的时候会根据之前的启动状况推选一个 Leader 节点(由于必须推
选出来一个结果,所以 Zookeeper 集群的服务器数量通常是奇数),推选出 Leader 节点后,其
他节点成为 Follower 节点。Leader 节点是 Zookeeper 集群工作的核心,负责进行选举投票的
发起和决议,更新系统状态;Follower 节点是 Zookeeper 集群状态的跟随者,用于接收客户端
的请求并向客户端返回结果,在选举过程中参与投票。
Observer 可以接受客户端连接,将写请求转发给 Leader 节点,但 Observer 不参加投票过程,
只同步 Leader 节点的状态,Observer 的目的是为了扩展系统,提高读取速度。

微服务之服务中心—zookeeper的更多相关文章

  1. 微服务之服务中心—Eureka

    Eureka 简介Eureka 是 Spring Cloud Netflix 的一个子模块,也是核心模块之一,用于云端服务发现,是一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故 ...

  2. Spring cloud(2)B Eureka 注册微服务到服务中心

    1.在provide上添加pom(必须加上web)   如果不加 启动后就会自己关闭 <dependency> <groupId>org.springframework.clo ...

  3. Spring Cloud微服务架构升级总结

    ↵ [编者的话]微服务的概念源于 2014 年 3 月 Martin Fowler 所写的一篇文章“Microservices”.文中内容提到:微服务架构是一种架构模式,它提倡将单一应用程序划分成一组 ...

  4. 使用spring boot和thrift、zookeeper建立微服务

    Spring cloud适应于云端服务,也适用于企业信息化SOA建设.spring boot也是restful微服务开发的利器.但对于内网服务,即服务与服务之间的调用,spring并没有去刻意封装,也 ...

  5. 服务注册中心之ZooKeeper系列(二) 实现一个简单微服务之间调用的例子

    上一篇文章简单介绍了ZooKeeper,讲了分布式中,每个微服务都会部署到多台服务器上,那服务之间的调用是怎么样的呢?如图: 1.集群A中的服务调用者如何发现集群B中的服务提供者呢? 2.集群A中的服 ...

  6. 关于dubbo+zookeeper微服务的一些认识记录

    借鉴架构示意图: 实例介绍: 公司某项目架构 服务器A:nginx 服务器BC:tomcat1.tomcat2 服务器D:Dubbo+zookeeper 服务器EF:db1+zookeeper.db2 ...

  7. 微服务-注册与发现-zookeeper bydasn

    目录 一.微服务注册的概述 二.zookeeper2.1 zookeeper安装启动2.2 zookeeper集群搭建2.3 zkcli操作 一.微服务注册概述 在微服务中,有这么一个东西叫服务注册表 ...

  8. springboot+dubbo+zookeeper微服务实践demo

    微服务化越来越火,实际上是应互联网时代而生的,微服务化带来的不仅是性能上的提升,更带来了研发组织的更加便利,协作更加轻松,团队效能更高. 当然不能为了技术而技术,我们需要切合实际的对业务进行划分,降低 ...

  9. 【12】JMicro微服务-Zookeeper

    如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到11小节 1. CuratorFramework支持 JMicro目前基于Zookeeper实现统 ...

随机推荐

  1. 不能收缩 ID 为 %s 的数据库中 ID 为 %s 的文件,因为它正由其他进程收缩或为空。

    SQLServer数据库通常都不建议进行SHRINKFILE操作,因为SHRINKFILE不当会造成一定的性能问题. 但是当进行了某些操作(例如某个超大的日志类型表转成分区表切换了数据文件),数据库某 ...

  2. centos7中mail实测(qq邮箱)

      一.安装mailx  sendmail 1.1查看是否已经安装       yum install -y  mailx  sendmail 如果已经安装,会提示已经安装,没有安装会自动安装.   ...

  3. Sql Server 获取本周周一

    SELECT DATEADD(Day,(@i+1)-(DATEPART(Weekday,getdate())+@@DATEFIRST-1)%7,getdate())

  4. AnyDesk远程连接及异常处理

    远程协助工具,用得最普遍的非QQ莫属,毕竟用户量在这里摆着的.不过,用户体验效果还不太理想,你懂得.接下来分享两个工具,一个是TeamViewer,另一个是AnyDesk.你更倾向于哪一款呢? 一.T ...

  5. PHP实现表单提交发送邮件

    只需要三个文件就可以了: 注意: 文件自命名需修改表单提交url,包含的类文件名: HTML表单文件: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...

  6. phoenix API服务发布

    概述 Elixir 的 Phoenix 框架对于开发 Web 应用非常方便,不仅有 RoR 的便利,还有 Erlang 的性能和高并发优势. 但是应用的发布涉及到 Erlang 和 Elixir 环境 ...

  7. WINFORM因为 线程崩溃

    1.如果WinForm程序中使用了线程,而线程调用的代码中会抛出异常,该异常没有任何Try块处理.就会导致程序从主线程中跳出,导致WinForm程序突然崩溃性关闭.2.程序读写某些外部资源,比如数据库 ...

  8. mn

    http://image.uczzd.cn/10129986679866437816.jpg?id=0&from=export https://www.cnblogs.com/ityoukno ...

  9. ios兼容 iphoneX ios10 ios11

    假设你有一个固定位置的标题栏,你的iOS10的CSS可能是这样写的: header { position: fixed; top:; left:; right:; height: 44px; padd ...

  10. koa 中间件

    什么是 Koa 的中间件 通俗的讲:中间件就是匹配路由之前或者匹配路由完成做的一系列的操作,我们就可以 把它叫做中间件. 在express中间件(Middleware)是一个函数,它可以访问请求对象( ...