From de8dda77162ae6b16a737c2a64c6eeeae3021efe Mon Sep 17 00:00:00 2001 From: yanglbme Date: Sat, 29 Dec 2018 11:25:23 +0800 Subject: [PATCH] docs: update hystrix-semphore-isolation.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hystrix 基于信号量策略实现资源隔离 --- .../hystrix-semphore-isolation.md | 108 +++++++++++++++++- .../img/hystrix-semphore-thread-pool.png | Bin 0 -> 11959 bytes .../img/hystrix-semphore.png | Bin 0 -> 11761 bytes img/hystrix-semphore-thread-pool.png | Bin 0 -> 11959 bytes img/hystrix-semphore.png | Bin 0 -> 11761 bytes 5 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 docs/high-availability/img/hystrix-semphore-thread-pool.png create mode 100644 docs/high-availability/img/hystrix-semphore.png create mode 100644 img/hystrix-semphore-thread-pool.png create mode 100644 img/hystrix-semphore.png diff --git a/docs/high-availability/hystrix-semphore-isolation.md b/docs/high-availability/hystrix-semphore-isolation.md index 2075158..63e03b5 100644 --- a/docs/high-availability/hystrix-semphore-isolation.md +++ b/docs/high-availability/hystrix-semphore-isolation.md @@ -1,2 +1,108 @@ ## 基于 Hystrix 信号量机制实现资源隔离 -待补充。 \ No newline at end of file +Hystrix 里面核心的一项功能,其实就是所谓的**资源隔离**,要解决的最最核心的问题,就是将多个依赖服务的调用分别隔离到各自的资源池内。避免说对某一个依赖服务的调用,因为依赖服务的接口调用的延迟或者失败,导致服务所有的线程资源全部耗费在这个服务的接口调用上。一旦说某个服务的线程资源全部耗尽的话,就可能导致服务崩溃,甚至说这种故障会不断蔓延。 + +Hystrix 实现资源隔离,主要有两种技术: + +- 线程池 +- 信号量 + +默认情况下,Hystrix 使用线程池模式。 + +前面已经说过线程池技术了,这一小节就来说说信号量机制实现资源隔离,以及这两种技术的区别与具体应用场景。 + +### 信号量机制 +信号量的资源隔离只是起到一个开关的作用,比如,服务 A 的信号量大小为 10,那么就是说它同时只允许有 10 个 tomcat 线程来访问服务 A,其它的请求都会被拒绝,从而达到资源隔离和限流保护的作用。 + +![hystrix-semphore](/img/hystrix-semphore.png) + +### 线程池与信号量区别 +线程池隔离技术,并不是说去控制类似 tomcat 这种 web 容器的线程。更加严格的意义上来说,Hystrix 的线程池隔离技术,控制的是 tomcat 线程的执行。Hystrix 线程池满后,会确保说,tomcat 的线程不会因为依赖服务的接口调用延迟或故障而被 hang 住,tomcat 其它的线程不会卡死,可以快速返回,然后支撑其它的事情。 + +线程池隔离技术,是用 Hystrix 自己的线程去执行调用;而信号量隔离技术,是直接让 tomcat 线程去调用依赖服务。信号量隔离,只是一道关卡,信号量有多少,就允许多少个 tomcat 线程通过它,然后去执行。 + +![hystrix-semphore-thread-pool](/img/hystrix-semphore-thread-pool.png) + +**适用场景**: +- **线程池技术**,适合绝大多数场景,比如说我们对依赖服务的网络请求的调用和访问、需要对调用的 timeout 进行控制(捕捉 timeout 超时异常)。 +- **信号量技术**,适合说你的访问不是对外部依赖的访问,而是对内部的一些比较复杂的业务逻辑的访问,并且系统内部的代码,其实不涉及任何的网络请求,那么只要做信号量的普通限流就可以了,因为不需要去捕获 timeout 类似的问题。 + +### 信号量简单 Demo +业务背景里,比较适合信号量的是什么场景呢? + +比如说,我们一般来说,缓存服务,可能会将一些量特别少、访问又特别频繁的数据,放在自己的纯内存中。 + +举个栗子。一般我们在获取到商品数据之后,都要去获取商品是属于哪个地理位置、省、市、卖家等,可能在自己的纯内存中,比如就一个 Map 去获取。对于这种直接访问本地内存的逻辑,比较适合用信号量做一下简单的隔离。 + +优点在于,不用自己管理线程池啦,不用 care timeout 超时啦,也不需要进行线程的上下文切换啦。信号量做隔离的话,性能相对来说会高一些。 + +假如这是本地缓存,我们可以通过 cityId,拿到 cityName。 +```java +public class LocationCache { + private static Map cityMap = new HashMap<>(); + + static { + cityMap.put(1L, "北京"); + } + + /** + * 通过cityId 获取 cityName + * + * @param cityId 城市id + * @return 城市名 + */ + public static String getCityName(Long cityId) { + return cityMap.get(cityId); + } +} +``` + +写一个 GetCityNameCommand,策略设置为**信号量**。run() 方法中获取本地缓存。我们目的就是对获取本地缓存的代码进行资源隔离。 +```java +/** + * @author bingo + * @since 2018/12/29 + */ + +public class GetCityNameCommand extends HystrixCommand { + + private Long cityId; + + public GetCityNameCommand(Long cityId) { + // 设置信号量隔离策略 + super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("GetCityNameGroup")) + .andCommandPropertiesDefaults(HystrixCommandProperties.Setter() + .withExecutionIsolationStrategy(HystrixCommandProperties.ExecutionIsolationStrategy.SEMAPHORE))); + + this.cityId = cityId; + } + + @Override + protected String run() { + // 需要进行信号量隔离的代码 + return LocationCache.getCityName(cityId); + } +} +``` + +在接口层,通过创建 GetCityNameCommand,传入 cityId,执行 execute() 方法,那么获取本地 cityName 缓存的代码将会进行信号量的资源隔离。 +```java +@RequestMapping("/getProductInfo") +@ResponseBody +public String getProductInfo(Long productId) { + HystrixCommand getProductInfoCommand = new GetProductInfoCommand(productId); + + // 通过command执行,获取最新商品数据 + ProductInfo productInfo = getProductInfoCommand.execute(); + + Long cityId = productInfo.getCityId(); + + GetCityNameCommand getCityNameCommand = new GetCityNameCommand(cityId); + // 获取本地内存(cityName)的代码会被信号量进行资源隔离 + String cityName = getCityNameCommand.execute(); + + productInfo.setCityName(cityName); + + System.out.println(productInfo); + return "success"; +} +``` \ No newline at end of file diff --git a/docs/high-availability/img/hystrix-semphore-thread-pool.png b/docs/high-availability/img/hystrix-semphore-thread-pool.png new file mode 100644 index 0000000000000000000000000000000000000000..d82ff3f496acd4d7e53e73bb9f86d35f06f958f5 GIT binary patch literal 11959 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 ANdN!< literal 0 HcmV?d00001 diff --git a/docs/high-availability/img/hystrix-semphore.png b/docs/high-availability/img/hystrix-semphore.png new file mode 100644 index 0000000000000000000000000000000000000000..346a7311e39a7e39ed0ad0886a41f075c2aea91d GIT binary patch literal 11761 zcmc(F^;gty(Dp9fEg`)ip)@KWwdhid)Pg~a(wz%PErN82ASop*VbCcZ0)CN3YNe6x z4uSXPeg1{#oaYD6dX~?A?wFZtuDNC+bhK0{$!?NCAP`D*H3SNL4nQDKP7)&UKQTwO z9PmNvqGsR@fsoT*|ARu(J~BffTo84HlD_xH%?w|^#NSoN&FiV^c-_CrX+#Vu!*6n@ zTGPFXMCQ$6-yDyBE|izgoQ$e`8f&N>mvvU%RHgd$sH(a;b8Q!8ME(5Rr-$Tr1hnF* zsk}6_l!XEW1h;r;-lzVmm{GLid(0(CYGIX``tveCVgILb=7jGp$>xo!v1wo70h_xw zV^nen|8GBdgNKHOBG5RRxYgkT>h!y|sLUz!c#L@sH0_bNX2pGG3MWAkk;}-b>W)v1 zjTc9A?P1&Q^;3%FI7Zn)JfwCtB)mHn%}Pg(9r=lAFaOGp#=Yb>gu4m|3d&677taJ8 zFw%&zz!3_SI2!PS$e^CTX9bo9>qsQBuQcb}t4(p(0GB%y>ehmL*7^NY+ z%z%Ik_95@2-JtQc=bZt_A|>nnUym(k{9DVvR=Ui5)LQ<4$w_=ot%DxVCS<^m>#ATp zA&{QF+bhBPSZU~xy=h|t2|=`BpSP<0QHaP|p8AtkZiHE&l=4WUJKRjCPAR#sk6 z&SM)VZg`o@4o+DrWUqU&^&xM%OUnpK%Mm2hQ?3cuD%dA`I5YE1oES}(N=jy|!zgJb4B;)eA+&YE2JGIArqrdR%-iVt0{$;q%y}6Y z7`Fp9F=Gq&VJ@rsyYss_Ji7QRC>m-hlDz)W;*kDO2|E%)PJm|*C3ktIuP?1P;Uz@T zE-m9X#t41896TIU-Pfmu`{aDRh&j`|*SkNu-E%HNcsfXBn4+Nh)OXMNAZiS^u&}Ul z(V7$oQm~#$muCz21zmr=7I^G}$_Bq_%dJjJLxuC+y?Y7|uUxz8jEgJY52~^a^~R)A z&`=OL(&~6ylOT(hH&(7*NSMMEvYh#M2y(8Fjb!XtF5IUm z2P?;xm6f#<(cf-Ybc}0K?k0mm!@D2C1+h+P3jSxMyq*;#DBlkA-T5C%**9shiQjVH zSsL&M%X4p(T8p#Wtgoz;%AYZE+Y{*P>FtY@(lJkrjvhIyukp=ynwT0Gtg4|n!`_KF zeKcpTcAO(sg|oMmhlYkW7Hugq8t`zf+OY0Nv*jsKLbF6IfD_=9+iue14 zblzKx1C_bzCuiG*CZ#0O?uFfk+c3%&L{E8BYP785@3vXIyWkZfSKfK(wwu-`h z`crce(5xs7%vp|vhb+OHiD=>jwN;39RoPHWoxjJ%0;&86D7@;Y-WIJ$5+y(%$ja*7 z=E9Er4f#`pU0rNaIwB2^jg7U&d~3Nod{

