java反射底层原理,java面试基本知识

正文

ZooKeeper 很流行,有个基本的疑问:

  • ZooKeeper 是用来做什么的?
  • 之前没有ZK,为什么会诞生 ZK?

OK,解答一下上面的疑问:(下面是凭直觉说的)

  • ZooKeeper 是用于简化分布式应用开发的,对开发者屏蔽一些分布式应用开发过程中的底层细节
  • ZooKeeper 对外暴露简单的 API,用于支持分布式应用开发
  • ZooKeeper 在提供上述功能的同时,其还是一个 高性能、高可用、高可靠的分布式集群

上面说这么多,总结一下,ZK 能解决分布式应用开发的问题,ZK 能很好的解决问题。到这一步,疑问就更多了:

  1. 分布式应用开发,有哪些常见问题?ZK 是如何屏蔽这些底层细节的?
  2. ZooKeeper 对外暴露了那些 API?这些 API 如何支持分布式应用开发的?这些 API 还能简化吗?API 的语义性怎么样?
  3. ZooKeeper 自身是一个高性能、高可用、高可靠的分布式集群,那有个简单的问题:
  • 高性能是指什么?ZooKeeper 为了达到高性能,做了哪些工作?
  • 高可用同上
  • 高可靠同上

Note:本篇 wiki 就是为了解决上述第一个疑问的。(其他疑问会在其他 blog 中逐步解答)

为什么有 ZooKeeper

一个应用程序,涉及多个进程协作时,业务逻辑代码中混杂有大量复杂的进程协作逻辑。

上述多进程协作逻辑,有 2 个特点:

  • 处理复杂
  • 处理逻辑可重用

因此,考虑将多进程协作的共性问题拎出,作为基础设施,让 RD 更加专注业务逻辑开发,即:

ZooKeeper 就是上述多进程协作基础服务的一种。

ZooKeeper 的特点

ZooKeeper 有几个简单特点:

  • ZooKeeper 的 API:从 文件系统 API 得到的启发,提供简单的 API
  • ZooKeeper 运行在专用服务器上,跟业务逻辑分离,保证了高容错性可扩展性

ZooKeeper 是存储设施,但特别注意

  • ZK上存储的数据聚焦为:协作数据元数据),而不是应用数据,应用数据有自己的存储方案,例如 HDFS 等
  • ZK 本质上,可以看作一种特殊的 FS

特别说明:

应用数据和元数据,由于使用场景不同,对一致性和持久性的要求有差异, 因此,架构设计、数据治理过程中,应将 2 类数据独立看待、独立存储。

ZooKeeper 的使命

ZK 要解决的核心问题:

ZK 目标:简化分布式应用开发中,多进程协作问题。为分布式应用,提供高效可靠的分布式协调服务(基础服务),例如:

  • 统一的命名服务
  • 分布式锁
  • 进程崩溃检测
  • Leader 选举
  • 配置管理:配置变更时,及时下发到各个 Client。

一个简单的问题:多进程的协作是什么?尼玛呀,有完没完,啥问题你都有,面对这个掉咋天的脑壳,还是回答一下。

多进程协作,整体分为 2 类:

  1. 协作:多进程需要一同处理某些事情,一些进程采取行动是的其他进程能够正常工作,例如:主从结构,M 向 S 分配任务,S 才会执行,否则 S 就保持空闲状态
  2. 竞争:两个进程不能同时工作,一个进程必须等待另个进程执行完毕,例如:主从结构,M 节点失效后,很多 S 都想成为 M,这时,就需要互斥锁,只有第一个获得锁的 S 成为 M

特别说明:

  1. 不跨网络协作:多进程,可以在同一台物理主机上,同步原语很方便(比如?管道、共享内存、消息队列、信号量)
  2. 跨网络协作:多进程,分布在不同的物理主机上,ZK 关注这一类

跨网络多进程协作,进程通信,基本思路有 2 个:

  1. 消息机制:通过网络,直接信息交换,多消息传递算法,实现同步原语
  2. 共享存储:利用外部共享存储,实现多进程协作,要求共享存储提供有序访问,ZK 采用这种方式

