当前位置: 首页 > news >正文

网站建设公司下载手机网站模板网

网站建设公司下载,手机网站模板网,电子商务网站模板,沈阳网站哪家公司做的好怎样使用Zookeeper实现服务发现#xff1f; 典型回答 服务发现是ZK的重要用途之一#xff0c;当我们想要基于zk实现服务发现时#xff0c;一般可以参考以下步骤#xff1a;1. 向Zookeeper注册服务 服务提供者需要在Zookeeper上创建一个临时节点来注册自己的服务。节点的名…怎样使用Zookeeper实现服务发现 典型回答 服务发现是ZK的重要用途之一当我们想要基于zk实现服务发现时一般可以参考以下步骤1. 向Zookeeper注册服务 服务提供者需要在Zookeeper上创建一个临时节点来注册自己的服务。节点的名称通常是服务名称和版本号等信息的组合节点的数据可以包含服务的地址、端口、协议等信息。因为是临时节点所以当服务提供者关闭或崩溃时该节点将自动从Zookeeper中删除。2. 客户端订阅服务 服务消费者需要在Zookeeper上订阅自己所需的服务。它可以监听服务节点的变化一旦节点发生变化就会接收到通知。服务消费者可以根据需要选择自己感兴趣的服务节点。 服务消费者还可以通过Zookeeper提供的API获取当前可用的服务列表。它可以从服务节点的子节点中获取服务的地址和端口等信息然后根据自己的业务逻辑选择一个合适的服务节点。还可以在服务节点上设置监听器一旦节点发生变化就会收到通知。这样可以保证服务消费者随时获取到最新的服务列表。扩展知识Zookeeper和Nacos、Eureka、Consul区别 我们知道服务发现有很多框架比如Nacos、Eureka、Consul等那这些工具和Zookeeper有什么不同呢已经有了ZK为什么还需要这些工具呢虽然Zookeeper也可以用于实现服务发现但是它并不是专门为服务发现而设计的因此在某些场景下可能存在一些不足 首先Zookeeper的配置和使用相对较为复杂需要熟悉它的底层原理和API对于开发人员和运维人员都有一定的学习成本。第二Zookeeper主要是用于分布式协调和同步对于高频率的服务注册和查询请求其性能可能会受到影响。第三Zookeeper虽然支持服务注册和发现但在某些方面可能不够灵活比如对于服务的多种状态、元数据等的管理可能不够完善。 而Nacos、Eureka和Consul等专门的服务注册中心和发现组件可以在做到简单易用并且高性能的基础上还能提供一些特色的功能比如健康检查、负载均衡、流量控制等等。 为什么 RocketMQ 不使用 Zookeeper 作为注册中心呢 Kafka 我们都知道采用 Zookeeper 作为注册中心——当然也开始逐渐去 ZookeeperRocketMQ 不使用 Zookeeper 其实主要可能从这几方面来考虑 基于可用性的考虑根据 CAP 理论同时最多只能满足两个点而 Zookeeper 满足的是 CP也就是说 Zookeeper 并不能保证服务的可用性Zookeeper 在进行选举的时候整个选举的时间太长期间整个集群都处于不可用的状态而这对于一个注册中心来说肯定是不能接受的作为服务发现来说就应该是为可用性而设计。基于性能的考虑NameServer 本身的实现非常轻量而且可以通过增加机器的方式水平扩展增加集群的抗压能力而 Zookeeper 的写是不可扩展的Zookeeper 要解决这个问题只能通过划分领域划分多个 Zookeeper 集群来解决首先操作起来太复杂其次这样还是又违反了 CAP 中的 A 的设计导致服务之间是不连通的。持久化的机制来带的问题ZooKeeper 的 ZAB 协议对每一个写请求会在每个 ZooKeeper 节点上保持写一个事务日志同时再加上定期的将内存数据镜像Snapshot到磁盘来保证数据的一致性和持久性而对于一个简单的服务发现的场景来说这其实没有太大的必要这个实现方案太重了。而且本身存储的数据应该是高度定制化的。消息发送应该弱依赖注册中心而 RocketMQ 的设计理念也正是基于此生产者在第一次发送消息的时候从 NameServer 获取到 Broker 地址后缓存到本地如果 NameServer 整个集群不可用短时间内对于生产者和消费者并不会产生太大影响。 如何用Zookeeper实现分布式锁 基于zookeeper临时有序节点可以实现的分布式锁。 大致思想即为每个客户端对某个方法加锁时在zookeeper上的与该方法对应的指定节点的目录下生成一个唯一的临时有序节点。 判断是否获取锁的方式很简单只需要判断有序节点中序号最小的一个。 当释放锁的时候只需将这个临时节点删除即可。同时其可以避免服务宕机导致的锁无法释放而产生的死锁问题。   来看下Zookeeper能不能解决以下问题。 ●锁无法释放使用Zookeeper可以有效的解决锁无法释放的问题因为在创建锁的时候客户端会在ZK中创建一个临时节点一旦客户端获取到锁之后突然挂掉Session连接断开那么这个临时节点就会自动删除掉。其他客户端就可以再次获得锁。 ●非阻塞锁使用Zookeeper可以实现阻塞的锁客户端可以通过在ZK中创建顺序节点并且在节点上绑定监听器一旦节点有变化Zookeeper会通知客户端客户端可以检查自己创建的节点是不是当前所有节点中序号最小的如果是那么自己就获取到锁便可以执行业务逻辑了。 ●不可重入使用Zookeeper也可以有效的解决不可重入的问题客户端在创建节点的时候把当前客户端的主机信息和线程信息直接写入到节点中下次想要获取锁的时候和当前最小的节点中的数据比对一下就可以了。如果和自己的信息一样那么自己直接获取到锁如果不一样就再创建一个临时的顺序节点参与排队。 ●单点问题使用Zookeeper可以有效的解决单点问题ZK是集群部署的只要集群中有半数以上的机器存活就可以对外提供服务。 锁无法释放临时节点 客户端断开 会自动删除、非阻塞锁临时有序节点绑定监听器节点有变化就会通知客户端客户端检查自己的节点是不是当前节点序号最小的如果是就可以获取到锁执行业务逻辑、不可重入客户端的主机信息和线程信息写入节点下次获取可以进行对比、单点问题集群 使用ZK实现的分布式锁好像完全符合了我们对一个分布式锁的所有期望。但是其实并不是Zookeeper实现的分布式锁其实存在一个缺点那就是性能上可能并没有缓存服务那么高。因为每次在创建锁和释放锁的过程中都要动态创建、销毁瞬时节点来实现锁功能。ZK中创建和删除节点只能通过Leader服务器来执行然后将数据同步到所有的Follower机器上。 其实使用Zookeeper也有可能带来并发问题只是并不常见而已。考虑这样的情况由于网络抖动客户端和ZK集群的session连接断了那么zk以为客户端挂了就会删除临时节点这时候其他客户端就可以获取到分布式锁了。就可能产生并发问题。这个问题不常见是因为zk有重试机制一旦zk集群检测不到客户端的心跳就会重试Curator客户端支持多种重试策略。多次重试之后还不行的话才会删除临时节点。所以选择一个合适的重试策略也比较重要要在锁的粒度和并发之间找一个平衡。 使用zookeeper实现分布式锁的优缺点 使用Zookeeper实现分布式锁的优点 有效的解决单点问题不可重入问题非阻塞问题以及锁无法释放的问题。实现起来较为简单。 使用Zookeeper实现分布式锁的缺点 性能上不如使用缓存实现分布式锁。 需要对ZK的原理有所了解。 Zookeeper是CP的还是AP的 CP Zookeeper是一个CP的分布式系统。所以他会牺牲可用性也就是在极端环境下ZooKeeper可能会丢弃一些请求消费者程序需要重新请求才能获得结果。 如果 ZooKeeper下所有节点都断开了或者集群中出现了网络分割的故障(注由于交换机故障导致交换机底下的子网间不能互访);那么ZooKeeper 会将它们都从自己管理范围中剔除出去外界就不能访问到这些节点了即便这些节点本身是“健康”的可以正常提供服务的;所以导致到达这些节点的服务请求被丢失了 Zookeeper是保证的顺序一致性也就是说ZooKeeper不保证在每个时间点两个不同的客户端将具有相同的ZooKeeper数据视图。但是他能保证我们在每个节点上读取到的一定是他最后一次更新的内容。 具体的案例就是当Zookeeper在进行数据同步的过程中如果半数节点同步成功它就提交当前事务但此时集群内还有可能有节点没有同步到数据如果此时读请求发送到没有同步到数据的节点那么就会读到旧的数据。 但是Zookeeper是会保证这个节点最终也会按照顺序执行成功的。 Zookeeper是如何保证创建的节点是唯一的 典型回答 Zookeeper通过两个手段来保证节点创建的唯一性 1、所有的写请求都会由Leader进行即使是请求到Follower节点也会被转发到Leader节点上执行。 2、在Leader上写入数据的时候通过加锁(synchronized)和CASConcurrentHashMap操作保证了并发情况下之后一个线程可以添加成功。 先是通过synchronized锁将父节点锁住然后再在锁里面判断是否已经存在节点如果已存在直接抛异常如果不存在则向维护了节点的map——NodeHashMap中添加当前节点。 在 Zookeeper 中节点也称为 ZNode是分层结构的可以有父节点和子节点。Zookeeper 的节点结构类似于文件系统中的目录结构。 父节点和子节点的概念 父节点是一个节点的上一级节点。每个节点除根节点都有一个唯一的父节点。父节点可以包含多个子节点。子节点是一个节点的下一级节点。子节点可以是叶子节点没有进一步的子节点也可以是非叶子节点可以有自己的子节点。每个子节点有唯一的父节点。 Zookeeper是选举机制是怎样的 典型回答 ZooKeeper的选举机制是其实现分布式协调一致性的核心部分它确保在ZooKeeper集群中选择一个Leader节点来协调和处理客户端请求。 一次完整的选举大概要经历以下几个步骤初始化阶段 在一个ZooKeeper集群中每个Follower节点都可以成为Leader。初始状态下所有Follower节点都是处于LOOKING状态即寻找Leader。每个节点都会监视集群中的其他节点以侦听Leader选举消息。提名和投票 当一个节点启动时它会向其他节点发送投票请求称为提名。节点收到提名后可以选择投票支持这个提名节点也可以不投票。每个节点只能在一个选举周期内投出一票。在提名过程中所有的投票者都遵守一个原则那就是遇强投强。 怎么算强 在Zookeeper中通过数据是否足够新来判断这个节点是不是够强。在 Zookeeper 中以事务idzxid来标识数据的新旧程度节点的zxid越大代表这个节点的数据越新也就代表这个节点能力越强。那么在投票过程中节点首先会认为自己是最强的所以他会在投票时先投自己一票然后把自己的投票信息广播出去这里面包含了zxid和sidzxid就是自己的事务IDsid就是标识出自己是谁的唯一标识。 这样集群中的节点们就会不断受到别人发过来的投票结果然后这个节点就会拿别人的zxid和自己的zxid进行比较如果别人的zxid更大 说明他的数据更新那么就会重新投票把zxid和sid都换成别人的信息再发出去。 选举过程 选举过程分为多个轮次每个轮次被称为一个选举周期。在每个选举周期中节点根据投票数来选择新的Leader候选者。如果一个候选者获得了大多数节点超过半数的投票那么它就会成为新的Leader。否则没有候选者能够获得足够的投票那么这个选举周期失败所有节点会继续下一个选举周期。 Leader确认 一旦一个候选者获得了大多数节点的投票它就会成为新的Leader。这个Leader会向其他节点发送Leader就绪消息告知它们自己已经成为Leader并且开始处理客户端的请求。 集群同步 一旦新的Leader选举完成其他节点会与新Leader同步数据确保所有节点在一个一致的状态下运行。这个同步过程也包括了未完成的客户端请求以保证数据的一致性。 Zookeeper的watch机制是如何工作的 典型回答 在Zookeeper中watch机制是一种非常重要的特性它能够让应用程序监听Zookeeper上节点的变化从而及时做出响应 Zookeeper的watch机制实现中涉及到多个概念首先是客户端和服务端这个好理解Zookeeper的集群就是服务端调用ZK服务的机器就是客户端。 还有两个模块分别叫做WatchManager和ZkWatcherManager。 WatchManager是Zookeeper服务端内部的一个模块用于管理所有watcher的相关操作包括watcher的注册、注销、触发等。 而ZkWatcherManager是Zookeeper客户端中的一个模块用于管理客户端中watcher的相关操作包括创建watcher、注册watcher、处理watcher事件等。 了解了这几个概念之后再来说一下ZK的watch机制是如何工作的1. 客户端连接到Zookeeper服务端客户端创建一个ZkWatcherManager实例用于管理客户端中所有的watcher。 2. 当客户端想要监控某个znode节点时它可以调用ZkWatcherManager中的方法创建watcher并将其注册到客户端中。客户端将watcher的信息发送到Zookeeper服务端。 3. Zookeeper服务端接收到客户端发送的watcher信息后会将该watcher信息交给WatchManager处理。WatchManager会将该watcher注册到相应的znode节点上并将watcher相关的信息保存在内存中。 4. 当znode节点发生变化时WatchManager会通知Zookeeper Server 5. Zookeeper Server会根据变化类型通知相应的客户端告知它们发生了哪些变化。 6. 当客户端接收到Zookeeper Server的通知后ZkWatcherManager会根据watcher的类型data watcher或child watcher来触发相应的事件处理方法例如data watcher会触发processDataChanged()方法child watcher会触发processChildChanged()方法等。   Zookeeper集群中的角色有哪些有什么区别 ZK中主要有以下角色 **领导者leader**负责进行投票的发起和决议更新系统状态。为客户端提供读和写服务。 **跟随者follower**用于接受客户端请求并响应客户端返回结果在选主过程中参与投票。为客户端提供读服务。 **观察者observer**可以接受客户端连接将写请求转发给leader但observer不参加投票过程只同步leader的状态observer的目的是为了扩展系统提高读取速度。 **客户端client**请求发起方 Zookeeper的自动恢复机制 当 ZooKeeper 集群中出现脑裂问题时ZooKeeper 会自动检测到这种情况并尝试进行自动恢复。那么过程是怎么样的呢 识别集群分裂 当 ZooKeeper 集群中的某些节点与其他节点失去了联系无法互相通信时就会形成网络分区导致集群分裂。这时候ZooKeeper就会发现集群分裂会尝试解决这个问题。 选举新的主节点 在 ZooKeeper 集群中所有的节点都有可能成为主节点当旧的主节点无法与其他节点通信时集群将选举一个新的主节点。在选举过程中各个节点会向其他节点发送信息包括选票和心跳包。如果有足够多的节点认为某个节点是主节点该节点就会成为主节点。 数据同步 在选举新的主节点后集群中的所有节点将尝试同步数据。ZooKeeper使用“原子广播”机制确保数据在所有节点上是一致的。新的主节点将在其他节点上复制所有最新的数据并在后续的操作中与其他节点同步。 恢复正常状态 一旦集群恢复到正常状态ZooKeeper将更新集群状态并将最新的状态同步给所有节点。此时集群中只有一个主节点并且所有节点都具有相同的数据从而保证了集群的一致性。 Tomcat处理请求的过程是怎么样的 典型回答 Tomcat是一个基于Servlet规范实现的Java Web容器所以在接收并处理请求的过程中Servlet是必不可少的。 主要大致流程可以分为以下几步1、接收请求 2、请求解析 3、Servlet查找 4、Servlet请求处理 5、请求返回 接收请求Tomcat通过连接器监听指定的端口和协议接收来自客户端的HTTP请求 请求解析接收到请求之后Tomcat首先会解析请求信息包括请求方法、URL、请求头参数等 Servlet查找根据解析出来的URL找到对应的Servlet并把请求交给他进行处理 Servlet处理这个过程就把请求交给Servlet进行处理主要是执行其中的service方法进行请求处理 请求返回在Servlet处理结束后把请求的响应在发送给客户端 过滤器和拦截器的区别是什么 一般这个问题主要是因为在SpringMVC的应用中过滤器和拦截器都是用来对请求进行预处理、过滤、拦截的所以经常会放在一起比较。不过他们其实还有一些区别的。 他们的主要区别在于作用和生效的位置不同 过滤器是在请求进入Servlet容器之前拦截请求并对请求进行处理而拦截器是在请求进入Servlet容器之后但在进入Controller之前拦截请求并对请求进行处理也可以在响应返回客户端之前拦截响应并对响应进行处理。 在Tomcat中一次请求会先进入到Tomcat容器然后经过Filter的处理处理通过之后才会进入到Servlet容器进入到Servlet容器之后才会在Servlet执行的前后执行Intercepter。 过滤器在请求进入Servlet容器之前拦截请求并对请求进行处理比如对请求进行安全验证、日志记录等之后将请求转发给对应的Servlet进行处理。过滤器是基于Java Servlet规范实现的可以通过配置web.xml文件进行实现。 拦截器是在请求进入Servlet容器之后拦截请求并对请求进行处理也可以在响应返回客户端之前拦截响应并对响应进行处理。拦截器可以对请求进行更加精细的控制例如进行AOP、权限控制、事务管理等操作。拦截器是基于Spring框架实现的可以通过定义拦截器类实现。 Tomcat的类加载机制是怎么样的 Tomcat的类加载机制在默认情况下是先把当前要加载的类委托给BootstrapClassLoader尝试加载为了避免JRE中的核心类被我们应用自己给覆盖如String等Bootstrap如果无法加载那么就由WebAppClassLoader尝试加载如果无法加载那么再委托通过双亲委派的方式向上委派给Common、System等类加载进行加载即顺序为Bootstrap-WebApp-System-Common 上面的是默认情况tomcat中有一个配置**delegate**他的默认值是false如果设置成true了那么他就会严格遵守双亲委派按照Bootstrap-System-Common-WebApp的顺序进行加载。
http://www.hkea.cn/news/14529186/

