diff --git a/README.md b/README.md index 3ff0552..7d9300f 100644 --- a/README.md +++ b/README.md @@ -151,6 +151,7 @@ ### 分布式事务 - [分布式事务了解吗?你们如何解决分布式事务问题的?TCC 如果出现网络连不通怎么办?XA 的一致性如何保证?](/docs/distributed-system/distributed-transaction.md) +- [关于如何实现一个TCC分布式事务框架的一点思考](http://www.bytesoft.org) ### 分布式会话 - [集群部署时的分布式 Session 如何实现?](/docs/distributed-system/distributed-session.md) @@ -177,6 +178,22 @@ - [02、Java工程师面试突击第一季总结:你离一次成功的面试还差多少?](/docs/distributed-system/java-interview-season-1-summary.md) - [03、《21天互联网Java进阶面试训练营》的课程说明](/docs/distributed-system/21-day-course-instructions.md) - [04、作业:系统分析一下,自己距离大厂offer差在哪里?](/docs/distributed-system/homework.md) +- [05、感受一下BAT面试官对分布式技术的十几个面试连环炮!](/docs/distributed-system/BAT-interview-fire.md) +- [06、你们公司用的Dubbo?那你再额外说说Spring Cloud的核心架构原理?](/docs/distributed-system/core-architecture-principle%20.md) +- [07、基于Dubbo和Spring Cloud分别搭建一个电商系统来快速体验一下!](/docs/distributed-system/Dubbo-SpringCloud-experience.md)[代码下载点击这里哦!](https://github.com/shishan100/Java-Interview-Advanced/raw/master/docs/distributed-system/code/code.zip) +- [08、作业:你们的系统使用了哪种服务框架?为什么要这样技术选型?](/docs/distributed-system/distributed-framework-selection.md) +- [09、看过Dubbo源码吗?说说Dubbo的底层架构原理?](/docs/distributed-system/dubbo-framework-principle.md) +- [10、咱们来聊点深入的,说说Dubbo底层的网络通信机制原理!](/docs/distributed-system/dubbo-rock-bottom.md) +- [11、Dubbo框架从架构设计角度,是怎么保证极高的可扩展性的?](/docs/distributed-system/dubbo-augmentability.md) +- [12、作业:自己独立画出Dubbo的底层架构原理图](/docs/distributed-system/dubbo-independent-framework.md) +- [13、如果让你设计一个RPC框架,网络通信、代理机制、负载均衡等该如何设](/docs/distributed-system/rpc-design.md) +- [14、平时除了使用外,有研究过Spring Cloud的底层架构原理么?](/docs/distributed-system/springCloud-study-theory.md) +- [15、从底层实现原理的角度,对比一下Dubbo和Spring Cloud的优劣!](/docs/distributed-system/dubbo-vs-springCloud.md) +- [16、作业:自己独立画出Spring Cloud的架构原理图,RPC框架架构设计图!](/docs/distributed-system/springCloud-and-rpc-framework.md) +- [17、面试官:你们的服务注册中心进行过选型调研吗?对比一下各种服务注册中心!](/docs/distributed-system/registration-center-%20guide.md) +- [18、画图阐述一下你们的服务注册中心部署架构,生产环境下怎么保证高可用?](/docs/distributed-system/register-high-availability.md) +- [19、你们系统遇到过服务发现过慢的问题吗?怎么优化和解决的?](/docs/distributed-system/service-register-discovery.md) +- [20、作业:说一下自己公司的服务注册中心怎么技术选型的?生产环境中应该怎么优化?](/docs/distributed-system/register-production-optimize.md) ### 第二季-高并发 diff --git a/docs/distributed-system/BAT-interview-fire.md b/docs/distributed-system/BAT-interview-fire.md new file mode 100644 index 0000000..be006dc --- /dev/null +++ b/docs/distributed-system/BAT-interview-fire.md @@ -0,0 +1,61 @@ +针对面试突击第一季关于分布式这块的内容,相对应的做一个回顾和总结 + +面试突击第一季总共四五十讲,每个技术专题大概也是有十来讲 + +#### (1)为什么要把系统拆分成分布式的?为啥要用dubbo? +#### (2)dubbo的工作原理是啥?注册中心挂了可以继续通信吗? +#### (3)dubbo都支持哪些通信协议以及序列化协议? +#### (4)dubbo支持哪些负载均衡、高可用以及动态代理的策略? +#### (5)SPI是啥思想?dubbo的SPI机制是怎么玩儿的? +#### (6)基于dubbo如何做服务治理、服务降级以及重试? + +这些问题在面试突击第一季里,我们都讲解过了,都是非常高简单的一些问题,作为一个合格的工程师,如果你是用了分布式系统架构,也就是把大的系统拆分为了多个子系统,或者是 多个服务 + +你肯定会用到一种服务框架,Dubbo、Spring Cloud、gRPC、Thrift + +你必须 对这些服务框架的核心的架构原理,有一个认识和了解,服务注册和发现,通信和序列化,负载均衡,扩展机制,请求重试,请求超时 + +#### (7)分布式系统中接口的幂等性该如何保证?比如不能重复扣款? +#### (8)分布式系统中的接口调用如何保证顺序性? + +接口幂等性,分布式系统,如果不保证,是否会发生类似重复下单,重复扣款之类的问题 + +#### (9)如何设计一个类似dubbo的rpc框架?架构上该如何考虑? + +自己看过一些dubbo、spring cloud的源码,对一款服务框架底层的实现原理,有一定的了解和认识,此时如果说他希望能够深入的考察你一下,看看你的水平,这个时候就有可能会问你这个问题 + +#### (10)说说zookeeper一般都有哪些使用场景? +#### (11)分布式锁是啥?对比下redis和zk两种分布式锁的优劣? + +拆分成了分布式系统,就说明有很多子系统在同时的运作,如果说两个子系统都需要对某个数据资源进行一系列复杂的操作,在复杂操作期间,不能让数据被其他任何人来改变。分布式锁,技术实现原理 + +#### (13)说说你们的分布式session方案是啥?怎么做的? + +前后端分离之后,一般是前端那边来care session之类的问题,对于后端来说,玩儿分布式session玩儿的很少了 + +#### (14)了解分布式事务方案吗?你们都咋做的?有啥坑? + + +**我们的课程每天都会有一个作业,引导大家把学习到的项目经验、技术方案和生产优化落地到自己负责的项目中去,让大家出去面试的时候,可以把各种技术结合自己的项目来回答面试官的各种深度拷问** + +**大家不要小看这个,根据我多年的面试经验来看,拥有这个技能的人凤毛麟角,这种人出去绝对是各大公司争抢的对象。** + +**所以希望大家好好完成每天的作业,我布置的大量作业,就是为了帮你锻造出这种能力** + +**学习课程以及完成作业的过程中,大家一定会有很多的问题,可以到专栏的评论区去提问** + +**每天我都会和之前带出来的一批阿里、蚂蚁金服、滴滴的优秀同学给大家进行答疑,并且我们还有专门的付费用户的微信群,大家可以在微信群里跟我们一起进行技术交流** + +**如果你能坚持下来,学满6季,还可以获取私人定制的面试一条龙VIP服务** + +**如果是连续6季面试训练营都购买的同学,还可以获取面试一条龙VIP服务** + +**具体信息大家看“狸猫技术窝”公众号的知识店铺内的训练营详情即可** + +**具体可参见训练营目录下的《训练营专属服务》文档。简单来说,这个私人定制的面试VIP服务,会为你的跳槽面试全程保驾护航** + +**“狸猫技术窝”**,找到我们的训练营的详情页面 + + + + diff --git a/docs/distributed-system/Dubbo-SpringCloud-experience.md b/docs/distributed-system/Dubbo-SpringCloud-experience.md new file mode 100644 index 0000000..3111668 --- /dev/null +++ b/docs/distributed-system/Dubbo-SpringCloud-experience.md @@ -0,0 +1,9 @@ +Spring Cloud来搭建了一套 + +http://localhost:9000/order/order/create?productId=1&userId=1&count=3&totalPrice=300 + +刚开始几次请求会出现请求超时的问题,这个问题大家别纠结,后续要给大家讲spring cloud生产系统的优化 + +小小的小作业,参考一下dubbo的官方文档,搭建一个电商系统的dubbo版本的案例出来,我后面会搭建好的 + +[代码下载点击这里哦!](https://github.com/shishan100/Java-Interview-Advanced/raw/master/docs/distributed-system/code/code.zip) diff --git a/docs/distributed-system/code/code.zip b/docs/distributed-system/code/code.zip new file mode 100755 index 0000000..330db00 Binary files /dev/null and b/docs/distributed-system/code/code.zip differ diff --git a/docs/distributed-system/core-architecture-principle .md b/docs/distributed-system/core-architecture-principle .md new file mode 100644 index 0000000..12990cc --- /dev/null +++ b/docs/distributed-system/core-architecture-principle .md @@ -0,0 +1,44 @@ +如果聊分布式这块的技术,围绕**Dubbo来拷问**的,但是呢,现在其实非常流行的是**Spring Cloud,Dubbo和Spring Cloud以及阿里系的一些技术**,现在正在融合,**Spring Cloud Alibaba,只不过现在用的公司暂时还没那么多而已** + +作为合格的工程师,行业里主流的**分布式服务技术栈**,**Dubbo**和**Spring Cloud**两种,有的公司他是用**Dubbo**的,不用**Spring Cloud**的,有的公司是用**Spring Cloud**的,不用**Dubbo**的,他们是代表了两种主流技术栈 + +Java工程师,Dubbo和Spring Cloud起码是基本原理,都有一定的了解 + +**大白话 + 现场画图** + +上网看一些博客资料,或者是买一些Spring Cloud的书,可能没考虑过一个事儿,第一篇必须是用非常通俗的语言,把一个系统如果用Spring Cloud来做分布式架构的话,那么他需要用到Spring Cloud哪些组件,为什么 + +跟着书或者博客,直接上手开始搭建demo,开始做起来了 + +**分别用Dubbo和Spring Cloud做两个最基本的Demo工程**,用电商背景来搭建几个服务 + +比如说,现在我们有一个电商系统 + +用户现在需要下单购买一些东西这样子,订单系统、库存系统、仓储系统、积分系统 + +不太可能说用单块的架构,电商系统你想支撑多少用户量?10万注册用户,日活1000用户来你这里来购买? + +百万级用户,十万级日活,单块系统就不太合适了,背后有几十个人的团队在协作开发,此时单块系统是绝对不合适的 + +梳理和明确一个概念:电商系统,拆分为了多个子系统,一次下订单的请求需要多个子系统协作完成,每个子系统都完成一部分的功能,多个子系统分别完成自己负责的事情,最终这个请求就处理完毕 + +我们不会让每个视频太长,按照我们大纲来讲,说是60讲,粗略的大纲,其实最终会拆分成可能上百讲,Spring Cloud架构原理,我们就要分为上下两讲来说 +![Spring Cloud核心架构原理](/docs/distributed-system/images/SpringCloud-core-architecture.png) + +### Spring Cloud + +#### Eureka:服务注册中心 +#### Feign:服务调用 +#### Ribbon:负载均衡 +#### Zuul/Spring Cloud Gatway:网关 + +这么多的系统,电商系统包含了20个子系统,每个子系统有20个核心接口,一共电商系统有400个接口,这么多的接口,直接对外暴露,前后端分离的架构,难道你让前端的同学必须记住你的20个系统的部署的机器,他们去做负载均衡,记住400个接口 + + +微服务那块,**网关** + +**灰度发布**、**统一熔断**、**统一降级**、**统一缓存**、**统一限流**、**统一授权认证** + + + +**Hystrix**、**链路追踪**、**stream**、很多组件,Hystrix这块东西,其实是会放在高可用的环节去说的,并不是说一个普通系统刚开始就必须得用的,没有用好的话,反而会出问题,**Hystrix线路熔断的框架**,必须得设计对应的一整套的限流方案、熔断方案、资源隔离、降级机制,配合降级机制来做 diff --git a/docs/distributed-system/distributed-design.md b/docs/distributed-system/distributed-design.md index 4af29d4..793cd81 100644 --- a/docs/distributed-system/distributed-design.md +++ b/docs/distributed-system/distributed-design.md @@ -8,7 +8,7 @@ 最最起码的,你应该去从哪个角度来考察这个获选人呢?职位JD要求是工作经验在3年~5年,有一定的社会工作经验的 -###(1)技术广度来考察 +### (1)技术广度来考察 招聘过来一个有几年经验的人,就不要再去培养他了,候选人的整个技术栈是比较匹配我们团队的技术栈的 @@ -34,7 +34,7 @@ JVM,数据库和并发,都是必考的 薪资在20k左右,差不多 -###(2)项目经验 +### (2)项目经验 你平时用的各种技术在你的项目中如何结合业务来进行落地,然后你在项目的生产环境中落地一个技术之后,对他进行的生产优化、架构优化、生产实践是怎么来做的 @@ -50,7 +50,7 @@ JVM,数据库和并发,都是必考的 出去面试的时候,往往被 面试官一通追问项目的各种细节,然后就直接死了 -###(3)生产经验 +### (3)生产经验 分布式、微服务这块,你说用过网关,网关调研了哪几种技术?对比一下他们的优缺点?最后你们是怎么进行技术选型的?你们这个系统每天的访问量多高?高峰期QPS多高?你们网关要抗多高的QPS?网关是如何部署的?部署了几台机器?每台机器的配置如何,几个核CPU,几个GB内存? @@ -74,7 +74,7 @@ JVM,数据库和并发,都是必考的 如果是很多的大厂,哪怕是三五年经验,或者二三年经验,也会来考察这块项目经验和生产经验,越是大厂,对你的能力里要求就越高,希望你进来以后越能独当一面,所以就希望你不光只是有技术广度 -###(4)技术深度 +### (4)技术深度 你有没有读过哪些开源项目的源码,RocketMQ,RocketMQ的源码,Dubbo的源码,如果你精通一些技术的源码的话,为什么会特别的有价值,有竞争力,让面试官更加的倾向于用你呢? @@ -86,7 +86,7 @@ Dubbo、RocketMQ、Kafka、ES,随时可能有问题,比如说Dubbo随时可 大厂,很可能会考察你的技术深度,如果发现你没有什么技术深度,那么可能你就没有太大的竞争优势 -###(5)系统设计 +### (5)系统设计 往简单了说,就是会考察一些问题,比如说让你来设计秒杀系统,设计一个12306火车票购票系统,支撑几亿用户买火车票,你会如何来设计,让你设计一个微信红包系统,你会如何来考虑 diff --git a/docs/distributed-system/distributed-framework-selection.md b/docs/distributed-system/distributed-framework-selection.md new file mode 100644 index 0000000..422fd5b --- /dev/null +++ b/docs/distributed-system/distributed-framework-selection.md @@ -0,0 +1,3 @@ +**Spring Cloud**入门和使用级别的资料,建议大家自行百度,面试训练营,不是说针对每个技术详细给大家讲解的一个课程,我们会针对每个技术推出重磅的项目实战课程 + +**自己公司如果是分布式的架构,你们当前选用的是Spring Cloud?Dubbo?自己研发的服务框架?对比一下各种服务框架的优点和缺点,技术选型,为什么?** diff --git a/docs/distributed-system/dubbo-augmentability.md b/docs/distributed-system/dubbo-augmentability.md new file mode 100644 index 0000000..253b47f --- /dev/null +++ b/docs/distributed-system/dubbo-augmentability.md @@ -0,0 +1,25 @@ +两点,第一点,是核心的组件全部接口化,组件和组件之间的调用,必须全部是依托于接口,去动态找配置的实现类,如果没有配置就用他自己默认的 + +第二点,提供一种自己实现的组件的配置的方式,比如说你要是自己实现了某个组件,配置一下,人家到时候运行的时候直接找你配置的那个组件即可,作为实现类,不用自己默认的组件了 + + + + +**我们的课程每天都会有一个作业,引导大家把学习到的项目经验、技术方案和生产优化落地到自己负责的项目中去,让大家出去面试的时候,可以把各种技术结合自己的项目来回答面试官的各种深度拷问** + +**大家不要小看这个,根据我多年的面试经验来看,拥有这个技能的人凤毛麟角,这种人出去绝对是各大公司争抢的对象。** + +**所以希望大家好好完成每天的作业,我布置的大量作业,就是为了帮你锻造出这种能力** + +**学习课程以及完成作业的过程中,大家一定会有很多的问题,可以到专栏的评论区去提问** + +**每天我都会和之前带出来的一批阿里、蚂蚁金服、滴滴的优秀同学给大家进行答疑,并且我们还有专门的付费用户的微信群,大家可以在微信群里跟我们一起进行技术交流** + +**如果你能坚持下来,学满6季,还可以获取私人定制的面试一条龙VIP服务** + +**如果是连续6季面试训练营都购买的同学,还可以获取面试一条龙VIP服务** + +**具体信息大家看“狸猫技术窝”公众号的知识店铺内的训练营详情即可** + +**具体可参见训练营目录下的《训练营专属服务》文档。简单来说,这个私人定制的面试VIP服务,会为你的跳槽面试全程保驾护航** + diff --git a/docs/distributed-system/dubbo-framework-principle.md b/docs/distributed-system/dubbo-framework-principle.md new file mode 100644 index 0000000..cf5918b --- /dev/null +++ b/docs/distributed-system/dubbo-framework-principle.md @@ -0,0 +1,73 @@ +聊**分布式**这块,**Dubbo相关的原理**,**Spring Cloud相关的原理**,有的面试官可能会这样问,你有没有看过**Dubbo或者Spring Cloud的源码呢**?**技术广度**、**技术深度**、**项目经验**、**系统设计**、**基本功** + +平时看你简历主要是用一些技术来开发一些系统,就会问问你了,对于一些你平时常用的技术,有没有关注过底层的原理,或者是看过源码,你要是说,90%的人,一般都会在这个时候支支吾吾的说 + +源码看过一点点,但是没怎么看过 + +在我们面试训练营里,能给你来分析源码吗?不太现实的,任何一个开源项目,**源码**少则几万行,多则几十万行,**Hadoop、Spark**,**面试训练营**,几讲的时间来讲透任何一个**开源项目**的**源码**,不现实 + +看源码技巧是有,但是,需要**技术功底** + +就是说提炼一些**Dubbo、Spring Cloud**相关的一些底层的运行的原理,给大家来用大白话+现场画图的方式,说清楚,你就可以结合我们视频讲解的内容,去现场画图给面试官画一画一些技术底层的运行的一些原理 + + +我们的课程每天都会有一个作业,引导大家把学习到的项目经验、技术方案和生产优化落地到自己负责的项目中去,让大家出去面试的时候,可以把各种技术结合自己的项目来回答面试官的各种深度拷问 + +大家不要小看这个,根据我多年的面试经验来看,拥有这个技能的人凤毛麟角,这种人出去绝对是各大公司争抢的对象。 + +所以希望大家好好完成每天的作业,我布置的大量作业,就是为了帮你锻造出这种能力 + +学习课程以及完成作业的过程中,大家一定会有很多的问题,可以到专栏的评论区去提问 + +每天我都会和之前带出来的一批阿里、蚂蚁金服、滴滴的优秀同学给大家进行答疑,并且我们还有专门的付费用户的微信群,大家可以在微信群里跟我们一起进行技术交流 + +如果你能坚持下来,学满6季,还可以获取私人定制的面试一条龙VIP服务 + +如果是连续6季面试训练营都购买的同学,还可以获取面试一条龙VIP服务 + +具体信息大家看“狸猫技术窝”公众号的知识店铺内的训练营详情即可, + +具体可参见训练营目录下的《训练营专属服务》文档。简单来说,这个私人定制的面试VIP服务,会为你的跳槽面试全程保驾护航 + + + + +分布式系统 + +拆分为了多个子系统之后,各个系统之间如何通过Spring Cloud服务框架来进行调用,Dubbo框架来进行调用 + +![Dubbo核心架构原理](/docs/distributed-system/images/dubbo-framework-principle.png) +提供接口 + +服务注册中心: + +###消费者 + +#### 动态代理:Proxy +#### 负载均衡:Cluster,负载均衡,故障转移 +#### 注册中心:Registry +#### 通信协议:Protocol,filter机制,http、rmi、dubbo等协议 + +#### http、rmi、dubbo + +比如说,我现在其实想要调用的是,DemoService里的sayHello接口 + +你的请求用什么样的方式来组织发送过去呢?以一个什么样的格式来发送你的请求? + +http,/demoService/sayHello?name=leo +rmi,另外一种样子 +dubbo,另外一种样子,interface=demoService|method=sayHello|params=name:leo + +信息交换:Exchange,Request和Response + +对于你的协议的格式组织好的请求数据,需要进行一个封装,Request + +##### 网络通信:Transport,netty、mina +##### 序列化:封装好的请求如何序列化成二进制数组,通过netty/mina发送出去 + +提供者 + +#### 网络通信:Transport,基于netty/mina实现的Server +#### 信息交换:Exchange,Response +#### 通信协议:Protocol,filter机制 +#### 动态代理:Proxy diff --git a/docs/distributed-system/dubbo-independent-framework.md b/docs/distributed-system/dubbo-independent-framework.md new file mode 100644 index 0000000..764ed05 --- /dev/null +++ b/docs/distributed-system/dubbo-independent-framework.md @@ -0,0 +1,10 @@ + +对**Dubbo**稍微做了一点进一步深入的讲解,但是远远是达不到精通源码的程度,只能说是相对于面试突击第一季要深入了一些,**Dubbo**一次服务请求调用,牵扯到了哪些组件,**负载均衡组件**、**注册中心**、**协议层**、**转换层**、**网络层(netty开发)**、**动态代理**,服务提供者也是类似的 + +网络通信的一些东西,是如何通过**NIO**的方式,**多线程**的方式,让一个服务提供者被多个服务消费者去并发的调用和请求 + +从整体架构原理的角度,说了一下如何进行扩展的 + +能说比普通的人稍微好一些,**技术深度**,那必须得是学其他的课程深入的理解他里面的源码,才能在面试的时候说,我精通一个技术的源码 + +**Dubbo底层架构原理的图**,自己手画出来,画的足够的熟练,如果有一些什么问题的话,可以提问 diff --git a/docs/distributed-system/dubbo-rock-bottom.md b/docs/distributed-system/dubbo-rock-bottom.md new file mode 100644 index 0000000..5121ba9 --- /dev/null +++ b/docs/distributed-system/dubbo-rock-bottom.md @@ -0,0 +1,27 @@ + +![Dubbo底层通信原理](/docs/distributed-system/images/dubbo-rock-bottom.png) +如果问到Dubbo底层原理,肯定除了上一讲的底层架构,你能说出来之外,还很可能会追问几个问题,网络通信这块原理的话 + +netty来举例,NIO来实现的,一台机器同时抗高并发的请求 + + + +**所以希望大家好好完成每天的作业,我布置的大量作业,就是为了帮你锻造出这种能力** + +**学习课程以及完成作业的过程中,大家一定会有很多的问题,可以到专栏的评论区去提问** + +**每天我都会和之前带出来的一批阿里、蚂蚁金服、滴滴的优秀同学给大家进行答疑,并且我们还有专门的付费用户的微信群,大家可以在微信群里跟我们一起进行技术交流** + +**如果你能坚持下来,学满6季,还可以获取私人定制的面试一条龙VIP服务** + +**如果是连续6季面试训练营都购买的同学,还可以获取面试一条龙VIP服务** + +**具体信息大家看“狸猫技术窝”公众号的知识店铺内的训练营详情即可** + +**具体可参见训练营目录下的《训练营专属服务》文档。简单来说,这个私人定制的面试VIP服务,会为你的跳槽面试全程保驾护航** + + + + + + diff --git a/docs/distributed-system/dubbo-vs-springCloud.md b/docs/distributed-system/dubbo-vs-springCloud.md new file mode 100644 index 0000000..d0d9477 --- /dev/null +++ b/docs/distributed-system/dubbo-vs-springCloud.md @@ -0,0 +1,46 @@ +底层架构原理是类似的 + +**Dubbo,RPC的性能比HTTP的性能更好,并发能力更强,经过深度优化的RPC服务框架,性能和并发能力是更好一些** + +很多中小型公司而言,其实稍微好一点的性能,**Dubbo一次请求10ms,Spring Cloud耗费20ms**,对很多中小型公司而言,性能、并发,并不是最主要的因素 + +**Spring Cloud这套架构原理,走HTTP接口和HTTP请求,就足够满足性能和并发的需要了,没必要使用高度优化的RPC服务框架** + + + +Dubbo之前的一个定位,就是一个单纯的服务框架而已,不提供任何其他的功能,配合的网关还得选择其他的一些技术 + +**Spring Cloud**,中小型公司用的特别多,老系统从**Dubbo迁移到Spring Cloud**,新系统都是用**Spring Cloud来进行开发,全家桶,主打的是微服务架构里,组件齐全,功能齐全。网关直接提供了,分布式配置中心,授权认证,服务调用链路追踪,Hystrix可以做服务的资源隔离、熔断降级、服务请求QPS监控、契约测试、消息中间件封装、ZK封装** + + +剩是剩在功能齐全,中小型公司开箱即用,直接满足系统的开发需求 + + +**Spring Cloud**原来支持的一些技术慢慢的未来会演变为,跟阿里技术体系进行融合,**Spring Cloud Alibaba**,阿里技术会融入**Spring Cloud**里面去 + + + + +**我们的课程每天都会有一个作业,引导大家把学习到的项目经验、技术方案和生产优化落地到自己负责的项目中去,让大家出去面试的时候,可以把各种技术结合自己的项目来回答面试官的各种深度拷问** + +**大家不要小看这个,根据我多年的面试经验来看,拥有这个技能的人凤毛麟角,这种人出去绝对是各大公司争抢的对象。** + +**我们的课程每天都会有一个作业,引导大家把学习到的项目经验、技术方案和生产优化落地到自己负责的项目中去,让大家出去面试的时候,可以把各种技术结合自己的项目来回答面试官的各种深度拷问** + +**大家不要小看这个,根据我多年的面试经验来看,拥有这个技能的人凤毛麟角,这种人出去绝对是各大公司争抢的对象。** + +**所以希望大家好好完成每天的作业,我布置的大量作业,就是为了帮你锻造出这种能力** + +**学习课程以及完成作业的过程中,大家一定会有很多的问题,可以到专栏的评论区去提问** + +**每天我都会和之前带出来的一批阿里、蚂蚁金服、滴滴的优秀同学给大家进行答疑,并且我们还有专门的付费用户的微信群,大家可以在微信群里跟我们一起进行技术交流** + +**如果你能坚持下来,学满6季,还可以获取私人定制的面试一条龙VIP服务** + +**如果是连续6季面试训练营都购买的同学,还可以获取面试一条龙VIP服务** + +**具体信息大家看“狸猫技术窝”公众号的知识店铺内的训练营详情即可** + +**具体可参见训练营目录下的《训练营专属服务》文档。简单来说,这个私人定制的面试VIP服务,会为你的跳槽面试全程保驾护航** + +**“狸猫技术窝”**,找到我们的训练营的详情页面 diff --git a/docs/distributed-system/homework.md b/docs/distributed-system/homework.md index 42e461b..47ea463 100644 --- a/docs/distributed-system/homework.md +++ b/docs/distributed-system/homework.md @@ -7,13 +7,13 @@ 技术广度的一些,各种技术 -###(1)自己在技术广度上做的如何?你现在主流技术栈哪些技术都有一定的了解,包括核心原理和常见技术方案 +### (1)自己在技术广度上做的如何?你现在主流技术栈哪些技术都有一定的了解,包括核心原理和常见技术方案 -###(2)自己在项目经验和生产经验上做的如何?你会的这些技术,自己在项目里到底用过多少?用的有多复杂?用的时候考虑了哪些项目细节和生产细节? +### (2)自己在项目经验和生产经验上做的如何?你会的这些技术,自己在项目里到底用过多少?用的有多复杂?用的时候考虑了哪些项目细节和生产细节? -###(3)技术深度,你现在对哪些技术是除了核心原理以及基础知识之外,对一些技术的底层的概念和原理有一定的了解 +### (3)技术深度,你现在对哪些技术是除了核心原理以及基础知识之外,对一些技术的底层的概念和原理有一定的了解 -###(4)系统设计,你目前自己独立负责过设计的系统和架构有多复杂?如果让你来独立设计秒杀系统、红包系统、12306系统,或者是一些其他大型的架构,你会如何来设计呢? +### (4)系统设计,你目前自己独立负责过设计的系统和架构有多复杂?如果让你来独立设计秒杀系统、红包系统、12306系统,或者是一些其他大型的架构,你会如何来设计呢? 能力差距在哪里,肯定会有很多的疑问,第一周是预售周,是除了这4讲试看以外,其他的是不更新的,从第一周预售周结束之后会开始每日更新课程,可以把面试突击第一季复习巩固一下,没看过的人正好借着这一周把面试突击第一季先去看一下 diff --git a/docs/distributed-system/images/SpringCloud-core-architecture.png b/docs/distributed-system/images/SpringCloud-core-architecture.png new file mode 100755 index 0000000..035871a Binary files /dev/null and b/docs/distributed-system/images/SpringCloud-core-architecture.png differ diff --git a/docs/distributed-system/images/dubbo-framework-principle.png b/docs/distributed-system/images/dubbo-framework-principle.png new file mode 100755 index 0000000..951b300 Binary files /dev/null and b/docs/distributed-system/images/dubbo-framework-principle.png differ diff --git a/docs/distributed-system/images/dubbo-rock-bottom.png b/docs/distributed-system/images/dubbo-rock-bottom.png new file mode 100755 index 0000000..8260d2f Binary files /dev/null and b/docs/distributed-system/images/dubbo-rock-bottom.png differ diff --git a/docs/distributed-system/images/eureka-register.png b/docs/distributed-system/images/eureka-register.png new file mode 100755 index 0000000..1fd7f75 Binary files /dev/null and b/docs/distributed-system/images/eureka-register.png differ diff --git a/docs/distributed-system/images/springCloud-study-theory.png b/docs/distributed-system/images/springCloud-study-theory.png new file mode 100755 index 0000000..35fc87b Binary files /dev/null and b/docs/distributed-system/images/springCloud-study-theory.png differ diff --git a/docs/distributed-system/images/zookeeper-register.png b/docs/distributed-system/images/zookeeper-register.png new file mode 100755 index 0000000..b9a8018 Binary files /dev/null and b/docs/distributed-system/images/zookeeper-register.png differ diff --git a/docs/distributed-system/register-high-availability.md b/docs/distributed-system/register-high-availability.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/distributed-system/register-production-optimize.md b/docs/distributed-system/register-production-optimize.md new file mode 100644 index 0000000..5872fec --- /dev/null +++ b/docs/distributed-system/register-production-optimize.md @@ -0,0 +1,34 @@ + +#### 分布式系统架构的 + +**服务注册中心,eureka、zk、consul,原理画图画清楚** + +**数据一致性,CP、AP** + +服务注册、故障 和发现的时效性是多长时间 + +注册中心最大能支撑多少服务实例 + +如何部署的,几台机器,每台机器的配置如何,会用比较高配置的机器来做,8核16G,16核32G的高配置机器来搞,基本上可以做到每台机器每秒钟的请求支撑几千绝对没问题 + +可用性如何来保证 + +**有没有做过一些优化,服务注册、故障以及发现的时效性,是否可以优化一下,用eureka的话,可以尝试一下,配合我们讲解的那些参数,优化一下时效性,服务上线、故障到发现是几秒钟的时效性** + +**zk,一旦服务挂掉,zk感知到以及通知其他服务的时效性,服务注册到zk之后通知到其他服务的时效性,leader挂掉之后可用性是否会出现短暂的问题,为了去换取一致性** + + +**所以希望大家好好完成每天的作业,我布置的大量作业,就是为了帮你锻造出这种能力** + +**学习课程以及完成作业的过程中,大家一定会有很多的问题,可以到专栏的评论区去提问** + +**每天我都会和之前带出来的一批阿里、蚂蚁金服、滴滴的优秀同学给大家进行答疑,并且我们还有专门的付费用户的微信群,大家可以在微信群里跟我们一起进行技术交流** + +**如果你能坚持下来,学满6季,还可以获取私人定制的面试一条龙VIP服务** + +**如果是连续6季面试训练营都购买的同学,还可以获取面试一条龙VIP服务** + +**具体信息大家看“狸猫技术窝”公众号的知识店铺内的训练营详情即可** + +**具体可参见训练营目录下的《训练营专属服务》文档。简单来说,这个私人定制的面试VIP服务,会为你的跳槽面试全程保驾护航** + diff --git a/docs/distributed-system/registration-center- guide.md b/docs/distributed-system/registration-center- guide.md new file mode 100644 index 0000000..bc1559a --- /dev/null +++ b/docs/distributed-system/registration-center- guide.md @@ -0,0 +1,54 @@ + +非常常见的一个技术面试题,但凡只要是聊到分布式这块,一定会问问你,**Dubbo,Spring Cloud,服务注册中心**,你们当时是怎么选型和调研的,你们最终是选择了哪块技术呢?你选择这块技术的原因和理由是什么呢? + +**Eureka、ZooKeeper** + +**Dubbo**作为服务框架的,一般注册中心会选择zk + +**Spring Cloud**作为服务框架的,**一般服务注册中心会选择Eureka** + +**Consul、Nacos,**普及型还没那么广泛,我会在面试训练营课程里增加对应的内容,给大家去进行补充 + +#### (1)服务注册发现的原理 + +集群模式 +![ZooKeeper](/docs/distributed-system/images/eureka-register.png) + +**Eureka,peer-to-pee**r,部署一个集群,**但是集群里每个机器的地位是对等的,各个服务可以向任何一个Eureka实例服务注册和服务发现,集群里任何一个Euerka实例接收到写请求之后,会自动同步给其他所有的Eureka实例** +![ZooKeeper](/docs/distributed-system/images/zookeeper-register.png) + +**ZooKeeper,服务注册和发现的原理,Leader + Follower两种角色,只有Leader可以负责写也就是服务注册,他可以把数据同步给Follower,读的时候leader/follower都可以读** + +#### (2)一致性保障:CP or AP + +**CAP,C是一致性,A是可用性,P是分区容错性** + +**CP,AP** + +**ZooKeeper是有一个leader节点会接收数据, 然后同步写其他节点,一旦leader挂了,要重新选举leader,这个过程里为了保证C,就牺牲了A,不可用一段时间,但是一个leader选举好了,那么就可以继续写数据了,保证一致性** + +Eureka是peer模式,可能还没同步数据过去,结果自己就死了,此时还是可以继续从别的机器上拉取注册表,但是看到的就不是最新的数据了,但是保证了可用性,强一致,最终一致性 + +(3)服务注册发现的时效性 + +zk,时效性更好,注册或者是挂了,一般秒级就能感知到 + +eureka,默认配置非常糟糕,服务发现感知要到几十秒,甚至分钟级别,上线一个新的服务实例,到其他人可以发现他,极端情况下,可能要1分钟的时间,ribbon去获取每个服务上缓存的eureka的注册表进行负载均衡 + +服务故障,隔60秒才去检查心跳,发现这个服务上一次心跳是在60秒之前,隔60秒去检查心跳,超过90秒没有心跳,才会认为他死了,2分钟都过去 + +30秒,才会更新缓存,30秒,其他服务才会来拉取最新的注册表 + +三分钟都过去了,如果你的服务实例挂掉了,此时别人感知到,可能要两三分钟的时间,一两分钟的时间,很漫长 + +#### (4)容量 + +zk,不适合大规模的服务实例,因为服务上下线的时候,需要瞬间推送数据通知到所有的其他服务实例,所以一旦服务规模太大,到了几千个服务实例的时候,会导致网络带宽被大量占用 + +eureka,也很难支撑大规模的服务实例,因为每个eureka实例都要接受所有的请求,实例多了压力太大,扛不住,也很难到几千服务实例 + +之前dubbo技术体系都是用zk当注册中心,spring cloud技术体系都是用eureka当注册中心这两种是运用最广泛的,但是现在很多中小型公司以spring cloud居多,所以后面基于eureka说一下服务注册中心的生产优化 + +(5)多机房、多数据中心、健康检查 + + diff --git a/docs/distributed-system/rpc-design.md b/docs/distributed-system/rpc-design.md new file mode 100644 index 0000000..d2294f4 --- /dev/null +++ b/docs/distributed-system/rpc-design.md @@ -0,0 +1,59 @@ +这个面试题还是挺常见的,在面试突击第一季里,基本上带了一下,当时但是没有细讲,是因为当时面试突击第一季里对服务框架的原理没有做一个相对深入一点点的分析,当时主要就是讲了一些最基本的概念 + +人家并不是要你手撸一个**RPC框架**,资料,现场手撸一个**RPC框架**,撸的特别的简单,人家也不是要你手撸,也不是说让你进来了以后就是让你来研发RPC框架的 + +系统设计的问题,就是让你站在系统设计的角度,来考虑一下,到底如果要设计一个RPC框架,你会如何来考虑 + +动态代理:比如消费者和提供者,其实都是需要一个实现某个接口的动态代理的,RPC框架的一切的逻辑细节,都是在这个动态代理中实现的,动态代理里面的代码逻辑就是你的RPC框架核心的逻辑 + +JDK提供了API,去创建针对某个接口的动态代理 + +调用动态代理对象的方法之后,此时就应该先干一个事情,通过Cluster层的一些组件,服务注册中心,是用什么技术来进行实现呢?往简单了说,服务注册中心也可以是你自己手撸一个,也不难 + +自己手撸一个,服务去注册,其他服务去拉取注册表进行发现 + +**ZooKeeper**,稍微自己上网百度搜索一下,**ZooKeeper**入门使用教程,基本概念和原理,还有基本的使用,了解一下 + +**Cluster层**,从本地缓存的服务注册表里获取到要调用的服务的机器列表 + +**负载均衡**,**面试突击第一季**里,我们分析过**Dubbo的负载均衡策略**,此时你就可以把那些策略说一说,我要设计多少种策略,从服务的机器列表中采用负载均衡算法从里面选择出来一台机器 + +选择好了机器,知道了对方的端口号,而且知道你的请求调用,调用哪个Interface的哪个方法,把这些信息交给协议层 + +把数据组织一下,**协议**,**序列化机制**,**底层用什么网络通信框架**,比如**netty,mina**现在用的比较少,序列化和反序列化有没有概念,**Java基础概念,一个复杂的请求数据序列化成二进制的字节数组** + +**反序列化就是从字节数组变成请求数据结构** + +按照那个协议的规范对请求数据进行组织,不同的协议,组织出来的数据看起来是不一样的 + +**netty基本的原理** + +解析完毕了之后,就知道,应该调用自己本地哪个Interface的实现类的哪个方法 + + + +**我们的课程每天都会有一个作业,引导大家把学习到的项目经验、技术方案和生产优化落地到自己负责的项目中去,让大家出去面试的时候,可以把各种技术结合自己的项目来回答面试官的各种深度拷问** + +**大家不要小看这个,根据我多年的面试经验来看,拥有这个技能的人凤毛麟角,这种人出去绝对是各大公司争抢的对象。** + +**我们的课程每天都会有一个作业,引导大家把学习到的项目经验、技术方案和生产优化落地到自己负责的项目中去,让大家出去面试的时候,可以把各种技术结合自己的项目来回答面试官的各种深度拷问** + +**大家不要小看这个,根据我多年的面试经验来看,拥有这个技能的人凤毛麟角,这种人出去绝对是各大公司争抢的对象。** + +**所以希望大家好好完成每天的作业,我布置的大量作业,就是为了帮你锻造出这种能力** + +**学习课程以及完成作业的过程中,大家一定会有很多的问题,可以到专栏的评论区去提问** + +**每天我都会和之前带出来的一批阿里、蚂蚁金服、滴滴的优秀同学给大家进行答疑,并且我们还有专门的付费用户的微信群,大家可以在微信群里跟我们一起进行技术交流** + +**如果你能坚持下来,学满6季,还可以获取私人定制的面试一条龙VIP服务** + +**如果是连续6季面试训练营都购买的同学,还可以获取面试一条龙VIP服务** + +**具体信息大家看“狸猫技术窝”公众号的知识店铺内的训练营详情即可** + +**具体可参见训练营目录下的《训练营专属服务》文档。简单来说,这个私人定制的面试VIP服务,会为你的跳槽面试全程保驾护航** + +**“狸猫技术窝”**,找到我们的训练营的详情页面 + + diff --git a/docs/distributed-system/service-register-discovery.md b/docs/distributed-system/service-register-discovery.md new file mode 100644 index 0000000..d9ca3fe --- /dev/null +++ b/docs/distributed-system/service-register-discovery.md @@ -0,0 +1,14 @@ + +**zk,一般来说还好,服务注册和发现,都是很快的** + +**eureka,必须优化参数** + +**eureka.server.responseCacheUpdateIntervalMs = 3000** +**eureka.client.registryFetchIntervalSeconds = 30000** + +**eureka.client.leaseRenewalIntervalInSeconds = 30** +**eureka.server.evictionIntervalTimerInMs = 60000** +**eureka.instance.leaseExpirationDurationInSeconds = 90** + +**服务发现的时效性变成秒级,几秒钟可以感知服务的上线和下线** + diff --git a/docs/distributed-system/springCloud-and-rpc-framework.md b/docs/distributed-system/springCloud-and-rpc-framework.md new file mode 100644 index 0000000..92eb4b6 --- /dev/null +++ b/docs/distributed-system/springCloud-and-rpc-framework.md @@ -0,0 +1,10 @@ + +### 1、作业1 + +**把RPC框架如何设计,这个问题,你把整体思路去屡一下,对应的一些细节,很多可以参考之前面试突击第一季的,还有一些网络通信框架,netty,找一些资料,补充了解一些细节,包括动态代理** + +序列化协议 + +### 2、作业2 + +**不看资料,手画Spring Cloud底层原理,Eureka** diff --git a/docs/distributed-system/springCloud-study-theory.md b/docs/distributed-system/springCloud-study-theory.md new file mode 100644 index 0000000..6735eb3 --- /dev/null +++ b/docs/distributed-system/springCloud-study-theory.md @@ -0,0 +1,41 @@ +问你**Dubbo底层架构原理**是一样的,不求你说能看过**Spring Cloud的源码**,单单就是说搞明白他的一些底层架构原理,也是不错的 + +![Eureka服务注册中心的原理](/docs/distributed-system/images/springCloud-study-theory.png) +**Eureka、Ribbon、Feign、Zuul** + +就是优化并发冲突 + +如果你基于**Spring Cloud**对外发布一个接口,实际上就是支持**http协议**的,对外发布的就是一个最最普通的**Spring MVC的http接口** + +**feign**,他是对一个接口打了一个注解,他一定会针对这个注解标注的接口生成动态代理,然后你针对feign的动态代理去调用他的方法的时候,此时会在底层生成http协议格式的请求,/order/create?productId=1 + +底层的话,使用HTTP通信的框架组件,**HttpClient**,**先得使用Ribbon去从本地的Eureka注册表的缓存里获取出来对方机器的列表,然后进行负载均衡,选择一台机器出来,接着针对那台机器发送Http请求过去即可** + +配置一下不同的请求路径和服务的对应关系,你的请求到了网关,他直接查找到匹配的服务,然后就直接把请求转发给那个服务的某台机器,**Ribbon从Eureka本地的缓存列表里获取一台机器,负载均衡,把请求直接用HTTP通信框架发送到指定机器上去** + + + +**我们的课程每天都会有一个作业,引导大家把学习到的项目经验、技术方案和生产优化落地到自己负责的项目中去,让大家出去面试的时候,可以把各种技术结合自己的项目来回答面试官的各种深度拷问** + +**大家不要小看这个,根据我多年的面试经验来看,拥有这个技能的人凤毛麟角,这种人出去绝对是各大公司争抢的对象。** + +**我们的课程每天都会有一个作业,引导大家把学习到的项目经验、技术方案和生产优化落地到自己负责的项目中去,让大家出去面试的时候,可以把各种技术结合自己的项目来回答面试官的各种深度拷问** + +**大家不要小看这个,根据我多年的面试经验来看,拥有这个技能的人凤毛麟角,这种人出去绝对是各大公司争抢的对象。** + +**所以希望大家好好完成每天的作业,我布置的大量作业,就是为了帮你锻造出这种能力** + +**学习课程以及完成作业的过程中,大家一定会有很多的问题,可以到专栏的评论区去提问** + +**每天我都会和之前带出来的一批阿里、蚂蚁金服、滴滴的优秀同学给大家进行答疑,并且我们还有专门的付费用户的微信群,大家可以在微信群里跟我们一起进行技术交流** + +**如果你能坚持下来,学满6季,还可以获取私人定制的面试一条龙VIP服务** + +**如果是连续6季面试训练营都购买的同学,还可以获取面试一条龙VIP服务** + +**具体信息大家看“狸猫技术窝”公众号的知识店铺内的训练营详情即可** + +**具体可参见训练营目录下的《训练营专属服务》文档。简单来说,这个私人定制的面试VIP服务,会为你的跳槽面试全程保驾护航** + +**“狸猫技术窝”**,找到我们的训练营的详情页面 +