From 501d2928803ce6698c5f57077ddd35aff43931b3 Mon Sep 17 00:00:00 2001 From: wentch <22250530@qq.com> Date: Thu, 14 Jan 2016 14:39:10 +0800 Subject: [PATCH] --- doc/分布式架构图.vsdx | Bin 124087 -> 134005 bytes redkale.html | 107 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 103 insertions(+), 4 deletions(-) diff --git a/doc/分布式架构图.vsdx b/doc/分布式架构图.vsdx index d9b097fdabb92293ac6aa0cac34e02db3c0282c6..5d7b378e05e304e9df0d0d517f942f9c7396fc34 100644 GIT binary patch delta 39463 zcmV)+K#0G$$p`h82p3RG0|XQR1^@^E001EXAGop@$^ifX%&`|F0yN7`!!Qs<_elIh zxVKs7f0Pd6TMf?mgofXEKv+0ziK&wYHLZ z{A*{_uB3wLCqG8&+b=vdmRbLnq;@@=K`uELI(XR4=Z%1 z#zNz^M9i2*RLtY<=u+{m$nq|#0+sDEZZ3>F!O;I8gq7b>{RDKnCrqam9I|I-{UehY zJ6#Ig7UjBHNZfd_-zNkrUEY6c3U1ju7Nd|%sISO&5zzbDYU41u7J2}F*JzW8pw0~% zf%O75x!6m@9K-{4U5g4f8G%rG4m_4!Eu7c#-}tpnPx!i+c+fq*H?;fh5yGaXon&7* zcQJoPy;w(MlJU!wfJ>oJw;wnAjIz3`INWn1pMRWLR#A{HDeJeQpW`Da! zHI5*QF^_5)vF1_DBGx>rO~jfDk~StEEm1I3)gZ`EOf$Jr2Q zd+l=`x8{?raiO*OV$yaNoqPh9VbTEX$y~tW!*Aedzk3nfKj^7kWn{6@uPg6c61rK~dZ8j=f1k?cy0jJFcSH96NaYZ3ut$cBvcR~IJRjaowq)RR*E>I zQb^7@mBko41Eo^q$PZN~z0S0nM#~R^>DQ@xnNGjXLjR+&(i8h+PZG@cFslj4SdGgA zUbBfMYLrPSsNLjEfqy>*Gffo)#?ywWH|_(!n+{;q4U=(%E!*Ol2#ed8QPY4mdh*1q z&-Qp<`Taqfb)gJ_AmNV0k~)r_;6j(qpnG-P>m@3^$ogPJh)oEFK~ajiMfuWB&$CXo zwR-9KWLr@f!pvb7E={V!(n0KAfk)r9oBy#oy&kFDV0op=dVi}W+Tp-|;isL@9W8d( zQ#p#f4^Px608cIi^y=;(A0L$sO(YM-qrmsvbeZf~`y7tm3qSDF>qVP-r>cjV?cs|+ zJKA2@4<;r`j-e&8HEg+F8pWA%QXXcp9w#a(FWHPpwtWM4q&hH@+`(qrn^6$O9UWLy zJM5~LnGwdyR(}qAJ>{j#WtveKg3u~ettecf=ycggvTael^obkyb%=ulh7lDN9;hWx z^pRRm^fVf+C%7M_5Y5(*jr}mygE)?Th+A1C&Bja1EBpLp9HbeUc$wq-nhmP-4f9dny9J<#W`g)*MBQ1PyuKNrsw<`%#tDIl6$ ze3_0=SsCIsGA&mw@<0;=wA}{R@|2(g75+%q&j<3G~UJTG#*p0K=2r z#~qjO+yM%ItkS(|!!QuQ@x73D5VzN|ourfyIa?rWNgqJS7g@ymKqo@-_PGp&x)e_y z52620g4-YNeiS#%fi6`zHu0I`n#s0Tn!u;Lxq!_Fp*a!k1`p zi3C>yDHuvgJ1NNw=rvU_Vc?TX%w88Bvz1AktF|ao+q(Xc`F8`lNmHD91^LvkL7X3n zUZZAT2 z>4wkU?R$5UEE6}1pexJDX|OnUE&x=kZ&!xyxwG=4Q}<;wiC+2eYeW5b=*`{Sk7LjG zb3fi+d9wt%4|U%6S8h_@z3!bo?fad{+*zp9dbfFJPy0ore~(^9?i@#Ad9SfA0puqE z>CG>Ecew{Wd^LA~-uFXqHkvzUzB{{Dy|c&sdgnL{B6li#x#h8@88}2 zs6EEdHuO|Le+i_SK$`t-f7s+8tpu_^#198)Cy+r0KO6+6zHG~QG=@J8(p3;daF7P9 zC|Sy=HtY;)Oeu|80vU=w4g#}QmQode90caDgbaH9ez(m*6m^Gv{BRIO-F~ZAZE>V) zDC!Q!_~A-X)NM4n-Byc(DC&;dqx}I}k)rNs*d79vfAW)IUr~2l?Y5d-4x*?#ZuCYS zwiHF(QMJ{o?Q^9l>h^oh{aTfSDC&-@!(MN|K@@ezjZuBTmXcDp+8=Z|y6h|Jj$7m2 zn5{@rx8EGrM=V59cQ72)#&xE-O-0@MsNL*yORcG>+aC_wqY+n%qHep|8$#pr!`M{R z9W+PPe}035q|_Y%W8mo0RMc%(8`U01-KL^$uimN;S%{)8(52C5dz4bQ*Xa&9>cUh^ zR^y-t6P)Q$OHsGi8CE-7k6Mblqj9f2=D1W#QFqwx_eVXhB1PS9qt_dAi=?Hf+w1jP zJVa5q*==>lY>yOmhYk2}ORc4-I~>7>BV9{Te|OY^4>uWFin{ybPN&Z?vbLh`eyv^W zauu}|b$dJGa2;UJ2-*r5?OjBQ2TVFy24DT=!NF@89RqVB-72ecJ+_q**b z%U{}xy8GQuo3BVwcQ^zt#r3G8s0&+Tjh)`WY2y_z9$|yAM|;V(KL&yA$hiV}<4*FQ ze--@x`0n<^yPB*(Onf}|Kn`_JocVSqBb)L`mudVhAB~a_K^6=$FdD@a{I0 z8k6WKs0iS8L)+{>gWIU<^TLxhk*DCg6hEa{mRkZZ7DaR zzzY%~%F<6T9l5gxK;gF#fO50}@Bl>QaS-+v3;&fUUvk{Ie60Et*SolkWZG`Ee^%YE zwbDPiR}i$AKYT&QP6YBPOq^^lPJ-1O&olXKqxq~ChQW)8_qi)lRCo-Z`d>T4)IT#wT2Eo+=dvf|}Asefu;vfN`U68;<)!H~>qL9V& ztrCN4qTJ+i_JS6w)rg6d=2{|Ye~zI$s!fJ;QnwKS2Ns0!6q(@h1(P40pD*3$X}<3n z#HU4wGvE7@l`BqP1+dA~@m*NXQ4k80HVUe`zQ2;m8p%}hW`s@>L7G37EViNFe#bPLX!?cINbC;PKNfI+B zFsZj(KwJ6RhOX~M%nHSPf(P)~fEV!zCqd+x${PUR=5sxXUXEs-p@~ROb1JNOP{8oT z-VcM7p~ivZPd|CUXPW>`e@yhk4Geb=KIb?Lu0*9ptvUtulPg6Fz7zo%ou5M^7|x0# z6BjX`0|XQk1;vbmd0`<3^O^gS&wt`Bd=Py2#3xSZ3B^`E`6zgF_SpkxJ_FScmpVTV zy*cW+xWqx^7i1NSyB{zOe!Q5$yfdfc){YY?UneM`#;!X%bEePoe~G9S;~DlRj{od9 zbkE%oG>{CDVDX%W-o=HRFwe^P?ly=*I5SqhLsvE|rm|3=EZ-d1Z&B4LdO*uQSPo&f zPJ&g)HS#Dp^q#x18jcw(m}`y?;>JTaykPox6u?pl&e@@a1?J9YPSSfKryYWfd@vL( z{rvLd!4Yk)*jB#hf4+JVgfrP5nu=X{G)K*-*t$d!+NK5TV(3IpJdS3H1CC4vGj8-8 zXgWOe2fn9f#~Sq0@xx%YwgIx>l#i?_^dabfJ?#D3f*-j40`^dEDv*?TgJAIrCS)wV z(v(Bzl^Z^Eug>DRO4FX6tb8{dqM|pFGI2xO3qM_xF7rQve~LL#K;|~3K1Fpgty&&M zV}bY6!c>uW0-APqa*DjhRFT)zD3R5ac;C6YlCw{nmIGkIAtqs9(SW3C1s^PvjopM80@+aF8C-h)44R&&f?yZNZg}OQO@Wb&bO0kC z>40N?!#mN9IB;ak%fe&tr8^rWB+RED`@xHXWH|Ok(mZ48B{nTSM`s%V^Q)kGNX66I zAFZwyd;4#;ZqY016`N49+8APW87@?gGLF)O3@Jn&{%VLx=8 zXUxVcCZb_5il&OlH*^==;lexvld)CPLtCgxs-Zd9jRe9^jtqjC9hm<#ID*v^&#m2R zx3gbwf7ZIKPP5uTB^hNbDLgK#7~c0mWJWbcQn)I%U9Gk|pzkCTQGt`9i@-gQ55SB{ ziUwP0z1>VtkF@9%os?aKmYu}^O`2VTCJ0XoUkgW$Admk^4XG{*{wt@>O7Te*#rWRr zGdL~bnJB+Ju%R;jG{~olY0NVU%xLBkIMq^af4~%slQpB8*p<4}M2(0=oMcrL3?`$g zU=VqQMFu3KSV?pt#gstv_4QHW08YWve?CbyXakdElSWXaOD0oLz62CiArXbO2$6y; z14;$a3;|H40!{oC=^)=lpoB<^FhU9nfm!Z?+Q~2I?ICh*IP;Z&q_awEix_=S>^@zS z{^^?ZKVFm0w-639LR$-Jnfz=5F*b5Q+mxsoIVJ4(Tz7#7E3n!zg6D~Qj=D|gf1W`( zodWoANYk+~`6j06{0a5GI0h-MOXrbFGBgd-`9@8^iElK6z0r{T%#Eg(6HxNy+dC0y zMpht`dskq}lAYDg?lKh_k8T&#tb!mTfgSel_VFq0Y?^g&>442xwrsbi$)XY@b~Ft{ z3lb}8f-a4&L6dFQ0CR#xv>k|}F2l4=uMn5hCwQDGhBxgAs@&2PnhhVWcseMsqqHMVssj+7> zG;cyIgH0qsGZq`0DqX8$Mn8O5(7R#iyZ}D@T6y3+MYyB6QM8Uy84l)`f8LoFp;{_t z1?IxB$2fm%I6veE6{2wM6kNJ%!3ZWcN}F0)?z0JX4qDHOV61X68mc5yDulx&|5?br-@AH z?4clvP#W(V;7u@`a@e+Z=D2|rIEND$}x ze9B~jd${=haG84NID659N2A7rApBeyB1Mu$g#OA0b9+9E{2fME zB+>0%rtoA>(+o7nO%3L`Xs4-a;oX(Cs9;D=owKDj8Zfchu|s02BN4y2lVtR`NLRB) zs~p5Ie<=<+>*-Dze+B)aXF;uBsY@9x`<*s(Pw+C~T9@;zi{0ixz`*gXJes4kn#r~9 z>o5M}tH1ftS3mt%9fGcN6&xo~kBBHia-`p|X!R{6h!m7Dqrrtv0(NTp{T0U$tMN>4EsXH zlWdNOLfAYI6rF0t%y?We5yF`7kCahd_>Vzss^G})HPD$|vCe{Dn%F}o0>woy3ZFhC*PaAG%u zrQ$b9&Wf!?@*wQxD$)W^F(y$EqAc`8D+DIyLu3hb@7HFRmHX(<_Fl<-+Bgx>No;U= z#+eMa74`J9QbscTfJMCzP;AlG0F{NPq@sboRpBIAW2s*OGS~DZj*b>&qszmw3md>; z?&cghe~QZoz48X-W9u{C6~)Cv^Ebig9X%v{?mzCG3~yC$Q{J1>6eX2SYRM?&Gtzuo zuCmez4k|REMWRQ8h#nAz1HP3;;p5-_;mcqCQcusyA7CfN!H?BW@C^ki_3eF9LS;S3 zAXZHOV=TV8qvURxT$wXwsXY0^XQ^yl1RXQgf7KDue2Tp8Q)z!y$fy?Ba z5_C@eQTrS}lmUt6lla@ZyzU?lWw3%WrIi(wx6KkbPIIdhdS=p@;AaNK20=48 z@ab~0!O#pW7ZlB4GQrUdBIho{V8m9Te+Nr5C_ZSK0gB=>!IauW*8x&XQ~*eWDK!um zOlfLOHmcEt%Y?R>U?8CCL6#<9F8q!Gg3oM;=EZT1ncz#lIFzmtD2}}5(-kR_#M>1Y z2|zhstnx(;Y$iC-C1 zy{l`K%EZl(G%wj_Qg=fp5w$s~qbzGvQYNSBZcUF@V>}L-Dl(pj3_|%AuFO-%9cZ;;W1VQ1u3Mn$hu{42SKs{N zZ}s%7?g1BbsxX6ZME5{lY2P>9e*+nk(+8u6qbI$?TbiO%S45P8Q}f;03?@wl-Qqu! zfzQ~QtOaV4H90vCvNc)OIFc1BP582LZ6>}>toIV14d+mjjd8$QpJ{`-XcMVXaqX<2 zjoc_>NyQ7_%XMBmt}nJMx0G%ApylD8-hHT z1Q~CT3r@vJd~wNK$hJ4hmAVfoK~oI8`A!Y2VExq_Aid;VJ4i5He_Ab`^-7e7t;;w~ z@Wny%%HZ;@8|EJ8{WaLCi#dGSW8F`K<=lcG*>LSvv)Rxz8+>qh4hEc;4-n5Gr7lAc zN6&%8LZvanH2yHLF20CH&i3>j4hp$>sKD9VKS7O#1`^S zwCkPlErfg=)9#%c(VW~ zMmr-_(|GWwF(pPIx{s^@ek-^0d~`1Ugnmh>N4AtQd20t=3cgiuHh1EGw{y-S2Jeqd zoSVt*BLhpke>9XD=H2^yWLorg96d6H7I}DNps(j8&8nrXxAeC4mQJ-UH`ZGknJV>m z%JDE6zU2i&t`)q~&vA%VCr(V6C z!RMHu&IYkTsW;U}Zf(|?N>@@*#~U_hpKnebcyg_^e^cu=Zo?l95fPgX@z!ccZjknu z0Je4-RV_2|b`mPwk7nX8vq2F1V7x`tYddxMPj5_tV^@aLkzr*IYYg1%%9R0=UX>{u zx|ew|lpObSMJJwA_HHja3-KP_HO?>yS?2|V82a`mBS9sQ0ylevXm4>EiqYQWG+=~8 zAl3%Ef6HQ3AjT8}q?c7OhP>HnXo>!IrvZeLC3(ZsfC7GcrEaY^VCb8k1_(sgq;Go~ zFcbR5rva0B>(hWrF5_R6X}ws%g2&67FO7pIfU$!?@d(95X5IodG**DoDp{ub)SPZ? zX6AD2ynPraqO#_jJ0gceJu=6JK*Vt%3dBm~f6R+?3@MnG=~z@UZM7Hb7^LB)ItEE! z2xOAc!%cfBkiqmreB(lUF_1yQ?m=D-WB|&Yiyd73B|#>;*unG{1v%6^dXRHC8uuO_ zo{pZ3K&H|}3GveAH9yKJcJfSQ9ZPi`Sg@7oz%=92g-(_Gkiq4HEZ{&GN^o5I=hh|S5Hq$?A*BS8*CJfNpt|?=AStQ z;B-zjzpVdp29JlG1fP^H$)O+92xeyL3;JEtd)M_T<-N=``dMpwCJX`78y z*xDKQ4kxmD;<&ZpTL{d;07;I#iNFKIQZ10s7B~fkkX|$t$~hKm5yH z$Zug~$!XiA3s9sypz>Xiqrb)XbWDchS$*DHU#}xoIKMWJ*)6e+xc5 zi61A8S5BC%@+TE+=h`)_xn`wWyewzOPGak8^q2&D=O1WW3oTIdeKi)Bpj1(tI>TPO zUYPbd<7{i{b^Y~-$ZhvHCiRqv5U(LeL?#PBNG2#;?U(-%ZWGM^*yMf$ z+io5Sl2QK04)s!QOk5gCpA`o`R9N6&Chdo!28;V|8*Qv{!rK>w)%aFCaqctG!Shc|&7$ za!<>aZl``D8}-yVJL|$82+RF#*r*LA^J;yk)@kq5nzgkyYRRW`!dHUkWtJP(h6f1{v+&KxV>p}s_bLtQCZk33FToFOiL0Iz>PBWP=*mgWO? z5Uh=wC5yFDKQXLYYoq?%wNckN)o!9#21EANPOYY$)u_!OwNjfUcWZODHfOr^Tbnb9 zw&yOj$(&4tCR}Potj(EDBzp}vuiE$Bmy>DeEg}_j_kLV`^cptjf48D2O*S)S0Z(lt zQcl!$l<%jh`MTA+uR%m>YQDSu8m4B*qM4c}-VDxqWh~9V`M-a%mS%Mal`@ISz0-z8 zSK#<(7SnB5G^5V4k4R}+yGLiA6r6+FfgO=9C$!(OFkyE<6ZEWma-ESPZk$(@6|3QEs#tXkV|j@93XcWAOW&SHo5;L zuR0t+)s1g``229~{cJoLjE0*%f9jFm zS~lDn?GA?fo4w=d-nFE+_N|-W{Kkz({r&9rXgJM=)5#j#G@NYq4yMzi>l+)BorCOo zf8sqK?2Jc~(caYC89m<^?d=VAvW@o#@aPRjDBF169}IiNz1PRu-J_#y2+!Rcji2|Y z6K^!$FCVcr+Btp>-NHjiv@y;OfBRDy?Brl@G|8WKeR9;_$u@gO<7|?R-_LqCZ)_j* zkFrVm|7-WQ;LUn#5Btxvr<=XU+0L{-+&|1b>Zirk&ED%@{qE#%zbURf`RE9qmOrAm z_MktRW-!pVXh2v>VPIhxMR9LKY4!cQe^uO+pz(&mFncCPLp%b*z(0xd zcxZilbT}I4L%*`?!yi}*e;CJ;@7#HC=kC*6kGHNqzWeQ~jMDY|FG=5e3qRrU=y=F? zWBvf*(J&4Y;?n?TG-4?%AS~&F2l$S+2Zx7u$Nk*_?3t}W(KBglaEtGRVqU#4CNWF^ zi{dmW9=vtuF23c%6m5I?vjZo{alL_`qPB zE0c%YJsM30e6X_B1`JY;l+GS$7Qr9Cail(3XZ$aV7d=uh_Cvm8>S)>Q(ay1d@qFbg z)OB9-eWQ*P=4&fEf8;_9UP5dO_*(Ug@XhNNqo#{-(?t;e`t9&($cr20eg#=8H!kRj zVev1RQZYWfZ42>f6j16L1H9<)PC?Duo$G!2t_|slgwyHYCk^OYn=xf zpqo1n(kSGMK{l@G-E8zcn~p!~RWgV#?32wN7m80t#btf^e~il{=cM)=JUyM4+j1Fd zUE)c#UQRhv8@auJEe=*$9PHZG+5}YCVYa@;tsG%=oP718SHJxG$ycAe{L9Z@|MgEN zzxcP4Pd|J8-~V;;pMUDD6;?>DB%~EWBee8V(I*~d43xd^M??#tJ0?jpPqVJ+L1hJ!$HK z-;8x?wnGS*$GQ#0_4M1Lakf7Ml?(dv%3l7{*7V!&e^m|Pfi2J6KG^+0d8Vl;7`wdv z_QB|bd;kpFBmZZ9okc&G_gZ^rz#& zho*PngPYyz&fXsApULcod~EerSdks{$Ne1u04;hHvlljR+y|~;i6)uFD9w zbY98oo^CHAm4^=i9#j&GLO)E>B>(g{=xf+!e@>2a-PWR7X2{X)opFDA13k#2M zgMxw?6GbTjvmycmO4qf;LPOgm09QrGqBI1n2ds~VwzqOcat&M*K4pM}G)-?XcW>KE zeo!?+@|VsP!*g5B=m(?sD>GV0JBF7KhMvvLv>M#H;ZD6Ij#v<-zMqhQ(YaTnwNKs1 ze>e8o`W$Sz7h6fUVHnOXk66lB6_D!1O1D z15Vki4Ok9)Jc|ykH{s0gq(!6SCh%jln=E)1x+%RCGg&S&@~OiaXYCYm2WRaFL8{tf zbpWTgdSg*zC)?qCt*Am1NlA@hac3jOf7vDw&T+O$E%sRKikZg34BKS>rzFV#VfhsK zIp~H9AdGgy1@~1MF5IAEsSokiF!2KdxF-QKTZ1V=p3Q5*@Lovb;~zsW2)9!YBGLiG zcNqy|9}KhBp<(0>-F5M@BF`_tx)`8_4>l@Gq8K94rY;xh+ii8&=B_fuxvE$rf2tyq z?!Z>BsdKJY;q6u}!fn^~h?3oIZpBeL>a=^H_y`L@G5gDC9RP-_-5#b3pF#)$(M6X= z;6~O6FXgq0?gIaAkXUVG7vJMCrZ}Z(2tF6m9AyHsOBjOt2Iv_igs7C#N;(nsupo-s zU+lL1J|&5R?V4(Yhb0RBZsR*)%aOlbn+p^8`;%@rK6df2hk1WS5$P zY+Qy~mv~aGms8G^Zf!vPMYA@-L=as{b}hfq&EAMpAfbeQK!NtDM4luRBAyTMiBh20 z0(TY=12QC}y}{#rC1Vsq86ogSQ8R3Bc%1bTfSD5z@Rmm^nH7<1Iq5_aQ5z{L*xDc- z1Q>lF=_G(^;*?`4J+^f!e`}-9BDP!5Q|kPKh^?o|IzT{`g5a37IYqc7D2Y{+#C2CL z4zqS=rypm2RdruL(o8ipa(G@K@q(SX!muqN$1M644FHEcaZi;0lR6PX#ae@F(LRgrTT9*C1Q zYv1pKw!+E_$)@fq0I|@pcaZ5CI0xILOWpw%ir4O6%E?%~tn zZZvwI9j^PAK)natKf1o$IpG|?jn4gf+f0@sC zi;SPS*mBvPA01{NLU3wuG_BTo_9~3fZPjF6Q|!0@qgIt$x(3s*J}Xp`fAKlui!2eHo!+cJA3u5_sLT8-zxwKn-=BQ(hgUCt4JRPp62IXnPZFASpa~FC z1DfTv%B>Cm?glgAXaWs^h7B(3KtX&J%nab{L=4_+IE_H#w9TunuMX0lmjY$-^QL=^ zpdv}v;lu`nPk}No)*h>UolQ<4x5pN{$0T+_jzNbqe*weE09hgNp(h#D}7;+`)6CUE#6RM}6-5EV9!mJT(4GfkH5A zN%j4-7@bmNSoP^@(Zu3{W;V5 zGYlBix;lf6AsY)>ll}4Pa7shY`}|d>sYKD3c^(AsoQN8x@(QyWW#Gux4Hf) zHe2I&FsH?16j*X^*PPr~P;?f2cJip!BNi^UVolDIX7AiMk|{uLOyz&ydvtvb(v5gD ze@Z}VdXy4yy1)MXvy)GM&ohO*`r;QSKmGOfHOO;EzWI%-uRi(o<=;Pl_3wXp{mU1x zKK}EoKfXBm*Pj<{-U1(dnP!ArE63o)=eZTZi~j@2b7OMQ`%T1i$dXtypzd-o%G##0FDags9`TL@oa zXdC#gYCk#{Fbq-c1=17O*tuvxYA;yDcOD|v*2Pp<57AM<3VNEl8jZN(GSYMue+P$i z(&v7VMZ*b41yiA`@S`EF$wddQM$vE{khQkQ8Wr%IkkzPFrP!R&li8faZK70hosbOerU4QaxaZb*}bA!mDWzawpS)&n1mGQt3CLe2)rf~&aK zrL$gNYxI#S&ieYqqITF@Z()b1f4+KySte{N?hRLyal=f|e>m+TCEv zbN5>!=|vxHQ;}xlsX&J{9U&|)i)M`x`B!wtSaZRIFduyMDkF>rbxK%%f29-7B*5Qd zDde4JkYiinamk1#kisIU2p3Qm112R(-U^8`^)NWXj|$GLacNL93^T2mFDlS9v4Mol z){&+og*8`!6Eo&WVfBKALdw)Oa;HF$X|Jk41^d7Xx0}_cAtFw*JCgn~9NKfFFlX;* zl@}Lul)qazrm}9k-R4MPe|7e{rO`7>tVwyH`PXepVIgq8+BjiffAw+63j4{=UVZVG zlTZHq`ak~p)vtd0fB*BFf*AJoS3hZ|hCLs>Yovyyl@*1G@CI#)g#~Y%kv+#l;CL%zdbuUu+cK{2O1!w1py+5a+M6yq zGq;1HE}!*TXMbPf9&=FCLD6@>*{ap$LAX%$k6OBL&zM+te+E#rJg`)QqGcM5D&rUp z;EFvI^{EH(P6&)bqKyF3bt&1zDtZ}IYmCDX(s-pY6itEEjEd^@s1R=q)61ym zrwr0)`*4DY6J7D+RDPL72`|hq3%w|f05L~ZBRrdb#d9M)QoaX?MIJ(8V6ZZo|WJ3bJt-YF*+DMt!DC?f6L^k)xSih$tg_^S0EZ}E*8aU zkmfliw(i_j47$@~QB{uBw-%7xDog?EL1OJ#DC7=yQRvO=M=DYzj4qVPVY3W2CdaJj$eC&|IZBpy z&ExKbVA3}@H)|Lau5`knEQ!Et z69#D#`LTj7D-2pMAg#1oB@Eg<|CPg_ml}h*grN?D0zoMv5x5BLJ>DI(oWr0!YcMX= ze>5^^ZqLX^)bWUMcNOraV$eC>WQq8|9Wg$4&aH^pVc*u-e=SSgV~*E-?t83JWX~C( zG-}mV#GngKBpQ?_j3EqKmX@ZWRvM9C>4raPLV^e=S0sWWiOn%kS6#Yt;aeI!0#)oux0{V&%@GRF|tR4F~#VVl?59Kl?sJkMFo-&X4c>_?}A@diUE` zX-odDH`R~dU70PjD3kN!pSzE>$=6Up*fUG4>+tJY;#cFcody!&va69lCxe+$CMk4Tcl>fz`LgMuG5jngO~{Mb{RrjARdB@j*0 zbxOi@76fm-h2tR(gI;P3>bPVMgE|blN*Htw29{OiN`xb4)+4qEaTyKGD!4Vrn=BC@ zI1G9bG3dqGV~$I9?t4rkE5r?PTr!9^)|u&YrmQjOg1KaZIEJ}oCA|#ce^0p54SzB} z43n7oBxNMQ*r~#w6u4wzkih2&^=&B}dcv(_3{qIMp|911 z8m9WY)g8bFdzKCM52hub1=5!WkU16o%*R)Xhd;FJo$Ne0% z-5K`ZJG6IYfr`{-q{tUc15W_SmPW& zf`}*RE9lD8va-l63~dWWQe|#;9pe&h?G>_e}U{H#f%~`iGm=G z141E{yJEXxJIW%fj%r02C=J3SIOnuvb(={^HS2u*m)ghgcxKMW?|l5La)seZTED+tcyjy=;0gKGyHr z8Xbe5qiQi)B@U3|f0?a;I}==OZja^O#wXvo^We@qx9Ww#M+gj8oZ4$jPW}7+;r_j? z{OfW&GhXvlKO$AfON;RFFTOrl$eOa2g<7!=e#IW5!eJ+cX{Pw_D^EX^st(e?XDp1< zFbI65m4m2{4ODjrQOkG=7v(6Jh=UcbRCSe;Km>WVr=z3Xf0OP?Rr3Ht&{TjLLYjJ2 zYH-l$7eOTI7a^FdUj#a@yeMP4Xye|t%aCC3uC+%ninIl~rw?f)0amOtc{Q1mML&ii zs=ZiHu|+R94Qb~gV&&X%h!(lsnpbnNDb3~pb`GM7&F0c-yR_Pmx2~G3sbwCwTY>Pa zk)evPW_9GPe_OoPK~$v3r4_KGwAyC?Q5%apg?v_Mb#>FqINinYE@(m$5D;dO@%5vRUCB=@|la3 zUg}t>t0%d-u~MUel1iv8RUcF|$jeYdA|yYKfhHpff6zi$6*$i**VKM+7Tf~o83(EM zV^QXMmRbr#a`EHXqn{P*9;Ae)r(~?K4-3FsC9`awb(Wm%PD87 zfw%>pA-$GIm}({mT(LJf{MZBfJM4I%QH8*wQvBW6MY!_MdBNZtUMiD&30ZYD=UNC-(sA?HiL7^c2dCP%%5wW52ZmqU*r zAyWc-Ikb9hs2%olScHnOkHZ*^S%|^WJ<#G@e;k+E#o_4St7~r}`{%?=J-QX-uq zBvqj{j6zNAM|W@-hN$-9V(ptfV;HJBx!GL>RPiUCyj%Tg;50irI5Gy%)Hyo%xu@e0 z00GODDh7LIU&|7Y9H<|s4{=3D2Y0dd6r8wi;Rj2-IolttK_b*;q2(nwv`+c5=n~fA ze`Ke4=UW!*nAJP+`zo32P|Afm*E+2JN0j%VE$pi6lH6SdARuL7&H4KY7~G1d3ij?M0|B zMX3@gmH5-89er@;?$cZ4ff|^n_53eM)k+xk^T`T{jsH@dNNvq1irGx9ja=GM8j*md zEF}tuc2?ZTD%q`&KDGS0n&V2ikumX8#I{T+a@9d%LWN+dSl8LMDd;WzYlx=ee@a*v ziFIasf%}u9B~hg3XrgD>;UR?Wo&I6bUXixlV9G_egJw@E&a_fRUb@{@O=)X_mRj0T z@wqleeJuK}BBd_JEw|CCOj5`CmvElBrYu(Of*-ZiO|M2(RI`JzRuab%Xbeeb5uZo?$D>i=#l!>a_N;Q;-q<XscPrS6wfIq3KQM`1l5JixP#jq|O+SeJab!L8xGf3O9-FeXr2 z&}R?{42lPD-MNdOd@5|9*c$H4M6oVc9EZ`xk6ip{mEuQ^!?*@VWM*5$i^jAresmGz zM{|5FON>#v_|duVF$vC)=WxygZaV%z;8S`;Ymib0vBu}rLF~*_v`dU1EtVi3pg0P4=j9NjJs8c}|z@G#%$5B9*lo19;e^*i1vcjLhVGNQW zWN8%pB=M6L{HX`h(ZiG&Xf67Un&C7qR%|jgk&B5JCcGDV>Nr}^nmwtG!`NI!Z_&X;x7jv(x6fs>onb{o zqjr?4XlD4w_#9Qs+9|(Uk64oxdT{n*q;g#SWl&tv+J%ea?(Po3-QC@~ad&su(71ab zxVyUtcL?r;;O@bl%ijCDr%s)pz5aBq>gqY)F`hBzY~=pMg<@vB&ng}I>+NQg<@4oF zn$gGIJ&Vz=m#3M!o~Pk)70~;aUga-L@KKEAs2=;6!iD?1y9g$o=eWTT0Mp-d8^WbaJjwd) zr0*{zIjz6Q06kOz1K5cck~}~fMJtb?tHRLWgv-_S*F`h=56q+eEtHNTEmh9G#RC+%UZu#M1Z_^B@c2E~g%U%Bt=+|J zH!ZLPr!2CF&l>c?)e62-z^V8EI=Njo95{(A1)d2vevyyJ1oks5E*TfcyA;_zCi8ErihXWh5nZ=u4z}6L7Ow)7xyycfm#8HhA=sa`3A6$wQHUB54zY(vl-X z;Zv$mwBcaE*yuI+5(Cg+(S9LE4=fuepK?*N!eW$Xf(lR@jN4-XKSeXPN(sr-cAM<$ zL99%71v1*zZ?s4%Bv4aAIX-&~UBYj4^AN&2SlBVmam+y93d)jN-^){J`8bP1D{z2; zJ~v#|0HIxqovp~KF=KtBOCkg@*86cXKC;|}%(r__JSt0Z50YXj5ug#}%0Tuw^nbad zr6p+lgl=>8DZArm!7_EO`q@DWM~T)B0+c{n7%Qtekm6iqO&JEEYYZX(7f^XQ@Cz<_yAPTQnvb_(T_9()*|xMn;L9^10$6 zgv<7eUi{TA-$T(v$0KT@k*J)Dv2|W$42kP!JNweu1W57C@*$AS?i{@0V@_X1 zXlMpcZrKn@aArP*e&!(C=-76_Hr;sg@~wtknzL<4U<{D=YNX`Bk(cD@lz zyu>^<{YFKTX!{4YCsfj>GPRJ9AY4Zs(2Lk;1zDTD1V0QF-&BUkOVYj-RwZa(sj$yNFQ$ z$5Mp@;09S{Zc0vV=)*Z9R2_WvG7pF2kRAU15*hWnl;zEPUD~mwwt<%6lIu!?4zoi> zy=^K^E@P;1&5P>0-WcMOr8$Nz(fS7ZTxX!Ietm}Raqz*PJ|8ae@?*(ykVwGY?)_0- zj{nQ+MMN7Zwhl*aofsR<&6Jb>`_kzDS+ApXT!x<)U$peuEJ@p}$T;~#c{W|6Q*Qp( zkW@u(ermVxE@$1?Be{YWx|aq-eyVTbHdI)>D4v7_Zx~dNK{22>V7>-+QE^Vi!;siE z0y_m-Tysh7I6~D9REr)Llc2exOe|~oH=}79@$^@Ir4bS71Y1tZ$VJMaz!0Pw;4xy` znXm`f1uJc*$wMa2cU5f(-%5w~Gcz6v>s=d8)x>5=%C+c_86|q0Lu&wneeAE!&!6{b zOf-daKQk;WbGol)iMcQ)R*1QP1qGAg1z~Y*X~#BRYpm1nAYQ$qv0Ti6)2AXp)KqBR z$PpZ1SbLa!+?8_;ck0)T-Ktyo)or&B0i^7CP{}_q`zMbbgX>}}Bbh-GS8e^Kr z;BZyi?9db_Mh6D^8b4Sxe|2L^CR8rla6oBloy>3sbAhkN`Nu!&^*l=mXF)*YlltUH2ZXoFfurVr5BY{x?4zqst73BV09R0 z4w_i^sgtB}jRMEkdf99r!&X<;Ed*%hyQ6G4J3z<}jxtvCAxzXoq};UQ?t1$Poz@=? zj@>jpOaq0GSz@;}@m1AN2mi4-N(B0E>WA6Y!rrYpaq6qEj}&+n(j7AQ{im8devz_c zn4!!o*a!e~;R$v!<^G~f0(SD);~P2r_q^iwYiwMPq6zYEh&kN(w9kU!oI1RDC{9=T z?H!z*)ZZGNzl9fozORAicQcXx5g{-XP_?qQX$qsQ&0rCq>C?&`CEK|xsm$}6xO|+_ z48*YsRQKY~)}^2F>XwhXK%Tm@n0^e#_pkhZo^PH(cM?NEv$k4RP2nQYFlpxpH09qH z4JEANGciC2w|RZqZ+(op+|PUv{`X9RG@H$@j{aB>fE3}5^b$-|5)2Ga^vB0IF-XCQ zXgu|DGw>7g!cY~WT)l@>$P{(4kP0zzks$dmu#P~AT@I&HT?$L#UDrp5WRTnWY62O_ z9?u!on6T;E*75bF7cY(JGxk+VT6#E2#?k^Orce?Fx)kE4G%D>{y-^$QdIehSAp_Av;gjZlL$2^J~qXo`*Wpw7x^j}#*$M3S4WSp@0^`LeIF z@T{nm9@y}`7wUg*Pf!2bE*7l$?0T?9bi%OiD8UuRK!2GI=DXe9*IEw zRSu`Nl`z1l5Uq}X`Oh5G(>WWn%NYMoaX3hGW{1kXLK>HF^7aPaGYiEaOS$!xs+oxv zjITjO8a;69AlSNXKzjMXFt~T=_hZgnm+8Gb1P&BzyZSfpFUa+CXB6bs*5+t0@^&qa z2SvDK)Z6a!Bfeh9hs*L#8+qGLEP1$t6xt=}#YTHu+of0~clH|zl1x#=LVrJ+dK1?^ z$Ey<0hDA!>s{nlOkP|h<&31qSsm9%AyY~vb%P1BAkD2 z-}Y~Fxl=*(f|kvg*zv(`+_j1QXNnrDm-_6lpzA{2%8_6s@%iN;zgct_X29A;&$3yv zUtyd?TiK(FmmmnnLB6vhCqeCU@j~7xpC1;Jyk!D?b6r;;42dw6&`xn~r*~Cf$f{@ZRXd{~@Bcw$6pCI2i+o3=edD0M17k5|qf1 z9Qfo?k*5%6kzk1XjwGR$fVVxn5X^NIlVJGrIZnQ1RGK1VV3k~wf?qZBE=J42YA#S?|Ps>i0QAP5$ zBEbnqzB3%Yv;F+HTNftKLYi`Og(2G*>KF064&&&fJV(v3Bdij3VQt9KoDOQ4=;BDcwc!~y_Z_fvO5-0yqn()>nCwvW#Fp3r3btmxVCJOD{Hs|kjwL(G?kSTAdac@LmSh|99AX+b1q z(P8Vs(6*%$<2Ob7P+%v#(QibInTYQDmQ!KM+$;L&^4K`&{up>5XfRBv$Adxy9f75~brnWawjz@^zyvVA;;a&8n zRG<3SpU5>$#ukyjd#xCjD+_vgfoa$K-7F) zmN`=j{?XXB3C_fMj`0?awSii9BQD0WLSp~;gBBp3x}V~oG|bUq{d3CWhXID9s&gBP zztUeF%!P{~DZ40hXUj$^4-$G6KbGVPaT8JxIQ?_Mgp_oH-z%QoMfd6Zxz+{L?tV{% zt?@-9JcT-(;5I`4x9)({E>omZ$NVZWt_jEjs8rP2S5kN(E99sQBgqyh9$Yr$e$oXM z0e={ybn>ra3P(z6@Rrl;GVr>{j^Bvm@$#* z!5N~KP-7i;kz(oLu!8lH2}H7kaTHsD2c*d;>)uEH<@Iq<t7R^APEMOd_E?YvxC?gJbK$Vbr%|B|p?K6)wjGPVYRR-o54Jim?E74cq zT_69&Wlh8*E1%`_`C`LJ-?!Vg?}B+gz*2OCY^t;}F9tB`wYBiPc>Aj=%ZL{Lwhu;&`yH%Jfa9)GiF*+Ui#*fE(j^YdY+ z?+sS7@n+A;yWLewPaHkW@=*YnBBdNYozrZ&bc%QS>o@UWRKhl)b?9cay5btexx91h z&S~j?a#YC1FlmTk=a^cVT+9U-JHf%6tUHQsWbRPq@gr+JMIFJDMCLLDT{o7faXW>qi3o7niT}xb{ZE$5>RX|0o zP#9PLLw3s(oLv%RThW?kErBy@H7tjKl4tM7+R#YjOzx~@x{u&e5ae3)S zoU#~Z8KxfY?q66I&^wf+Ul>rAkq8IAOU^#@=K1n&d+(Q|7Jx!{^S7`8C9kZgVQD_S zITr5x$bKxlvzK=?O~7I`Q7>f8*y_f%lO7Y}cgu7|9m7LC5u2xl;Xs7JG3ISb<4|wA zr{)MK`kl9pJ><8-8&t-vES4ggT5&s0Nh-dd7>o@00Pg~?7)n;Mah*3kN2vdy4^%G+ z1EQpZ=4m-n_d1APxk`UP&?KYrfYYv#6d+hU|0IENk;$0037l|vn1dKB^pvDkzv{w!9O*s1@B z;q%36pHbKk@Mb zm2momhNJo3oxgJ}8ea!`>%?{Yao?7-i_h<6+0GHBg6kpCk`^ zs)co)qby9-5UPSOsm7lHS`N1p_WuG0P1J6~p-oNx#!#21+$!I80)|qPFqq>)qgzfy zv+lOgo~zJdAOnO0VmZ%g5!HrZd19I&4sOscvWlt|l3-T5Ml|U7Udo{`_ibX^#G<&X zv|sB5Gq12tZ^U}06;8016hykZzVEFq{3R3^wcvwvJpYuuxlp^3syF!@E(?kVWoh0n zsz(Wp*abRcq-=?OzObdm4Z!70I{0F$Xis>R@Rk zg=`<3RGZV&Y_|9cR$C{%^#e>Ml<&P^;9u2Sa;qTluX_Y~ z_@opm4v;1EJr?pplyMHCG>C^ORHiEae%+$K$UNq#Za#NsuiSf1q=gSW;vfhe&>=JD zK?uPv=axR0jH#*XAfF41)=i;5yh>pxPrD1If(u~B>)tiO(1A14(n~nmX;y5YwT;Bn z{AZGTb>TtOrl8CEHj@Ydp>@;3XTi{Bh-Y*G5X5Di;~?u*_x?uz7@}2)$#hobqtNb< zg7MQwKtB^KMGkgnG(Yc)Y(3@mC&8&tFF344MUTC4rEqXX?B#<0lyH0~KtV#-r)$rP>W?7EPj&?RTgvZhK~N!Z8w#TX?cK8s3bo)7+leAGHuFPk z(59k)7K2B;1+xt^qIE5eYwg7OtN%M$*V3k0aJ_0}I|RN7Z^C*gFp1NcTKKoxu40bO z@$57ODXnyDwOV%4FO5r1`|#HybcnR@$eUpC&1|Mf#d^k3>+;9*SE*=Kh#wST^cyDd zyP5&b2I=wM!KBW{AcPuWK}jL-5vsHE<4Im{8r4i5l5g<;QrX6Hi;~TV_WmTv(0NMP zcaU1q?uAmSydwpXo=#14Ea+6!(57QeC|S}i-aw_+f!DW8M<>Km6I$_UM%hDu0b{wT zQxOIlXPYSux{6%Ez04ftfZ_eEb~+lu(cfcPqRin5^G7~Fko)uX&mst0RyX=%({b*e zXgT$$i2Y|qsS{Q0;Q)kEdpNF~TrEi*Tvz|(9;9Z;8d{rh7wjiV+w715vR(EnTLn>6 z&ozWm9#f(~m_Y4)4ICAin00eJw^+(YVEGuMaID2gzNh$P1!oqR!w9}_2wrMG~ z0Em@9eBm&nckupp(fJ|omIx_{8M-Y!1|N~TbA+G!b@o5lzPcDDJ5rasr$z-rJDgJ!K67O$|8-5r6PF(5iCV}T28|`AOtLBAi zx5$ceu!(b%N|LqyVj^RG##k6kBqV~dG;2EO#ojz^0V$50)J6U1Ym)-`oiMVnw1X~m zyat>JG(ix`H>jc&!DlZ(pSx}KhB81j@ycK&iVpiH%^xM35@4S_qNDT!>rG;q595FV zql``DtPSkA-o9Q#zJheSQFgRLBxq!iRZcX7|AyHp55~it3TndVLN!9^ubn^kk6O<1 zBF8Yx1aNIO7aQ%-XcX0CZKrxjB-eP)--NKypkox0;MG8<*_RYIk#Er*`OFl*j~5fb zJa$8<@dk*N;n2%M1}x}yk*l_cLN}>hkcL98Z|FU|^XCI2z;NN$2@n#&=7?R)ewpk> z@ycp8mlRx~XlzNK1`&C5iPJcXc>}}YKg@IoYlkv1%EttsTN7o5|85Z#%cl78149C+ zKs56RY25-X0R5q9ou- zYTexbNXl~+iOv|F1L(nPD%o;2Uo%SeC>euS@@Fu$aM>l){?r3$J;hy3Ac4|r!o3=* zdQkpCC*zDjbSrC6;fx6G{pVpHunHIq>Jxtwo^$yogCpb{O52|Wq=OeKr?kn2(Ljpd zQhi*ib`|9$DohbY@8n)u$Ln9n7qvLkr{mF@P>NIFQs>0qsW^_i6D}F4WH^u}z~b1C zr-K5kHeWGyLFX;=K}XUuOhL+uY>lTiS3qZ{8#|wf9+!@?%$Ki2!TvpTmN_90n#5Sr zQ4CPRDegf|9oA=k(56VOY#}q!uWhJ97&E#8g!NW{1==G(` z=#KFKhs<||Q{zbMX#8mj+wLh3w1fdIh_X${_t25hE}SA%*4Ne~xspLH2b6rVBbdg> z`S+D{(3ULdMd^FCNICKRNy|nZhJDBgSeDc;mA&V@<(Cz2SeVARSku~dV1ipQnl~s- z%}<%{7pW9wEN;f6+R%ZoYQY%7Re7Em-s7%4-u7VBS1E}uVp|~+vjez*Y6tFv699N` z@(bw_i<{n%C{dW`h~DGYahf8j?ua(mI0yOquTI1=qE$|qg%9rRgd_of11sj@;fRbd zwY1?$knPM`6xS!>3vhy=?aVBgvnu1qx6$8gbCbx$&WFp_1K9}yV+i)N=%pwLZr(&d zr$~SVfK#_?0lHC>oLLt%Rx`L)>qKU!uo{My$;=M5eyw3UTMre@^;TM4rRt%YvZWsq zPQAI0(U6RycXZwEw(D~6v^*-Hh_Cv*($c?26xZz{plM9KnE7j7JL;A}pCHbFP;h!~ zwPX&DiT?O0{p(Sv5jnLBu2$wqw(!Hq^VbvgQs0Otstz^jV$dbz4xMrSiTTTE$rDdZ z7}sCq-+9gw8v}yyoY`9XR`-;L2AMjZR$X1-Turfzi(omaRaLjMn^=bMr-8?3x_#UQ z?ogFplm%E^bSVV5^DSVoP`iNuKa7ep+P7LLs7ZOe(#OdBc`b?)&RbYmHV9aNVaQ!) z`Nt!s_N7R77pOOZ23f=2`9+N@XO=qM@B(U~`0mjgo=zOU5K$g8%)Yoso|-eGnTb4V zv#qdrK`dbV2$tW0#XrP*$w{@NLj4Khm0nE@dJ}BK$`Hzrlcn&X!DlY)v-5gO00>FO zh8NQra;LsJL(aiWg|hlG&3p;Pcid==V_C8LN$zylQPZk8nY63>xU=f zt6NEgfHFE&FNpFNoK6sD!F?rqyI2()S;uBShbug6cl5b%w<818l z`Cbfp6GIC-Y(8ID%qYeN-ew)Rf#NZxggpkwPpHGNVoWz|F@ZyzesO3AA5DPZf;)cnXC)Xkya~;(4r_Bn{YhthnDQM>5 zGpglsBEpGcBD(65VSc#&E?%L>RiS!^y;H|c;iC>4e)#@SwbOL2tMDAmVm=w}#^0N@lLE3jC7^IB@%-r}k2z__F_G-rq%OdN>B00k*@|4!n z(z4R~KDAc&dDryU;Eh`flmW8wLdM3~3Gwxd5ruyLnVT<;=gXIFO>PVwrX~Np|FWfM zyXOM$v;Rv{YhB^%qyAR2$;xNA`trqWnzXe2$#ng4j(S)?gimoj&C7DKypr7(D3e52 z>5TW3(9>R`S+(YbHGYFm;WG=3zRUz2H?m)E`()PXq#^|>EKRcdUWqtv1FdiOWy@Kx z3v}7$NZ$3qv!S4PR?=s{(vIz5#aItn<2lx~P&=c+*U@ttUF8bo0Y64pk?0T3{l`gc znY5cmOV5C!dBQ^4xg#TP<)Wbsf-6;Njo<#e^ocN=wQ*6Io!vAs&NJF}DP&>Xr9OoJ zOUdLYSL{W>pQ$!^+M|-+-eOH*{pX7CvSYi^$KKIa)Guuu71t1&-_t+LGvHUF^CEt> zUK@#$tyzT}$cNgmWtRuO44+_TzAm(6?_|*ffZVTx~d|i}q?ciFU2e=dEMu zNxxP!EMmyd`f_}fWdo+_GqN@WVLl`BE}m7g2oG(}J?TWldRj-xt`Zi!G+&e4$QKWI z-wQMcEtn>L*6AP@l-Q7W5P1@$ZgwI0!0>QfdwUWYbK*EyoJ?s{MSzyPjG%Vm(jYYj zoFs-cMnRoU{+10EG{VQK{22^W_7ln{ z1)-V|NZp%kPO$HYf?WQ~E!7mLh5at4nV3y~} zM=lsxY8!ES7Be8*tmj+lS^Xxf`eb65Mh2*K;a{4*pTSp0$e7&fqc z#^+I=cd0a}*)trR#VA{^u^IkTu9XhL7osTRAK|o710n{27L30p1q}O?{)=^yZ;~l> z70U-POZ*o2h=1Y+dG^$F9VGp=q7v zjs^4JqcY~kY@)HS;h5jM6jVlRHg;cyuOaqaURQuxe|dnZu9=4bCA+AopkogkM*reo zZswT;maOtalMLXEdzkd|SJN?nTLYW6Cl|%YmV@O5HC>8yBzOj%EqVlb2HIV8lhH=V zfwh3^r_+hZ*DpQ~C&i$3&ZCRh_Qz9;!|`ECEN|p??N42!N=iAVQjU~gpTvY}J}pee zh?-5s%pOd|Z08+H1vVZ^mEYYI?w>V}`0$Vwd=0fhR$A?fo^s}C#+v$q{~c>N9@{;V zPClWK1aFpDtD;0 z!U#P1B5A?Bz%pyfi3_fE!#iMk1N6-S;cqV+Gn7)jiTrS;nLA`rbKYgA5`=1My0+w{ zX3^HTl89{Ga{I!SVa@qryQ}3Ol=(~&5zw|Ezw9T$b*EG{t&g%u$NWoFRjljx`yV*V z)YNGP0&Huv0B9(}J=418-kB7PBVeYHu;?~&YE31+q^~@(G0D;@X{UY`t6^2G`c!d=!|T&@s4}QFgaWYBLe!=wogFps#7_m@`$$Mun}12saeU;a~WONwR`sUPsC#A z3}34{O2o(AjdrHrBfPA_Bo~=1+$cbs6+ck!DywsiV5b7qtQNSKmaC6DPvnruyT+p~ z(RnF%`1$XZc`YFvR)ExO^6j8X&Xr;J7NQA3bZkOj`sq6T$^xMArh%-T|L^fm2k7CM zNc!|FhHbAU_JAtV)79;pnL0`^#P`O5+*)knD z-Ay~aW;SGIN`_xBdPWW08|`$;6E}MCpKH#3M*XtvvYfey^SF*W^z+Qnz)(SVLW@En;`k91po5x`020>xd|)G`acVJ0&`_=WD0=W1WOyR1kD<9uiiPKuN}{)kZfN9N)H_xiUCC+58(XRYg?1zu zy9T%`DYht6bQ`ag#v2uS^a&^eFuiZyFX@eYvQUJs{3*$Hbl0)2ocAuK>B>*Zj5*>h zA+iZKZ%>JI+cwhgh93sQV4%V7lkLA>q4k0}&mD-bKa#TKKB2mqvx{fhR9MneH0 z)+ad{-gf~~UhMY%R5-WDw?yDb$Oh;v%&pqm{GMn`<782K4LSYF)@*PW(QG@NvKK|07KDF9uEuQW2{-NwH>k@ptS#;YMsR@ai*niG`9Vy4T+;x zbgRUAXx>+Ro1riBNGl37)e{w_+g}^J>S4GT9y~gURkE^=U*6sZWyMa_^xM~eRXYB%eEz$=3Y8kisv}fb&t$(<8WJD9 zr#7|Tm1mLQ7=IH~3gI2wMr)Q?g37=>lFBVH$sDqYHpZ?h!1r6i^T8@}NiLO=bW;13 zS+BLD5GO98at(^ul+MX4kkK5GZt@R~N80^y;WQoaUY1k#nEQTx!7}sl?sZjX5pdWhkt6y%B|6jIBTt1^ z>z*cxpUf(SL?yl;PHpNoy%sX7&=I;jFO{UW0)Ki=sx=t=b&QH8L>du_Z;8w7B%GO! za24o0mYB*))TH4%Ej-tf87U^MA`?|T3BFdkJX_h zCSl^uFzh-09Sg-Fsu0Kj$zkT7bL+8Uv=v1De5+feJX#W@aFi{>ETs-tqqIeZO0_#e(wLuu0bQ8XCWx^ z6jO}GrTy|HVhV>m&`X6+&&}}>F^ZFO)(Z8s!rU z55c07uI=Mwe)YY-fw$A=r41JCt;^rMkzm9AEO*-bm8Z4-s#E$DVhp8P3Nmyh6IX_Q zCA6%R<+5LaG0*<8Su*DpW?2lR2;)_*)HMA(y7Ov~Y?G#J{*yi0P5*Dq2>R>NqaCMJ{%PQ7zLFeI%dN{q zPG`59ATOOryV|?e#T*D{n_H9WPodkQR@8J5!(Wehu=~Pb$+0^MwL}N0qp^HS(HASJ zf^rN68=~rCt<2&`=J0`n6f5Dfk)+{@ya=BZSQnC_NrGq7p^8lGhwPDp_6R!m?;ycd zLN+VHH^+$vkiV{QvkV$$d1Ab~2AgAHK5E@hZq6h=4@Hya|Ye9(N*}R z_wGv(?^T=!uv}?C7HJwvm`Yipp~4UG;J88_r?Or`fwGgyhh)04|)8 zxqHRGUds25CV3$Xz;IpoWKU&}BlWMtyDK;R2pqAV!`&*KYMqn}!B^HYlp?+iEi*8_ z722r2udSmQMX#h1Ydo{UQa7Sz4^C54&m){p0?KDE1%z|v{O@b5ec@Y5tM&kBPffkh zv+=l;{^>%;ZYYwGB;B^m5Vx=6Xm>1LhFv)KJuQpdVSbED4mb#y3f zH{Jaf@RR(8UaSuo(qgkrWasK=%XKp5U@Mr)P)i$}!7n99$K#-48G;|2>wWulG`Qx1 zooz)iJyie@|7+#~XcpGuLcJ$-S7@-WfoliJit$9n^vRkQ5V@QJl~wmy{_Lvos}kqY zUUQ0n38SqD3hQ@Vo73YOy)_UIm9w9>J8lCUSnmjK`H0rC%&`U`;T_qCFH)3q-@DMFo)eYQ=O{vKzuTdF~EY5PCrCI#K z*u+2PSIzGxKAc;0P^%?!Ae#uu-LI^xX&D#j9hU1O0sHX`HW}=nU!IV(2*_;1RYjtIYmI$|$|2MR*0Bw905`8`SqSozl zy$-WVY2c#Yks;3mxPBl_pG^}zxp7SmtQEPEBAN|BPT8YGLC4vnptid5zv@@!Zk}~p zPg9c({Z{!R*TI5uyR>a{@S5e<6L^+z6Tf8O5qkbyTID6q`q_vF7Lstx>v}IBxLa4M z7VsQ?!E6r1S$Hsz{IOLtBeGR!;%v2uSK!Z;Ay(gpd#*Zr63={!+DX~eKt_o55A|9w zj9{h{=vuh$gCG6J8pLT7xC3KWXKa7Zf70QEVWL0akRCp78jiYnJ(Pv4eYkY{hVLz$ zO8DQB$uCgR`Mc*RkR5ZBGr}AwD9v0VlEE62e{^9pL?wlRhyrVh>I_nzq#V^m7JU>I z24!voD^Y{Et|DdzCm=0;KgBPwKE_Z$4mUORIVl|+OE_-$1f=X86wylmahFsd-QJD+ z58@u5b!8mVm+c=34Z1+T|6Y#5W5lqS%NVWQ6i$}#{md^)s#Gq1MO;`TNfZzE?)$oR zRaHetI&}-^_dK4#Kl2-@4gsAy0v6rg4c3^3A3719J1z8d?2;Rzx)1qnl9 z=4;@V#RHt}A_T}PmJ;quVe3qmJmc{4CgJr#tT6eQWj@j1$n&_QK51N$e$P9eCIY+g z0YgD_t$5g;2Nb9H^;5NNd%)?y@sz`wQ4{fC3v?8aPy%>TMFd@|ls*4E98eoWD&>&Y z2dzm(7Z~+6rW-3xPHWsB2wot7@YOrdr-2}r%i}Je01vmp!7)az@9+Gbi8fAViL5EV zuSr)zB3yK@9MOBKlK+pj+K5zGz(2rdEd$hrW z?HyXs3ZPFM;Rol{H9Z4GZ495NoGA?Vz`8Bqiigl^k2E?nb3+Y4@hb;%VuS-h1s6wor0wPgJ&a(HI0;$} zP1f#1{gq8(#4yB!e2ZlQp0Trn5|*<2p-oAUSW?v~dK)*>VTq-QhTrlv`Xrt? z3CqsGytCcBYPQ;6?wJt1v$H-3+lKe|S(mW;BpQAY2n!)!AIn0gT=bN0+Y(>b>omvJ zHR4^@BYTMrm4K5l@PGZ93ScC>vQ3V9KqKm)@OD#Zes&0a`K@n;>c~1|#sfs4EjU#v zYPkVgC^U#|_*KLX1=|-(UfK?&xibT7?4R%<`2+=(NpXcFvo$*@uR+J*3xrgTgYyz^ zNU5$t?i4qr1m0&K5--~wMD_AuqHgvSa|y@%gq&16CmuC&zs*Yhim=4pYUCIVWR11k zm#IPr-GVmwtbVu9xYWp*LzZuYn5v!8ZADT8C8|l1vi1Cm5=LPU+@Z?q$5ljL3Qu@$ zU$Eu*4V&Tm6E)Ba& znyg_%cpZLYrUbzb84na_=C>58GPi|aU(hm}k=3+g{tM>oEofhJ5!^xO+m+?N-Dvc& zv9+X1nAbCK34;>se}Q;4q2td&Poh05l?|;NAs)rHlGcCR_7e|k`LJoI=ld_g9Q}%x z{~o2C)jmJDE@|pL0*u$b%s6e$*2^j{3|>YXTL=tUh-i0kcFY`xjy$R4U*jznf?iLkhY#AS3;;PBwdg= zYDR10wiZZ&m<97EO$Z&v@k{8+7s8-RIqaKdKo0Ljk*+OnW}v$$*hZj7%-@FwY5=r@ z37{)8rJ_s^=V zT^=Mu`#O8@t;S)DnmP;xEUiwxLUIft+5I?EQ=kNv9Fz;140Lq+FtTiUlf=}f6KEPG zXM9y>KuI4(Hqnx>e81M07#dD^#xE(16Z<`E^T<_{tUXkBKiHLfMWFPdizqP__JCJl zajjq)rMoYdE)8;#| zusapx6nK(?hG=01vJUg#jsCAz!U_Bu0hP9_{!0bm(J-&=G9%LPm{z7pMR&GAi( z|CK@){@Jc&j#_b7!v7O?%ZK~~k=h>dFZ6SK&Lt7kL5@c9M3seB`PucTQF++VFTAS5 z#&kj;$kdLx6N)L-4cJb2;>&DbX`G@#N`CP}@CoR$z7MA8s09xC{w;xK?KwgN2TDV? zQ=u{|{jH};%@bOS#BP8JYCmM1ImeeI<*Up6{|h*>17OW4MTP8n4U$K?jQot3#>}xR zlEGc9)ZSQ5<1v1P{n{^s%NaCsHhR!pL1hp9J(6chUM_eYpKfTuINCL03316HpQ<9d zs2F>YWsX&IO1_n4}wfgnlAPXO|^-uJjEXkfi?-Erbt%S zrMREel}+xnhg6nqsc|Fa zD5($pJH=3AP9LeRJWAed);tr9wnTO<^yM4cc~`pv5xWtD_r{(E!5OIYqXs(LNluozga8s+p1{cS+5+X|E&A#3`Ub9SEGwqfu`H z99k3D4v+YZWi}T^VB7B2ucWVlx|FSTKgEMkl)C1v*NyAbxYdoM4wlGJS@K^htFX^( zhdZ0G^w44G%2`m9&R8H0=>~gN#HI|=*;tn7{<3W>h->dEF@w-goWHs^+9W&w%Ti0& z&qS?u-oRy@Rkez@!8G+x?=LM@#~ZhB;cCi=`e>TiMYA{TVz6<#sC`*}N(=m!kaASW z1%(-DPf;@gMpSUa_Hch#tG;3QrIZ%u6G>?A`(V99V#}q>Ey@D4Xgr5(^N*i@HaCiz z^&R~u_6(X*m=-3Tj;}H{b89}#R{_6hXK(N&Ndc?)l7G`)8l=VP1fb>AC=2z!rM|bs z%><|ly9G2MjU?$X%JWT_YtY4}Hkmkr{9roMH%I< z!LIgoB3pSs`JV9WW&co^o+JRWVaXqr1bs~Xz65Kvf)@dGP+q}rl|*x?gSmQ<64`1p zlsDes^4|lTGbzW?8s^w?So!zX4T{B$%&HjUcw`d)5&A0Hkn_`j z^U4@EE-@PFe;e(MsLHUX65+~P% zY0O@yjvHR+|F5gBfT|+u+P-sX1f)xv3sQn~cY`1xARwYhNlGhuQR0#Uml&i=8tGJ8 zQt42XzH}8%x&;NaA)|z$BGyCk>XP>iX_Fgmd9D=b#zN+lC?dY59qpI2Av~qpT zT7Hx*YwyRNtnvjLFPFu4D#u{irq07%VGSZJND1~y`2%zWY29ZJ5nzMMrmpJDMmaMw z+tmYH=vDQOVPRsFGveyc9nfEW%QS6 z;h*F_Bq|YaZ4}A0jM=1P^ewy>sx@#(Gr@= z>coMX%%l-Tztw;mV*!c5AnkGzpHE|#lk1rQw%c|9(;BaNY}cZ(?~D% z!-_d|PEas+6lX^zA_Ahu#h+p3;3xfo>>kwv-H7GS8i&0Uath^aO-u{N*STPC6lMdl zip>A}##tK)JMKoDT-ofHxK4?@S(TC7o|_hHm0P~TfMFwDDm7ApMaZF^;DlvR&x9N+ z{Fd5>7-ilVEl(MxfK>Jji$&pH>xUKU;iXxswfe@LcU&7MA3uJ)MMze6kxpEOar2=g{z+q#4_;GU13K&w|fBb0B`Z5Yg9#m-uYkrKY6l zs8*xd>=jcg>=0uxqGCFHdXoHN9jO_B1&WJ?0 zFk6Gwcxt@NF!r~R8m-rDg&?+)M{x?nf$)BIhgaxfP1hW=hG)Tvf_S?7mqZJx6wB>G z_iyf1X6Hh)re(A7GH|M~rj_3H{!Ujj*$Ro(uhK~RaMfxGDgkF4HtUklRZ+JFCp?Sj zsu|+yrEUSI-~BP2JU`#Er3r}`z|QcNNJ*&LIq!; zf6))Mcs4o}M~|E0IpmORi69lx`d;1pv^_e#WhwTmqQZ7tHNX;4#9FLlHo{&)UjB{+ zW@UE%Ia{Q63=e<$7XJIgW>)-Z^SVubjCYwsJ|KT!sYDZq84L|XQNB;k?9O<^;l97A zgS%H!ZkZd3ycz73-V!0fNvQXz-rK2>#3Pc_ox=;^?E&mskE#)N_!MeB_YO@&hwwkNNnw_1 z9S{oJpBAaY>f^+g0G~kg1J_wF0&HEP*zY3^7%SM97 zUe4=j-cmMr6^uRuhpyO<5M3RrI2lS!0+y5|^4cRcZi&i^pXT5FGEvSQW_`Sqg|uGo zl|Yni>Rje$Y$EBnilZ4#3@h!}ZWEi(X)}E#z8TA!|62StQzuQOM5q57#~d!(xcs+a z>+VN2IN-(2Jj`mcs87UZV~5$0V;4D z=7@Q`M=br2b3%jKu@@O+vTu|{m$MU|lP4EfyKdWCw~Q6u%TF06R2Oma@JcXia){kFvt7kSV5E`}K58<^}VIMx~QNxPBr=;NFGODhpSQTT$ zj0lI{*Y38hPIxs$yy|eUu2Q~QchfletZLG6t-DkESn}8pkFx0{4H=J#H;Z<%x@-xz zf#8FQ$E!ZA*|r-^1x~_7`ZZ!tb*Cb-gYf!>nc92;yamUEM2&=!V7TW!u}ErV4_C8V zm2KrS2g0`OH_EY*b#11YX71~^<@)6V8_RXzj)*jc3{-*fiFkq5*H}TTvbB#sDg(hS zqKur`vKe2&C#mGJw!8FrrCTbnx0Sa@AU2}y#=}lQ>D9O77vHJm%;AMS3pe-B;TSC5 zV-+#ZGcd2JojTXj&hf1Q+r|%9B9N>!MEeDp4)iQLR&w#VW*qCCi&9GKF^ghKy|u3J zu}Q;4v;7&DH#5KW%X*qtcM;$CRyNpD=Lry{32R3$KKd8#9ek>ol_-jo(UbN)U!O11 z`&m$zU9=mR7AaRp3JYJMi{Wrmp8rgM8~%*nx!G#`6AkHsP7?lS;=Yt+4sAAuMnZ@A zm*q2Wl(53^Ngog5KXmYD>36PT(q-CCgmWe3I=Q7PX5FGL?x(d$QoW<1nsi%@+~Won zxG}!9ZnrnrNihF*9|Ch2Ad*2uJmJdm5SaU6wV_O7<5A#1FQh>X<5JUiQhxEm+JN4} zlgxBApGd{0SYddj-^^*|QQ_0yL;VHvI(EM3aVuRFQ`;Zj_x2QQ2`<%}a2B~bg3qNK ztdH+|%goN5W^x2Y!nrHtw@}~s%By3vvsK@ z&OZBfruIc+oc^y5-YuLB4^%@9J&)xIsCTQ*&V^6cFSukINA*sMp8cAuQHTO1{U|r= zzt~Xx^m=L4Ci07tBd^&>WaiPhofz@f10@&Df z8F7FB9vCtY5QEDh0C^o&1dxndHxUBdz^v<60r2GNUgrW|ajP_5I^l!l3urNc1%S5h zEENdBsbi7`O7ZHn>Hr=}yis31(S8gFBpWoX0yyBX*CbgQ0ePeBd{RC4^7L{^*tFj; z0GO6}7e`GYLDqSUyX_I)f;6)m_Gb(k_KdCmM+Zsj_j8LzSs1^l4O@mSs#j?3T^Pv- zf2_;nX>yx6M>87uK9c%|OnDD`F|k%FE(gD%C}(pjH*%3hgI;8;mozf@o5jhH&{9;< zMDJ@j9m+&JPu*aw^MfvOp@8z^<7DCk&fo@v66O*Hl#p!qjJ~Wg61c}`Ob!CbxLC-nLy%~@UdKPmP)q)mBxcE0oc$|?Wv){ z?XvI;=9371y9MkLwOebf81KHF;)vq*Q0 zn=!&dILW}83SvQA%BsAdsB*m6aO0i9+QhJg&l%kQz5P2w*kwy}L#4Y*zPqOPPKkXD zoI#EEHr{k_rrKWK&R*Pfy47vc*gT-ezPoaq%2BcpReAKx9%BEgw%Y&7UeQ%!_Q!D4 zhmM58ErH%6nnHu_!{#Oam>Bl8mET}wwbxa*Q%7)!uol;(zV=GKd!!2m3B0|1CP>~l^MmoCHIau(1&+Fe19@?p!yoH%BG81soQJ1yX5G6pPE&ud;POAHqu`u)YbTV)^&n{J_j= zdU3%S~b%7VkkjjI&#~U#Q77omP++pn4%Ir{}FqeYhM|qysRMoW7);` zMxCp&^tD*grA&>`E|w{}N6&=>559BQ~>LX1Bv9 z-2_^}$XM&0c94wljBXBoY+1ZT;z!Z7L)`%Ef zy5dCP3hGny%oxvxhGvx&knNi3%dJG-vBl8kAi>&t-H;Nx7@+T}(AZQ)CZ~=sj9#}r zv$G`g{tw({Jh-D;0;^Sy#fo!&M}4;g8)6~XAJ?0-)=|=)%9bFtC6n=kS<j@{fHp zb*3c~bq0@;EYs0^*7WwvL)IR#TzEd@#zIiZ7`Y;yx8tZUctC z6`#~u=^~ux7kA2W3JB;?fh`tG7YhsHhsg6l(V~&AR~wiPL>5;#6=FXtv3O)3xpXS~iD8{K%Y_4{FB#>RD zhZ?`rus~*PrsO;Osl9;lIaS)Uqm!_M?UB{s5=wG5Rotz0F?{2>$7iuTSaCk7`eQ|O zY|TDi(yX6K|FP8GRPLD~f;4{oA<4Jf{VAey>ALWn{I5yAkz>spH?aqS`~*(pF*m#v z-iP(+bGT*c@D|fn>$OoPXH6(lk(fu`j;kZ6W+ASKm0mu;JqYE0Ky{^Q_keq-TeH*P zKAwm?NkcjYmVn#4%07J>_Zs6(CNr~E%A8cgpjzr8Zq*k3M$_&h&Sd2 z?{UsZ!Xp|<*5ZGbogXkhyrp{C`At5pDX*ua>j`8qqmOUHg#f&rCi>HLj|p2aA>)Ye za53%$e^RK@He=M-q}N5sv{Xd*l=2r7sdl(e$+m<0>x;PJnh^M|E<^fT%%17{TN4el z67a)Y(H2iH2Ua}y{0K71D3Ko@@l#LY+ia&y+j*c={#au;T;u`Knv$O1yxv+@!0?lN3qhA5P{QFi2}#>5zmWY0Btt=8ZQp&1%*LgQg`kcvc}-m= zn0Wa~laZM$P#?~e*1Jj-sxT@H;XFG%er?x64S2Jlk-igg_DDICdsH?BlBB7j z=XI5tb4*JDkFksE?TN_>T~E}nN9P3wN(%x|#xOxmQXGlKgj2!kpk@6dM00)zNzlYt za{q<;DPHw*wF3~ftfV|!@-V_u(5q)8e+i}u#&z!-hcQ~}h`vzR6%+a}D7_zjY#yCa z3$Nz|?@Y4Dpg6z+sg4Tzly#Qrtd&>VHu4?{D3w=dIKCze@N7wGKW2v5#d?R+AMM(RL6s>01}32|h0!kv0r?jI ziZ~rXEO2ld;KCqO`d=hQ5euY5v-g2ca{w){0m{z+WMJwXK*9I_Em!(q-4M)&Ks;^T zY+vv>o7-5q{W%IJE&$}<-VEBni@s}jr(7O>l!h=*4$kE7kPW_agCS6g#QL6ya@mmX8`u=%zzep+JQ{{UyhW>)|J delta 29656 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 name="value-type" value="java.lang.Integer"/> </service> </services> - <servlets autoload="true" /> </server> </application>

      通知模块NotifyService服务群中各个进程的配置相同,配置如下:

@@ -293,7 +292,6 @@ <!-- 存在DataSource必须配置DataSourceService --> <service name="demodb" value="org.redkale.service.DataSourceService" groups="NOTIFY_SERVICE"/> </services> - <servlets autoload="true" /> </server> </application>

      帖子模块ForumService服务群中各个进程的配置相同,配置如下:

@@ -321,12 +319,113 @@ <!-- 存在DataSource必须配置DataSourceService --> <service name="demodb" value="org.redkale.service.DataSourceService" groups="FORUM_SERVICE"/> </services> - <servlets autoload="true" /> </server> </application> -

      由这个范例可以看出,RedKale提供了非常强大的架构,集中式到微服务架构不需要增加修改一行代码即可随意切换,复杂的系统都可以如小系统般快速地开发出来。
+
+

      5、API网关式部署

+

      随着用户量到了上千万时,一个UserService的服务进程是无法提供全部用户服务。 因此可以考虑按用户段进行分布式部署。将192.168.50.110、192.168.50.111上的UserService服务改成网关式的服务。下面是以 Service本地模式介绍中的UserService 为范例进行编写:

+
@ResourceType({UserService.class})
+public class UserServiceGateWay extends UserService {
+
+    @Resource(name = "userservice_reg")
+    private UserService regUserService;  //只用于注册的服务节点
+
+    @Resource(name = "userservice_mob")
+    private UserService mobUserService;  //只用于查询手机号码对应的userid的服务节点
+
+    @Resource(name = "userservice_node01")
+    private UserService userService01;  //userid小于2000000的用户的服务节点
+
+    @Resource(name = "userservice_node02")
+    private UserService userService02;  //userid小于4000000的用户的服务节点
+
+    @Resource(name = "userservice_node03")
+    private UserService userService03;  //userid小于6000000的用户的服务节点
+
+    @Resource(name = "userservice_node04")
+    private UserService userService04;  //userid大于6000000的用户的服务节点
+
+    private UserService getService(int userid) {
+        if (userid <= 200_0000) return userService01;
+        if (userid <= 400_0000) return userService02;
+        if (userid <= 600_0000) return userService03;
+        return userService04;
+    }
+
+    @Override
+    public UserInfo findUserInfo(int userid) {
+        return this.getService(userid).findUserInfo(userid);
+    }
+
+    @Override
+    public RetResult<UserInfo> login(LoginBean bean) { //手机号码用long存储,0表示无手机号码
+        int userid = mobUserService.findUserid(bean.getMobile());
+        if (userid < 1) return new RetResult<>(10001, "not found mobile " + bean.getMobile());
+        return this.getService(userid).login(bean);
+    }
+
+    @Override
+    public void register(UserInfo user) {
+        regUserService.register(user); //会生成userid
+        this.getService(user.getUserid()).putUserInfo(user);
+    }
+
+    @Override
+    public UserInfo updateUsername(int userid, String username) {
+        return this.getService(userid).updateUsername(userid, username);
+    }
+}
+                
+

      从代码看出,UserServiceGateWay继承了UserService, 确保了UserService对外的服务接口不变,上面代码是用户量在600-800万之间的写法,通过简单的用户ID分段,根据不同用户ID调不同的服务节点。