相关文章:

  • 建设中学校园网站的目的宝塔怎么做两个网站的解析
  • 一个购物网站开发语言网站建设php的心得和体会
  • 响应式网站建设新闻wordpress 数据库 缓存6
  • 贵阳建设厅网站网站建设与运营财务预算
  • 陕西电商网站建设WordPress可视化编辑器启动不了
  • 四川个人网站备案成都网站定制中心
  • 建设门户网站 业务模板龙岗门户
  • 浙江交工宏途交通建设有限公司网站个人域名怎么做社交网站
  • 网站开发最重要的技巧商城模板建站
  • 如何在建设银行网站预约纪念币免费软件有哪些
  • 丽水市莲都区建设局网站普宁市建设局网站
  • 报名网站建设费用价格上海网站设计
  • 起域名网站招投标网站开发公司
  • 源码网站免费做胎压的网站
  • 十大免费建站程序wordpress做准的算命网站
  • 在网上怎么做网站短链接生成网址
  • 企业门户网站开发基础建设的网站有哪些内容
  • 网站建设到上线的步骤过程wordpress多站点问题
  • 如何提高网站的曝光率农产品网络营销方案
  • 免费建立个人网站官网网站建设风景课程设计报告
  • 什么网站做装修的seo交流论坛seo顾问
  • 百度注册域名免费建站做网站备案需要多长时间
  • 温州做网站制作哪家好网站优化北京seo
  • 企业微网站案例有广告的网站
  • 做网站图片怎么做计算机网络技专业术网站开发
  • 替别人做网站相应式手机网站建设
  • 怎么在网站中做弹窗广告怎么做盗版网站吗
  • 哪个网站做图书广告好一造和一建哪个难度大
  • 做网站销售 优帮云wordpress touch
  • 吉林有做网站的吗太原微网站建设