Dubbo

【Zookeeper】基础学习概览【汇总】

邮差的信 提交于 2020-04-18 02:39:56
一、概述 1.1 简介 1.2 Zookeeper集群机制 1.3 Zookeeper特性 二、Zookeeper应用场景 三、Zookeeper数据结构 四、Zookeeper安装 五、Java操作Zookeeper 六、Zookeeper实现负载均衡 七、Zookeeper 分布式锁 八、Zookeeper实现服务Master选举策略(哨兵机制) 九、Zookeeper 集群搭建 一、概述 1.1 简介   Zookeeper是一个分布式开源框架(Java语言编写开源框架),是一个分布式协调工具,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务 , 分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance) 等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。 1、Zookeeper是为别的分布式程序服务的 2、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务) 3、Zookeeper所提供的服务涵盖

RocketMQ 主从同步若干问题答疑

自作多情 提交于 2020-04-18 02:09:59
温馨提示:建议参考代码RocketMQ4.4版本,4.5版本引入了多副本机制,实现了主从自动切换,本文并不关心主从切换功能。 @ TOC 1、初识主从同步 主从同步基本实现过程如下图所示: RocketMQ 的主从同步机制如下: A. 首先启动Master并在指定端口监听; B. 客户端启动,主动连接Master,建立TCP连接; C. 客户端以每隔5s的间隔时间向服务端拉取消息,如果是第一次拉取的话,先获取本地commitlog文件中最大的偏移量,以该偏移量向服务端拉取消息; D. 服务端解析请求,并返回一批数据给客户端; E. 客户端收到一批消息后,将消息写入本地commitlog文件中,然后向Master汇报拉取进度,并更新下一次待拉取偏移量; F. 然后重复第3步; RocketMQ主从同步一个重要的特征:主从同步不具备主从切换功能,即当主节点宕机后,从不会接管消息发送,但可以提供消息读取。 温馨提示:本文并不会详细分析RocketMQ主从同步的实现细节,如大家对其感兴趣,可以查阅笔者所著的《RocketMQ技术内幕》或查看笔者博文: https://blog.csdn.net/prestigeding/article/details/79600792 2、提出问题 主,从服务器都在运行过程中,消息消费者是从主拉取消息还是从从拉取? RocketMQ主从同步架构中

前后端分离应用——用户信息传递

浪子不回头ぞ 提交于 2020-04-18 00:01:58
前言 记录前后端分离的系统应用下应用场景————用户信息传递 需求缘起 照例先看看 web 系统的一张经典架构图,这张图参考自网络: 在  Dubbo 自定义异常,你是怎么处理的? 中已经对该架构做了简单说明,这里不再描述。 简单描述下在该架构中 用户信息(如userId)的传递方式 : 现在绝大多数的项目都是前后端分离的开发模式,采用 token 方式进行用户鉴权: 客户端(pc,移动端,平板等)首次登录,服务端签发 token ,在 token 中放入 用户信息(如userId) 等返回给客户端 客户端访问服务端接口,需要在头部携带 token ,跟表单一并提交到服务端 服务端在 web 层统一解析 token 鉴权,同时取出 用户信息(如userId) 并继续向底层传递,传到服务层操作业务逻辑 服务端在 service 层取到 用户信息(如userId) 后,执行相应的业务逻辑操作 问题: 为什么一定要把 用户信息(如userId) 藏在 token 中,服务端再解析 token 取出?直接登录后向客户端返回 用户信息(如userId) 不是更方便么? 跟用户强相关的信息是相当敏感的,一般 用户信息(如userId) 不会直接明文暴露给客户端,会带来风险。 单体应用下`用户信息(如userId)`的传递流程 什么是 单体应用 ? 简要描述就是 web 层, service

rpc和http的区别