真实系统中,跨网络通信,有几个共性问题:

  1. 消息延迟:由于网络原因,后发送先到达
  2. 处理器性能:由于系统调度原因,消息到达后,延迟处理
  3. 时钟偏移:不同物理主机,时钟发生偏移

ZK 精心设计用于屏蔽上述 3 个共性问题,使得这些问题在应用服务层面完全透明化。

ZooKeeper 特性

ZooKeeper 解决的本质问题

分布式系统的一致性问题:

  1. 消息传递:延迟性,先发送的消息,不一定先到达;
  2. 消息传递:丢失性,发送的消息,可能丢失;
  3. 节点崩溃:分布式系统内,任何一个节点都可能崩溃;

在这种情况下,如何保证数据的一致性?

  1. 提案投票:基于投票策略,2PC
  2. 选举投票:基于投票策略,投出优先级最高的节点(包含最新数据的节点)

Paxos 目标:解决分布式一致性问题,提高分布式系统容错性的一致性算法。

Paxos 本质:基于消息传递高度容错一致性算法

ZooKeeper 定位

ZooKeeper 是:

  1. 分布式协调服务
  2. 高效、可靠
  3. 方便应用程序,聚焦业务逻辑开发,而不需要过多关注分布式进程间协作细节

ZooKeeper 不直接暴露原语,而是,暴露一部分调用方法组成的 API,类似文件系统的 API,支持应用程序实现自己的原语

ZooKeeper 特性

