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 @@ -198,6 +198,10 @@
- [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)
- [25、如果需要部署上万服务实例,现有的服务注册中心能否抗住?如何优化?](/docs/distributed-system/registration-center-optimize.md)
- [26、你们是如何基于网关实现灰度发布的?说说你们的灰度发布方案?](/docs/distributed-system/gray-environment.md)[代码下载点击这里哦!](https://github.com/shishan100/Java-Interview-Advanced/raw/master/docs/distributed-system/code/code3.zip)
- [27、说说你们一个服务从开发到上线,服务注册、网关路由、服务调用的流程?](/docs/distributed-system/service-register-gateway-router.md)
- [28、作业:看看你们公司的服务注册中心能否支撑上万服务实例的大规模场景?](/docs/distributed-system/work-register.md)


### 第二季-高并发
Expand Down
Binary file added docs/distributed-system/code/code3.zip
Binary file not shown.
76 changes: 76 additions & 0 deletions docs/distributed-system/gray-environment.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@

#### 准备一个数据库和一个表(也可以用Apollo配置中心、Redis、ZooKeeper,其实都可以),放一个灰度发布启用表

```
id service_id path enable_gray_release

CREATE TABLE `gray_release_config` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`service_id` varchar(255) DEFAULT NULL,
`path` varchar(255) DEFAULT NULL,
`enable_gray_release` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8



在zuul里面加入下面的filter,可以在zuul的filter里定制ribbon的负载均衡策略

<dependency>
<groupId>io.jmnarloch</groupId>
<artifactId>ribbon-discovery-filter-spring-cloud-starter</artifactId>
<version>2.1.0</version>
</dependency>

写一个zuul的filter,对每个请求,zuul都会调用这个filter

@Configuration
public class GrayReleaseFilter extends ZuulFilter {

@Autowired
private JdbcTemplate jdbcTemplate;

@Override
public int filterOrder() {
return PRE_DECORATION_FILTER_ORDER - 1;
}

@Override
public String filterType() {
return PRE_TYPE;
}

@Override
public boolean shouldFilter() {

}

@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();

Random random = new Random();
int seed = random.getInt() * 100;

if (seed = 50) {
// put the serviceId in `RequestContext`
RibbonFilterContextHolder.getCurrentContext()
.add("version", "new");
} else {
RibbonFilterContextHolder.getCurrentContext()
.add("version", "old");
}

return null;
}
}
```

eureka:
instance:
metadata-map:
version: new



Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions docs/distributed-system/registration-center-optimize.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

![分布式注册中心](/docs/distributed-system/images/registration-center-optimize.png)
#### eureka:peer-to-peer,每台机器都是高并发请求,有瓶颈
#### zookeeper:服务上下线,全量通知其他服务,网络带宽被打满,有瓶颈

#### 分布式服务注册中心,分片存储服务注册表,横向扩容,每台机器均摊高并发请求,各个服务主动拉取,避免反向通知网卡被打满
12 changes: 12 additions & 0 deletions docs/distributed-system/service-register-gateway-router.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@

#### 生产环境,微服务生产实践

开发了一个新的服务,线上部署,配合网关动态路由的功能,在网关里配置一下路径和新服务的映射关系,此时请求过来直接就可以走到新的服务里去

对已有服务进行迭代和开发,新版本,灰度发布,新版本部署少数几台机器,通过一个界面,开启这个服务的灰度发布,**此时zuul filter启用,按照你的规则,把少量的流量打入到新版本部署的机器上去**

观察一下少量流量在新版本的机器上运行是否正常

版本改成current,全量机器部署,关闭灰度发布功能,网关就会把流量均匀分发给那个服务了


13 changes: 13 additions & 0 deletions docs/distributed-system/work-register.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@

#### Dubbo框架原理
#### Spring Cloud框架原理
#### 服务框架的技术选型

#### 服务注册中心技术选型和核心原理
#### 生产优化
#### 架构优化

#### 网关系统技术选型和核心原理
#### 生产优化(灰度发布、动态路由)

#### 生产级的分布式系统里,新服务开发如何做,老服务迭代如何做