不打扰是莪最后的温柔 提交于 2020-04-17 13:14:49
【推荐阅读】微服务还能火多久?>>> 作者:知乎用户 链接:https://www.zhihu.com/question/41609070/answer/191965937 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 这个问题其实是有理解误区的,首先 http 和 rpc 并不是一个并行概念。 rpc是远端过程调用,其调用协议通常包含传输协议和编码协议。 传输协议包含: 如著名的 [gRPC]( grpc / grpc.io ) 使用的 http2 协议,也有如dubbo一类的自定义报文的tcp协议。 编码协议包含: 如基于文本编码的 xml json,也有二进制编码的 protobuf binpack 等。 因此我理解的你想问的问题应该是: 为什么要使用自定义 tcp 协议的 rpc 做后端进程通信? 要解决这个问题就应该搞清楚 http 使用的 tcp 协议,和我们自定义的 tcp 协议在报文上的区别。 首先要否认一点 http 协议相较于自定义tcp报文协议,增加的开销在于连接的建立与断开。http协议是支持连接池复用的,也就是建立一定数量的连接不断开,并不会频繁的创建和销毁连接。二一要说的是http也可以使用protobuf这种二进制编码协议对内容进行编码,因此二者最大的区别还是在传输协议上。 通用定义的http1

准备两个月,面试五分钟,Java岗面试为何越来越难?

我的梦境 提交于 2020-04-17 07:31:11
【推荐阅读】微服务还能火多久?>>> 如果你参加过一些大厂面试,肯定会遇到一些开放性的问题: 1、写一段程序,让其运行时的表现为触发了5次Young GC、3次Full GC、然后3次Young GC; 2、如果一个Java进程突然消失了,你会怎么去排查这种问题? 3、给了一段Spring加载Bean的代码片段,阐述一下具体的执行流程? 是不是看上去很难,是不是和自己准备的“题库”中的问题不一样?不知道从何处下手?如果你有这种感觉,那么说明你的技术还需要继续修炼。 是不是看上去很难,是不是和自己准备的“题库”中的问题不一样?不知道从何处下手?如果你有这种感觉,那么说明你的技术还需要继续修炼,篇幅原因,没展示完,关注末尾 面对如此多的技术面试,怎么样才能说自己的技术已经过关了呢? 一、开场白 简单的介绍一下自己的工作经历与职责,在校或者工作中主要的工作内容,主要负责的内容;(你的信息一清二白的写在简历上,这个主要为了缓解面试者的压力) 介绍下自己最满意的,有技术亮点的项目或平台,重点介绍下自己负责那部分的技术细节;(主要考察应聘者对自己做过的事情是否有清晰的描述,判断做的事情的复杂度) 二、Java多线程 线程池的原理,为什么要创建线程池?创建线程池的方式; 线程的生命周期,什么时候会出现僵死进程; 说说线程安全问题,什么实现线程安全,如何实现线程安全; 创建线程池有哪几个核心参数?

3 月,跳不动了?

我与影子孤独终老i 提交于 2020-04-16 22:28:16
【推荐阅读】微服务还能火多久?>>> 不少单位已经开始复工了,跳槽季已经开始。虽说大多数互联网企业,像腾讯、字节跳动等,都已经开通远程面试环节,而且薪资有走高的趋势。但据目前看,面试难度大了许多,甚至有朋友面试后怀疑:自己真的落伍了? 比如,面试高级开发岗位时,面试官不仅考察基础能力,更会重点考察高并发、分布式等架构相关的技术背后的思考逻辑,比如:微服务,负载均衡,Redis,RPC等。(今年 Java 面试到底聚焦在知识点?文末扫码获取) 但这些技术包含了 N 多优化、N 多细节,对于一些 coding 的朋友,由于接触不到一线实战架构设计,想必并不是很了解。 刚好,趁着这段时间,整理了一套 “ 微服务+分布式 ” 的视频干货,讲解很透彻。今天分享给大家。这份资料 尤其适合 以下人群: 1.没有用过微服务技术,只会用传统的 SSM 框架 2.用过 Spring Cloud、Dubbo等技术,但是只限于使用,遇到问题基本无法解决 3.从来没有系统学习微服务、分布式架构,觉得架构设计是遥不可及的 4.对于微服务、分布式技术有所了解,但尚没有设计高可用高并发的实践经历 学完这份视频你将获得哪些收获? 理解当下最火热的微服务架构原理及其开源框架; 触及一线大厂所配备的微服务核心技术内幕知识; 对照自己掌握知识点进行查漏补缺,帮助扫除知识盲区、重构知识体系。 视频围绕“