*>2=Xvf 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 literal 0 HcmV?d00001 diff --git a/img/hystrix-semphore-thread-pool.png b/img/hystrix-semphore-thread-pool.png new file mode 100644 index 0000000000000000000000000000000000000000..d82ff3f496acd4d7e53e73bb9f86d35f06f958f5 GIT binary patch literal 11959 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 ANdN!< literal 0 HcmV?d00001 diff --git a/img/hystrix-semphore.png b/img/hystrix-semphore.png new file mode 100644 index 0000000000000000000000000000000000000000..346a7311e39a7e39ed0ad0886a41f075c2aea91d GIT binary patch literal 11761 zcmc(F^;gty(Dp9fEg`)ip)@KWwdhid)Pg~a(wz%PErN82ASop*VbCcZ0)CN3YNe6x z4uSXPeg1{#oaYD6dX~?A?wFZtuDNC+bhK0{$!?NCAP`D*H3SNL4nQDKP7)&UKQTwO z9PmNvqGsR@fsoT*|ARu(J~BffTo84HlD_xH%?w|^#NSoN&FiV^c-_CrX+#Vu!*6n@ zTGPFXMCQ$6-yDyBE|izgoQ$e`8f&N>mvvU%RHgd$sH(a;b8Q!8ME(5Rr-$Tr1hnF* zsk}6_l!XEW1h;r;-lzVmm{GLid(0(CYGIX``tveCVgILb=7jGp$>xo!v1wo70h_xw zV^nen|8GBdgNKHOBG5RRxYgkT>h!y|sLUz!c#L@sH0_bNX2pGG3MWAkk;}-b>W)v1 zjTc9A?P1&Q^;3%FI7Zn)JfwCtB)mHn%}Pg(9r=lAFaOGp#=Yb>gu4m|3d&677taJ8 zFw%&zz!3_SI2!PS$e^CTX9bo9>qsQBuQcb}t4(p(0GB%y>ehmL*7^NY+ z%z%Ik_95@2-JtQc=bZt_A|>nnUym(k{9DVvR=Ui5)LQ<4$w_=ot%DxVCS<^m>#ATp zA&{QF+bhBPSZU~xy=h|t2|=`BpSP<0QHaP|p8AtkZiHE&l=4WUJKRjCPAR#sk6 z&SM)VZg`o@4o+DrWUqU&^&xM%OUnpK%Mm2hQ?3cuD%dA`I5YE1oES}(N=jy|!zgJb4B;)eA+&YE2JGIArqrdR%-iVt0{$;q%y}6Y z7`Fp9F=Gq&VJ@rsyYss_Ji7QRC>m-hlDz)W;*kDO2|E%)PJm|*C3ktIuP?1P;Uz@T zE-m9X#t41896TIU-Pfmu`{aDRh&j`|*SkNu-E%HNcsfXBn4+Nh)OXMNAZiS^u&}Ul z(V7$oQm~#$muCz21zmr=7I^G}$_Bq_%dJjJLxuC+y?Y7|uUxz8jEgJY52~^a^~R)A z&`=OL(&~6ylOT(hH&(7*NSMMEvYh#M2y(8Fjb!XtF5IUm z2P?;xm6f#<(cf-Ybc}0K?k0mm!@D2C1+h+P3jSxMyq*;#DBlkA-T5C%**9shiQjVH zSsL&M%X4p(T8p#Wtgoz;%AYZE+Y{*P>FtY@(lJkrjvhIyukp=ynwT0Gtg4|n!`_KF zeKcpTcAO(sg|oMmhlYkW7Hugq8t`zf+OY0Nv*jsKLbF6IfD_=9+iue14 zblzKx1C_bzCuiG*CZ#0O?uFfk+c3%&L{E8BYP785@3vXIyWkZfSKfK(wwu-`h z`crce(5xs7%vp|vhb+OHiD=>jwN;39RoPHWoxjJ%0;&86D7@;Y-WIJ$5+y(%$ja*7 z=E9Er4f#`pU0rNaIwB2^jg7U&d~3Nod{

*>2=Xvf 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 literal 0 HcmV?d00001