From 1b639a29fb98aef7f232b3de8ce22823048c61a5 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Fri, 16 Mar 2018 20:13:40 +0800 Subject: [PATCH] auto commit --- notes/分布式问题分析.md | 380 ++++++++++++++++++ pics/0ee0f61b-c782-441e-bf34-665650198ae0.jpg | Bin 0 -> 23552 bytes pics/1f4a7f10-52b2-4bd7-a67d-a9581d66dc62.jpg | Bin 0 -> 24576 bytes pics/211c60d4-75ca-4acd-8a4f-171458ed58b4.jpg | Bin 0 -> 22528 bytes pics/2766d04f-7dad-42e4-99d1-60682c9d5c61.jpg | Bin 0 -> 21504 bytes pics/31d99967-1171-448e-8531-bccf5c14cffe.jpg | Bin 0 -> 21504 bytes pics/3b0d1aa8-d0e0-46c2-8fd1-736bf08a11aa.jpg | Bin 0 -> 27648 bytes pics/42e17a80-b9fc-42a2-9ba8-68364fae3710.jpg | Bin 0 -> 44032 bytes pics/44edefb7-4b58-4519-b8ee-4aca01697b78.jpg | Bin 0 -> 14336 bytes pics/4ff7eacd-0081-452e-9686-60a81e11bf73.jpg | Bin 0 -> 45056 bytes pics/654acfed-a6a5-4fc7-8f40-3fdcae57bae8.jpg | Bin 0 -> 53248 bytes pics/6fea6dd4-9232-4df8-abdf-f1b528a18b17.jpg | Bin 0 -> 40960 bytes pics/9208563b-014d-4745-aa1c-492c9f7f7a7f.jpg | Bin 0 -> 46080 bytes pics/93a28704-6401-4671-9758-051fadfbeb47.jpg | Bin 0 -> 28672 bytes pics/96b63e13-e2d8-4ddb-9aa1-a38959ca96e5.jpg | Bin 0 -> 18432 bytes pics/b6acae0d-7148-41de-adc3-ff5ff8dca3ae.jpg | Bin 0 -> 25600 bytes pics/b750eb3e-8a80-475c-95df-2e971b277603.jpg | Bin 0 -> 38912 bytes pics/ce0fa5d0-866b-46e6-a873-8eb1f78c2882.jpg | Bin 0 -> 29696 bytes pics/f3d3e072-e947-43e9-b999-22385fd569a0.jpg | Bin 0 -> 30720 bytes pics/f7ecbb8d-bb8b-4d45-a3b7-f49425d6d83d.jpg | Bin 0 -> 24576 bytes 20 files changed, 380 insertions(+) create mode 100644 notes/分布式问题分析.md create mode 100644 pics/0ee0f61b-c782-441e-bf34-665650198ae0.jpg create mode 100644 pics/1f4a7f10-52b2-4bd7-a67d-a9581d66dc62.jpg create mode 100644 pics/211c60d4-75ca-4acd-8a4f-171458ed58b4.jpg create mode 100644 pics/2766d04f-7dad-42e4-99d1-60682c9d5c61.jpg create mode 100644 pics/31d99967-1171-448e-8531-bccf5c14cffe.jpg create mode 100644 pics/3b0d1aa8-d0e0-46c2-8fd1-736bf08a11aa.jpg create mode 100644 pics/42e17a80-b9fc-42a2-9ba8-68364fae3710.jpg create mode 100644 pics/44edefb7-4b58-4519-b8ee-4aca01697b78.jpg create mode 100644 pics/4ff7eacd-0081-452e-9686-60a81e11bf73.jpg create mode 100644 pics/654acfed-a6a5-4fc7-8f40-3fdcae57bae8.jpg create mode 100644 pics/6fea6dd4-9232-4df8-abdf-f1b528a18b17.jpg create mode 100644 pics/9208563b-014d-4745-aa1c-492c9f7f7a7f.jpg create mode 100644 pics/93a28704-6401-4671-9758-051fadfbeb47.jpg create mode 100644 pics/96b63e13-e2d8-4ddb-9aa1-a38959ca96e5.jpg create mode 100644 pics/b6acae0d-7148-41de-adc3-ff5ff8dca3ae.jpg create mode 100644 pics/b750eb3e-8a80-475c-95df-2e971b277603.jpg create mode 100644 pics/ce0fa5d0-866b-46e6-a873-8eb1f78c2882.jpg create mode 100644 pics/f3d3e072-e947-43e9-b999-22385fd569a0.jpg create mode 100644 pics/f7ecbb8d-bb8b-4d45-a3b7-f49425d6d83d.jpg diff --git a/notes/分布式问题分析.md b/notes/分布式问题分析.md new file mode 100644 index 00000000..c5cf7f17 --- /dev/null +++ b/notes/分布式问题分析.md @@ -0,0 +1,380 @@ + +* [谈谈业务中使用分布式的场景](#谈谈业务中使用分布式的场景) +* [分布式事务](#分布式事务) + * [1. 产生原因](#1-产生原因) + * [2. 应用场景](#2-应用场景) + * [3. 解决方案](#3-解决方案) + * [3.1 两阶段提交协议](#31-两阶段提交协议) + * [3.2 消息中间件](#32-消息中间件) + * [3.2.1 消息处理模型](#321-消息处理模型) + * [3.2.2 消息的可靠性](#322-消息的可靠性) +* [负载均衡的算法与实现](#负载均衡的算法与实现) + * [1. 算法](#1-算法) + * [1.1 轮询(Round Robin)](#11-轮询round-robin) + * [1.2 加权轮询(Weighted Round Robbin)](#12-加权轮询weighted-round-robbin) + * [1.3 最少连接(least Connections)](#13-最少连接least-connections) + * [1.4 加权最小连接(Weighted Least Connection)](#14-加权最小连接weighted-least-connection) + * [1.5 随机算法(Random)](#15-随机算法random) + * [2. 实现](#2-实现) + * [2.1 DNS 解析](#21-dns-解析) + * [2.2 修改 MAC 地址](#22-修改-mac-地址) + * [2.3 修改 IP 地址](#23-修改-ip-地址) + * [2.4 HTTP 重定向](#24-http-重定向) + * [2.5 反向代理](#25-反向代理) +* [分布式锁](#分布式锁) + * [1. 使用场景](#1-使用场景) + * [2. 实现方式](#2-实现方式) + * [2.1 数据库分布式锁](#21-数据库分布式锁) + * [2.2 Redis 分布式锁](#22-redis-分布式锁) + * [2.3 Zookeeper 分布式锁](#23-zookeeper-分布式锁) +* [分布式 Session](#分布式-session) + * [1. 粘性 Session](#1-粘性-session) + * [2. 服务器 Session 复制](#2-服务器-session-复制) + * [3. Session 共享机制](#3-session-共享机制) + * [3.1 粘性 Session 共享机制](#31-粘性-session-共享机制) + * [3.2 非粘性 Session 共享机制](#32-非粘性-session-共享机制) + * [4. Session 持久化到数据库](#4-session-持久化到数据库) + * [5. Terracotta 实现 Session 复制](#5-terracotta-实现-session-复制) +* [分库与分表带来的分布式困境与应对之策](#分库与分表带来的分布式困境与应对之策) + * [1. 事务问题](#1-事务问题) + * [2. 查询问题](#2-查询问题) + * [3. ID 唯一性](#3-id-唯一性) +* [参考资料](#参考资料) + + + +# 谈谈业务中使用分布式的场景 + +分布式主要是为了提供可扩展性以及高可用性,业务中使用分布式的场景主要有分布式数据库以及分布式计算。 + +例如分布式数据库中可以将数据分片到多台机器上,不仅可以降低一台机器的压力,同时也可以使用多台机器对一份数据进行备份。 + +至于分布式计算,就是将一个大的计算任务分解成小任务分配到多台机器上去执行,然后再汇总每个小任务的执行结果得到最终结果。MapReduce 是分布式计算的最好例子。 + +# 分布式事务 + +指事务的每个操作步骤都位于不同的节点上,需要保证事务的 AICD 特性。 + +## 1. 产生原因 + +- 数据库分库分表; +- SOA 架构,比如一个电商网站将订单业务和库存业务分离出来放到不同的节点上。 + +## 2. 应用场景 + +- 下单:减少库存同时更新订单状态。库存和订单不在不同一个数据库,因此涉及分布式事务。 +- 支付:买家账户扣款同时卖家账户入账。买家和卖家账户信息不在同一个数据库,因此涉及分布式事务。 + +## 3. 解决方案 + +### 3.1 两阶段提交协议 + +两阶段提交协议可以很好得解决分布式事务问题,它可以使用 XA 来实现,XA 它包含两个部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如 Oracle、DB2 这些商业数据库都实现了 XA 接口,而事务管理器作为全局的协调者,负责各个本地资源的提交和回滚。 + +### 3.2 消息中间件 + +消息中间件也可称作消息系统 (MQ),它本质上是一个暂存转发消息的一个中间件。在分布式应用当中,我们可以把一个业务操作转换成一个消息,比如支付宝的余额转如余额宝操作,支付宝系统执行减少余额操作之后向消息系统发一个消息,余额宝系统订阅这条消息然后进行增加账户金额操作。 + +#### 3.2.1 消息处理模型 + +点对点 + +
VG
zWITDyLv6ndtBz>s2`bam9Z&yt)qCD4roYHmJGJf;g}8XgiU%zmT>J3WcR777ZN60T
zsF{jNv^A&bS=+`9-c9SxOae-wk$Xqj6N9@KVVWS%B(^x{76=EwJe8s@l9b?;lx};q
zyRPS6m0UYBpZy~=y`t+}w8TCPD`Vh(SrWUhgwgqRHtrmTFo5PD&i-(u_b+7sFxEj4
za&7*4oeJHa)+EHKM`E_2%bZQISZJ7sGWLa!Fmy|p>PpLoxp$u?RK~)lB(= _9a7YL3{dx-=>XPc{
z&MA$Elv(0({d!A4+z)U|OJiJ3*v_8&g-v#1H+kV>h3rnjZ!Be=Yh^XI*uz!1A($JF
zF@)@Uy=sfR&18k ZJHS|Wj{A!f`8VNcArp(
zyHT+wK!|X`Bzuky^c=Mz?4hC&oJ_hDPj1VCSRS5eH@sl`dl?<}NtZ0E!c84WuO0vS
z^jQPdztkz)nAueXnyZv6D1MgL9WAh#@T`{Gk|{U7g&JxW+(4r~t(tkYBE6t*A5V7i
zc5*|4{0+1f587uXc6lY1o>TU1)Lkb37^i?d=M(xk{f2zm+@*W%kCBeq9F^k%02oAo
zAp2jElNj 1GZv@Bgj4s26ZZ4i-b#c)=aVlcvc!`%`k-aRs
z^cizM*y72EX7Q#K MXOilUb65F`dgp}rt4
zzEo8lzt(clQMI1;t+MS_H6pe4PUtdFrW@Hic2tAi8Jd+5Cl>DIzFWBUvn!ZFj`zLs
zGtUni-x2bo53zYDLyt3vGQ*fPc$P+Hv8A5HpoynZOo$5s(ESA|o#
z$bI2bHaMPJ#G4<(^Pj((d`X8j=FQgRQpKWu5I%&(O#1MM7dOD<=)|qPQa5gRY4f=Rs0{lboCl#KW>084E!p0{#6>4dUf}2fvoaZHw)B
zdm?ctw!$f}Q+0xP1`}ib>|>g7dTfmrnh1aeDEKFB&Mw#dOGm{2U;pU^{oDHh{}|f%
Sn~nQ_fyVy5i{d}^|9=4SmWC7n
literal 0
HcmV?d00001
diff --git a/pics/211c60d4-75ca-4acd-8a4f-171458ed58b4.jpg b/pics/211c60d4-75ca-4acd-8a4f-171458ed58b4.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..efb47ffc258d2cf9bad817424a66f8f8de42675b
GIT binary patch
literal 22528
zcmd43cU)6J*De|aM7kioDn$?klqxkU(uD{}FOg0_K$>)dBE1O+CL2BrcE}$SC
z=}me`r~yK9w(r;9`<-*|Ie(nr4H-z;$)4FW>silw)*1*?ghkMGO;rt55D^g(=mqct
zBFuo4LBv @rfzoXRb(u& !WddPwN)~Pb
zxY!}=lOv^bX#@cj0(jIgZgkWJ{OBq`C(uk_bh)W8D&69TEbr6+0rbx32?6xw-;Wf)
z@%Rf|64eqwIMM{1uwk@p{;aIcRIyFo)Mfy_*Uk-w+V`Uqa@c-jxRI0JR#wVi_1*Wh
zy=EI>Ga+d*(%EflxmMNWe$n{+^1?6VVps{JI2O{GXcS1hA`fSSiOGFCVGFAbpC^E{
zKPE^IdiQM1OcvdWpvt?qIH_VT7Kf85f=!qBqB`$Ic{lrZ88!L7h$)$&39R-f*XQe5
z&*q2p_cAjTG(x}kXtW=SeVWrXv1G*)aSQ2&(C#~(Bvuc`x
z#tj))tSH+{2fs4SdfCE#7|QjdzOYFpF|H^0dK^ptkl2&@l0$E{gFN{oTO84ao1d(Z
z_%W7;^i_l2`v^IVZ@_~@si($H{SG|tyzUIc8Q53e4ExpOYp%W7X;yl$RUroyp_Z33
z#~dLSe>32!hiFPKjMU7`*jS`7B*)~%52gDX>8_-KmdrdUR=00)UQ3*eXtUIwUbjLU
zcu6;MXIF^=(5LyYZOsIqF8XY-S<4GNbLY@z#M_kf%3H6nb~^<@veEA#cQNc|fux9G
z^I35szKuW489elh6zf6*_Y$N?1KiERP!2o1EF>?Q>f_mJ>kxc-$%Ya-THHfaGk(*F
zj!K=rW{E54ISm^7>1lCfz?$aV^RdsSdH0X@$gE$_==T3+c27IuHcw)v(cZ9)3Y;Om
zQPThr%g^v>T%zIh;Q6%tirce0CG8t+>KK(HPmQ|{$S=sSFcET!*?H4|@&&l$n##Qe
zQswO$#jet4-~RM?2dtlW&3QfpcearY-6Bj)vx&003+lQjDU+E|vi(ltqBHH&n}rr~
za;i^XHh(UZ`|By=jxf6?qi3p@&BPSI&u#<1LCCAheEL3|KnVQhC)p=TTNy62=d|q@
z-JM+BHm@lYIxElEZh+VHe?jhG9^gnB(=^D^^A)7!YtI<{OHm!nu7m`9CEF9s`U3Vb
zG3>Ca^=hd{68eh%=Z(_EJc4k*3YT34bXAYuWJqgP!Mt%mE>~KJxRO{e153E%jaEhf
zu}D{a+h4uYDpeb&Tnr2a`YGP#?MMVr@h98SjwUM0R^r^1bS8Y8e@{B7TP&bt(s8tX
z#qmwnL%rPJ6Y$jO@Vwi?FTPzSK2@MeE%J`&Q%mXhVRWn#uC3j&0(4}%(mlU#>BMR3uDr%f_lFha>VyG;9t3=FIl@~
z%yhf8-kDaUK}9n`#;q{9Np?l@3Yre?x=(7qtWe34wYX
6#l%@<
z8`)|5#j8B$SSaM*=g6fE*xEwQJjc|gH;+6TD)neMlA_mvDf`{}rvayb!LtD;uC2JN
zSw(*HHt019!qfU8kJ2Km!>bOg-o89KpEhdi>crcf05cav-iBRt#gn4dalEX(u}*Du
zHDxmRyM7Y~?ia&%m8IRHI2|myltB%nJ2|QIT^YPharsXoG>R)hrEj6P?`&?y1gQEh
zjJoQyw%z|3D
qvUMrt=mmw8DwcYo-LJpJMNRaWoa)1xv*?CkRIqhBovhA{$+R&~x2
zatvKjl(%>8vi$
afsE^
z08oKd0UBviu42md5(vFjC}dvbw=kCLoAM2CuzayAj!iYrWS$4I;g2)ENmB3bQ!Uy*
zy4tMYARn4Ka+andZuAKK#7uDeLSma%_*up+G*q~X&HG1V>)9H|i$K7|4x0}K@Sui6
zPBXYMiM4GOC>D2DVK%MCI?b2K!@;>!4=nm+96R$J`d2Tb+-FwCb^P@_KlC54l~ova
zvbKG$5cU^f_J1TJyFNgx{>;}MGZufk1zmTG$Y&|odj#O8{$sB92b-RAyWPFv&AjF#
zqr4NwbVUOvZ`Xp!-t_V&f(80e(bUTymu`=^W0X5xI?_GzP=!L&}3
z9YsA?hU9(LENmsQ^fnTs$h@Uy_fuF|U!T2upWbOLGmR(Ri#bO=_mCRi&W}6=7H@Z4
zMOF0)b4Q`ty-{2V!?%|+uOt^lhD~gsY(F^6O-D}xr7IHXVw^}K_^Wg{?-W0+6&z}S
zFVdmUnQiUhOnP&AiwQ(5d=R@uUMIBJ{<$YY6UEeHzGvC3aXfz#UfW)R?DEGpBCRpj
zg7L7wMF$tH!HPd*m;5rshy1<**Rm_)oR{i8FYViJfKaaV6%P?bx-DxTeD-*8=fl9J6S
z4&_#c1B6&q{016_KwksjSSmVOV6X?JpK2UThebQaxct_Z0inU9mxXEJYkBd+!x~s#
zdxx3bW#O31>Md2(4Zap)Y8pvdHiC(9t~?S
QTKZ!JbPw7sGM+!9@hh9t?~-Oy
z91p9T>*#h55=(aDA{U(+a$7f$`&!85*L+J=JfqskK83-MFH3wR2SdN%=8k;knz-}Q
zfwX?FN8-(AhX=*QrkU(=Np*8+r9$^ov<`%4^j)KcDHeLtRVE|(hOHatid0QBU%try
zaHXG}h3|?uQBJ;-*UJ*k$=8