+

+

      如上图,网关下的UserService部署分三类: userservice_reg只用于注册用户;userservice_mob提供查询手机号码与用户ID间的关系的服务;userservice_node按用户段提供已有用户的服务。且每个UserService的实例在UserServiceGateWay都是远程模式。每种类型可以部署多个节点(为了结构图简单,上图每个类型只部署一个节点)。UserServiceGateWay(192.168.50.110、192.168.50.111)的配置如下:

+
<application port="5050">  
+    <resources>	
+        <group name="USER_SERVICE_REG">
+            <node addr="192.168.70.110" port="7070"/>
+        </group>
+        <group name="USER_SERVICE_MOB">
+            <node addr="192.168.70.150" port="7070"/>
+        </group>
+        <group name="USER_SERVICE_NODE01">
+            <node addr="192.168.70.201" port="7070"/>
+        </group>
+        <group name="USER_SERVICE_NODE02">
+            <node addr="192.168.70.202" port="7070"/>
+        </group>
+        <group name="USER_SERVICE_NODE03">
+            <node addr="192.168.70.203" port="7070"/>
+        </group>
+        <group name="USER_SERVICE_NODE04">
+            <node addr="192.168.70.204" port="7070"/>
+        </group>
+        
+        <group name="USER_SERVICE">
+            <node addr="192.168.50.110" port="7070"/>
+            <node addr="192.168.50.111" port="7070"/>
+        </group>        
+    </resources>
+
+    <!-- SNCP 监听 Server -->
+    <server protocol="SNCP" port="7070"> 
+        <services autoload="true">	
+            <!-- 配置UserService网关 -->
+            <service name="" value="org.redkale.demo.UserServiceGateWay" groups="USER_SERVICE"/>
+            <!-- 配置UserService分段节点 -->
+            <service name="userservice_reg" value="org.redkale.demo.UserService" groups="USER_SERVICE_REG"/>
+            <service name="userservice_mob" value="org.redkale.demo.UserService" groups="USER_SERVICE_MOB"/>
+            <service name="userservice_node01" value="org.redkale.demo.UserService" groups="USER_SERVICE_NODE01"/>
+            <service name="userservice_node02" value="org.redkale.demo.UserService" groups="USER_SERVICE_NODE02"/>
+            <service name="userservice_node03" value="org.redkale.demo.UserService" groups="USER_SERVICE_NODE03"/>
+            <service name="userservice_node04" value="org.redkale.demo.UserService" groups="USER_SERVICE_NODE03"/>
+        </services>
+    </server> 
+</application>
+
+

      由以上几种部署方式的范例可以看出,RedKale提供了非常强大的架构,集中式到微服务架构不需要增加修改一行代码即可随意切换,即使网关式部署也只是新增很少的代码就可切换,且不影响其他服务。复杂的系统都可以如小系统般快速地开发出来。
      为了降低接入层与业务层代码的耦合, 可以将Service分接口与实现两个类,接入层只加载接口包、业务层使用实现包。

+

appplication.xml 配置说明

<?xml version="1.0" encoding="UTF-8"?>