ZooKeeper 可以保证如下分布式一致性特性:

  • 顺序一致性:同一个 Client 发起的事务请求,严格按照发起顺序执行
  • 原子性:事务请求,要么应用到所有节点,要么一个节点都没有应用
  • 单一视图:Client 无论连接到哪个节点,看到的服务端数据都是一致的(Note:不准确,其实是最终一致性
  • 可靠性:事务一旦执行成功,状态永久保留
  • 实时性:事务一旦执行成功,Client 并不能立即看到最新数据,但 ZooKeeper 保证最终一致性
ZooKeeper 设计目标

ZooKeeper 致力于提供高性能高可用顺序一致性的分布式协调服务,保证数据最终一致性

目标一:高性能(简单的数据模型)
  1. 采用树形结构组织数据节点;
  2. 全量数据节点,都存储在内存中;
  3. Follower 和 Observer 直接处理非事务请求;
目标二:高可用(构建集群)
  1. 半数以上机器存活,服务就能正常运行
  2. 自动进行 Leader 选举
目标三:顺序一致性(事务操作的顺序)
  1. 每个事务请求,都会转发给 Leader 处理
  2. 每个事务,会分配全局唯一的递增id(zxid,64位:epoch + 自增 id)
目标四:最终一致性
  1. 通过提议投票方式,保证事务提交的可靠性
  2. 提议投票方式,只能保证 Client 收到事务提交成功后,半数以上节点能够看到最新数据

ZooKeeper 出现之前

ZK 出现之前,分布式系统常用两种方式,实现多进程协作:

  1. 分布式锁管理器
  2. 分布式数据库

ZK 更专注于进程协作,而不提供任何锁接口和通用的存储数据接口。(疑问:ZK 也可以提供啊,我们不使用就行了)

应用服务器,常见的 2 种需求:

  1. Master-Slave Leader 选举:要求提供Master节点选举功能
  2. 进程响应跟踪 崩溃检测:要求提供进程存活状态的跟踪
  3. 分布式锁:互斥排它锁

ZK 为上述 2 种策略提供了基础 API。

ZooKeeper 不适用的场景:

  1. 海量数据存储:ZK 本质是特殊的 FS,但 ZK 用于存储元数据,需要单独存储应用数据

读者福利

分享一份自己整理好的Java面试手册,还有一些面试题pdf

不要停下自己学习的脚步

字节跳动的面试分享,为了拿下这个offer鬼知道我经历了什么

字节跳动的面试分享,为了拿下这个offer鬼知道我经历了什么

,但 ZK 用于存储元数据,需要单独存储应用数据`

读者福利

分享一份自己整理好的Java面试手册,还有一些面试题pdf

不要停下自己学习的脚步

[外链图片转存中…(img-z1BpEg5j-1709113555834)]

[外链图片转存中…(img-B8wV3Ulz-1709113555834)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

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

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

相关文章

【软件测试】--功能测试4-html介绍

1.1 前端三大核心 html:超文本标记语言&#xff0c;由一套标记标签组成 标签&#xff1a; 单标签&#xff1a;<标签名 /> 双标签:<标签名></标签名> 属性&#xff1a;描述某一特征 示例:<a 属性名"属性值"> 1.2 html骨架标签 <!DOC…

【HarmonyOS】鸿蒙开发之Video组件——第3.7章

Video组件内VideoOptions属性简介 src&#xff1a;设置视频地址。currentProgressRate&#xff1a;设置视频播放倍速&#xff0c;参数说明如下&#xff1a; number|string&#xff1a;只支持 0.75 &#xff0c; 1.0 &#xff0c; 1.25 &#xff0c; 1.75 &#xff0c; 2.0 。P…

ArcgisForJS如何将ArcGIS Server发布的点要素渲染为热力图?

文章目录 0.引言1.ArcGIS创建点要素2.ArcGIS Server发布点要素3.ArcgisForJS将ArcGIS创建的点要素渲染为热力图 0.引言 ArcGIS For JS 是一个强大的地理信息系统&#xff08;GIS&#xff09;工具&#xff0c;它允许开发者使用 JavaScript 语言来创建各种 GIS 应用。ArcGIS Ser…

【Node.js】自动生成 API 文档

目录 1、直接使用swagger-ui-express 2、配合swagger-jsdoc 如何在Node.js项目中使用 Swagger 来自动生成 API接口文档&#xff0c;使用生成方式有很多种。本文基于swagger-jsdocswagger-ui-express快速实现 1、直接使用swagger-ui-express // 方便来浏览和测试api npm i sw…

抖音视频评论批量采集软件|视频数据提取工具

开发背景&#xff1a; 随着抖音视频的流行和使用频率增加&#xff0c;用户对批量采集抖音视频评论的需求逐渐凸显。传统的下载方式效率低下&#xff0c;无法满足快速采集数据的要求。为了解决这一问题&#xff0c;我们开发了一款基于C#的抖音视频评论批量采集软件&#xff0c;旨…

Linux 文件操作

目录 C语言下的文件操作 Linux下的文件操作 文件描述符的前因后果 文件描述符的概念 文件描述符的分配规则 理解C语言的FILE结构体 Linux重定向 文件缓冲区 文件系统 文件系统的概念 ext2文件系统 对ext2的补充 虚拟文件系统的概念 软硬链接 C语言下的文件操作 …

windows安装部署node.js并搭建Vue项目

一、官网下载安装包 官网地址&#xff1a;https://nodejs.org/zh-cn/download/ 二、安装程序 1、安装过程 如果有C/C编程的需求&#xff0c;勾选一下下图所示的部分&#xff0c;没有的话除了选择一下node.js安装路径&#xff0c;直接一路next 2、测试安装是否成功 【winR】…

git忽略某些文件(夹)更改方法

概述 在项目中,常有需要忽略的文件、文件夹提交到代码仓库中,在此做个笔录。 一、在项目根目录内新建文本文件,并重命名为.gitignore,该文件语法如下 # 以#开始的行,被视为注释. # 忽略掉所有文件名是 a.txt的文件. a.txt # 忽略所有生成的 java文件, *.java # a.j…

什么是负载均衡集群?

目录 1、集群是什么&#xff1f; 2、负载均衡集群技术 3、负载均衡集群技术的实现 4、实现效果如图 5、负载均衡分类 6、四层负载均衡&#xff08;基于IP端口的负载均衡&#xff09; 7、七层的负载均衡&#xff08;基于虚拟的URL或主机IP的负载均衡) 8、四层负载与七层…

ETH网络中的账户

ETH网络中的账户 Externally owned accounts (EOA) - 外部账户 由用户控制&#xff0c;我们导入助记词创建的账户就属于此类账户。 Contract accounts (smart contracts) - 合约账户 合约账户由以太坊虚拟机执行的代码控制。它也被称为智能合约。合约帐户有相关的代码和数据存…

护眼台灯哪家的品牌最好?五款品质台灯专业推荐

随着现在越来越多小朋友近视&#xff0c;很多家长都开始十分注重孩子的视力健康。因此护眼台灯就逐渐成为家长帮孩子保护视力的首选。然而&#xff0c;随着受欢迎的程度逐渐提高&#xff0c;市面上也经常会出血一些不专业且品质底下的护眼台灯。这些产品普遍存在“照明不适、耐…

React UI框架Antd 以及 如何按需引入css样式配置(以及过程中各种错误处理方案)

一、react UI框架Antd使用 1.下载模块 npm install antd -S 2.引入antd的样式 import ../node_modules/antd/dist/reset.css; 3.局部使用antd组件 import {Button, Calendar} from antd; import {PieChartTwoTone} from ant-design/icons; {/* 组件汉化配置 */} import l…

Spring Boot到底是如何进行自动配置的?

【1】从 spring.factories 配置文件中加载 EnableAutoConfiguration 自动配置类&#xff09;,获取的自动配 置类如图所示。 【2】若 EnableAutoConfiguration 等注解标有要 exclude 的自动配置类&#xff0c;那么再将这个自动配置类 排除掉&#xff1b; 【3】排除掉要 exclude …

一款开源.NET WPF界面库介绍

一款开源.NET WPF界面库介绍 这是一个WPF版的Layui前端UI样式库&#xff0c;该控件库参考了Web版本的LayUI风格&#xff0c;利用该控件库可以完成现代化UI客户端程序&#xff0c;让你的客户端看起来更加简洁丰富又不失美感 如何使用 步骤一 : 添加LayUI.Wpf Nuget包; Inst…

LDR6020双盲插音频随便插充电听歌随便插

随着智能手机的普及和功能的日益丰富&#xff0c;手机已经成为我们日常生活中不可或缺的一部分。音乐、电影、游戏等娱乐内容更是丰富了手机的使用体验。而在这其中&#xff0c;音频转接器的作用愈发凸显&#xff0c;特别是在边听边充的场景下&#xff0c;一款高效且便捷的手机…

幻兽帕鲁服务器多少钱?有买过的吗?

幻兽帕鲁服务器多少钱&#xff1f;太卷了&#xff0c;降价到24元1个月&#xff0c;阿里云4核16G10M游戏服务器26元1个月、149元半年&#xff0c;腾讯云4核16G游戏服务器32元、312元一年&#xff0c;华为云26元&#xff0c;京东云主机也是26元起。云服务器吧yunfuwuqiba.com给大…

备战蓝桥杯Day18 - 双链表

一、每日一题 蓝桥杯真题之工作时长 这个题写代码做的话很麻烦&#xff0c;而且我也不一定能写出来&#xff0c;所以我直接就是用的excel来计算的时间和。 使用excel的做法 1.先把文件中的时间复制到excel中。 2.把日期和时间分到两列。 分成两列的步骤&#xff1a; 选中要…

【README 小技巧】在项目README.md 中展示发布到maven 仓库版本

在项目README.md 中展示发不到nexus 的快照版本 <p align"center"><a target"_blank" href"https://search.maven.org/search?qwu-lazy-cloud-network%20wu-lazy-cloud-network"><img src"https://img-home.csdnimg.cn/ima…

图论基础(一)

一、图论 图论是数学的一个分支&#xff0c;它以图为研究对象。图论中的图是若干给定的点&#xff08;顶点&#xff09;以及连接两点的线&#xff08;边&#xff09;构成的图像&#xff0c;这种图形通常用来描述某些事物之间的某种特定关系&#xff0c;用点代表事物&#xff0c…

微信小程序引入Vant插件

Vant官网&#xff1a;Vant Weapp - 轻量、可靠的小程序 UI 组件库 先查看官网的版本 新建一个package.json页面&#xff0c;代码写上&#xff1a;&#xff08;我先执行的npm安装没出package页面&#xff0c;所以先自己创建了一个才正常&#xff09; {"dependencies"…