Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -180,8 +180,24 @@
- [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)
- [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)
- [21、你们对网关的技术选型是怎么考虑的?能对比一下各种网关技术的优劣吗?](/docs/distributed-system/gateway-model-selection.md)
- [22、说说生产环境下,你们是怎么实现网关对服务的动态路由的?](/docs/distributed-system/dynamic-route.md)[代码下载点击这里哦!](https://github.com/shishan100/Java-Interview-Advanced/raw/master/docs/distributed-system/code/code2.zip)
- [23、如果网关需要抗每秒10万的高并发访问,你应该怎么对网关进行生产优化?](/docs/distributed-system/gateway-high-concurrency.md)
- [24、作业:你们公司的网关是怎么技术选型的,假设有高并发场景怎么优化?](/docs/distributed-system/gateway-technical.md)


### 第二季-高并发
Expand Down
Binary file added docs/distributed-system/code/code2.zip
Binary file not shown.
25 changes: 25 additions & 0 deletions docs/distributed-system/dubbo-augmentability.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
两点,第一点,是核心的组件全部接口化,组件和组件之间的调用,必须全部是依托于接口,去动态找配置的实现类,如果没有配置就用他自己默认的

第二点,提供一种自己实现的组件的配置的方式,比如说你要是自己实现了某个组件,配置一下,人家到时候运行的时候直接找你配置的那个组件即可,作为实现类,不用自己默认的组件了




**我们的课程每天都会有一个作业,引导大家把学习到的项目经验、技术方案和生产优化落地到自己负责的项目中去,让大家出去面试的时候,可以把各种技术结合自己的项目来回答面试官的各种深度拷问**

**大家不要小看这个,根据我多年的面试经验来看,拥有这个技能的人凤毛麟角,这种人出去绝对是各大公司争抢的对象。**

**所以希望大家好好完成每天的作业,我布置的大量作业,就是为了帮你锻造出这种能力**

**学习课程以及完成作业的过程中,大家一定会有很多的问题,可以到专栏的评论区去提问**

**每天我都会和之前带出来的一批阿里、蚂蚁金服、滴滴的优秀同学给大家进行答疑,并且我们还有专门的付费用户的微信群,大家可以在微信群里跟我们一起进行技术交流**

**如果你能坚持下来,学满6季,还可以获取私人定制的面试一条龙VIP服务**

**如果是连续6季面试训练营都购买的同学,还可以获取面试一条龙VIP服务**

**具体信息大家看“狸猫技术窝”公众号的知识店铺内的训练营详情即可**

**具体可参见训练营目录下的《训练营专属服务》文档。简单来说,这个私人定制的面试VIP服务,会为你的跳槽面试全程保驾护航**

73 changes: 73 additions & 0 deletions docs/distributed-system/dubbo-framework-principle.md
Original file line number Diff line number Diff line change
@@ -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
10 changes: 10 additions & 0 deletions docs/distributed-system/dubbo-independent-framework.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@

对**Dubbo**稍微做了一点进一步深入的讲解,但是远远是达不到精通源码的程度,只能说是相对于面试突击第一季要深入了一些,**Dubbo**一次服务请求调用,牵扯到了哪些组件,**负载均衡组件**、**注册中心**、**协议层**、**转换层**、**网络层(netty开发)**、**动态代理**,服务提供者也是类似的

网络通信的一些东西,是如何通过**NIO**的方式,**多线程**的方式,让一个服务提供者被多个服务消费者去并发的调用和请求

从整体架构原理的角度,说了一下如何进行扩展的

能说比普通的人稍微好一些,**技术深度**,那必须得是学其他的课程深入的理解他里面的源码,才能在面试的时候说,我精通一个技术的源码

**Dubbo底层架构原理的图**,自己手画出来,画的足够的熟练,如果有一些什么问题的话,可以提问
27 changes: 27 additions & 0 deletions docs/distributed-system/dubbo-rock-bottom.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@

![Dubbo底层通信原理](/docs/distributed-system/images/dubbo-rock-bottom.png)
如果问到Dubbo底层原理,肯定除了上一讲的底层架构,你能说出来之外,还很可能会追问几个问题,网络通信这块原理的话

netty来举例,NIO来实现的,一台机器同时抗高并发的请求



**所以希望大家好好完成每天的作业,我布置的大量作业,就是为了帮你锻造出这种能力**

**学习课程以及完成作业的过程中,大家一定会有很多的问题,可以到专栏的评论区去提问**

**每天我都会和之前带出来的一批阿里、蚂蚁金服、滴滴的优秀同学给大家进行答疑,并且我们还有专门的付费用户的微信群,大家可以在微信群里跟我们一起进行技术交流**

**如果你能坚持下来,学满6季,还可以获取私人定制的面试一条龙VIP服务**

**如果是连续6季面试训练营都购买的同学,还可以获取面试一条龙VIP服务**

**具体信息大家看“狸猫技术窝”公众号的知识店铺内的训练营详情即可**

**具体可参见训练营目录下的《训练营专属服务》文档。简单来说,这个私人定制的面试VIP服务,会为你的跳槽面试全程保驾护航**






46 changes: 46 additions & 0 deletions docs/distributed-system/dubbo-vs-springCloud.md
Original file line number Diff line number Diff line change
@@ -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服务,会为你的跳槽面试全程保驾护航**

**“狸猫技术窝”**,找到我们的训练营的详情页面
22 changes: 22 additions & 0 deletions docs/distributed-system/dynamic-route.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
```
CREATE TABLE `gateway_api_route` (
`id` varchar(50) NOT NULL,
`path` varchar(255) NOT NULL,
`service_id` varchar(50) DEFAULT NULL,
`url` varchar(255) DEFAULT NULL,
`retryable` tinyint(1) DEFAULT NULL,
`enabled` tinyint(1) NOT NULL,
`strip_prefix` int(11) DEFAULT NULL,
`api_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

INSERT INTO gateway_api_route (id, path, service_id, retryable, strip_prefix, url, enabled) VALUES ('order-service', '/order/**', 'order-service',0,1, NULL, 1);

```

你可以自己用简单的spring mvc+前端页面封装一个可视化的网关管理工作台,如果新开发了一个服务之后,就可以在这个界面上配置一下,说某个服务对应某个url路径,修改,增删改查

http://localhost:9000/order/order/create?productId=1&userId=1&count=2&totalPrice=50

生产级,企业级的功能,网关的动态路由
23 changes: 23 additions & 0 deletions docs/distributed-system/gateway-high-concurrency.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@

第一个是高并发,第二个是如何优化

![高性能网关Zuul](/docs/distributed-system/images/gateway-high-concurrency.png)
**Zuul**网关部署的是什么配置的机器,**部署32核64G,对网关路由转发的请求**,**每秒抗个小几万请求是不成问题的,几台Zuul网关机器**

**每秒是1万请求,8核16G的机器部署Zuul网关,5台机器就够了**

### 生产级的网关,应该具备我刚才说的几个特点和功能:

#### (1)动态路由:新开发某个服务,动态把请求路径和服务的映射关系热加载到网关里去;服务增减机器,网关自动热感知
#### (2)灰度发布:基于现成的开源插件来做
#### (3)授权认证
#### (4)限流熔断
#### (5)性能监控:每个API接口的耗时、成功率、QPS
#### (6)系统日志
#### (7)数据缓存






40 changes: 40 additions & 0 deletions docs/distributed-system/gateway-model-selection.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@

### 网关的核心功能

#### (1)动态路由:新开发某个服务,动态把请求路径和服务的映射关系热加载到网关里去;服务增减机器,网关自动热感知
#### (2)灰度发布
#### (3)授权认证
#### (4)性能监控:每个API接口的耗时、成功率、QPS
#### (5)系统日志
#### (6)数据缓存
#### (7)限流熔断


### 几种技术选型

#### Kong、Zuul、Nginx+Lua(OpenResty)、自研网关

**Kong:Nginx里面的一个基于lua写的模块,实现了网关的功能**
**Zuul:Spring Cloud来玩儿微服务技术架构,Zuul**

**Nginx+Lua(OpenResty):课程目录里面,有一个文档,课程免费学习,亿级流量系统架构的课程,详细讲解了Nginx+Lua的开发**,基于lua自己写类似Kong的网关
**自研网关:自己来写类似Zuul的网关,基于Servlet、Netty来做网关,实现上述所有的功能**


大厂:BAT、京东、美团、滴滴之类的,自研网关,都是基于Netty等技术自研网关;Nginx + Lua(Tengine)来做,封装网关的功能

中小型公司:Spring Cloud技术栈主要是用Zuul,Gateway;如果是Dubbo等技术栈,有的采用Kong等网关,也可以直接不用网关,很多公司压根儿就没用网关,直接Nginx反向代理+负载均衡;

Zuul:基于Java开发,核心网关功能都比较简单,但是比如灰度发布、限流、动态路由之类的,很多都要自己做二次开发

Kong:依托于Nginx实现,OpenResty,lua实现的模块,现成的一些插件,可以直接使用



Zuul(Servlet、Java):高并发能力不强,部署到一些机器上去,还要基于Tomcat来部署,Spring Boot用Tomcat把网关系统跑起来;Java语言开发,可以直接把控源码,可以做二次开发封装各种需要的功能

Nginx(Kong、Nginx+Lua):Nginx抗高并发的能力很强,少数几台机器部署一下,就可以抗很高的并发,精通Nginx源码,很难,c语言,很难说从Nginx内核层面去做一些二次开发和源码定制


Java技术栈为主的大厂,很多其实用Java、Servlet、Netty来开发高并发、高性能的网关系统,自己可以把控一切

6 changes: 6 additions & 0 deletions docs/distributed-system/gateway-technical.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

服务框架的原理和技术选型,你们公司到底是怎么选,为什么?

服务注册中心,思考,你们公司到底是怎么选的,生产环境有没有做一些优化,如果没有,哪些地方是有优化空间的?

网关系统,思考,你们公司是怎么选型的,为什么?生产环境是否对类似动态路由的功能做过优化,如果没有是否有优化空间?
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file.
Loading