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
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,10 @@
- [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.
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.