From db04b232b57340c682bde71ff64324049689f1ca Mon Sep 17 00:00:00 2001 From: lemonchann Date: Mon, 13 Apr 2020 00:07:47 +0800 Subject: [PATCH] add blog REST --- _posts/架构/02-REST/RESTvsRPC.drawio | 1 + _posts/架构/02-REST/RPC_vs_REST.md | 277 +++++++++++++++++++++++++++ _posts/架构/02-REST/Token会话.png | Bin 0 -> 34248 bytes _posts/架构/02-REST/URI-URN-URL.png | Bin 0 -> 13962 bytes _posts/架构/02-REST/session会话.png | Bin 0 -> 27980 bytes _posts/架构/02-REST/取款业务流程.png | Bin 0 -> 8728 bytes _posts/架构/02-REST/搜索框.png | Bin 0 -> 3034 bytes _posts/架构/02-REST/无状态容灾.png | Bin 0 -> 16098 bytes _posts/架构/02-REST/状态转移.png | Bin 0 -> 28807 bytes _posts/架构/RPC_vs_REST.md | 16 -- 10 files changed, 278 insertions(+), 16 deletions(-) create mode 100644 _posts/架构/02-REST/RESTvsRPC.drawio create mode 100644 _posts/架构/02-REST/RPC_vs_REST.md create mode 100644 _posts/架构/02-REST/Token会话.png create mode 100644 _posts/架构/02-REST/URI-URN-URL.png create mode 100644 _posts/架构/02-REST/session会话.png create mode 100644 _posts/架构/02-REST/取款业务流程.png create mode 100644 _posts/架构/02-REST/搜索框.png create mode 100644 _posts/架构/02-REST/无状态容灾.png create mode 100644 _posts/架构/02-REST/状态转移.png delete mode 100644 _posts/架构/RPC_vs_REST.md diff --git a/_posts/架构/02-REST/RESTvsRPC.drawio b/_posts/架构/02-REST/RESTvsRPC.drawio new file mode 100644 index 0000000..78a8277 --- /dev/null +++ b/_posts/架构/02-REST/RESTvsRPC.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/_posts/架构/02-REST/RPC_vs_REST.md b/_posts/架构/02-REST/RPC_vs_REST.md new file mode 100644 index 0000000..8edb335 --- /dev/null +++ b/_posts/架构/02-REST/RPC_vs_REST.md @@ -0,0 +1,277 @@ +本文是后端微服务架构系列的第二篇文章。在微服务架构中服务之间的通信方式常见的有两种:`RPC` 和 ` REST`,关于微服务和 `RPC` 的更多细节,可以参考我上一篇文章[]() + +这篇文章主要介绍什么是 `REST` 风格设计以及 `RESTfull` 接口。阅读完本文你将收获以下知识点: + +- 什么是 `REST` 和 `RESTfull` +- `REST` 接口设计规范是什么 +- `REST` 为什么要设计成无状态 +- 接口无状态真的是没有状态吗 +- `RPC` 和 `REST` 适用场景 + + + +### REST和RESTfull + +`REST(Representational State Transfer,表述性状态转移)` 是一种软件架构风格。REST提出了一组架构约束条件和原则,任何满足 `REST` 约束条件和原则的架构,都称为 `RESTful` 架构。 + +微服务之间需要相互通信以完成特定的业务处理,在典型的客户端-服务端设计模型中,客户端和服务端通通过消息请求-响应的方式交互协作,`REST` 就是这样一套微服务之间交互接口的设计约束和原则规范。 + +乍一看 `REST`「表述性状态转移」每个字都认得,连起来不知道什么意思。也难怪,这是作者 `Roy Thomas Fielding` 在他的博士论文里提出的概念,论文自然都是学术用语,不过感兴趣的同学可以去看看作者论文原文,地址我贴出来:https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm + +今天 lemon 用大白话帮你透彻理解这个概念,我们把「表述性状态转移」掰开来看,先搞明白什么是「表述性」,什么是「状态转移」。 + +### 表述性 + +「表述性」其实是缺少了主语的,主语是「资源」。完整的描述是「资源表述性」,也就是「资源的描述」。在网络通信中用什么描述资源呢?没错就是 `URI(Uniform Resource Identifier,统一资源标识符)`。 + +这里有几个近义词先给大家先科普一下: + +`URI` 是统一资源标识符,用来唯一的标识一个资源。 + +`URL` 是统一资源定位器,它是一种具体的 `URI`,即 `URL` 可以用来标识一个资源,而且还指明了如何定位这个资源,`URL` 是 `URI` 的子集。 + +`URN` 统一资源命名,是通过名字来标识资源。`URN `也是 `URI` 的子集。 +![URI-URN-URL](https://upload-images.jianshu.io/upload_images/7842464-8a3c31c67d4d5c3b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) + + +在 `HTTP` 协议中用 `URL` 标识资源,也就是浏览器地址栏你看到的那一串网址。 + +![地址栏URL](https://upload-images.jianshu.io/upload_images/7842464-a6d585a693a51811.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) + + +#### 资源表述性 + +为了说明「资源描述性」接口设计的优点,我们来做一个接口设计方法的对比,举个栗子就清楚了。 + +##### 传统的接口设计 + +先来看下传统的网络通信模式是怎么样的。假设`lemon`这个人物对象,在服务端的存储形式是一个`c++`的`class`类型存储。 + +下面的过程展示,客户端发送请求服务端创建一个 `lemon` 对象的过程。 + +1. 服务端定义存储结构头文件 `lemon.h` + +```c++ +class lemon{ + string name; + string address; + uint64 phone; +} +``` + +2. 客户端代码引用服务端定义的`lemon.h`,**互相引用头文件,增加了服务耦合性!** + +3. 客户端初始化一个 `lemon` 实例并序列化后通过网络接口发送给服务端。 + +```C++ +class lemon lm; +lm.name = "lemon"; +lm.address = "Shenzhen"; +lm.phone = 18666666666; +``` + +4. 服务端接收消息,反序列化,存储传输过来的 `lemon` 对象 + + + +##### 资源表述性接口设计 + +`lemon` 这个服务内部的对象,对外表现可以用一张图片来表示,也可以用包含`lemon` 的姓名、地址、电话等信息的 `xml` 或 `json` 格式的数据表示。 + +```json +{ +name : "lemon", +address: "ShenZhen", +phone : 18666666666 +} +``` + +```xml + + lemon +
ShenZhen
+ 18666666666 +``` + +也就是说,`lemon` 这个「资源」在服务内部的存放形式对外不可见,外界客户端发起请求可以用不同的资源表述格式来获取服务端的资源。 + +(如果服务器会说话,他内心`os` 大概是这样的: 客户端你不用管我是如何保存这个对象的,只要你说的清楚想要什么对象,只管发来请求便是!)。 + + + +![](http://wx2.sinaimg.cn/large/005LQqKVgy1felzzeyzyzj30k00k0wfi.jpg) + + +这样做最显然的好处是,减少了服务之间的耦合。客户端访问服务资源之前不需要知道资源在服务端的具体存储格式,只需描述资源形式即可修改、创建、更新、删除服务端的资源。 + + + +### 状态转移 + +搞懂了「资源描述性」接下来看下什么是「状态转移」?状态转移就是客户端通过一系列请求动作,推动服务端的资源状态发生变化,资源的状态可以在「创建-修改-查看-删除」之间转移。 + +![资源状态转移](https://upload-images.jianshu.io/upload_images/7842464-b9db31aa568eac4b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) + + +资源状态的变化在宏观上的反应就是业务流程推进。打个比方,你去银行系统开户、查余额、销户,这个过程你推动了你的银行账户这个「资源」经历了不同的状态转移让你完成了不同的业务操作。 + + + +### REST的约束条件 + +#### 协议选择 + +`REST` 本身并没有提到底层应该使用什么协议,日常实践案例中最常用的是基于 `HTTP` 的 `RESTfull` 实现。 + +这是因为 `HTTP` 协议自带的动词 `GET/POST/PUT/DELETE` 可以作为推动状态转移的方法,另外`HTTP` 的制定了规范的状态码。还有其他的一些 `HTTP` 特性,这些特性使得在`HTTP` 之上实现 `REST` 要简单得多,而如果使用其他协议的话,就需要自己实现这些特性。 + + + +#### 请求规范 + +` RESTfull` 架构中,发生状态转换的是「资源」,所以`URI` 中一般只能包含代表「资源」的名词,并且推荐是复数,而不应该在 `URI` 中包对资源进行操作的动词。 + +对资源执行的`CURD「增删改查」`动作应该在`HTTP`请求方法的`GET/POST/PUT/DELETE`中体现。 + +符合REST规范的写法: + +```http +POST http://www.test.com/lemon // 创建 +Get http://www.test.com/lemon // 查询 +PUT http://www.test.com/lemon // 修改 +DELETE http://www.test.com/lemon //删除 +``` + +不符合REST规范的写法: + +```http +POST http://www.test.com/Createlemon // 创建 +POST http://www.test.com/Querylemon // 查询 +POST http://www.test.com/Modifylemon // 修改 +POST http://www.test.com/Deletelemon //删除 +``` + + + +#### 状态码 + +服务端消息响应携带状态码,指示客户端进行下一步处理。符合 `RESTfull` 规范的接口返回状态码都是通用的,不需要额外约定,利用`HTTP Status Code 状态码` 表示请求处理结果,降低了微服务间互操作成本。 + +| 状态码 | 状态码含义 | +| ------ | ---------------------------------------------- | +| 2xx | 成功,操作被成功接收并处理 | +| 3xx | 重定向,需要进一步的操作以完成请求 | +| 4xx | 客户端错误,请求包含语法错误或无法完成请求 | +| 5xx | 服务器错误,服务器在处理请求的过程中发生了错误 | + +下面是常见的`HTTP`状态码: + +- 200 - 请求成功 +- 301 - 资源(网页等)被永久转移到其它URL +- 404 - 请求的资源(网页等)不存在 +- 500 - 内部服务器错误 + + + +#### 无状态 + +`RESTfull`接口要求是「无状态」。无状态指的是任意一个Web请求必须完全与其他请求隔离,当客户端发起请求时,消息本身包含了服务端识别这一请求上下文所需的全部信息。 + + + +##### 无状态不是真的没有状态 + +接口「无状态」更确切的说是服务端无状态,整个会话还是需要状态维持的。要完成一个业务流程,一般客户端与服务端需要多次的消息交互,我们知道`HTTP` 协议是「无状态协议」,这就需要服务端能够识别几个独立 `HTTP` 请求的「状态信息」,从而将他们关联到一个业务流程中。 + +还是举例子银行系统取款的例子: + +- 用户lemon要登录银行系统,首先需要在登录页面输入用户名和密码,这时候产生一个登录请求 +- 服务端收到登录请求,执行登录逻辑并返回操作结果 +- lemon登录之后点击取款100万,产生一个取款请求 +- 服务端收到取款请求,执行取款逻辑并返回操作结果 + +![取款业务流程](https://upload-images.jianshu.io/upload_images/7842464-6abdaf73029fb0dd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) + + +这里有个问题,服务端在不同时间点收到登录请求和取款请求,这两个请求都是用户 `lemon` 产生的,如果不在技术层面做对独立的 `HTTP` 请求做关联的话,服务端就无法知道这两个请求其实是都是用户`lemon` 「取款业务」的组成部分。 + + + +##### 技术方案 + +服务端要能识别请求的「状态信息」,有两种技术方案: + +1. `Session` 方式。服务端保存会话状态,客户端每次请求携带`session-id`。 + + 服务端维护一个会话状态信息列表,用`session-id`唯一标识一个状态信息,`session-id`一般包含在`HTTP`响应的`Set-Cookie`头部返回给客户端,后续客户端请求携带包含`session-id`信息的`cookie`头部,服务端解析`cookie`取出`session-id`,去维护的状态列表中取回该消息对应的状态信息,这样就把无状态的`HTTP`变成有状态的了。 + +![session会话](https://upload-images.jianshu.io/upload_images/7842464-050a100672be8a6b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) + + +2. `Token` 方式。服务端不保存会话状态,客户端每次请求都携带完整的会话状态信息(一般是加密的)给服务端。 + + `Token`也称作是「令牌」或临时证书签名,状态信息都被加密到`token`中,这样每当服务器收到请求后解密`token`就能获取该请求对应的状态信息,也就能把不同的请求消息关联到同一个业务流程中来,和`session`方式有类似的效果,只不过这次的状态信息不保存在服务端。 + +![Token会话](https://upload-images.jianshu.io/upload_images/7842464-228c9b5758286053.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) + + +以上两种实现中,第一种 `Session` 方式是有状态的,第二种 `Token` 方式是无状态的。 + +如果你要实现 `RESTfull` 接口最好按第二种技术方案实现,当然要实现无状态也还有其他方式,思路都是「服务端不保持会话状态」就对了。 + + + +##### 为什么要无状态 + +为了高可用性和负载均衡需求,多个微服务通过负载均衡实现分布式集群化部署,集群中每个服务都是独立和对等的。如果服务器在收到客户端请求之时不可用或者宕机,无状态请求可以由任何其他可用服务器处理并作出应答,这在分布式应用中非常重要。 + +![REST无状态接口](https://upload-images.jianshu.io/upload_images/7842464-107394c52657bc98.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) + + +想象一下如果服务端保存状态,一个事务内的每个请求都必须落到同一台服务器去处理,这就失去了分布式的意义和优势。 + +所以, `RESTfull` 接口要求是无状态的,是为了更好的适应分布式业务场景,发挥微服务集群优势。 + + + +### REST 和 RPC + +这两个概念经常出现在微服务架构设计中,`REST` 是一种软件架构接口设计风格,`RPC` 是一种计算机通信协议,看起来是两个不同的概念,要把他们放在一起比较的话,我个人倾向于把 `REST` 具体化为一种基于`HTTP` 并按照 `REST` 约束设计的通信协议,两个通信协议之间还是可以比较一下的。 + +#### 回顾下RPC + +`RPC (Remote Procedure Call)`远程过程调用是一个计算机通信协议。我们一般的程序调用是本地程序内部的调用,`RPC`允许你像调用本地函数一样去调用另一个程序的函数,这中间会涉及网络通信和进程间通信,但你无需知道实现细节,`RPC`框架为你屏蔽了底层实现。`RPC` 是一种服务器-客户端`Client/Serv er`模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。 + +#### 适用场景 + +很多 `RPC` 框架提供的消息传输都是基于二进制的,比如`Thrift`、`Protocol buffers`。这样做的好处是消息结构比较紧凑,对于频繁调用或者大流量、低时延要求的应用场景,能够显著减少网络开销;另一个约束是某些 `RPC` 框架有很强的技术耦合性,比如 `Dubbo` 只能用于 `java` 技术栈。综上,`RPC ` **更加适用于系统内部微服务之间的高效通信。** + +`RESTfull`接口由于提供了统一的基于 `HTTP `的 `REST` 设计标准,只需 `web` 框架支持 `HTTP` 协议,并设计`RESTfull` 风格的接口即可,极大的方便了第三方服务接入调用,**适合用于微服务系统对外暴露的接口设计标准。** + + + +### 写在最后 + +本文是微服务架构设计中接口选型的一个小方面,很多人会觉得现在工作面试,不管是大厂还是小公司,都是面试造飞机,工作拧螺丝。个人认为即使你在入职之后接触不到架构方面的工作,也要有一颗架构的心,高度决定认知,如果只盯着手上的那颗螺丝那和咸鱼有什么区别? + +老规矩。感谢各位的阅读,文章的目的是分享对知识的理解,技术类文章我都会反复求证以求最大程度保证准确性,若文中出现明显纰漏也欢迎指出,我们一起在探讨中学习。 + +好了,今天的技术分享就到这里,本文是后端开发微服务设计系列的第二篇,这个系列应该还会继续更新,我们下期再见。 + +**原创不易,看到这里,如果在我这有一点点收获,就动动手指「在看」「转发」是对我持续创作的最大支持。** + + + +### Reference + +微服务设计 https://book.douban.com/subject/26772677/ + +Representational State Transfer (REST) https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm + +RPC和RESTful API入门篇 https://juejin.im/post/5c19f94fe51d45069e53c03c + +那些年,我们一起误解过的REST https://juejin.im/post/5b92475a5188255c5644819a + +理解RESTful架构 http://www.ruanyifeng.com/blog/2011/09/restful.html + +彻底弄懂session,cookie,token https://segmentfault.com/a/1190000017831088 \ No newline at end of file diff --git a/_posts/架构/02-REST/Token会话.png b/_posts/架构/02-REST/Token会话.png new file mode 100644 index 0000000000000000000000000000000000000000..1ac9f8d56090f8e3b5660b1273fe58acd4815314 GIT binary patch literal 34248 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 Y_2pbe%3-fcHZTBzr>mdKI;Vst020f5&Hw-a literal 0 HcmV?d00001 diff --git a/_posts/架构/02-REST/URI-URN-URL.png b/_posts/架构/02-REST/URI-URN-URL.png new file mode 100644 index 0000000000000000000000000000000000000000..01d5e28e85401a1e24edea3ef15b7c311f4e852b GIT binary patch literal 13962 zcmW+-1ymf{5?tKfA-FpM0>Kx8JA?qi-QAtV6WrYi1b270;OYvJrQfSD;$RH31O-5Q=75M%PeC8p-17D%cM|eRX3XqJrsG5h~nJ$8++R(~d zBY|7VOhlljaaB(|;q6Mn$S1nwe*L&2)lY-iQLLg^C{#=mQ5sc3i^=_|#UH~pjYMrU zF=IFIm-Hr*-_s-z@z**}d-*2oCIi;fs@k15()hl1QiA-xqd{|-Pq^eOGn|W4O{0O< zkYEEdWDA`TKvW@OSCp8D@>FpaUnnpMnUcaqDKHOZ3*(DaOQyn*LAZsgGL9}TETxr| zcU0Iv2|)(1(4vwQn7_oSRPt3zegQv~tCon%7ODoH6Nc`?K*GTkiCBois)efGLxl-L zlg?M0VvIk58lAo%Rjm0(IQnn2d$OSRwSvIr*gxl@B@0~XFcI}+3uhEc)Eav@#0&B|L5@?b zP(wIzs*l<<*rpeoUHTRu!A(YA9BMOKF8g|Wb#Rg4s9Xt%qZSh6>F$&M?7tz0^cE>( z@EBoWV1)nvO`kAg5?E2eTD^Q4DnM0Ts9S8bb>-20@Q>u&sD>~+JY0NWV1O{J&oFkx z1S(B_B2Ko@eb4Dp7djx8HDRRI|K(~(R_@<#+SQ|zxQvmJF(!R+CAo~0zAbLlZ8VWl4FMsnN1VzLF{p=-I!V^MPLrji zt4qY?cy454WCRJbMkOLj-xU!tM69^D7=#`Mv%I{#b}*S!7A!^?C0n?G6)|8A+yIX% zE;TMaJ$w-V@(&o+q4osHKv_AKAOK9*Z&o){s#c28Z&VYLl9EzwJQU62=jUgludkmw zJ6|>PPzVEkh({qJLhj_`RBb+)jT8|czJv-7gNCVxiyU$wO`|Fa{G|q+>gpFeR`*C{ zUjZgDF@NB=*`x^vp)VYCKu%5$dES>WbQf_Oc6N4Bnr#_Z(cJ24%bbkh4a-0>&2YbVXJXV$J(xf8yFavWi_T-9Bu8@WglUGi`7Qk!Va(7+M|UE z5@IC#@kxccCp}$VGz>C9$k>>?ilHH8$beBH3Tz-b5^V1Xsel_|`ut}U_2`7xhF&Bz zv@`JU+26_xiR=SLHSgXR9luYf3lPw-J}8)Or2ktChqt@x^W9lSlZ(R{ zKXq(ELXej4z=_jW>X*yy) zsab=Ec}`65SKl8m1Z+B(jJV-qY4VMHA3uIBO$65TgoLG#+JL2hnb$in(WPu>$uIKRtUSy_FPLnx6*5c>St z<5yJFxKW7MM+OQC$Y+Zwiq^V1XF2w-Ya*;zU=*)P-8Q-wx3lzcX&OCj?Po^q~ zc;IypU+EHBCI$uy$BR`8GF#owN=>hJN3@usEyUmNH~p(BOG}vukVE9$&sJPZ3k|39 zhsl88NsufUczSr?7>Xgk*xKElof$>BAL>VJ_qc-gd%ayu4-AA3kf+m5j*q|A$0_5^ zc)%CEtFEqg;7n^Tl1pLhcibIZZWzS6wO*|30V0orjSZa;Rk9BzI5~$+ubmJcjTrXp zZ$*i9bwWO;J#F&pe+QFaz+lJ|Z@r!n2M1;{%lDbftmSN36y;#a>&Z;MKHryznh$-| z7pkhNZkmwq@M#9~COIPhZ=8jyE$#YUeoLtzjcv5ACq60^mZL0hsx#)k0Gn2AzbSmU zRAXF5?=7_P>C-2NyVLI*XRA#ku+WBQ(WC+k)=VgJuj@=BWH>l=uppzSyEAJpw^L0L zpFX5wZ5vx{H`|$pyX05b-h8qd`>t2Iv9Yl|ASf!do9v?M)Kqy*Q@+Ldp0BkSGvbc= zKi!@TWea+8b{3Yal8F2ob=W3js?v?5ia-hHHswJ2IIA6$8aoa$t_(sw8>C56Z@A5y?484$?fT3@7Iv7x)aGk z=Yt8P$!sAxcu4i$-d;!RK97=B1hv45(Wn6jy4&f}wEs%I<((Q+I3!X(9n<6KhOvKe z@V}g&du2Uw^2=Ad5OO_{$%m6)P%uC1?D3}(>8$CUElE~oF*^bH=-a(2x>&BG*AS5@ z8ZlM*|CUnmXLWLObI)ze&d%oBaG|{nCTNM|oNsSm$)fl^TpHdoyk-k|&n1Ds3V{;s zfQu`OEJin-KBXwAsKhbx@ue{*j4aq~cKX)6#Ybk$QX%4DVTn>>BBprXpRd3Dn-m$6 z+C*j8y**j%TWPQ+p`n20)w7tzT~>ilyx$v1ICghe`&j>1;uAcs=$D1QFboZIQ&XWN zX&Q1(v8gdLdT$GhLvvW@Z37DnhCCowA7&wRIlyY6LR-M;X=xEN;D%4m&dexs|27_% zy&E1LE&%Ee`9uaUMhxL}rV>=;>K>xaW@kr!aq;0~e}BIvoyJ0Npc&ltsOB z0=*Jl$NSqe&-lJzC4p3TCZbM<*Eg4)ek6Iigs3GTJKH)ROSXGk83|M{;jo{EJAW?rcf>rIHV#= z?Vir-oklqNW|ZFI;^NEY-|IdIxSvNN=$(xw$xf%x7k?)6wI`>F?RI)3|#>g(BCf(l{1+` zPD0W)nfgYYbc#a2_A)j<|H=04<W4_N|2BwBo{r1+@p`{;kOMg- zfEq%r9M*k2Uj}DXE{|08e2?Wnz)6oSEHeVqkMGOIS-Ajg>fP&BD&D4`YRa@W%_GYLreNuUvZ$Pllc0&-GN0$&6jPUlI~WcNi(B=#!kZH%#bsoZpFAxxnu_k&4d zz7kj0yxgohS*`?2oqpZdw{VU2-UbcU2s|6fuIW>Y`u?l{9xb0B2ub_0vuCdA=u4q7*j9l7FcfId$cQg*yW{=v)yRaW7-9G{Qh5WOT` zyWh{IGP=+1O<4Tq-s=pT?weQOVe^1F zMB52}Z^x+VD$a<>jIL-PF_+mawq!dqi|} zV=5z0OEGT0=R2I?n<0o6-i^$-XTh08nXs~T$FSz;qa)E}xIc{Dl|6`tc&R=ES-z_Z zViF)MYi*T#twq|SLO>Kp;%gDjO5dIv{1q-qqpEa7i6Y^csRq&mZs2{zP5`=&D`XTD z`l7-@-I@J>`LzE~VkxWkSnENjj6ZD4v*?WvxxtIM!NEsK1&3B!DczT*(R%Fj1pb|r z%x_(b)H8K2oi=XzqciMZ29o|zurb3OK==a-rmvFyko4M%t*@#~i#JbnLs8+HD9KaD zY+YdIfdHD-je zT_WmAk_fUZrbQ^k_W3<-fv4;0`{&Cgm3|anoIKQ~BzEJlIk|$M?+-Y83o}usa-K*hXBvGgc>k1VNs3DCR{O}^>aD)x#ribG){FB}`5^TF| z=_)sQj0t_$p?-v>xKTr`>~}=p7%3osa{}!7M0;4rgO5m)1wX%84I*V|v03Jn zadNsASnOy|INb)|TVE(zh5&%B>ptvJR6LQ4PR77*<{<jcvEJ}<8&VJ(D?@odh zL`0rG*Lx#40M<9Ze)Ar`Z2>2ubay;+e&Oi*cMJg^bzF$bxPrn0WbF668r?Ajk%+2@KdR3WHuT;?aNe}OCP;Ls~(%F4=mop?Ig)BcA5z1o_abu>GDT7ovx z8^$#K+z^+%BcZ|?6B@<>=(+Hr=O3j4wD0Jfqu&Zu^rv(ek z@x!B^#a8dX25dtv_7|{(3upZVfm>?4=S}y~iM2y?$Po@e zxH>U3*m0xaa`6w6loAJ+pm$9men|>e?PG!dZ7OKM$h1nkX~KlE2y>d5Ju<8j#vK$V zK97bb*f5P1i)^*MQWQ0H@XSrYHO}8><)W_@2(E8C-*_U=edd)57@P7nJ_0rs&Z(u{ z7oavIj0HC+02sMcYS@+kBdvt5?3;5wz>W$vXtjs(wFWE`)% z=u#WIjA{b}2moZOmO6c(nZ4WfEti9Wf~1;kSMNlCE|hK=apI2_8Vw^troj08h=*W} zC8mcT4{0JYoC~2yxv1#CE{!s$P!E0%(MPmHe%WyWH^N~TIuCzAmEV~eJhr7QY;4&; zt3Bh8ILB-f6B+q(8^PX5xL&5g-j{sSKEUEQT}3gvfxH3Jcx=L*y~K^ECOj4pc#|>3 zdpiC-J&ze=y8_>W#NK-fG^7fAWb$;;am(-QyJlp0CV zCH&dh-HjsalA$bt)apNph55hcB_wzl%~DY8qii3y;yy6Ai6$UtzkP&WqZj5Fg(sf% zm~Q>0mq7si%44%&2{Yasf?_I`H|6;L_9_;vZd@xBL-^5XKNtxovQxj~LEPJdpt?;W z9m5LN{U$s$z@y~ots|^_&&kW zi?R>|`d(L8e>oXQNJubxlt6n|EGR6T zEzaqHplHmj>@v5LBbYb4gjx~Vhm(d66@nThl42L=Z>yExkUwO;fpEcI%EENoxG>n% z9jpOu-kUooq!qG0$bkxw7=g6(^koEf#cfwTJw30wy1M@Qtu7@hDML;d6>zn`kTV5B z8o)~xlZ6N7>_Mt|f#|ypId|nA?WBo3dIqZs&&a(`u{C57|6)j?sIt(7$(3eC50{pf zR%&Z&x7*w=Ce#vyXlQ86hGQv3!|ko8DxfqlPgl42AmpXya<Xj~U)_W}_w(|oHsE@ck7B4;A_>Yap}y|$ zSk<>RHsTu@8(TNpZ=OpdqN3h7J2*7AnT-<{eAHEQK&Iid+?warEBNREJxi^eeM=~7 zw-L4>`t?R#-NPA*gFg&rR_;DKU_K$0I;CuzdWzG`8=|SAGn3n+;)nScM3XZi^s`U|NLEbS#^4WYGO=&lj1I)D`u0Q~ zlDm}MlfLK!T{$5W&Ii`GUO;gQXV$13qYn-aW+D1$)W3p+Lq}+P;nhPaaLD~PTrmLc zlU5}C6iI+czOmt6(Eym+KkcL>_+eAf$Us*ZUK)kn3^c z3y>t`kbv6y(|9oQ=ffd&-;Vygbs`E%?oQ11mdJ~Fl;jqYd<>+y75{Ccm0Vbd)UdiX z6J@u@RKE3z!Scn*57tgx3S4!eZYjv|4>+|B0G9>Z8wiII{a=>NK_|@BGcmrTW$OU- zK8rvmyU*bN^uiHFgXed3hPxaTgg%=eesd5))fCczSy%YSP@UI$`I3$WhGO%f^UJ@o zC;^gUAArsM#7vZO_+5`D$6zN-b&3xL17!mO3sV1;V31f+h;*e)B{HMoT6RZ(PJ z-Ro**RFk07RKU>%RVt>`zCVx@Vm-}w8U87S>o%A>qvdya;T`r>L1i{dkKQS5kw%kK ziSlH>kAkR!73R%`N;L{3b8a6b~&d z6t^uMc&AtSlQeWo?dSV0A(BhPFwOOsk=6GT3eUTlsy>3)_ecyff!%qN02aZ<0IqZoIc< ztM;2t?MZUA>ljXxdOpi}nDcu5@w0~VkgqRKezk>hVOB3!?y4#%%YM1NxcjjM6!znD z!BWj~SBT<4^7_NYDS1%B{V(;~iD+rkE@zPs%S0$yFYkP@GuXp+FYb3aJ)RGi721}* z*u*on1=CMJCeYaUqfakTi-h&T^?+U>9rowXpXz+XRsRIqrlof62SHiAwXM@0H=y$M zT9lU+uii-iE`Eg&=?p*WuR;}}l}!rMdF@2Jb#t@M77pmT$zZqLn8Aqd&iA%WtXoQt zT|s+l^Vf?XzYeVgN8g?-1Z9J?E}o9+n?}CiAsGZsNn!b75wDTwo`Kz|r8+nO$Id8uEAK7|wcYCzr*~UB8pbfoT;h0UD1ZS0pLCSxF zjHHrU2psbKIMZ7-?XO89M2_wMnu%XpY;J%ZK%1f^+ZNd*yp1=k%`dDfk`4Wz56GYde23$p6|xUZfM!& zI@WR*s{R!`d{x(K1~$z^g5a=F3e;;~7q_ND&uvTham%O;^WpJ`ro9Jnsz13+p3E+2 zpyv2oBZV*KW_x*Oo!+iL4t9WoL^%sUy6RI|Kt`f41TvoXU<^6A?OMYXb@yifg{xWr zT)ndhhYibiHtSu00B;)+Z`(M{n@#=W5i5q`Iq~-6XGq*tM1b_d`zeOcVnzt= zUpcOum0NslY);e5tsa>i-@CMF#qZ^^@7S5X!f>I!8h^x!le7{V?qTam-a18}mnA;k z2YkIj`HZ%_D63M>(&Wj2W{%foG_e!X|A&ZOt26g10tT>GHr!K+}T@J~gWVvTgbhO573E&Ba4;Y2YmA zfl7`P-Qi^|zQ1bUweQ%nW{39iFqvK7&fMCXyECYPEo1&iW)dBTiDOh^4uV9QT=(m) zxB9W~A5LvGRn!=4oZL;Xal_52`khwSlh43;wVnHqwEWCvyHZ~xf5l>GPe*De7`WWvURV0dIHHAy8#8UNE28ZWbD1gmW$UOCxB6^} zXia$P!~46b%d$Q|wTe`V&`=={M7^KZO-9y{{4La$kkZY4z0?m7HzXQY(TROSJjCPG z8w@#!t4x;zf$$~%^8)z4lC&2k9##=fT5`j31c2;(>p;+MzpQBg4aZUE169aBAw9iS zSK&We$PakvN8{yM)7Bv(zcAVJ4sr+$BTS0ozj{toB@->!?DuSRS$QZ@Ity~kqMa)q z<&}pm`rgz=i~8hj_ZyDbH2KTy+;z`0k(bLawx*{0QkIsM?j(wip9a3$Glk$H$FztZ z)Mzxg!7Ewt!zMcMW$NQ%6g0BTYmMycBLKx*ivsgDr*T$`C|j8t`lzlmn9}d&%oq+hu8Unc`)o1UI$>-ITg}>Xr zNZ}v|apaG%Y9-1u1TtH@_g>zjWZe8ay6EfPP52G|wbEe0Qa;d9W+=*G;GF;DtGjBw z-5UakdPlM8=}cZBr-wO!greX1uoK}3sLoc!u=RN5j9JYOEQsW`usKkx+_VG!yfDz; zmM1CSchC-bFUGrb;T8{|%7&bB+hRC^Xq%B05Z59i;Bt^~dfqzh(&Kqv`~W#_zQ%Y+ zk)DpuPxXDD`4>7e@>5Dx)y4MVp+z4|a>oD*8L|Wm6I9AXddh?48D6%sJ*?AvGqe*U zJgLar0VMYNR2-DdUft$f(4-?+aD_Q6;Dk8Lg6|QtXgg;8@9%hKZ*MOnfTRgFW!-K} zJv=<-<7wqGKYWOMJFZ;#?rMp=)P@eDeZM{U1vcduFLYX4bb!?R`PNDumxJ5{RMj=p zXI}?Rd(Z!Xq_XEOzuNi}N$Xh5oD9RtWEZfL*S~(zGz}7M9#)2hgjBp77R2Byq;m8W zqu3BLvkFf`t-$?)4!H_v<>w2g=OKemQKu8Tm{L)`av}1NALYq5(23tb1X$m#o>0xh zE|q)2SCRLZy2Gljw{QhT#kcJ&6AUCI$KSI@N{bcR=C!8wvXKZ$1cRchZ$H5_TsQEr zlNKLffBB&6Y_`LBRVcuON6Bn#MH*W$$59bP02jTT@*Ux%n06s&*RM7CDNTV{|9mw> z&b%q(cC(u=5fQDF!E-jNn8lxls#h3^GC;o)bPuuZcJaAwrcGcRfa?l?{BR~gwr7Q1 z{D`sjw|8L5cG{@=#G=({C}L|JaZY$5R7#ttr@KN1oPVNtb9!nsA4e?}JvcPbhH8alBZ(xf0VFivWEq6zJ}SKC`l(MR{y0DAq^-ozczF?;OR` z%`OoMZHcF%vKA~TaUz5@@575aI|zm(avI8%z|e3 z&oWw^u|)C~@B8u{u7GY$D&YHca|P(hoztb%c>sF_lp}N+?2^xHY!fW(^S$P6;7e{I zpRm)#)$f7@Zist@lOXkjAMSSFS=(+165l-0y{i07Bc%l3JeaaD|0Cu+qKQ!|zlcmR zZl3%kVAY}ll*y#OySWAxky1%Zu8 z{4n!Gha0-bu+MRZyEtLi2KC@dgZ?hTy|fE9w|T+cJo=F?d3ZK~#nTsQdm;#8AJ;h# zJLvE=ZP5e*&QkRKu!;bi4-GBtCnB)eu53$nHHVCi4NH{dSNqJ5kA ziRCn$pxzM=OzPJdg?JoHWL@aUm7y&MdEXx6-Op?2rNVF5Nz;+Y?^Lyu%hA_#teTaCM)3IlJ#Wsi+PyV|hJM8WwQD z6dZ~UYRq|AWzaicZ)>{S=q2$cE?*Y#B1%F4?6_VyQF_5EKP ze$xdMJ&^7S2LL=fh@&$7#-)v|NO_jZB;1<3R7NqEFF<$GBX`M-qg6jY9(!2G2b8E< z(pqT#Y~?c%X&2OhxOX5Nw)O>Ku5BLRzd=PAj!m9JLqjR}xVVw)b>>RRbn^970@$2D zpS}-+fFAjuMqEdiSM;Q->i2zpW;T^HbHS zsk|NiB^-4tAx(trSSb&;TNJS6XUn@vTpmqKTAxSa2`{kL`*$jTIKm9~wO#Y^Gr$#GUq6 ziZV}7W43YkgtJZA;ZB4#IaJjH?^f~)Ja<@jx5c}EcP#|($3BrpE)_LtFdW>Lpao_# zEUG1*u8*G{o0`rzB)m)mGCx6}6NUSZl@?viwOULViJudxn8i-4WFY^%cBs@;HR#;hS6F{)kI-GYg}v?QG5k*~)hj zb=&ZwN#F4N<&h{5CW=7;q$#n12IkyY+5eQY+dd`t##AZE0*rL*TwTkgML?d|MUEvz z1tc}iGy0J6g~a)-&BZEx{qL%(*GE9GbGcv@aV^JP0yVdp@=GXe47tcg`K;s0=TP{6 z;{TV=uqb9%AX!6%)wje5G_~Is;4F>v7c6m8K^_CIu3v_h%G3L(0A%gSN-MX-(&+3 z5s?5OZWjF$EY&mdmw6}$mWK^6#PPe*MuvC78_tZLP>c$Iob=F#L*S0tg!?MFrq0?* z-|6DhT@SbMPNo@4;#Z_7w#|Z4BhF(2Y-Z7i8{dFO!nUx5PsQO+I28NpR@}y1$$(&K zN?Yyo3OPGLVA0oiy-zVI3ejHq9Ogv>Xv<(-7g0O5%YV)R=cmx98XB%Bb|>~P-_aG^ z_V@ON?@yPV?N1ged_NWXu3mU0kRky(lSrqS2@tF_(TI45@sR+A5F!dia23z1b zCv0Qq0ZZdH6lxor)z0jhip11B%aA-X9%pPZQr2tyT8twH$b+Ml7~>H@??$+amu+Y8>OpPkk_&UtT|pm&3ycLP*?4`7fdu8!Sr-~T}& znqWHG6(cOXQM%a!nwr1W;2z7zT4)yoO05|7Vehx=Y?M0-6a5lc>;xoS5)uk7TS(-2 z)Vmp{{-Zt{ZlDfLaBJJ){_FlbyZ;xI;He8R;KF$}BrU;ec|AUtk1_kMIzy8W`oA_+x>2s2}wy?xir87SXPo)9aAGxxR_YzCIQ* zp1~n-6cr^Sw-nvDWDku<@j5Xy-iPe<5tw16aLjcZRqy$e8xIS5^` z!>y&J22vmI@W{x~0j*r})}LZjRy;wGXb^~Bqa*pxe)LA8ZHApTUIuv5!bIx2AU~h3 zxvlL2*uCl@ITR_76xbgYu$id#Z95d%FW2suzp3htTdLJkPXm0)>*&UYA0W*(A88N} zqQL2(M?>H!V^dQZwj4e?^VqF<%%z$UWt|Q;vuZcOUOv8T0s`ufu0E2wdWY|1VqlOf<|+H>0g6(Bc<;udIdH! zZg>sQ^tYMBayYlwbyXSz%+LmM2$lUvJS`0Yfsa5bBQj=+s9Px>s}?YP3K9G|0k|33}vy_P8_vyr$X;WYe=OCQ^j} zo7YPMuy_~3HcK2Qt5AkXF<5r>h13pLI}%rgaw)Zdb^$YHShhSIo%y}qV){+k_ennU zvt#}?)bv;YdL@ihw>aXKp)?u?*ZHy{YV_NJV7_jB}{mqPCz=@59<`+hY*yF!hC6PinSXj*o;jhkA zF(+28hyWiat(YUs+QVU^DJvU32#OnoFaAEPcOmZLa)YI$G>HXt2+o|1#?68spyb31 z0MF{Ysi|p~J+NqA&dc-VCQ^z3uJhf@!`Vnvg zDvu2+0cFy&l~2^dt(N*A42?wce7WvmAIRhG={&Z?opD8cIfyz<)0m$fw!q^+$s?nq zp~*$8W-35h_!=t_+p%$Xd3i~Q98${(*zFcpS6B0GW^wcdwVB0pb92E-@$tPw95w?0 z35dfA2OUAJ1{jvvBL?{A0F?`U_P3Jzui2|B0Xa`i2Z43*3it+qzZwao7;shPFntLvFnYNT*wPx946wkiPw^OF+Y3XvAn-L{-Y^WB})I# zOez;VY&4>Wp)M}oPX`@pUbSy_BDWmZg8U~CZC^9rNqkx5R6ri0h_6~n2O>3{hSRCCsef}WsH1Ya;&j<_| zd;_F&e7U9;#^>_%(Dh=sxt*5;u$|6$LJkH^kd zW6}jy-l^Xza?!vdg37xfpgrcu<%yr3p8g(Sp#2qLMD)&c-h#{6j2Hd<6(apUWNuHvoT%3&cgj z)36Qm1Fmdyz#^@z*XffswC@CH!#-uwG%F467aLk9mtcQpZMbEUJ{(-!o6e{xg0?eBM$(7PRh*8jG?~8fd0I^dBrWC#u);T z8lU6F&E9jA89rO;uGfGtM-Br4WE}?8S?)_skXMZ=A3C`Z-Qi1LBLQ!&*o;%-;)y*z_&6l3WO2? ztX{hZltqo4qGB{RFR#XcS)DTwC$4$Q&0VxgNk@TkJit_ebU zl3i$oh{e?a4s)k<+Fd?}T9P9o%?2yHn&M&$j)aj9iUrey;o|vZEckLq7Z)*-kBo|n ziV*ypYE2eu%X+_$KEmWvotHopH)myh8041nF>UM_m;{K_WO?HP?4EttfuFQQRzRPZ z6*R*G0s^uaa7Qr(1lpj0xT}_@`{L^x9uW~SHanZ}_wQdx2|UnK{T`|JkFg(fhhMd{ zn3&nvlGWAKRlhOeN&cSw_fvcaPdLZ_Yo4->jGUaeRWFt0e7++vHuG>WmKJok?FJ0k z=uWkX{1iV9F-#Q+HEfKIjy7_4cdrEoS%OAPpfkqdUBvO9a=RFD|3r+2OyC_{c|f#| zo&=EFfmFo6#>$$cp`pRWfQy_WmM5sefa?wi-LnY`O_?E2XMVBPQa3nu*<|JVd71Us zgZX&6gcKeq0DLH4sQP;7;zd9ecUYiWvbN{clAy-aKpQ7*;ecG%&_KJiy80E^a+$lk zyW>#^m;#h0udac3`0r`+_I+^^O9tp<<~C2>?OuFeH>KSa6wq>=N1Jsj1OM!gdI)BR zPab>)CV~QF3$KCa3Ij%*O4LfBYcw-~VIC)}k|P(dI{@eZ!iRP)$C&+R+Z5Xs^u`*%w-V8#q2BcUi>DP|D(KQ9$Qr~m)} literal 0 HcmV?d00001 diff --git a/_posts/架构/02-REST/session会话.png b/_posts/架构/02-REST/session会话.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb66068dc3bcc53dead42cfc57282c20d96c380 GIT binary patch literal 27980 zcmX`S1yozl^Zy;e-QC@xxED&W;tnnDP~4qRT#6Rg;##~=G(`%<9SWsDai=)Jp7is5 ze*d%QRYV;e5lvv&PKm$+)6;b`CF2pyTpZLrx0-!ZR87bOFWsr@8}=1~a%VsYwmB~VTZRM*0X#b)PqG7C z&RX{|{M5JKsAvJ6kj&|!_JAaC(cd}mq9cFte0W0#B{09TlhUI5=?h*_tK!RVfSBai zgkC@c8SFGDvI$6qqItq-%%Jg%iwQ;E@sQ!hgxoHi-?IRcfVZe_ccye&zzlLg7ZMDk zXzu1-SK#6$t^eW|`^*s}0wMf+IzSSr9babj!8xV7hrg?1B@l z>C#|`yUaowIXUBCU!S)e6nq1A#|0U+!YXh-6B5F5}XtuApTYGD4g@{>F`-+bCZWYKUQg%5Mw7eWVz%-l@2&Mu2nTeoFltSUg&!#ThE#BN-@6;~kNNR75p1E_h#Uqy%L z)FZpSukXr8W;;)-geTwyKfjWmUgET%QDd%X%DZ)ww{0OFtmX!M7x2vWFU^K+yckPx z61=C!tbKtsOCfldFJlgE3FZf?=`wd-}+ zX>X_eAI`!n`TqX3V82;x=p3E6RvT)^Qpte6VALDdYV_c zzo!0MD9cW$uk$k}2YwcAlY2syBYO7%_$@_foMqhTVSJGkJnmt;W5bDwA#9A!b8-=uc=d`%i^!Q{^gJl!X+w$b znf&s@NGR=~ zF6PJk3T|wSxHWQ8Qd2vt4>K9wW+ouMgOBW_!8y5|a0+u;<%_z~hDUV9@|V-TuywGl zvbPW!I-F?>OwW=z2Q#M3dVnXTDC%0XN zIkCpq9zf0ksNCRhN!Eb1fEOUdApZOiOX}QVb!;k=jyzyw@I70Pr`cceg?`v2E>ku) zQOMl_yf5qP({KT=qm&ZCNTPbc7@Al8vocEsVc-hMtSnK#&=MG191DApNwT)_L*Zx) zA9sez%hoprCYZyqRRTProJ-%xb<`3j8; zIZV3n6TkZ8ErJ+`uSj3OV;#NBVImk010sc-0B7=6Sf1u<8(VCy{qiW|PLcR=Tw!L8 zw0vM-xSFH!ebERucI~Lj`@wMN=^AqJ7r=f!I5G)LXeM_wEvPG^N+td4{FR$!i%Fff zO^H^z8cVoSYlz?q=g(?-88rwFVD_KnW*ys)g*^3o7;Q&Gdrf zA$1j41kB)z=AzxIT@1sE3E8)4iX^sF7$`K{2e$FBjtf2tDr>?bjdvl#}?t*@+JzD%g79{$9M z%BmhH#4@tQRQzSd;)396$N-eSwWB@}dkStYATOjYtA5|dR$WR)ft0-~lpZ4aWe&NC zvZ2%aqDx)1v7q(;%oDwgIs=tkh5Na+(6H@hcz^!~TO%J&tbRwVeuvWYb^k;yJ$(oM zuX(bK!sm=jnHL^KmEwGSlA?a#+09%4iTH`?3?q68j|SgWnhlgg4EBp8e_OrTz(Z-x>Z;6 z6@<$rvFEb|{_zvSJ{*r4Z!ETrXQRIoKwgd}bXh0E#@4-RXZK>k#7@Uf(s zTnCUXBnzG}ZfN7g@T(R$@w?^4UO0hh99H*087ZBjSECwFEuU^TgCCq&3~2YV6=hft z1d^&ut?toonGU{!@Em0lIg-7`E?Cs{y0?^5-PYHN?e*1IGA*(H5ZAv6o1+!RMzc^F zVb+kxrLRx1hOr06rh|C3th-Zax`j0FN*qC-656=tr)&M0&EsHpJ1LB3noQs2t~Hs~ zgL}CJ2UGq)!S7kuxF`>qpVM@yxE1RInZESWTv8p=6%n@fKmss;W?3`-d8{x3B@>yg zpZe!%RmvAAHgPl1NNIw+p(iqIUfm1jFOU)GLjrhra>zsJ&s0h9^El`Uu0AK9+Vt}7 z{`lQRsiZjj&77n7Ps@oRF3HqHbL}OT9_eDLuLcnVJ z;sC8BUdDjLy)*rQ{Qu(W395f~NsQ|%=YOAcApeVLk@dT^{})>eL?fb3I~m1A8Gh}2$VU*oYqI${lF|TrL zAE}L!J1Zmp1&j*Q>_pg4Mf2eV$`*DJ?#P-dl*Dq1_MB=x#m5)X&5f^pgcr|JM@cO4 z#)N1X4AQ~Xvv=Wdb#M1I@!7e&x*7Mm?Vu?ar^{-S7*fu!f~?*o2{Xx&!-ItjWWJ<(m!j2FqOp{@lD@ zbHGd<$Iyc&=S4lvig2IZQA8L1V;$WPMW#}h(}>^DL>U061M<6hRF?IiV6b<7L2<(W zEO|SMIkvmuT|lN6(i{1rr#+gb>em)E+|k{Q7?wKevl}fha+om91rI;DMo(ORJv$7m z?r4beDn0?(ubMzI|F>(HU|7GT(q4eg2T>({r>F8)BEQbCwBg%~A6szcm}@2^#Vk@ZpTuK3_Orjy@nfeV@ak_guG| zc7S{4D=UKI?A|v-LE2^ez?2;>tH= zbZ$e|kuNC*$rJm^eozgu;izkgju+X#XQRwZ7~n(sF;T@ZTN@*J>K4cwg0~9u=qOgj z1+IKko{jAYm&xCDqH3UHV;;nJKIp%(G7^s3ZNZb*k^&xIl``VR$Pk;|Bwg1@hkT4V z#%|4N{`AUg&VZfgEjH^{XN53<6{4t`UESk$hImCaeuMGwnv`$z5ih=PVp*%%kbSTq z!^Wy<%&BhRDv_D9PO-8fsV;6z=xb;i=@cWMvKASQt)+Cym>*CmStUNOHn~et!>LU* zhGB&68Locm1dkfA9^gRdz(#v<9G(HM0L49-Q3UdjT4gOkGr+@V{hCY( zT6|HG9lz+=7Q=M>12VOmo&1y6`kM!S4XydimZ=#+BIuKvU}hVfoUzxMdc+4w95@Qo zNNOZhIkgU5znGLTRtMA{o?kR87oWIG;MlBk0Ge*Z~HuMNHjrjSsQ5*JR5jS-tKD*)y4+8YUB2)XraIudWk zELKW{_93e!XNMmS|I-s%k`OlV*s64Q3jbf*(?V=^PPA^XzI*>CPAva(FxM|;Jpa=k z&@S2j1>I~90h{8Wf9;sDh|v3qcv#@b39Hm^pI6 zcZASLz%`1lM>RlV5l9AF--q%c+i}q0UPZ$n*`VS8LDSIZVxS}rbh*OrY0Gs5Yn>f% z3R>D6RrHqzByUk}(k`>DNEpQZt|>(RH-Zy~@;my)bE<*>L-I+(yJN>vc3>`Wb!0>1W2W}o zEp^Iq0l>LL1G$$i2`ILM2IdOr3XQ{v$*M|fnf7AQ5?jWrbfWv5Usb~Cp9bv0SwB&C zN}zTg;ss2h4g=;I;g%a;c;z(N|tH%XaEu?DoVv#~britKo6*#2M& zeTg*ofVLz^wDjm}J{%0&lU!FBd1ipFs7tlT^1k6R=>CI#;L?f$9y|qPZE#uv`Bqtj zzvz#P09?+U@gVR8b(qq2%m90S+|k>b)Y5HvAnwlX_dAf=9ZQiInqeD~(w&G0S7bp@ zdBA*N)d3Ik?aW?U`xR@d0r3A7-Ew*G?lZyhQhHjLhULJ^QIa4{SO^}a8LrbdTFM8cLfVfWPd?aFMh zIsqiU^f+M8<6{*Nct^PY5#v>Y*S!#n1aYE;pDB@EV)0ljSG@y9KVP0L|Ih7*he=*A z$J+V!Pn7jVY2{3~%D^)QbnU*N7kfQqZ4q0F^(rCM$_RTs0B}j{R&CcGd=bLia0X~d zUI03GwZWI^(usqsG#R|H9|HxTnJas8=6Ec<5H&N5T&O=+!;ys%woa0|$}Q;lkb1VwRxv zItAaqrLKXj%!bFPG)*+moGCN|xS`Qde*zC(;5%Vf@I5V3Q-P8)xg}>x&Dhe{eJxna z56kSUzexrH?hI$rRXPujnTeOVms6AAAFkkYL7C&|_AE84RGqdXQ4SP~o1CFPe-xfr z=`H4bsuOmJZLEGSXo)tZTuxDIpp!nJRI`;>p61K+okHh0)*oX5F-swsupP!P*np?) zG--ztE2tPRfb(fmBDCNF+@?XR&QXgDur2&!l$Ydn3U(uc5der`UAs`5mKR+}MFd&* zk_|ywr(Kq1t``gpA(J(p71&=2F}N`;ybAJKWc3v^5dTW3b9!P$Y zW`q$6)~0Mh-}YDWNL>N`nGnF(;rYya?(ybeSE zp@$q2sY$GLV+4k9F1`J`?E^8b)V!>ZUi+On;&D?`;U*F)!JDilj1|l6CtZ}(bOUgDcHPT+AHIfNWb?Ujr~ry+3qYwGxxI2> zWoR-jOiBf+j0?u*ZwPEO0QFqZ(Rm`IUw`5FqneDq3uGNmkQqS_6aGDJP9f?HE>J!c zjKT}txt+j&@YV?C=XUP1h_iF%cju{T{RZsP$o;Sz57DrrMYyL)=^bk46eT!HQ7^qz z@I+{M__n#;HdY)%-mUISKfY6KHLImCE0((QTuDEP-I4LuL;%h>N)yfGNSr~=cy*QS zZpOPrYKefsslQ@Lit>>nTBswhza%50M`2~R9NhlJ*nE2Qzkt4&1WD|I8gubht%2`E zLGn~FMOp7ZMGZ88Q5VKFl*pc+QWzy%$;1UO=GVifg_z%6D1gfd!#?%`-)0~b3d&r8 zQm6Zz=il;IN#kE{KOA?)&uD4+GxK?Cy?J9siVwi!A|??Q2bRWzJq=HaC4JH(G(zKJc3J~Ga@P~zd=>|PA51&LF$kM5dDK; zi-_Gq-oxWMb#Kq!&P9zoTIwAwC~+!`89mp)+Sb-@0v!WGe-h=oXZp3gL>T5N;Qc#j zede9lqXg8U&CWKF-O5OLbaIUlR9n_029TUY$iOO9pC2B$!C~W*0Oe4moFT9!N%E6u z6Jb8d;ILucN(t1N7r?Fpj0O=&gH>-!22;J!*8OU(bW#TpGXA}gp3slTMq-!$B3-yg z?3uGid>FnO?1VIIOfgx&qEO!2$ZRz}EMZaGEiN$QyHC5aQiYc(ve`}Gily6^;%sg*-{{?+eW^Xr$VOdnoBpvyoBk& zBJX2Tf0WwO>1UJY&bluP_yTV0OE)Ok6#i3hyhV`$MOMM3(x@Ntw00Tcx5(ylqZ%v+ zS2wrJ2NwM-y#$hM9WE<5<5tkk>@-%hEAj84&d|h)VQhURiBc$VCGa}4LXboo25J(Y6ABC|ohNe34y;W#Hj8oL_Qn(*~Azh9udbJ`O@8J*sDWcWG#Qz$O zq89ME_9!|xrcw^&rjGl`c9j{b(r9S=wBpD;2D%;x+Dc)6yt+zN>J0@9?SM9E3i)l0 zfCsGjt@CuThO=Ae!P@t@L=x|LtE3CSO{5iNWh$>DoEZAjnO0=9kN>I2U%J<|WvmDl zOwO=JUso#@f3DGL@a+#bEmmJ!P_#@4ye2XRqB;F(kFC**wBQ`^Eu)eOIZL%j`N?~A zN_%8Zrd&-bD1tBKUE9zgO}2E)1XplUNUy?L62Tqr;FJn(SHs-K;xCyoz$4RN5FIS4 z#?IkF^HLF+BqG*>0NLR8u%SMOSe?usagU8cD>S?ZDSQ%pdFfsNH(X#NA>sEi zDLxsVIqH$Li+~8J#k;*e4}JYEXQ+P31BxR#QAK1SyneFJ-td(Ttt; z9N+1g5JG8Bb33F9%ScN-A8l(@BD=5TXx=bP`{tRP#kUuaiCRH4%0HQs{$5H6e_VJv zg?8X;!_L}`KQ{x532+VvG$2cs{RH$0zHtl+g0H0X4+Uw=6n~OUj*r8M1ewj)i5mp~ zviykMe!cIZ-=-x!=*yeR(v2lOoS1L+h)?$98qaK%HXp!8F&s!U z93&**c^eWQrc=A{Y>eHGYGY$^o>Ps16%3!H4ndyA!LN~yxuG`q{%(7Vq*YN-5hI@n z=R10HV;>YWV-Oo#;-lM<^9qM*=@xK+J5?S(Jp3Y*Iw#{I@z_4C>D^-64fxTZw9M#> z<8Fyav^-do0|FHk6yz*6%B{`s zXUS4~&}65Hmr|bDU{sU>!8?UU<71geyc9`{5+|^jqr0WxGfb|D$8&8I|GDs?gegJ1YT<&PjQ3qgUX1?L^f?RZWB!t(r^&D(W?UH2Ap-Z=S&UX z&w<@1!g!+2#n;I#Y`dX7$5TaS&(7G?5&1go!oxAGxW=&qm6}N8eoMy_2DW4Eu2s>h z7}nx4?!ZyyV(}H$-_ln@RN#h_7c$f_DVaP`BMnQ<*A@^|YPpTNU;oDfsHo-Mu{aPg z5XCwZkwv<$8_UZ-Go%SMq1;jP`P$gBxN@->K8Hf)AZ!vN)bvZ8PxwXtfK=XsLJ}h1 zpu>e#Sy(wTtlbWJ+y)BA#9Q^FH~b`N<27Mm{h8zwnN;Crdiu7-{UgMgmog#_+#I&A zVaWC9WF0kx&~I6eqZCQsI$wrdc2Vu*T%@9+^PX9UMyk_=_IF+WSd?)LR>)LlzDDZh= zTu-e_o$ zkNqhg6;}XN)}{5E0Z}{v9OGAx zqzK)C^g}+0*1MdH1ETbL0~aYg@5gh5#wpZt9Z0A&b6-vQf=3!dNa!l`>%+OcD>`V` z<7?h{WTXe-Sz<|Az}z+EOYg*tL~80v-VHgJ5jt8Y6#W^gr<5?HiR=@Ylg{PO^9Rb5 zMsDL7QTZ25+uNO}8R^?R$P8ZqRy2cSTecqO!?o!A?W^=Ve;CcyRy6Q9Qd4;zstasd zk5S`hLj>JbZt+T3c)m@H;{qOEqKpZ_;4i^st09W0+~dQyy_p!8COGEg%H5C=TA&wu zO+Gpw`#Ux2KSSHRGJPED!*((|=`HBV0bx#qzDHx77(+hEQhfM!E|!0`ldex`X9t>c z?AzY?$l@7uy{#w5qOUbrMlDzUx~H>jychkXmiqFM<&dbJ=jZX?;TFRL6s?F9uj!yt zSZu9H2`_noLN57RE6ooIdMw`INumM9@>T%4U%sWc^4@t-!*Nqr^-t@n}; z?opmH*cb;NN=>qS)X}gIHfXeHW9U2KF$a0#{XwM*n7 z6iR7fP)8U7i!j*N;pj@4ETHeI6k+;RPV@H7_V9j1PM zYtHw1!#aCV#`I`_F!ob0!Id$v8RBWHrrW>?!N&0MK;ds>eCxlUJg?;5oY8AXZMXJe1QXN$_6 zQ_9rR@t^F{HZ^juf${dJQxs3Ha+I5@ofUh+o^bUqz#03m`Nu<$N#FFr-JR7 z;{7@dgDABWE@D0bH0Q$=B`=cw>kpa%ZpMBA?W6)pFrfXS{vK)BUR`rIQkgaj;mD&N z6v~%827DTuXzt`lGeekaIkWaeCMe<69C0ZdqHSMzpj{6GijT~HM6z}76dzr{Dv)Cj zb{2|wk`lfM>J-LSdFT6HvP#7QUVe`T`r?dx{)n1t3M}0WxKhLktBEp(%_HQP*}UX{ z*@PnAYeYz~{l1a@;lFfIO?s7Dyxb0vyyf|;@g`rjoL!U+*>+AvgQx*R22BuBI?ZP4@HJuv_MFoD!&3-eAc}w^J zQG@Ka#eX5EcgOCEXHs~%KNJ7Duoov<%e+rdb_0?jy+6;PC!9+j>oq**uhmjTGbyV+ zHLMzMYMxs8U>X=UlR+m~1K}!tW{OR)v8iL$qQp{PIKA?H#c(uwE**}WUWGr9j5oc} z3a2|)G6$k288K{n-{5$FF;^HINwQc0E;_d5j+REh<$^-`&V&A>F{uzVu#r(v+7K3t zg6kXOrjNaLqOmqrf>VJNzuCp!uJP%Jtr`kPX_rJu5{jM zF|hyK*A>&|^%r5uBxomp*t?$KltFV2kk(O$i?H71nGMrNqr%YzZIdt}e{BbAzueeg zJCkJjNOK__-W)v_x_af3?|J2uQ)y##UspNeYI63+E{a>xapEhmO<_h5?WGp2xbELU z?6#guS0kH4`eD5;le)3-y6RK%VwP9u9bsuqyBM=bB&M-rg-Qp^oM8DhB2NL{nNeb@ zUu=Z?0YBnwVr3o%UNddnNnTU!XmMetd{ZqX96AUf=JSiS$oO#8HQ*v~NRO#8mcWM0 z_bz17jrS8KMT&2MtRA}=T{fOkn)Pe#R;vAV^>$m47pVr?I;*Toc=I&pK%yVJbxRpP z3X&=F`9rr}S*YmhY z&l3BZzvP}_k~nNv7V0)3M~vg2>>m9N>OX?0Y$tX|ZQ9)9%N>6HF0y{9oWIl0cWGenKx z3K)iF=MkJGQ@Haq8T1_SWS=?qjaAxfn(qKT-|}YE%`hG`GU8^Y|!<_wvUK`w{&w>l7Q}$T`|z zvR?6sQZ$6=&EE7r_k?gE^3x=b`%I*l zuq=9$t%?F(g=Ofqs_CRYuZ@u@9aC7K9#ZMd{BpX04u4IhGx;w8sj|^WNhaBH z_wXQy>_KtBlnDMRImIPZfssvmg=QS^o6DMForbrd%Pf z|0GhvNKEb?fH-TJv!w2H$rg37H>`!cy2eZ0;g)-hFYa|{EExGL4j^R^4L$#ejir2m zNKn}SVpXbZ#fB*^ux>2pUy|<@QslQ5h3@ikESKNPamGM;!v`_B7gCOYYIkyFRs2(Cr`!b*A4|YDB?gxdF@(#Ee;Rt2l-lxtXOGh{Z{x~! zMVo%$sjo8mI7*5ksM+z(wG}B<(QcSNSrfE^#*_h*4D)Wgx}#w;`LgKxcqbMmL#N!^ z=78%0A6jk}2N4iGi#&TI#3w1}rGbO{-)kBeJWtqUO8sSR({l6h`K@ng-*#8~E`*`d zD+VB_cENQbU(@rlCR`%z!?f(D=)03M#ahX)*QT%MD&E61`b@7N)>~w3BMpGqC3OOK zrDrB-25ENDS~G?R0{1}3FPf9W@xm$N;3Bq`?jX1)H4qoHu`y`xblC$nogXvOD?v)V zJpKJPzS$XouQbEF-FkaE(QoLcMUkklA9^-QS@7JcVwIyy?EN;Ovj4!1vLRVFlog#Q zpW)z((uuKQ;&P$u%f%S+n=0(}f-v?P}4-D$R@mqjUJnd|t?L^gn zg(rM^MJeDrr`h`FeJd#vTg61(+OCrh(w9?MswIDtYjo%JOf>04K%>fSLAJ3uKJo1R z_l!cnYnqO#=GKWCL)Nrfyodc0@vnRVJV>v~rk2pMN}_WZ{zNf&tQ!ts6+)j%*v1+W z{O|-el5~f&-`x~`rp7FV(GRCD5*O!vc_wJz=l8!|E2NfRbjx5iQ@Xx|rHUt?SOSyFD-LTk+$aM%rcao@VXCqiT|R&TR^lLodF9!Cb8g%fUNs)Xi1O3JW-=SquB% z^#K1@URLC!$=8Z-Pufj$wToDuJS)g?vtbq|0EJP^XV@b-g`owRvsQK%vf-vPFEg!| zTQnzvtEngUS>GKi>>vSrU^O*IL_$Gv$UnqXN&mOMJqF15frk2uoZ)=(WZX-a_E*pZ zEzivW{K4o8xp3uW-(1Z}Cers$4cZ^HhxAE_e|W=ki8`(lhNku%QfUhDJ_ud#Dn|Ug zB}^^9dszbs-pf8bgAMuLmfmXCzYRnhAl@WMfgcU+ifT>1Ft_aztNG#JLpg4Hs%M-a zE0l`bWCsXSKSM1z~0i;UkqcFQxA?W0=)qU`2PBnG19Q_uFHE)29v7!)mLrJWWL*mmSE# zG+r^AhDQ2ixz*J}CRgW;si{R2=IDb{VkMB(6=irWfl%z#Tbk_fnER)NcbRy~Q^BXt z_py^7F4T%i#&cjwD5e$=9;FRY250#xQF$vrHjMiB8y`4EUnoRHmh)2xDp-l?&y(rv z5P$i(Kvc7oQ{o)Qy=?0mqo=nERp^xZ!U%cV;Ett1?861cD&4l;u#RH=;~LVu>w`H1 z8mx+0eA^(wJjs_v%m@3*;Il0oLcXhQ-VVtN$hEHqWqg$~IK%_*=en2GO3Is{o;sq! zOe%5Z$mwa6#WfL1jo>S(o)wjwaL_K9mQJSf<2RtEKb^klPv^H=>=5R!Hl7JEt*LuH z<#jTJoie&8JEkZDvT?cfxMFuM%nT)CWDvek7>RQJWOMtO-KEBCAy;3xXdQUW6=D$~af0 zx%{kXE{E@7XxZUbj3#!ob1cR5{?5Wa$AK$8(HybWOVQt@hD3wzDp(*^*XP?KM^4x2uyaS`kXh&grSs?PvRk692{m9KTO|&%N-9%&Npd!1 z>uIXoE_IkZYT8eMaFt`RR>nzi)Yy{|H;&U+7;JDAb)$VMhl*#;tbV9ogR3@60`hAD zo9th6g_)h#2`wDP1e}yw|4I{BV0@7|FH}zbmY(evG-KC}vqXm`6M_B{~CvcYzb_ta!=`8WXRF zB9+0(4@;hjjEHzRpZt4J1JZC)nkq4<-8v>5`#wuA=RAExRn8hIztDBJaewQ3r z)%_YRZ^3xQyVwQyYoX*RQ_6jRaX?>cDp9b$@p}m=j&9f_2>&06L2>yOQnO%DHQv z9A5G?z55fP)#ooaw^iq-qkryT6yZf=GFk3+ugWA1pH)L3Rf)w*8$r(a{%t`cKJ5kp z3e><;gU}j?+QFi;36|Y!v%?Kr@C0Wu%S_PCcc;m38^wB&e&;pCE@m>;e{NPEezMg$ zd>=opm->;QfdJE@&0J*^ix%moNVHs+d|O6eF}kCXzsNIym^|#YF6o=bqZ(|rI>b(! zG{ci}%l$2bel;_kLI@Gq4(W10Hv%ie4NJspU0eR6+l|{oA$A&*!?Xg{F!N1iUH_T) z+Oc;p<=ymdPwyclSU7BPWd?tb8BuMr3am-Gu9fKsV90gs5Qp(3v4 zZ5J5$TY1hJL#Oq!O^QKFhp2bRw#=&k_iIGo2AP!-ofKCO;-Fn1sAFCcmB}$@cX3Dc z+g#~WyQ{ouw5rj>+%nzUgMmsu5jXKAD%17*`NL|v2uye4Wq#=>4m!UVyOYB^mG{C? ztUS3z5?z-CH}a>ki84w5{U&z#l-m%2hxMg}bkxlWxLarcZKLd}PWe``Z>sJr>Fyw| zjjFJD(5Bx;0oTo}4BQHyrkuy$!~e(9Flo(lrEIAh6sK|C6%9`j5-M_Fc#Lw@IrjzA z?s^+GmAh4WHmBm_Tc3TbNUka*&HVFIZ|ym+FYkI7vq+?x(T(TdEs(}^bjLEQeBjhZ z4Yxe6TYDSU^d`4r_|2L#mqX7exGx;5-SU_DB|86m$*8!bIj^N+1ce-(gh*P~>KE*2e*snLw%M6aZ%99F^ zWc*Ynk*>!~;>qWC+c%1_m3pikV(QZ6gjeKwRNWlZVJ4Bo-Qro zdGq4G3=#*~;Um`Y3Y}vPSo?)>Vfv96))9AX=|i~C_{)8DIxW=H%bo*;fgAMi$STtE z($BMZjy((lj|RN-`mZ?YKnL&YYm4Cn0jS>V;rIg0x_8piSIJ<#e2Bt zE5ux0Bvd}ei=4t&laXVKOy~K83?y; znMrp70%Vi9K|o@ynU(D3Lq#Xioq=yPg|KsR^#Z*Pe)5I{5Gc1XInIyk3Q?AotSl($ z!6bYTjIOWC^cOwCI2!r=GjIQKZKlN`7%;*Lh7OwiG8{qm8IQM*H>oZ14-d1hB)#y3 z=hv~7LT$$LPL_!UHuFQ90FqYzy#MO*>L(#nr+%|JV4Qh(JlMU2>T7w>fYe^e34O!&{We! z3}`LL)&J)qI;f0wA~WCU4U7ENA`803fYAaUiU%eBz630S z+xrzEb=~~FAhLtNlS>=ArZPDcxYVGcM;piw3+8;>`EpV^ z+8sJ(7dDi9xZf8RUOjQT_qzZ6=^SCNh6t|iMbr#<65HdFqjibrJAc2EJGZ@Iv}~?Hin$1yfAjp4kz{8$yB)@k&X+onRzEosULF&kMTR>c;;YKeVd`lBE%qTpAC`T}1 z+quvkI`dTmy6v^$Mxp=?!TB0PVqS13(Yi{Bs{o>M#uxAQHnTvoxjZ;QZw(iGEsd05 z0?qEV2bh&v=*3`&+L%|)MfUhuOID1?-QI`Vho3#?xpeFH{6FF@D9pL=!-s>G?+A9* z|MeVXCNnXv#{cPOuXLNcXH~dGQ4`m%rjaF8j)McE)((j0f@OZ=9am=(p;lVQw?ZEa zrHNHHl@vGHf{zrT+lTMzI3gqEH^Uwm0oh65=plfF(t%3~JZS$h$zrs*X$I3UW6}C& z84*!X2rrBl=`)u9X zfIO6vz`IZHRsbic>$tz<56F8l-nE|AME8KuD!vq8qn=Sf1H&Rwp^>GZ{qX_8`N$_4Sc`X3 zf>#U-cjJ&2q(tqf*qSRBk1ga;pLtUCXr@6%E`MSiqg|j;5=f#R^))Hr7KbdbMzQ## zd=wftZ@n-Xn;!)_*uZA6;>4V+z{*J8iY#20SFqDJs7(TAsR1wRlFwu2<}D-xQ3q#? zNp%nAyTGjyNFCM7worNf6v!&NadxXEAiao?91w+5#6%ErD4j^dl*Yob#j8nW+(*ge z2Vpu5@LWht{7*p^G4IjD5=%UvdVek+m#t6&0tM%aG0A#1%F!>0eJLNp#Lur+l-t)u zH08;O15c3%LQqTffu|ZsG6UCd0oK*Z17Co!-k=%Qssu9g2~1er^F>wK4!B6hv=pZU zin9qElOAjqrQQFHy3Ph=25>)!`^Nql9t#&UKe06zbN1K*D&%6O@Xbr1ll^^bZDxp~KGmR*3Y^B~VomyG>Y7un zGPj!od4&6}q)78AP>@r;+087KVj6egG178UIKysA5a(5^F03wIo;e``}WE z+Jyb2GWlvZSuTM9iLTwVzq*R~go@yj{k3pBs0<$*EW?L&7=%Stg{cxz=3Z?jPZJuv zd(V>TGTN<_aST>SDtNL5vsQ9!e*8%h{zlt_4~fkWFXoYC=_<)5o6BQwWGm~(B&Pcg zoO(?!2g;iXOfwxvWOhd;Cp%Ht{IQj8`J|=&<^At=cA;mfvf&E6xU{K3&}A&|rq2(< zEU5bAc`y$T%;U<}v0lGR?ec-v#^IIam|C6D((`ZC9;0_33K}nFrb{I3K(htI!)WfW zQ^VvEIH*>hR@0%eEQ}mX^#)M-8)UpCvGpiPzSKO>{GwPE#V3t7^)Qa4xN_gHhH9<1A zY-3-{q1H^iQ4) zO!~@aeX3uc+{s@BIXOo{Wze*pr|i0kzU98kdy{OxfJ7l+C%_hsQ`ft<)OaAsq!H+1 z98?)^A*QBpe2{orEeAY&gl&;_U3C04Lf{fsp5LkV8DA)931$fqz7uU}J|i%4*?TGI z3^!9{_~n!6O}46D!4=KHG}vj(U}o6OGhqePQ!on#}Picj$ zub}N8Xx~C4%V}M{J7)aLFy!z?WaB5>s z>F)kHGGIY%ne@G>rpD~*Ny`5%J*aQbGO$z(IKB0d(O(~|pW1aBXHLyn`$jv&nq=rn}m zqL7#f_1j>lQvQE6g`&n`3mH%*h_ahp-H%_&x?Jv`jC*0izFqnU5)_Jnlg9hn=>9pb zSe=XwZY$NC!~fb1&B0khyfhyIq>+fA(@QR^}D8%hO!8$w20>(Z8H<5#t><40|sOV^W*&Q$dO0xKK!)Jx+5H~ z80y@{K>)&Bgf}NmRMt^_9-M;V4kYsWnuWS6hY^dX%swV?ZWy{5(xZ!mRy*A2zQrU~ zJ&G8e+5%i22nrl>{8K;V~aP!N_e75O~(qqxh!wQX;2 zY>?$I=%h=&U|n?9Wx&f|V?k`=eMxK~ideTZ4ClCU$l-j4;W29{JTe>hi3GNmr?^sSy_pNx?wk<>(MP={NF^pQMvV zzGZErzo|HJRw{*q72jFT|Cx2lIj7dVo_L5ahrqm{e%n?#6}oSC)kr3&NRi%y=u zwz2hq;86tpa>J4z6+KI#3>TG{o-R~sU(l;sFVJ+@d3j-O3;tQkM3ky-3gwuA!?hxP75!*mJyQn z{pR79e7KZF?_6&{Lx?eLrNPu1Xf9OU*w~Mw;Zp7oov0zf^~IyC9HZ5`C|ANl zBmRoBrp7s1LX(6$>yM767r3H=8s+OXGgP7`J@gxxjwb~zdKH`-8)r*^U+9*e3@o%M z++i|$D1jk?J;}n@8B`LWX+OE#9YYIjT`iJqXVx|bR_Qi31ittp z%d)~oLyCFT)!7-h_%+#>S9t%(zij8rDpTxNCYZ;W7*m-drXOItAwn*il;*O*=0Z|l zx0&T)T+R5Qy&KbIXQz6{}HCt`B37>3Kp-&+VNmZS)goH4Rm!mUd{8^7+M) zIV6t*NSuD@6#kRDx<5dnwmC*de>G?q@|~}MYPF$U}Q!s zn`(lerRPX&Z^qfkXeG2<94*m{&f>%RKb{aULj`bmptcBwh3A3uRQ5cbOJb9QH0#;MNE`1;C@@LX=Bn6!KkY_&3E#(%K>D8*T zeSEu7>MOD^8}m!s&k-R(tSmzbAu+F6r9k(+N3U$=`c#fbfLqgxP%-&C^RKdLgepKw z1Yr&gNO5TVN>7$fQqQnYMkb)3KWI zvPPqlvVGrldzLbpeA5`@8!L_w>2AIx$SoJ-{{9Kj1j8;+dC1|d2zOQsRPy_>(s6Js_ zN$@D60(t*OG8@6@4>pH`2UN)JX_wt6n+X+F>xsAu7w?mJO9Yp%ul0t&pkPtNX`)>VC0)B1?Kzb!w)MMLI*rXlsuZpHInvp?*Y~>~_^!IDk@wcgUFxOlGOQmR2jmz)zCAfiO)5tYc$ zme6MI=CUb7TEB9+>yCE5`!$yd(dYMCmoqs>$(d5??6u}+U&yP&Y-d5Q+k|6%)18j( zx!>k!Unyid+>(oE;W)v;Qw+|_8Yz4)Z|4#Qck+39Fa~mo^JBe4s`2=k;(hGzUg;Hv zp6hM0HX2_>_u8CF;9~VTykOl0qG%n$b^Y7cOfJ)KtAj`(EDz*joOt7wx#0*L#$tI2 zajs$8N%2kSe);YA!N+2Ayw(u$W2fKWV%Pu_&Q;k0I<4>!iOD-3u@~u5$%kxuC=h{8( z4)UM|tx1m+6`dJG_}J!F84fMHhs2Yk^8 zJOp=gS^)@@_1vqJu$g&f{$MF$_iPfYYDv&m%j3UGj59eEjugB21*I z#}>FZ9o8Oh3}Gv+M>BelpL2L?4biyu(APXM8a${Qc6~D44qs8r$Aw5C5WSVDi++zF zno%pKls*0Dzj7&%7D;8U90iJY3+5iL>tn3K?3YOEYqY*qNUzoOs^N6B>%1EFXU7D= zaAW70mneRlIR}#Y0B?4uP@thdDmSxuuz6eRbdG{!G5Q8KIS?!gPwJc7{CIU$#-8Fu zrD=2|2 z_$-Rlu#~OEK^P}XW&`mcg;h7QVK-Ew#3^+qDH;;KpK>dle(If|7PA%VSs8vieo)6; zc~!XP=oWKa&XB?b!rK;0+c^K^W#r0rRsthwkshB@CoWKMxmiHF>+R2g5mV2Rf;>Jc{yWPvLv4!o``3SX&P^7rAFOxT%9xB894KbaRTa-cNrw67t&d z1rlE|y}>tFP;eN+Cy!y|UQz>|uWP{#-ed>pY=-19Dq<2Gaobb$j7c%Q5;ocG*}7)o zR|=BlaS|f*$wi6g#No%^$xW)VvFC|)@GvQs-J>1`j28urA*U*l6^bbla_GgOpQu-j zE{l4YJn1Qgi-pZTd;PBD(=g|Eywdi>4A};xsaEBqH(`EdCT?kc5A_`0 zY5(!1?~|hlLq{<{)Rn@j9aO59= z<=)`g5>-?x{2X40-eb2|xFLDTN6&KXnRyq6O$@#+oDAP*)$;?kAL{Q91DbceVlPYf z$KERJF`nHQ%(MR$= z!o1c{Y(?GQB8=A-F0MoCLUVmCut#px*&T$x>m zHMeywsp*7D8*LXiv7{*x43iA&)1LDz?LFUZW!()EbfP#p49fyDf~wae#LHcXBXD`W z*Xj1N^ZhgPNxq#|v@DXmNIo4g&t^T0ttNzZs>)MmpIMjPaTaZbk^1umx#vt~q}5>& zjXjT_su`7a)QzS1zpAR3Y|=PWk>ysB*}MBn5H7>#O6}Gv7Hlu(Bw%;?GdMU>w*(Al zJ$kdEKzo+M*`faPXAgX5_aE>$#T@)Y`D>)oDhitgNJ6!6p*_t)X z8p3FYr+ovAE(SQRHLh-x`%6yxVy^idrGw?5!6WonkT{yu4c4z&6A-Gp;J>g{w07q+ zc3BxFcGPR2CL94Zrsnub7Qj2n4 zn!-H^giyf_hnwl z>bNQBGUnw*Z7bz0X-y!ZS{C=?v7W3SVToG1-Tc)t>O zx!TrlKhG8`yKTRnd_UpcB_hS*1D z>j$W8WI(}e-W-qs$ItoC`vc>AWiEs-DLG@Y8;aw^y3W9Hi3dMA0$sL!qJ{)1EdK{KK4=IKbI{pwr` z>kZlX)Q_mhXeorGQVQOg{zK}kGOk}x)9vJBb$oJ>;GfskP~m$OPf0(=f=^Pt_)92x zK|f`gWu)@!Gl)1pnX{mW7yHxk6zS~mhxAADL{pXU=23FBV_U!nRmQP6eP_9QBnsj-;Ypm`PuuN`7Sp=iy zF=?L$i|15=SFYH~y1`&hfUq1%h#xbv2xuLmwEIoU1CE$s^(H(A5)${Eog0R8t=r?Z zF9{i^wT@_NWBZyDHh1Zq`*UH=)h+IOpL{?CoLP3IhwSn|CZb0nCtPUS zW1iegId%8Oj)&k*VwA)l;io9NCIyStS1etyy8zIm^kmD9GEouq8f7T5C?;oXGlL(w z4786QSuFt{$fj^-AwFwrct<`>h}jE}Jj8kD%*K=y3R65MkgtAUkLbNNGNMq!<&%oa zWE_@3FISiF^bs6JJZ;PW(nNAAkY@^;2=W30*%&>EJ}bbRMif>(Pc7Ur!;Da2`*v9k zG$z)$R;ZZas3N*l)I)CnSoS>pqh}A}3M~Q4tpu%R=;A?g3- z%;An%^@Omp;tnXZYHi?j!IuKhcf+$Y_y@kO+H6N1UHtuh@rWIuma zdaf91*v#xlH%!)hMJkIp+oZUieBBmM+ySUshAjD{H19PyEMn%h^slCTbQIE01`C*D z-pUM&rtik9Yx)Tn;$LB+eo`(G<@<;(#mKy`Gs07g6vIH;R5FD=h+s-V>Iw1FWlTFvtXH5;;NdCWp2`Qk9OR4BOe)&$nCVc(`C7JQX@z2j z#c%u0w0M2vS|;OBcPIBaY1kGgk*n_8=#J}L^xtn>{QG+ZcTkNj9~a@+72E2QV)J}P zBjG};2gbk68+-u-(CKqUo$EDz>(TU@UixvzSYa2kWV&y#dGW)I;#v_ezH^T607>>!U5ys({Ta`p1^=}`jUNJO5=Dqh&#Z|{m0 zUThQnSFEl^LZzfxciXU*K^m>Ui({@3G zWmLmshq0|!?2NMLa7CA#6j6L&LeO&C(@*}KR9wht(o|7KRT_UGO48kJi_)t8@q9s% z+NQOnZXyambs*G^oCtTV#!_sIj;Dv%urB0=yu6@OmLpgFpg4UppzNUdvy1^EsjkB3eiATe zgsECqLX`V(@2{e>+{LM9ke@T`lGmj&5)Tv3JChD5lXroZH|{Z6%xP@#@CXBNbIQG> zt)N{*#BS)%0Py@nC}zpud9j-@%9~Xa8dq&xBXk9At+)KdmcC0P`kG-kT9$}j=`j0S zQ7E^NYIJmD5By<21yb9?w|gl*>bwOx(9LLIjtkj@7Ry8r$B6;e`Kw0SJm9i9+NRis zWw~9WhI%}2>=)2x?pXb6c< z?0&!y{oppK5{r)~dV;3@+oj|O;pLeMcQ>AhL_=c4t5wwRF1omM-)Y&)3+a?ch3fY3 zn|Jo(Y>k~lJ<(vv?&tBupUl`7E= z6VD)vgm&MayD&anuGt$l<6et?4(!Ki5j#@ zp`+19c|+4~mO9>VSj%Udg zP1nw4vqYs6BB<GGp=g*ZzVhmq*cEoTcnQ-B0=J72S zh73;qA7$#Cr$(46rkdv*))?mJhBxl5BFx4ru%2LZaAYQWO(9L+K_TqOQ(AdhI9ecfkgAk8_H9K!yHEzwe-B`3plW-gSTp3PKT{N(G%(7ET%uI#UVCyVvZaFw8NG-r8`iBchY`(|bro zdr$Jc3W+Vi7hPPp;{^iDg#V{Ybc#-YIVm%9+mq#7HC=gx2m9dM@h(!nyy!(^CNSL; z5lDN~6j5vUXa*N~5}DWwServ$GekCm=cvTuzjE{oyyb+^g?X_QgL}seBn)JLu{#Pm zc&6Dv3VeonA@18V0Ob)Gtoz7<&NN{h07mF0#z|KhNN6O`uaEffWqAq)2~#zIq%W`U z7THLi4zm}S`7ZyjEC2!DkA#JQbQob3@b+LX?g*n*CzMpZm4xb>Z1`kuWQ?|?19#$y z**9YF>VPPoeV5ElG&?D#9N<5Vaj2fvi+Di+!zgml3w*etq?y3NfkAPf2AnTz99zK@sM>5ED)ULREDl(7)* zh#)$LFgDjPvQXVY_7l8!PjNBoen-exgS8EjR6sNhCL%X8XW18qT5Qq_%W@nps-hQ`wY~bskC~072Q~A? zWv|Cz`17~NI(_90%&63!uiTc03#T&iQjI>_<9##dY~Q##^OP_-(b96jA8`lgP9pKq zb%ncp?w=+@2T}}$Ntu>o{MgsRv*ZIp>rT)6FJFetN7Kbxyso#;i*R6q{;mdw_rikT z0Q?tTMppxU=+s*=!e%4*{>VVI@mOswgUf@VI7i05g7XW4w1gg{il=D2a4mgB9skWD zI{5|RLtM9NAp=MUZp6JWe#MiWl+^O&N>^gYhj#oaJJ^J!L#fZnZVPMvraqL(6~iqr zLo)}EVpReH!-ws57s%zmAlOd)oV}teIn;VTqv8Bhf&oF5Myr|5^YXv;khd3Nqh}1| z{Dac*PwYJw_Rh|#!LX(r$6V#Gp9N0#7D?_jUFkS+06Z5V9?J0yCc9|baf)ovKIlA zkAUt6Y&+GTCj8t5a+8vF~8 zg{=XU<2u;4Uppk5JZqrd{44+d(iD*7wsmCm{coL+o{zb6RlCjGi!HgJlM$pD7O@2q z*q%{8n4eJx`^DgE%Sm#Ep0;JQ398hzaKAh)H;ou1`fEDYX8Y%|5RIIB-hFQFm-AN6 z+hRm~{e~NJY8z(V-fnN6_#}ane|Sdk5uAQ^DNDWk2nyM+B&629!?^+(@3i=*cJ#-&wurYd5TcQhvBHJj+p@_Ve_26 zk|1e6@+fVkTRUpXs3*H(memOmCFK#~%$c+HquAbgzNp_a+q2|$cBAF%eW2I9rdGO- z4zu+P4^NH-%yT`0g&oY@3o8AXuGqIYTCk$-57>s>ai6zy9INqKSRHnRk58Ijk2gw+ zF6%hFM~An48wr4z0yu*=R(iIV5Ak#L@FoOm6gc#HPm^!_3aWwuyEv-_LaDGC5H!{f z)W}Tn)7HRm0j%uo_0`orNA!VZ<3z!lT6K>S91_EvUiP&nKq{Ozu?E#qAt*Mm{)Y|t zgyuA`l!-(aS7;4e^pyUp&d%ENVFYjUA;a-JyXUL-`<;LVFp7*k9qK0RE1Pv&AV!x;5Me71*BOJ&~s!mQYUpD>)qTYyCPB#qoXwwX7@}L z$2;y}WaLN?RbE((&K!dl#rARB26$ZdG+x`9o5#Sgh6Rx87n?TB4A!>2Uc)+nW2}q4 z=fJX7O$~)68{2|+%Eat%20c#^Z@`9L7|+X(M$_GRcrnBkZi+Z{b-G$^KP`Y5iOT~? zch-*zXbk^h29DzLLM5gwMW456MRET~ZLMD!_O_{JWNKGv2>S~@&c~f30v?&hJ51@jo!d#>zSnzCWqlhMKy667*oN7t}>FaCBsTdwVI{dAKR zM^<$n$cQd4lS;p7TI z_;5!9)=dJ-{noHtQ`u2BJZvXk31$ZIrZaL7N=IlHAdSw3m|)YwR++pm;p$FsIKwPB zf%0H?3^U~?9nczjR2tPaF2yYLQG^#Qg$+ZHdccYTR^ca9Bd|ERY46AS7XEA@RqFX` zhC|=qT+=3#osF-hs6Jie+#-``V;gBVkSn{gI#yDc;?$|!phOg6%ITD&Nvp4^${qJ7 zO?JU?)Dhyw^aGO;C&F6CpfkESn(|Nh8+wGjG%eX&xm0klfd;s`e?D_GSxI6<)`4^} zeeB{XQRh~6{oB5T7!=`QsVt{)ss8t zR|?cx5E9CiNXz01D~asLa%y~%f&xQgj0^?0VjT9VtMZ9aCdQn~o%AvBW>@!)ke)?Ij_^6U??>){mf<*}0X9kH{b8*`tk>j*77MI4t0K{A1p#_-z z^pzydxK9V(N+BWWPv=({+gUgYS_|r6ii~M7HcD4`)Im6cHnF}nC>6|A0EuwEuRlX8DD)-=EwvzmR7YaKPZ5Ag2((>QnrmrBqk*6 zaAk+9s2iCqkYTa~6de3wfF0Br)YqXrF2McV&!ZisG#C%U{;QaCm11ecOhS@EzNh-7 znA}1Uyvj$?0U1KiSjq?Zxbo&S%k?PE^W3+R8MZC*2(xFi%UjmI9Bd7vw^vI9Eep_;WQAR zf`hF(|7SOvDzuCuk}Ss}t5)61XOVW%jlT8j?3+_cO3)qlZnc$4+4!y#t*jN2ZP??T#E zu8V#9&x|_C+lfEUwGzN%!$R$9K|*Yqo;{$MCYy8oc{kYlpPtLF=EUj>*59~D8OTWV znN@AUO#QoGw1u@sw)MBSg+)d44;bCncS7+2~+^MO^X^avfS1h`EKbUD}s7aK;dsGyognc{JND`Gzl;ne( zCX?hM@s(%yhirsKJ+p>ZDfSmGn#V-@&MKh|HAZJlb8yMp=z!c#EN2m?ahcxFn1Q2M zejDxba1AGmP1!)2XF?$)74YZ7TTWMKj)Yv$okqXO1I};{f(sNW2AvVj;28@94=XI% zlMMe<5@S-$N6RBW6f#w~A;6wV@IDBJ#`~@(KWg_Pu>?FAx0^;oKjxN>Zxyvoe}j_K zux0oS3zOaq>`~$nq+BIz_9$awDDLl1)^gZ^$V;C}b0;<%Z1Rok60T){-@({HRM69? zcVu5)$h=a@A10SIBFjl3MB`NTWF$1P|BgZwvo1de-y-#TM)Iq%GpOLC<{~vM!nZ^JB literal 0 HcmV?d00001 diff --git a/_posts/架构/02-REST/取款业务流程.png b/_posts/架构/02-REST/取款业务流程.png new file mode 100644 index 0000000000000000000000000000000000000000..571424fefcff635fd3fe81490f5405092280174e GIT binary patch literal 8728 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 literal 0 HcmV?d00001 diff --git a/_posts/架构/02-REST/搜索框.png b/_posts/架构/02-REST/搜索框.png new file mode 100644 index 0000000000000000000000000000000000000000..de045e6a37f59673abddfd3354b44f0c91436824 GIT binary patch literal 3034 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 literal 0 HcmV?d00001 diff --git a/_posts/架构/02-REST/无状态容灾.png b/_posts/架构/02-REST/无状态容灾.png new file mode 100644 index 0000000000000000000000000000000000000000..50e8057af2424027d86bac15ea4df583db3f013c GIT binary patch literal 16098 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 F{{hsg{L%mb literal 0 HcmV?d00001 diff --git a/_posts/架构/RPC_vs_REST.md b/_posts/架构/RPC_vs_REST.md deleted file mode 100644 index 7a01305..0000000 --- a/_posts/架构/RPC_vs_REST.md +++ /dev/null @@ -1,16 +0,0 @@ -RPC和RESTfull - -REST的约束条件有: - -1. 统一接口 -2. 无状态 -3. 缓存 -4. 客户端-服务器 -5. 分层系统 -6. 按需代码(可选) - -https://juejin.im/post/5c19f94fe51d45069e53c03c RPC和RESTful API入门篇 - - https://juejin.im/post/5b92475a5188255c5644819a 那些年,我们一起误解过的REST - - https://juejin.im/post/5d5bfab6f265da03d2114215 6种微服务RPC框架,你知道几个 \ No newline at end of file