From 7e6df5233749deb0632c6d2e0c7b79d2909a9822 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=87=E4=BA=AE?= Date: Mon, 5 Aug 2019 19:17:22 +0800 Subject: [PATCH 1/4] add . --- README.md | 4 + docs/distributed-system/code/code3.zip | Bin 0 -> 25555 bytes docs/distributed-system/gray-environment.md | 76 ++++++++++++++++++ .../images/registration-center-optimize.png | Bin 0 -> 78645 bytes .../registration-center-optimize.md | 6 ++ .../service-register-gateway-router.md | 12 +++ docs/distributed-system/work-register.md | 13 +++ 7 files changed, 111 insertions(+) create mode 100755 docs/distributed-system/code/code3.zip create mode 100644 docs/distributed-system/gray-environment.md create mode 100755 docs/distributed-system/images/registration-center-optimize.png create mode 100644 docs/distributed-system/registration-center-optimize.md create mode 100644 docs/distributed-system/service-register-gateway-router.md create mode 100644 docs/distributed-system/work-register.md diff --git a/README.md b/README.md index 24713d6..9a0a08b 100644 --- a/README.md +++ b/README.md @@ -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) ### 第二季-高并发 diff --git a/docs/distributed-system/code/code3.zip b/docs/distributed-system/code/code3.zip new file mode 100755 index 0000000000000000000000000000000000000000..9060d04f55403ab8674410d42ef8c247cb9d7bfd GIT binary patch literal 25555 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 tPn2)FhFAXv1+*}NchJ@H6yV + io.jmnarloch + ribbon-discovery-filter-spring-cloud-starter + 2.1.0 + + +写一个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 + + + diff --git a/docs/distributed-system/images/registration-center-optimize.png b/docs/distributed-system/images/registration-center-optimize.png new file mode 100755 index 0000000000000000000000000000000000000000..3fec6a58ae4a8a8527269ebb146c92e01795e3a5 GIT binary patch literal 78645 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ສIV8)L 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 literal 0 HcmV?d00001 diff --git a/docs/distributed-system/registration-center-optimize.md b/docs/distributed-system/registration-center-optimize.md new file mode 100644 index 0000000..ffe41c5 --- /dev/null +++ b/docs/distributed-system/registration-center-optimize.md @@ -0,0 +1,6 @@ + +![分布式注册中心](/docs/distributed-system/images/registration-center-optimize.png) +#### eureka:peer-to-peer,每台机器都是高并发请求,有瓶颈 +#### zookeeper:服务上下线,全量通知其他服务,网络带宽被打满,有瓶颈 + +#### 分布式服务注册中心,分片存储服务注册表,横向扩容,每台机器均摊高并发请求,各个服务主动拉取,避免反向通知网卡被打满 diff --git a/docs/distributed-system/service-register-gateway-router.md b/docs/distributed-system/service-register-gateway-router.md new file mode 100644 index 0000000..a65167b --- /dev/null +++ b/docs/distributed-system/service-register-gateway-router.md @@ -0,0 +1,12 @@ + +#### 生产环境,微服务生产实践 + +开发了一个新的服务,线上部署,配合网关动态路由的功能,在网关里配置一下路径和新服务的映射关系,此时请求过来直接就可以走到新的服务里去 + +对已有服务进行迭代和开发,新版本,灰度发布,新版本部署少数几台机器,通过一个界面,开启这个服务的灰度发布,**此时zuul filter启用,按照你的规则,把少量的流量打入到新版本部署的机器上去** + +观察一下少量流量在新版本的机器上运行是否正常 + +版本改成current,全量机器部署,关闭灰度发布功能,网关就会把流量均匀分发给那个服务了 + + diff --git a/docs/distributed-system/work-register.md b/docs/distributed-system/work-register.md new file mode 100644 index 0000000..5afd505 --- /dev/null +++ b/docs/distributed-system/work-register.md @@ -0,0 +1,13 @@ + +#### Dubbo框架原理 +#### Spring Cloud框架原理 +#### 服务框架的技术选型 + +#### 服务注册中心技术选型和核心原理 +#### 生产优化 +#### 架构优化 + +#### 网关系统技术选型和核心原理 +#### 生产优化(灰度发布、动态路由) + +#### 生产级的分布式系统里,新服务开发如何做,老服务迭代如何做 From 1effce34ab4e98c3f3296a663ca97e8c42144541 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=87=E4=BA=AE?= Date: Mon, 5 Aug 2019 19:18:37 +0800 Subject: [PATCH 2/4] fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9a0a08b..7826239 100644 --- a/README.md +++ b/README.md @@ -200,7 +200,7 @@ - [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) +- [27、说说你们一个服务从开发到上线,服务注册、网关路由、服务调用的流程?](/docs/distributed-system/service-register-gateway-router.md) - [28、作业:看看你们公司的服务注册中心能否支撑上万服务实例的大规模场景?](/docs/distributed-system/work-register.md) From c41a79bfdd0eebb36629f8ee873d9b6683b7b89c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=87=E4=BA=AE?= Date: Tue, 6 Aug 2019 22:45:15 +0800 Subject: [PATCH 3/4] add . --- README.md | 4 ++ docs/distributed-system/system-dilatation.md | 12 +++++ docs/distributed-system/system-framework.md | 51 +++++++++++++++++++ docs/distributed-system/system-qps.md | 42 +++++++++++++++ .../work-system-dilatation.md | 2 + 5 files changed, 111 insertions(+) create mode 100644 docs/distributed-system/system-dilatation.md create mode 100644 docs/distributed-system/system-framework.md create mode 100644 docs/distributed-system/system-qps.md create mode 100644 docs/distributed-system/work-system-dilatation.md diff --git a/README.md b/README.md index 7826239..f29ce4f 100644 --- a/README.md +++ b/README.md @@ -202,6 +202,10 @@ - [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) +- [29、画一下你们系统的整体架构图,说说各个服务在生产环境怎么部署的?](/docs/distributed-system/system-framework.md) +- [30、你们系统每天有多大访问量?每个服务高峰QPS多少?压测过服务最大QPS吗?](/docs/distributed-system/system-qps.md) +- [31、如果系统访问量比现在增加10倍,你们考虑过系统的扩容方案吗?](/docs/distributed-system/system-dilatation.md) +- [32、作业:独立画出自己系统的生产部署架构图,梳理系统和服务的QPS以及扩容方案](/docs/distributed-system/work-system-dilatation.md) ### 第二季-高并发 diff --git a/docs/distributed-system/system-dilatation.md b/docs/distributed-system/system-dilatation.md new file mode 100644 index 0000000..cbfbd00 --- /dev/null +++ b/docs/distributed-system/system-dilatation.md @@ -0,0 +1,12 @@ + +如果访问量扩大10倍,如何扩容? + +网关直接多部署10倍的机器即可,前面的Nginx做会负载均衡,把流量均匀分发给各个网关机器 + +服务扩容,都很简单的,多加机器,部署启动,自动注册到注册中心里去,此时其他服务会自动感知到你的服务多加了一些机器 + +服务实例变多了10倍,此时几十个服务实例,几百个服务实例,对eureka机器会造成每秒几百请求,没问题,eureka机器,8核16G的配置,单机抗上千请求,很轻松 + +数据库本来是每秒几百请求,10倍,每秒高峰期是三四千请求,横向扩容很麻烦,此时可以考虑给单个数据库部署的机器提高配置,32核128G高配物理机,每秒钟抗几千请求问题不大 + + diff --git a/docs/distributed-system/system-framework.md b/docs/distributed-system/system-framework.md new file mode 100644 index 0000000..66a1f5f --- /dev/null +++ b/docs/distributed-system/system-framework.md @@ -0,0 +1,51 @@ + +### 服务框架、注册中心、网关系统 + +即使你没有用很多微服务架构里的东西,只要有上述三个东西,配合上写一些文档,接口文档,分布式系统架构,其实就出来了,很多中小型公司,一个小型技术团队,后端开发工程师总共就10多个人 + +关注分布式系统一些生茶实践的问题,应对你们公司的流量,各个服务、网关、注册中心,都是如何部署的,部署几台机器,每台机器的配置是什么,每天整体的流量有多少,高峰期的请求量有多少,你的整体系统是否抗住了 + +各个服务之间的超时、重试、幂等,是否搞定了 + +数据库配置和部署 + + +很多同学,他们因为在自己公司里面开发的都是一些单块系统,微服务架构,但是公司没什么流量,他对机器的配置抗多少并发请求,其实没多大的概念,都不是什么技术问题,很多同学出去面试的时候 + +死扣生产细节问题,每秒3000并发请求,各个服务部署多少机器,机器的配置,数据库的机器和配置,网关的机器和配置,注册中心的机器和配置,什么样的机器配置能抗多大的流量和请求 + + + +中小型的系统,拆分为10~20个服务,微服务,庞大的互联网公司,都有几百个、几千个、几万个服务,服务规模,服务注册中心,妥妥的,2~3台机器就足够了,把服务的上线、故障以及发现优化到极致 + +服务上线,注册表多级缓存同步1秒,注册表拉取频率降低为1秒 +服务心跳,1秒上报1次 +故障发现,1秒钟检查一次1心跳,如果发现2秒内服务没上报心跳,认为故障了 + +服务注册中心都没任何压力,最多就是每秒钟几十次请求而已 + +服务注册中部署个2台机器,每台机器就是4核8G,高可用冗余,任何一台机器死掉,不会影响系统的运行 + +服务注册中心这样的一个处理逻辑,4核8G的机器,每秒钟轻松抗几百请求,上千请求也是可以的 + +通常来说,如果每秒钟的并发在1000以内的话,很少部署的,每个服务部署2台机器,每台机器4核8G,每台机器每秒抗个几百请求,一点问题都没有,别搞出来一个请求过来,查数据库SQL写的太烂了,一条SQL要跑3秒钟 + +大部分的系统,高峰期每秒几百请求,低峰期每秒几十请求,甚至几个请求 + + + +网关系统,4核8G的机器,一台机器抗每秒几百请求,部署3~4台机器,保证可以网关系统每台机器的压力比较小,进一步保证网关系统可靠性 + + + +数据库,MySQL,16核32G,物理机最佳,32核64G,最多抗个每秒钟几千请求问题不大,平时抗个每秒钟几十或者几百请求,三四千请求,但是只不过此时会导致MySQL机器的负载很高,CPU使用率很高,磁盘IO负载很高,网络负载很高 + + + + + + + + + + diff --git a/docs/distributed-system/system-qps.md b/docs/distributed-system/system-qps.md new file mode 100644 index 0000000..eb4b910 --- /dev/null +++ b/docs/distributed-system/system-qps.md @@ -0,0 +1,42 @@ + +很常问,很多人回来跟我说,老师,我不知道我们系统每秒钟请求有多少,每天请求量有多大,我都没任何的概念,因为系统开发好直接部署,根本不管这些东西,有没有什么比较好的工具可以看到服务的访问量,qps + + + + + +每个服务每天多少请求量,高峰期每秒钟多少请求量,你完全可以在代码里,稍微加一些metrics的代码,如果你看过很多的开源项目的话,开源的分布式系统,eureka、hadoop、spark、hbase、kafka,metrics机制 + + +任何一个开源系统都需要对自己运行过程中各种请求量、每秒的请求量、成功次数、失败次数,在内存里直接做一些计数,他会给你开放一些端口号,比如http端口号,你只要请求他这个端口号,他就会把这些metrics统计返回给你 + + + + +在你负责的核心服务里,核心接口,开发一个简单的metric统计机制,AtomicLong,原子性,并发下数据统计准确,不会错误,每个接口被调用的时候,一个是可以对每个接口每分钟都做一个Metric统计 + +对每个接口每天的请求使用一个AtomicLong做一个计数,统计出来每天的请求次数 + +计算一下每个接口从请求到执行完毕,需要耗费多长时间,算一下每个接口平均的请求延时,TP99,TP95,TP90,TP50,TP99,99%的请求耗费的时间在100ms以内,但是1%的请求可能耗费的时间在100ms以上 + +**TP99 = 100ms** +**TP95 = 50ms,95%的请求耗费的时间多在50ms以内,但是5%的请求耗费的时间在50ms以上** + +平均响应延时 + +你可以计算出来这个接口平均响应延时,把每次调用的耗时跟历史总耗时加起来,除以当前的请求次数,不就是最新的接口响应平均延时 + + + + +你完全可以通过log4j,logback,日志组件,把每分钟每个接口被访问的次数直接打印到日志文件里去,除以60,不就知道高峰期每秒钟系统被访问的次数了吗,每天每个接口访问的总次数打印到日志里去 + + + +压测工具,百度一下:java压测工具,开源的可以用的,模拟出来同时有多少用户发起多少请求,每秒发起1000请求能抗住吗?每秒钟发起2000请求能抗住吗? + +假设你的系统每秒钟最多抗800请求,如果你的压测工具每秒发起了1000个请求,此时他会发现最多只有800个请求同时可以被处理,剩余200个请求需要进行排队被阻塞住了,告诉你,你的这个系统每秒钟最多抗800个请求 + + + + diff --git a/docs/distributed-system/work-system-dilatation.md b/docs/distributed-system/work-system-dilatation.md new file mode 100644 index 0000000..de45a64 --- /dev/null +++ b/docs/distributed-system/work-system-dilatation.md @@ -0,0 +1,2 @@ + +部署,机器配置,大概能抗多少并发;流量、QPS、性能,metrics;压测,借助一些小工具;扩容方案,横向加机器,还是说纵向提升机器的配置 From e561dc3b12d59904f61c43798181de6eaf0808f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=87=E4=BA=AE?= Date: Wed, 7 Aug 2019 19:07:03 +0800 Subject: [PATCH 4/4] add . --- README.md | 4 + docs/distributed-system/code/code3.zip | Bin 25555 -> 0 bytes docs/distributed-system/code/code4.zip | Bin 0 -> 97459 bytes .../interface-idempotence.md | 84 ++++++++++++++++++ docs/distributed-system/request-retry.md | 16 ++++ .../service-request-time-out.md | 76 ++++++++++++++++ .../work-interface-idempotence.md | 17 ++++ 7 files changed, 197 insertions(+) mode change 100755 => 100644 docs/distributed-system/code/code3.zip create mode 100755 docs/distributed-system/code/code4.zip create mode 100644 docs/distributed-system/interface-idempotence.md create mode 100644 docs/distributed-system/request-retry.md create mode 100644 docs/distributed-system/service-request-time-out.md create mode 100644 docs/distributed-system/work-interface-idempotence.md diff --git a/README.md b/README.md index f29ce4f..db6fb96 100644 --- a/README.md +++ b/README.md @@ -206,6 +206,10 @@ - [30、你们系统每天有多大访问量?每个服务高峰QPS多少?压测过服务最大QPS吗?](/docs/distributed-system/system-qps.md) - [31、如果系统访问量比现在增加10倍,你们考虑过系统的扩容方案吗?](/docs/distributed-system/system-dilatation.md) - [32、作业:独立画出自己系统的生产部署架构图,梳理系统和服务的QPS以及扩容方案](/docs/distributed-system/work-system-dilatation.md) +- [33、你们生产环境的服务是怎么配置超时和重试参数的?为什么要这样配置?](/docs/distributed-system/service-request-time-out.md)[代码下载点击这里哦!](https://github.com/shishan100/Java-Interview-Advanced/raw/master/docs/distributed-system/code/code4.zip) +- [34、如果出现服务请求重试,会不会出现类似重复下单的问题?](/docs/distributed-system/request-retry.md) +- [35、对于核心接口的防重幂等性,你们是怎么设计的?怎么防止重复下单问题?](/docs/distributed-system/interface-idempotence.md) +- [36、作业:看看自己系统的核心接口有没有设计幂等性方案?如果没有,应该怎么设计?](/docs/distributed-system/work-interface-idempotence.md) ### 第二季-高并发 diff --git a/docs/distributed-system/code/code3.zip b/docs/distributed-system/code/code3.zip old mode 100755 new mode 100644 index 9060d04f55403ab8674410d42ef8c247cb9d7bfd..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 GIT binary patch literal 0 HcmV?d00001 literal 25555 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 literal 0 HcmV?d00001 diff --git a/docs/distributed-system/interface-idempotence.md b/docs/distributed-system/interface-idempotence.md new file mode 100644 index 0000000..8062013 --- /dev/null +++ b/docs/distributed-system/interface-idempotence.md @@ -0,0 +1,84 @@ + +接口幂等性实现起来非常的简单,不打算带着大家手写代码 + +(1)数据库唯一索引 +(2)基于Redis实现一套幂等性防重框架 + + + +对于插入类的操作,一般都是建议大家要在数据库表中设计一些唯一索引 + + +你如果有一个订单被支付了,此时就要通知wms创建一个对应发货单,也是数据库里的一个表,仓库里的人会看到这个发货单,此时他就会根据发货单的信息从仓库里进行拣货,打包,封装,交给物流公司 + + + +发货单 + +id order_id 订单金额 发货地址 xxxx + +对order_id就可以建立一个唯一索引,你插入发货单的时候,同一个order_id最多只能对应一个发货单,不可能说同样的一个order_id对应了多个发货单 + + +订单服务 -> wms服务,出现了重试,导致第二次请求再次让人家创建这个订单的发货单,create语句,order_id触发了唯一索引约束 + + + + + +扣减库存、累加积分,更新,很难通过数据库唯一索引来保证 + + +基于Redis实现一套接口的防重框架 + +你得做一个类似spring mvc里的拦截器这样的东西,在这个拦截器里,他会拦截所有的请求,对所有的请求都会提取请求对应的参数,GET请求、POST请求、PUT请求,有些参数是跟在URL地址里的,?xx=xx&xx=xx + +POST、PUT,可能是请求体里的,可能是一个JSON格式 + +把参数拼接在一起,作为key去redis中判断一下,是否存在这个key,之前附加这些参数的请求是否发起过,如果没有的话,此时就可以把这些参数+接口名称,作为一个key,存储到redis中去 + +然后呢,把请求放行,去执行这个请求 + +如果说人家重试再次发起一个这个请求,此时就可以判断出来,参数组成的key在redis中已经存在了,此时就不让执行这个请求了,认为是重复调用了 + + + + + +考虑很多问题,幂等不幂等,通用框架,需要一个公司所有的接口都按照指定的参数来传递,还有很多业务语义的问题 + +第一次发起一个请求,直接把请求key放入redis,但是他执行的过程中失败了,而且还阻塞了一段时间,此时人家再次重试发起第二次请求,这个时候按照上述的框架逻辑,就会把请求拦截下来了 + + +到底是不是要对所有接口都开启这么一个东西呢? + + +每个接口如果执行成功了之后,我可以设置一个每个接口调用的时候执行成功之后,做一个后拦截器,如果成功了,就把请求对应的参数拼接为key放入redis中 + +有没有可能是第一次请求发送过来,在执行过程中,时间长了,比如需要1.3秒才执行完毕;此时人家发现超过1s了,直接重试,第二次请求过来了,也在正常的执行 + +第一次请求1.3秒之后执行成功了,第二次请求也执行成功了 + +只要一个服务希望对自己的接口开启幂等性防重功能,就把你开发好的拦截器对应的jar包,通过maven引入一个依赖就可以了 + + + +中大型互联网公司里也没做一个统一的防重幂等框架,其实一般都是各个服务对自己核心的接口,如果要保证幂等性的话,每个服务根据自己的业务逻辑来实现,而且仅仅是对少数核心接口做幂等性保障 + + +核心接口,库存服务,扣减库存接口 + +定制化的去针对接口开发幂等性的机制,比如说一旦库存扣减成功之后,就立马要写一条数据到redis里去,order_id_11356_stock_deduct,写入redis中,如果写入成功,就说明之前这个订单的库存扣减,没人执行过 + +但是如果此时有一些重试的请求过来了,调用了你的库存扣减接口,他同时也进行了库存的扣减,但是他用同样的一个key,order_id_11356_stock_deduct,写入redis中,此时会发现已经有人写过key,key已经存在了 + +此时你就应该直接对刚才的库存扣减逻辑做一个反向的回滚逻辑,update product_stock set stock = stock - 100,update product_stock set stock = stock + 100,反向逻辑,回滚掉,自己避免说重复扣减库存 + + + + + + +核心接口,幂等性都是自己保证的,人家可能会重试调用你的接口,对于create类的操作,用唯一索引来保证;对update类的操作,建议在核心接口里基于自己的业务逻辑,配合上redis,来保证幂等性 + + diff --git a/docs/distributed-system/request-retry.md b/docs/distributed-system/request-retry.md new file mode 100644 index 0000000..7ae9e59 --- /dev/null +++ b/docs/distributed-system/request-retry.md @@ -0,0 +1,16 @@ + +订单服务 -> 创建订单 + + -> 库存服务 -> 扣减库存 + -> wms服务 -> 通知发货 + -> 积分服务 -> 增加积分 + +订单服务调用库存服务的时候,因为网络抖动,请求超时了,超过了秒钟,此时订单服务会重试,再次调用一下库存服务,发送一模一样的请求过去 + + + +比如说,订单服务第一次请求库存服务,库存服务其实是把扣减库存的业务逻辑执行成功了,只不过网络问题,导致响应迟迟没有返回给订单服务,可能在1.2s之后返回了响应给订单服务 + +订单服务就认为请求超时了,他就再次发送了一个一模一样的请求给库存服务,库存服务可能会再次对库存进行扣减 + + diff --git a/docs/distributed-system/service-request-time-out.md b/docs/distributed-system/service-request-time-out.md new file mode 100644 index 0000000..4a14374 --- /dev/null +++ b/docs/distributed-system/service-request-time-out.md @@ -0,0 +1,76 @@ + +分布式系统,拆分为很多个服务之后,他们互相之间要进行调用,平时服务内要优化的一些参数其实不多,服务与服务之间的调用,会不会出现调用的超时,每个服务超时的时间是多长,超时之后是否要进行重试,重试几次 + +高可用,hystrix进行资源隔离、熔断、降级,zuul网关层直接进行限流 + + +网关 ->(卡住) 订单服务 ->(卡住) wms服务 + +网关收到的一个http响应,可能就是一个500,internal error + + + + + +Spring Cloud生产优化,系统第一次启动的时候,人家调用你经常会出现timeout + +每个服务第一次被请求的时候,他会去初始化一个Ribbon的组件,初始化这些组件需要耗费一定的时间,所以很容易会导致。让每个服务启动的时候就直接初始化Ribbon相关的组件,避免第一次请求的时候初始化 + +``` +ribbon: + eager-load: + enabled: true + + +zuul: + ribbon: + eager-load: + enabled: true + +feign: + hystrix: +enabled: false + +``` + +我们刚才启动了wms服务之后,其实订单服务和积分服务、wms服务、库存服务之间的请求都是没问题的,日志全部都打印出来了,不会说第一次请求因为ribbon加载过慢导致请求失败的问题 + +但是zuul网关层面去请求订单服务的时候,他还是可能会认为自己超时了,windows电脑上跑这样的一套系统,网络请求都是比较慢的,因为你有很多服务与服务之间的调用,order和另外3个服务一套交互下来,比如超过了1秒钟 + +zuul而言感觉耗时太久了,还是会认为是超时的 + +windows电脑走的都是家用网络,我家里的网络情况不是太好,网卡,网速慢,信号弱 + + + + +线上的服务,每个服务部署上线的时候,一般来说都需要配置相关的超时时间还有重试次数 + +订单服务 -> 积分服务、库存服务、仓促服务 + +订单服务对于其他服务的调用,一般来说限制在多长时间就必须认为是超时了,如果超时之后如何进行重试 + +积分服务部署了两台机器,机器1和机器2 + +订单服务在一次请求积分服务的机器1的时候,超过1秒钟,超时了;此时需要进行重试,对积分服务当前的这台机器1重试几次?如果说机器1不行,是否可以重试一下积分服务的机器2? + + +``` +ribbon: + ConnectTimeout: 3000 + ReadTimeout: 3000 + OkToRetryOnAllOperations: true + MaxAutoRetries: 1 + MaxAutoRetriesNextServer: 1 + +中小型的系统,没必要直接开启hystrix,资源隔离、熔断、降级,如果你没有设计好一整套系统高可用的方案 + +zuul请求一个订单服务,超过1秒就认为超时了,此时会先重试一下订单服务这台机器,如果还是不行就重试一下订单服务的其他机器 + + +org.springframework.retry +spring-retry + + +hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000 +``` \ No newline at end of file diff --git a/docs/distributed-system/work-interface-idempotence.md b/docs/distributed-system/work-interface-idempotence.md new file mode 100644 index 0000000..7fc72cd --- /dev/null +++ b/docs/distributed-system/work-interface-idempotence.md @@ -0,0 +1,17 @@ + +分布式系统,考察生产实践细节,常问的面试问题 + +服务框架、注册中心、网关系统、部署架构、超时重试、幂等性 + + +跟你自己的业务系统有关系了,你们的系统服务之间的调用,有没有超时和重试的配置,如果没有,如何优化配置,如果有,核心接口有没有幂等性机制,重复插入数据,重复跟新数据 + +如果有问题,结合你的业务,如何基于唯一索引、redis定制化防重机制 + + +可以在评论区提问,我们会给大家答疑,狸猫技术窝,知识店铺,训练营页面里,有评论区,提问,答疑 + +好好的完成作业,在作业里设计自己的系统业务逻辑对应的一套幂等性机制,每天的作业,都是可以提交,你可以把作业提交到店铺里去,每天我们都会给你们提交的作业进行点评,对你们作业里的问题进行答疑 + + +付费微信交流群,课程目录里有一个文档,入群步骤