2020年最全java面试真题解析(980道),你没见过的面试题都在这

让人想犯罪 __ 提交于 2020-04-16 12:59:47
【推荐阅读】微服务还能火多久?>>> 今年跳槽想跳去哪个大厂呢,这是个问题。说实话,去年我面试也被虐了,为了能找到一份心怡的工作,特地的从朋友那里讨来一份面试圣经(阿里某大牛), 980道面试真题和解析,一共485页PDF 。 囊括Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈 。 由于面试真题 涉及全面,解析详细 ,所有的解析就不在文中给大家全部列出,整个 980道面试真题 都整理在一个pdf文档里面, 需要这一份pdf的朋友,末尾可领取: 每个专题总结将近50道真题(含解析),一共包含java、MyBatis、ZooKeeper、Dubbo等二十个多个专题。485页PDF。 20多个专题: 正文: MyBatis 面试题(27道): 什么是 Mybatis? 1、Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高。 2、MyBatis 可以使用 XML

Zookeeper 都有哪些使用场景?

一个人想着一个人 提交于 2020-04-15 21:27:13
【推荐阅读】微服务还能火多久?>>> 面试官心理分析 现在聊的 topic 是分布式系统,面试官跟你聊完了 dubbo 相关的一些问题之后,已经确认你对分布式服务框架/RPC框架基本都有一些认知了。那么他可能开始要跟你聊分布式相关的其它问题了。 分布式锁这个东西,很常用的,你做 Java系统开发,分布式系统,可能会有一些场景会用到。最常用的分布式锁就是基于 zookeeper 来实现的。 其实说实话,问这个问题,一般就是看看你是否了解 zookeeper,因为 zk 是分布式系统中很常见的一个基础系统。而且问的话常问的就是说 zk 的使用场景是什么?看你知道不知道一些基本的使用场景。但是其实 zk 挖深了自然是可以问的很深很深的。 面试题剖析 大致来说,zk 的使用场景如下,我就举几个简单的,大家能说几个就好了: 分布式协调 分布式锁 元数据/配置信息管理 HA高可用性 分布式协调 这个其实是 zk 很经典的一个用法,简单来说,就好比,你 A 系统发送个请求到 mq,然后 B 系统消息消费之后处理了。那 A 系统如何知道 B 系统的处理结果?用 zk 就可以实现分布式系统之间的协调工作。A 系统发送请求之后可以在 zk 上对某个节点的值注册个监听器,一旦 B 系统处理完了就修改 zk 那个节点的值,A 立马就可以收到通知,完美解决。 <center>zookeeper

剖析dubbo服务注册到nacos的过程

☆樱花仙子☆ 提交于 2020-04-15 19:32:41
【推荐阅读】微服务还能火多久?>>> 剖析dubbo服务注册到nacos的过程 前面聊到到了我们的dubbo服务从 redis 迁移到 nacos 注册中心,迁移后发现,会时不时的抛一个异常 ERROR com.alibaba.nacos.client.naming - [CLIENT-BEAT] failed to send beat: , 所以有了这个剖析过程,当然最后查明异常是我们的SLB网络映射问题,和nacos没有关系。 dubbo版本:2.7.4.1 nacos client版本:1.0.0 nacos server版本:1.1.3 简述过程 dubbo侧:dubbo通过nacos注册中心实现,注册服务到nacos,同时添加心跳任务,心跳任务每隔5s发送一次服务健康心跳。同时每隔1s查询nacos服务列表是否有更新,如果有更新触发服务实例更新通知,更新dubbo本地服务列表 nacos侧:nacos接收到心跳后,如果此时服务实例不存在,则新建一个服务实例,如果此时服务实例不健康,则设置为健康状态,并主动推送状态到客户端。nacos内部有一个检查服务状态的任务,如果15s没有健康心跳上报,则设置服务实例不健康,如果30s没有健康心跳上报,则下线这个服务实例,并推送状态到客户端。 源码剖析具体实现 在dubbo的registry包下,针对服务注册行为定义了四个接口