From 88a9123724beae14dcfca39a254f84105b9d728e Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Thu, 20 Sep 2012 15:23:18 +0200 Subject: [PATCH 1/4] Move heartbeat-interval into failure-detector section --- .../src/main/resources/reference.conf | 6 +++--- .../scala/akka/cluster/ClusterSettings.scala | 2 +- .../akka/cluster/MultiNodeClusterSpec.scala | 20 +++++++++---------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/akka-cluster/src/main/resources/reference.conf b/akka-cluster/src/main/resources/reference.conf index fa6860a1a8..e2fe6cc8d1 100644 --- a/akka-cluster/src/main/resources/reference.conf +++ b/akka-cluster/src/main/resources/reference.conf @@ -36,9 +36,6 @@ akka { # how often should the node send out gossip information? gossip-interval = 1s - # how often should the node send out heartbeats? - heartbeat-interval = 1s - # how often should the leader perform maintenance tasks? leader-actions-interval = 1s @@ -76,6 +73,9 @@ akka { # akka.cluster.ClusterSettings parameters implementation-class = "akka.cluster.AccrualFailureDetector" + # how often should the node send out heartbeats? + heartbeat-interval = 1s + # defines the failure detector threshold # A low threshold is prone to generate many wrong suspicions but ensures # a quick detection in the event of a real crash. Conversely, a high diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterSettings.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterSettings.scala index 4212e59c1c..3c7baa4f76 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterSettings.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterSettings.scala @@ -23,6 +23,7 @@ class ClusterSettings(val config: Config, val systemName: String) { Duration(getMilliseconds("akka.cluster.failure-detector.min-std-deviation"), MILLISECONDS) final val FailureDetectorAcceptableHeartbeatPause: FiniteDuration = Duration(getMilliseconds("akka.cluster.failure-detector.acceptable-heartbeat-pause"), MILLISECONDS) + final val HeartbeatInterval: FiniteDuration = Duration(getMilliseconds("akka.cluster.failure-detector.heartbeat-interval"), MILLISECONDS) final val SeedNodes: IndexedSeq[Address] = getStringList("akka.cluster.seed-nodes").asScala.map { case AddressFromURIString(addr) ⇒ addr @@ -30,7 +31,6 @@ class ClusterSettings(val config: Config, val systemName: String) { final val SeedNodeTimeout: FiniteDuration = Duration(getMilliseconds("akka.cluster.seed-node-timeout"), MILLISECONDS) final val PeriodicTasksInitialDelay: FiniteDuration = Duration(getMilliseconds("akka.cluster.periodic-tasks-initial-delay"), MILLISECONDS) final val GossipInterval: FiniteDuration = Duration(getMilliseconds("akka.cluster.gossip-interval"), MILLISECONDS) - final val HeartbeatInterval: FiniteDuration = Duration(getMilliseconds("akka.cluster.heartbeat-interval"), MILLISECONDS) final val LeaderActionsInterval: FiniteDuration = Duration(getMilliseconds("akka.cluster.leader-actions-interval"), MILLISECONDS) final val UnreachableNodesReaperInterval: FiniteDuration = Duration(getMilliseconds("akka.cluster.unreachable-nodes-reaper-interval"), MILLISECONDS) final val PublishStatsInterval: FiniteDuration = Duration(getMilliseconds("akka.cluster.publish-stats-interval"), MILLISECONDS) diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/MultiNodeClusterSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/MultiNodeClusterSpec.scala index f38d80ace5..68ed7d91e7 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/MultiNodeClusterSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/MultiNodeClusterSpec.scala @@ -8,7 +8,7 @@ import com.typesafe.config.Config import com.typesafe.config.ConfigFactory import akka.actor.{ Address, ExtendedActorSystem } import akka.remote.testconductor.RoleName -import akka.remote.testkit.{STMultiNodeSpec, MultiNodeSpec} +import akka.remote.testkit.{ STMultiNodeSpec, MultiNodeSpec } import akka.testkit._ import scala.concurrent.util.duration._ import scala.concurrent.util.Duration @@ -31,15 +31,15 @@ object MultiNodeClusterSpec { def clusterConfig: Config = ConfigFactory.parseString(""" akka.actor.provider = akka.cluster.ClusterActorRefProvider akka.cluster { - auto-join = on - auto-down = off - jmx.enabled = off - gossip-interval = 200 ms - heartbeat-interval = 400 ms - leader-actions-interval = 200 ms - unreachable-nodes-reaper-interval = 200 ms - periodic-tasks-initial-delay = 300 ms - publish-stats-interval = 0 s # always, when it happens + auto-join = on + auto-down = off + jmx.enabled = off + gossip-interval = 200 ms + leader-actions-interval = 200 ms + unreachable-nodes-reaper-interval = 200 ms + periodic-tasks-initial-delay = 300 ms + publish-stats-interval = 0 s # always, when it happens + failure-detector.heartbeat-interval = 400 ms } akka.remote.log-remote-lifecycle-events = off akka.test { From 5017ba1fda6cbb5b864b743eae66c37b0db64a48 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Thu, 20 Sep 2012 15:24:07 +0200 Subject: [PATCH 2/4] Describe cluster failure detector and phi, see #2251 --- akka-docs/cluster/cluster-usage.rst | 40 ++++++++++++++++++++++++++++ akka-docs/cluster/images/phi1.png | Bin 0 -> 26426 bytes akka-docs/cluster/images/phi2.png | Bin 0 -> 25535 bytes akka-docs/cluster/images/phi3.png | Bin 0 -> 26430 bytes 4 files changed, 40 insertions(+) create mode 100644 akka-docs/cluster/images/phi1.png create mode 100644 akka-docs/cluster/images/phi2.png create mode 100644 akka-docs/cluster/images/phi3.png diff --git a/akka-docs/cluster/cluster-usage.rst b/akka-docs/cluster/cluster-usage.rst index b0ec8f08b7..2848291a32 100644 --- a/akka-docs/cluster/cluster-usage.rst +++ b/akka-docs/cluster/cluster-usage.rst @@ -212,6 +212,46 @@ frontend nodes and 3 backend nodes:: .. note:: The above example should probably be designed as two separate, frontend/backend, clusters, when there is a `cluster client for decoupling clusters `_. +Failure Detector +^^^^^^^^^^^^^^^^ + +The nodes in the cluster monitor each other by sending heartbeats to detect if a node is +unreachable from the rest of the cluster. The heartbeat arrival times is interpreted +by an implementation of +`The Phi Accrual Failure Detector `_. +It calculates a *phi* value representing the likelihood that the node is down. + +In the :ref:`cluster_configuration` you can adjust the ``akka.cluster.failure-detector.threshold`` +to define when a *phi* value is to be considered as a failure. +A low ``threshold`` is prone to generate many wrong suspicions but ensures +a quick detection in the event of a real crash. Conversely, a high ``threshold`` +generates fewer mistakes but needs more time to detect actual crashes. The +default ``threshold`` is 8 and is appropriate for most situations. However in +cloud environments, such as Amazon EC2, the value could be increased to 12 in +order to account for network issues that sometimes occur on such platforms. + +The following chart illustrates how *phi* increase with increasing time since previous +heartbeat. + +.. image:: images/phi1.png + +Phi is calculated from the mean and standard deviation of historical +inter arrival times. The previous chart is an example for standard deviation +of 200 ms. If the heartbeats arrive with less deviation the curve becomes steeper, +i.e. it's possible to determine failure more quickly. The curve looks like this for +standard deviation of 100 ms. + +.. image:: images/phi2.png + +To be able to survive sudden abnormalities, such as garbage collection pauses and +transient network failures the failure detector is configured with a margin, +``akka.cluster.failure-detector.acceptable-heartbeat-pause``. You may want to +adjust the :ref:`cluster_configuration` of this depending on you environment. +This is how the curve looks like for ``acceptable-heartbeat-pause`` configured to +3 seconds. + +.. image:: images/phi3.png + Cluster Aware Routers ^^^^^^^^^^^^^^^^^^^^^ diff --git a/akka-docs/cluster/images/phi1.png b/akka-docs/cluster/images/phi1.png new file mode 100644 index 0000000000000000000000000000000000000000..104068ec5496dc8f079def4deaccb9d7c5fff7a6 GIT binary patch literal 26426 zcmeAS@N?(olHy`uVBq!ia0y~yU88|s{ zpXBhB)LgWvwc~r>-@5((cdz?iwf=SO``1?IKks~3JpXskZ@cf7-#;@P*z`zB<_-U4 zCIJBnxvb0uXKPQ~Yn1*jZtE|F|>p-MtREJ$eigyBzp~6c~;;bA*+DFZ{~T zuvB8=O>qH%E$zPrb>4i_uiEo}uHW|krMq@j{qLCQ%n|}JEeQ-nl zk@(sRimh4~?w6c5>+y*EQgGGO?cN)Yo1EYNry9GkC4J@Dvhi2*ch+4qXZ=0+DsJJg zY5Q+GJv;dDR<*=T`6r?>d3k@^=S#d^oV@Ege-pRO;V=I#1;2cqwI$s+i)DL@Tf{8| ziAd%Z>N=Oa_z!ltJLV_Vu6g_KM9tR^SN2Z@1eYpJD2&L*WGdl_tZHao3{UV zlW2qC2ljaiOf5?19TfO{8u%{!{Vc*BcR+Myr^~BD4e}M;4;YrX3S3g-IC!W2Ny$H9 z_y6J6`AhEZzkY)Ej^NIY{lEWo|L$iK`rvS{{$uR_D{p)C&di+h$DjZIs`ugEE7?}6 zu6(=y)y1X^$t^Zf(reqo+_jnWOq6Gdb}W8+!7D>|3tN=v%3wFQpU9BuXpGU zPbm!O=~{b!zU7X;w#>KVFD?0BJ(!`S zL%DkYL-~0Liktdt86}>S_jC0AIeVL1oq<_{f%nluod)3#jEO08QyZ89SZ6u#OE4NI z@V;pj-gL{ZgTJjwLx8`pv19_PU!(B?mXL<50Cp)y?hMws5BPSlvmNA^!JvPDCxYR0 zf@lqUv;fOP1sj)^2n9V42BGE@1yv8(OU*tC-Y4XW8uu)8&|vCn4_ct3A+ObV&iU(w z&=s<~m~C6!7N%d&*}_uWR(C*S2G_E7%LK;=p|GZ{3CTC4?3k(#D;DU?;d*}HXn|;r z(jqDFOE7;=N_Ag}U5<1%P$gy+rlmIIY<0;IixJA3XTv8Wt1%|HBUcq;z_KHOo z+t#LAF3A^NOw6NXK3-Ni{QIKti%ym3-sXeJHw=>`M0*sU z2^^CaZuLAal9Xj=ZcuJ0JcIR2xsKTB4$(teN&E?KH}1P(kz@8vW*g`2X4#|XlJ`F> zun?Og;m4caR(!Pe@ukA_!s&(E3zK)S-eHqel@y=JGt+J+bEHC~QKaHc)lGSu3^$dh zL_gW`gz1Uale8ytPYj>zd}8`U_DTOq@e|uMI7FO8vP7=QYz(WSXA;Lg$t&yTH> zCQX_iH1kr^B$vu5n`Ug9`HAtV&Qmo}*{K>+`KBs|vV`(obzLR5Dm^6rL&YA2IN|pV z{Kua^c>S^VN9G?k(}__{wD-1B4#798yb9u&o!48(pCP~GH3BEgADm)^V9KOhT>E*@B3rjDBUjBOVtZ<-< z-6Fn=b7wfMQM{+BcOm&@>kHnOwJ$fnkbc?zGF^l2(-t5Nc?%VTs&)7Y`dTRUJ=M4TV=PTzW z&eM%kjFY~Xa!>7Ec#TMnS4~_EYt7!8)qi6Cu>XAgQ~Jkz?g`u)oIf~3IPZu@h>Hkq z5w_90p|wNfh)#-zi1rnQFF_LeYZPUaVpRXQuxKw*d8A(Cm*OHKHdXwqpsr}G4qLZo z$HXJ&I(y$8eiM98e8>8%`%^5Y?wD4wq@wx98kWT^oi3YPRv&Tqtn*|)X>;=TB1(1_NO~e?KnN5Z97%{l>8KX zz5Ck#gB=4ELmqY=nxwRUQFqeJM^l9MPTCo??Gkfp&!%lflZuvqTGrL%wZp6XlzM1k zsQp#%Ro%Z^zg53mf75>bvDMF3mBr<{&5ge6x;LoSt=au>=wh#AzsdfWoi~Slo;$5$ z+WKp$Yx{2n-CB6de9QIHkP@Mis*=E6Y`bReI$Tv!WmctHb@|txU-y3T{#woUiLH>$ zmfe88hyRJ}45KFoCFX0)V@!igybNBMFEiR^q-QwKSkRQy^rZ!dyopuCuLs`2jF%lQ zhZ!fNWt81|Gj->L%8sA9+-q8Qx~@DL?VWkL;`Hw@7wz=b-eLFGZe3fvHvR_3ZI>Hg zZe6-zb?e&gb+=#MdV2e;%p{vB1sNCSU7eS5|5-!vhSC+KKguHBf0%igyYExq%f89( zEqyNXl`oFGdh-6tQ=i9gUe%mseVp{X=w#~ct7o>J`Z{~|!swZ|SMBbrp7?uH`!e^& z&Gy)gT4PBK>KY}c93Q~ww7C#Naw&`%eQi@F=l zJM}e9Gas%vcyU*<$nigYwqDb`&iVhFl{Ed*#8VTiOiJy}Dy&tUYh`Ov`)bFlk6pqq zgqH{(mfR$nZd_($Ys9{3$tJGN+cw|b%ATvCJt?YC8L*=&dYw&L2)8e@&Gf95eM~{COdlOq9&h8hL-`=ayU()kV{;k|)iQUHQ ztn1!)KAe1z^K$1!&)FxJ2loXV``gabv-@1X?VHV~pVzt<>l^AD$6ws1H79NUx+>jI zyE5Gpmt}{Qmt~yGdUtfs??0brZ!o{jy)yq}KKK2?y{qG=M81i+6fad-|KsnWq7R?0 zdHrHP)V`_zko@}kOMgtZRArPV>XzhwFa9PzO<#QfsoJ-H)BffDsy^_2?bkEB(|ULL zEx=2z4$&uF2_)B#+gYm{Z5TRlf0Pp-PXD!`@DAQ zSYYj(vwVK)lB7#Xe5si!v1#HDKRnHOcI&~#r?yAU)fIFrVqQ$`*z-bjqiCURXVyvC zO!t|5mSI0LS~*oCpUO;~`j;(h>MMH_-K}~V`LCp2Pko^;H^I2a_?1~BU)HQ+vrK27 zj}}^UWsPmlr5x?I>tuK3-hY0fc*ot1FFn=<&-|=8J>|N9xq7)UzpHWyl-e6@0=6z6`k_{UPoW|eGSZ2Y?T+ozK|=RDt;yqxWG)#uy(@tP~_ zinkdo*H~)tF2~2SD6{ZpZ?W>zVo~j>tDlFj4qI)1wPw$Ug=Ie!$Z--t68M zZ7bi-vunfSx97whzpHTXNtS5t&0vbV6?@uu-@eIzDNb{K{BUWAmi*9?R(?$4~BCxoElFd69W< z?cP@k{to)~^wjEOFE?EOoxZ_1d2?!U+~-T5qx0YCitPDXvwV}s_8)aCf7gE7beHS= zsY~sv<&*6**9WchTVqtE&TzdoNm%bsgnTHUF4B5&UP+hi|)h3EF-7Xkbi zUP>hEFn<$$ClzV7)4r8=soqqbxR$5}w;5rR6#SR_Z&}Kp;*q*0?NxeQn(Bs?nKwdTz|%)D*QZr*Ai9MysqjU$UixkbGrwd=C8Ugw*g&#iuw z#g}@E-6}#htR$uQj;+!2EAL}oPkQ(2;j)+K-tBv5`0D0^sn6a%S?sY$RrlAuZ`z;u zc`k6L@ct1fv9?e@qBzC8M01U$jh2(@qx6*Wkf1GTJXX&f-<-7gT#@w0#VPPnqROUq za&N7}CeE28G~?BTvZg zRtp9jKGbpL+?BHXOZLrAJ7<1c*>&;M#LvQ^>sL?DHp>bWU->%X)lYp-(>MFq+|MXG zy6@y>%THNl-gmeDdwtpbTGT?bTV?b3Zbtu_+rGPL_vQTQ->%%xe6#kY^;P-0>%Zom zsXg>}E4%-M8zF`>%$|HdkreUL@I1%U6UScsxv}`;G<8>D&dKkBkNH2HS7>wGCcg6H zlc#ILuU=Mzx$r?eHm;Aa@tmZvRO79JuzIv!d30S=qI;)rWaQDHsaxy=b^Z57JzkZz{95c=#<_}j z9rynJwVijJ>W=CcFjvp~s zm+?EIVy12>yVTyQYK_57V^__oR;7w-wf8>Qai4Q7&$1r=ndO_fHtqG(dKU2H%#&?% zPo3vJyWL7R{y@-%;%B}O9Rh#=y> z^<}X>E4WwKmw2vs{JJS>@ki0?%YHn2wEB9qTx|4?eWjBxXx-Sh|L&s0zr&KA&s^ty zckcH0-+As--l*RG-mm`p-EGy^-A%CLoy;o)LO55+ zf93q>$Xvp*OUky-G4aWSo;57SJ+6sUHy*rU^+u*owwxopL0VaPLga+GYO@v670cDu ztN!;`=rYmC(CMV7q{mHXSO2HprR?Y1`VaXBXa~$+dT;5+Ws-}pF52rRpnByJ=S5S& z&`#$s=f1>C`WbZ@@fooi8ykM#*s|f%CcjN{Q|u2kKHYJA=E>B9XV3j@Tt0vMEd6f# zFa?JT&L<*ocph=R60DOD-&4`%vNNUq%9JnFGy6B?Kbd#pyXKvcJ&Q^_cg8)Pl=byYufpe0O@!?w<$J6aGxR^LWk0pX%)D?ell; zxiLp?R_Ltyzh^%c1=2oE{sOEj44Ka70+d4dN}Y{6-m)etTS(}&?0&diBWeoQDdDN@ zyLx{$q`Awx7=2m&!dybEM^laWa%;-{posb-@A3}a-^;RFR+47>sO0ZeH~`Yr?JtZTpr@zsC92Z7!#6 zMEtP>uMb!r)=YL2zTMoq?D4ZJVrGS7R&-?!A zN696hGci|Yzt~>beer$&8iTqOe~)bOidy~8=40w#>C5FeOF#E+IJ?g9H|-!XcbAbLaAj&u7#ZVe?b zZqcq)ZoZ37UVL?;Z+}nRfr3Q75pHW_x3O6FK0f^O(Yl9aCwfkFofJD6dcuFw zd1W*G1rbY47UwKe3OX8a_Mz{`*egL-#4~neoXW7w%;vb%QfHN})N|u@ALH?YZo@gA zU71sVT6r_AR+Kir%~fshu9_}1-FiD`ztMUPd4Bup4E+l_CNynW*s(dIC*tBhzK@ok zR+`E$OJ>?x_UvhOS}YW3>6w~q@0lBTIR5kQvR!(+ep4{_j z!H;b&-;?wx$oXxB~`upm-jnSn-kI} zWKYSSlk$`(u2M4nn7is}pQ$+8d2YRK$v*GsOSSvA6+Jrq+`n!0&Fr=F z<7*>-?)sVg@Au)ae|rB)=bHzco7c1an{nT2OKJ7&y4hRq{+;|!{bl-hzMFkN{XU+1 z9lP-Eg1gsjf45hj{P&N6J1~>EVdlNNf0Z~G^yC}nSMJ^&9lCqB{pyJ+k5w6L|Ly-D z{>LgigK@=?Hw)WkKD+;aY<{VpdE)%3wbCleu( z<3q;}f))q%#Q#5GS$yvM@0t4Nei}TlIscPml1gJo$BO-*gRK~plori9(BkgmV%Nyo z-_cRSBrGQ=_>)D=MoH-tr%#28%M;-lA38cts2e;K6rAXva7bB6Y5u@!SR%0fbIIAv z^zEkl^VV7F?%KV!lHuH~SyAcRzZLwAwRXMj+WbJo_4d*1hhn*AfqPzvKPtPGW7c{v zO+5LKvQlctwXX{oJ9i(|%el0-{_?8Q%Bw}6UoKqid_8L2X4mx6xKFFrn##((J6~&9 z^yNe-d+zibmBF7@HO*Rg{^g_}Kby_(Za8+U^1APB&zs%tJl?sc9DQ9=cARKfuwcT3 z1&wv~C$%!O7M`0Wsl1}u$*HM{N&R1rZ))&~bxxOs9AyQBgoF$(yf=US?fcg?$6MT8 zxB`DOS8d(J9bHntvFhdR_BWrJ_RCeB{km;kkxb-1lcy=|>oe;n>@@qkF?!3~x7xfb z>c4Ldx3e#vt5_m&?ZC!{|EgvJ*6uG^7r~ZF^_f7J4f4+0unBvpY-&$CI zzSzm|z$R`=_`c7Vz5XkjpEt2F+`3Zn#wqSI^6#v}`U`{QW?EZ2UA~fjaetAW=IXWb zLRRno-R$@0x;#%$^Ty0rmI(9w6G7)|b&^_^<$hQ-ad9387fa65$epI&&++`WsC~Wg zGso-?7mPnIW1FLQ|EJ?ONzTgK|Er=8H}ivBwprzU^Be!u=YF@J>#8fNsxY{9q~53~ zio@-mxUH#A-rh|K$Dgme{mivBUPgkUx>#VVYUOTksdQV*>X6lkcm93BcXx|8gM+{x zZPoOj+eB4&E!nH@?$0zKYS+iP)?#n;s{f{6x>wGUn4Ed*O#$z_n#%XDqtpK;M*pn$ zwf|Muq@Z*2$1&r?1N{HDe0Rc>A`Y4BrbsL07X-KcvlY5Q{NSz;hb zF*WbGDxRS?J=e~@t~yJ0Qb@Q4`{Mqo&W#5jO<1!mBES37zTA#!915xNv40Odo7Ma$uj@HX34?ZtsDeew)}}Y89e`%%>IV-`!NiT5kab+lT<3D`Xv-O zJb$KtTbnC8L*Yn-%%tTHALuxGY`x++>G=aMj;0CvWhO`F8E0B4YMs5bICjF@)&PRQeRE{+{O*~VN&e?D28 zzu1$!G@r{uf?Hd&zNnnEK95 z!VD@?PG)C+=54S$o3woii!n{LIi^_V8CM3pF>iHLq+^SQ7avO4VlNyADp|BO#Xeq{ z{Y95^{l_19a}}0|R0-d6Y*uhtDr+-inYdDL*6i|C`evL?Q?~s70*dhUFKX(3i%5- z=3P=zQvLgAX5^>NLxKyF8S6!ltnXs1`Tj8e`kNKyStifl9+>x*{f_?LCo5)$m)896 zTbtTieLt4*MEsF+w;Pviud^$?a#VNzc4p80b7hw?G5G#y@_F3#(=wIa`8u=4&AoYN z7gnj8r0X*9$*!z^mg@aB`08=4B0H_EY5VtHx!tjPscrhXRYxUNIe1(SuVg!XYWwrv z%t~K@4Gwk6P2YPN3T`qU;Pp6ecVC_HX|?(Ko3C5cUOdrcke3%0pTC{E;&1(vA6o@C z$4}f)_FMd8`Mv+GmAWM>`CC>tPml7m)nyNx^Y@#!!)Z;g$Pa5LFUs3{=wRNPimfaW zuixhN?D*B9aD(;lXaDwWh6I-k0fXvi7Q75+Ula;5Tsh<`{B=^wJbSB4Gqxn0)A_rS z&HuOXVcU+$VI3ZhZ67Y)dpy4;@>Ja?o(1CkHAN3LPnxu6&w3?cA)&PUFV>x_wo3WJ za(By>+}~~Y45RPAQkqtGV!^qn>szZdzf7}ch?!74Ve6O4%vqonYEMCbA4{ zvu94Svap!Cjg1TM!q7iW0^g3@%6Of9)AZe}IoG{<{+p^x1Vt`0-*D`AT*Y4@=gP=c z6E19YSY2t8#ju@EUPQt~N@H!g$=Xu$E6fFqLK~L9s#;QP+P3ai(P5GQXAHF`%y?Usyp7AD^qSIv_`5|FA?yqn zT=s6+^|gg}%g(zG9+^MlRcC0p6|c=PQGfY<>4i)T<)!y#KPx_bD_{SGT)khF;j^{d zHwyjQ%ilA3iSSJSbt2PJ&HrU?zw9tWzN@2rx2diCn>&67$$ zi`QQ&iFUYm@4VM4?e1$w+jX`wsq>#MeiH5byPWyP^f)5Q#H|?sa54$ttC&Q}#c?=BK zD--;`ecR)8`|ACcXGM%ZRDL)AeR{u5TI}2;Gk3c^YZmO;b!pPy(}w)}Hf{8}YFD?y z-8WvkSCmsbu_n>WfWcJ3lr?O|&&?bCy$+ZcCHSgjSM8a9f6=1i>HO{&d@9ro5B<7z z#?(^vYUx=hmxrCgI2TzmVs(HoQs3^%l z*YIZNx%X4yS_$))Pjfij_h}xi?&5L0Q!@hudOIPO4Tfq53_|nsvx|8*?ZxPqOf^5d0*x@SMTDY~dWn_qBZ zvR6{nQGL&Oi+2mLI(nSUpXE|iQ=YZ^0E^ zuC+>ss`BQM{8ss8Ovn|3EgLzQPs7 z?Q54kdsMX|e7|q?^Q`Qw^RX{uYs0sG6fNpXVsDL$WSG{m!hW|)Z`ehv>@P329-Y31 zp%={baenTTj5w+^4rUcf0+2 zG4bX0Z8m>`g!UWN>quI+{Aa-y4WEs4Bhke{-#b;hxtL2d9tE zmrZj{%xQ~VWqPtSgLmV-tYzX?Yv1NbpT8Jeq{+N<-5Pe-w6reAo?z~Qv#>b+eo+Owo1 z!=6rhGk+}$%fqj=xk>peJUl%q>mu=N>hO7O_ z1}TP}Zm&D~vr)w~< zO}hK~+M39%uj9zvSyRI`0bEE?R1s_$lc0%Ejkpv`^gJ zrFZm4%^}ylTLn&k+o!DX_3HB{McWi7CvDe1GH>nt+YN5J7x?$~USM+g@YXo(;I8*G zd`*9_UtYXO$*uIq5kL3DW19|a?0+ZF^V_Z}lO>AlKwR@QrVULo4BuwzT7Rd(XW(f2rg5&+_ftv)*WR?cODQj+x`rxjw;= zWc9PJ60Emct$4hu=B$jUW?_{uUe>b}KLW|EJ5cO$-jzpJS~YBeq%9 zetvd#_V)by`+jcKH1FG;e@enp!ZiQz=4(q|Ut9A(UP9G2Y>y|RSxy5uuKYp&d=U4Z#vxnx{ zoAFnl2bE*<6YM{|yYzh7*7Yv8f);O8JCtyRx$Q=3<$J5!Cp}qtUx?eWWBaLMQ=4yJBAe>gy1rVn zWA)L8ns=vhI0!7_dL3;xO{#B+)ZWl2<;g~Ciyp7_+OTa(>{jvo7KI~QHFdSG%E#P( z_d}l}u=P`pIM^xqdhwlCbZ@z^#Ow;oTzk1?)=;oE~nWWz823r%2*P*Pe{ z*LWT8D3VjZx=ngukHQ+wT|X`wJ-TM$*l}~o4de8V75W9%xu(mlSDboQb}K7u{i3MZ z6}y)GK2=dJmQw#z#C5jso4-#JMSrwCuMNqz?o~>#zkm6nK;Zkr&R>tuu6do_%UApS zQA$#*dGVJMeAmjIeE4N$Hyx|ebu2p+Id}S=tn6OthLAmZ*L=eTeU|ISm6=R=zQUuk zn}>soi<498#rMf;CdJKtCTg`*(|+f-WV@`t)e)DHa!(y$4iZ^_vI(=5NkB zadf->>c8!ZN-s`j_y2yq@cpIP+u2QID&I~GRezdbBFkPGx`grT`+eU|Ep>NJoHS+j zAD1LI&#s$6fqSwSZuxui#FJBTe_YpBzpE;rreFPK>cagMpK8iZebNnMI5y?X^*ZDH zDO?Oq4U4DohpqLB+jW%dh0x{uQU5-_l(HzEBtA>#^Z##dTauP4cdU?2_dUoi|4!SQ z?f-=jGx_bTO6Sy^D7dXvKC@g*ezkm2@e}7_IWBp{`mCdi=G4El3+PldzhArGE-Prp z9k<_B4;t3m=x@)uFn96(`?LRMzWu2voMtOxY%8<;^zG~N?{|Dx;IWPm4f+uI?fAXg z+wv#S#)2Z!>)oxhy}7of)yH%y`nDc=x>dDOKBYdY?4Er|*q6zd4>!-AofAGQ=JmFz z`R8qIKR^61>HFpGIf;i~b*n&zb>u`@6r_ZdKi}c{tCq-66y+9OG%Y_maFO?|-$h?k7*;No zzP~g1;JZ!NkGpP>{P-{K znCv=f$*MOh3}^k9wdh@ZGeN~W>T|R7Z1ZdCPj9WsecfMvY4=r;>W};MJU6YI+uE^p zk&0(&>&CUaTQ1)ES2$ym%FWBOXHVpAW$p~s^PKc%=CNgSpKhNvEneF*D0ZRD?0uEV z%|{h)>So@nSZ?!k#h+#c4z<%WA8mcxB(i8yQS2m@%2(UBX2pYtYdk-_iCvkW7st-w zl;f7W@%zr{O#;&|{*$eEb$uI8;+l0U?^~^G)_P?q)*f@jX48h1qUR5W%vD%&wNk2l zzux!kj8&KR>D*S04cS#Y^QNNbykE5pEQ%|?D&D$W5TGxyx>2A- zwP?b;V|UlTW_2_O-|6=@R+Gai`1ibDx^5g!mp&f56yexmbkecv+tL>;C${W*_Ge<* z#mlRo)`Et03~z#>%Z7Jpr$EbzDYyJqt+>AZh??i5@lGDx?yS3((Uk~>d^zbmK z$hN=x`O4>rtb64zj+{Tv;NbPfCx7Arg#&rzr8hVPH9f3fs=D9Zv+D8h@*G|5JHOv? z9bjNcDm5(e+}}Itd|#&0rMIQo3v6f2yRl28;!FMQ*VB|AocR5kamt&x?au=C3eVas z#?an(#npjDsNUXxUE8XzUsqr6dRo2eT!+NXp!z+N?=|{;%hkK4RTs+hU^oB&U1{!n zgBM%ovwzF6|L}Is`uKlqEelc2G z(S#1W&G{p{P&ZiZt+`HaveB+eD3geV)FmgpYvj#2d2BfGRO=0 zab?AaZ@MON&;AQM>3aU`=VIkvPwr=DF3r#S&=c@(RjBzqZ(fNTMSmlf%B^6QI%mqT zfq9nW9zXXhw=GwHo+tOYLGprh&*sHxuQwj&I}jVbkNxmGsaJP>mh$qk^=;Q?U3ZC% z-PtCKogw?Bx&>RH$W~=xp&rKPZyIEGg@s=WVP3zb{6W$0TmJJHzdUO6=j&i_aZyuo zxmU56i{lC#8yg!_!++Pirs7=TznL%8h8I0p!QpVF&&R`KM`4H5)5z26XW|)OB=vrN zS8tekdePIf)vw;~TDw@grAc;|e2mPJTk;c>qPFk1cz8^4)vhn`uja?+x1O8uab!?nkqFy; zO78x)w|jHF#m};{9GnpKaTUwXlHK3Kw^b~BHb+*Xv``x~2-UFcsmFRYgSv{@MdgZ@ z#cpda%RT$!cJ*m-X$HrRTVcCu<8~Nb7T#_6aIHb@42$2-Ki$^)|3NUyDcM}eMd?I9lMu3jXKkKAwgs=;#g<@+6zmZx3GiQW3NO*46dFw5)P^RFE_FUQL8Xrg}9 zeR%~?l~~TOQKAz8y6W7(Bp0f6*&XYdD$H&&*mbsg?`CIv)Q#V82u4gUL zU!LC=z}T?c>b>vhor$xgF8>krI8(OQFq(CNRd(R&OHZ0_$+}_7`E#pv-J}l(*O$FydARZF%lfSE+OKCsX(v8D=dABLi|;^W>P^Nqy%Kk; zx?k<_eP3(*@afalkEgHS7M^naj@k2mYp>_6{%@BYe0Mc=yJ`mGjQP9m>wFyp1J5l> z6`mK(uX3($M@ZQ8{DaAADzAJ$eX9!#ijCZ&XP2^4)S~hR+uJko5{Y&1j)q!mWov!D zrW?P7y_3JqzoJGkq4vqjRMx3ipRz`aO9u&NOVocpqRO_WBH`MuIg4Jsn&j&(S6TM* z(lH0o1*~iOZIrI_-v7A!WH-ZO=Uor3eLZgdQg-gU+b&p!)`~Vg{$BR6<$pnQV88CJ z_GzM1!o$U${wX@c>}?*h@`;P~bhZ2QMa|Rf8eT0{zxDo25mWW1?axDR-DwD$)FoeA z5*b%ny7cIu-@D@(diY;D9pdFq_nfUP9~Tx77n^zV-_sfF@i!w>=fBt5Di$6V{w)1Z z`jbbt7R5hKWPW#De6h`5CG$78z4tk-_3QM`c-0lScIth+UY=>SZqYi~^|MtU?!SL4 zDlT~L?!1eOwHp)?8djCO{50dX_`4hNaj}tMAu(Jp-d(wSJMm@N$-r$Ym+~JiTD$gt zkbsHsJkOpD`^<`c{X9z}|7}`6pS{OeeT&_>-%dx1+mA9x1Yhde^(^m8XX{qI_uls+ zZ9j>=zfrPU<)(2GqqCLzT7j=Z>uw!tdDg!{&&+Y%wz)|gy(igPt6r<-FJ!i_E{kv`U7XuSEs64W^NuX3P5Q^#uHva) z6s?wWYUxSF+JlWHjvXJ*X=d8&GY?~T6bRxvFOr`lyhK3q`X9EX!R*_&T>0PUb;kbT z1e>q7+JKD_cItu*z!BSu6XA4Xl_Vg{+;J* zWBHud#0ez%lzFbQ-?aLv#@n@v?ghRq^LO4T*d$PVQE}J96JE{bk5}-#c5S}U+#a`(LEtr(6AS*8uQ(~7r1&xP5*9-NLJH%1RG- zUvqtVulm$P@%2Kkf*jY%s@^TXd~bGEM)|(=w=;!hSDhBod+)<+RNw$x3*i3#k(T%5 zc%u`1x2Ai~Je_|bbMsEU*u#Gx9Y+LSC{P?iz#kR7gN31!wmWr>nbiK&Rl5u;@ z{#BRWemXXtYiD_g&HH2L&hM6KaJ&7pK2_<}Uz1x8o;lCcvWU3-kbCWk;0V3EC1(pS zm&#cb-(zIS-YT0@tGbtYRUdOkrR9$x{rD*N_lrvFr@z}Zd9L2wy4laxt9&uG2)@s- zpjq*a%9V3&K9?_=PvQ$Nd-h2>{@M1c&bu@pu5@SqcXy_5=Zg1IWzT~-&$qE^$hyg^ ztvEa{_RpTY8J7yb7~U=Rn%vQ`VtS%25i1H7W(&`Y-g0x!xo)}kmu0tdwsnVZe+KH~ zJ!v-S>{v0oB=XQ|y$Eqt(9}8;)0M!F*;;cyWqtow>djK>;NjuX5EZd0uby4=Y~)TY zJtGAT4HXp+-6JVeZ|u@iQBqP`ujf^)yax{BDZ4NwS)B!=l6D zqO+8gly=$0ey(}G;imrD*>}GbS6(Y})=Ikk^^@?PujV{oznNN{VfeBA-KE&_Z#)l5 zD#Ld$$gIrVaf^XZ#-hNtQCM)|q-8!cFD2KOzSQyESaf&N3C_>qFNDtK|F?N`>RaZU zQw$v)9aa}pMQd_YBR7|PUVCA7k@lm-$11PCx2(F;>#4<1Ag5=<9JqG*k`+!)$C;$I zmbXeB`0+42mSLaze>VlCMf+BC?|XQYYu<&k?S^~9PGwJh%XCPo@yelR+C|H|t}z$C z%ZXkSu$I;Ajg5-F#cG|jgrFlY)^&DubgYQHuCixQ?*DxL4G+|X_vuY|Dk>7XYvC-Z z>1=Bv=FAC=44yf4PX+4)v-f%osGk>b@??EIq2v>R)Ae|I5=J*Ux89Gakq|RbLonz+mBD z#XMv0pZA(ei^c61Me{KH;(2|lAk0f$Y0GqTQ<(E516Ov*_{tr^o&0 z|BZX;(DAEH&#z+J-+Z>#JNx&mKD~MED975hn!7Y)t+d0By0WpbwzjaWY@M-2DEfMv z%N6~|eO4b+F5REDXK!}hrT2a6tER9~HnRZ$@IXnEN+|2dfs|wc2T@Ni3{2Kg!^WF^) z_i#6yej7RWYvz^M?HaOzf%(@%JC9EMdgaN{Yu~cxs-HT0A^P!RWvkogBmdpwTCJz~ z|LF@)hD)a|UH7lZE04UigCkd*)$NM?&HeW8|3;R~+5g}p&xgmVm5aPzu4-9cyE3AR zbA#ww&Y64e?haeCj^$g9Pu#b;OHB&i?DhYfm3U>xgKgGkGK^wpb_T~?=$V-o{)<~@8l`&mf4zFNUTD>oe{03} z+s$BAxcaDLhRrsE(wEHJ+fqWUqVpfDv#w?<*tJJHhN16@Nl9*q%ir?}y;%!xtQUhU3T*h^k-HTphb_hjSE$L-9lotXFR$;k70(es3N{@H5fRaeb=V=o2! z|Lb*Fvg5sM@A|)g^FQ|geUZ7>?`1^Cubw>Lid7$0yqFd|Sy|2P<%S&}Ch!K{yF3fh zHcy?_4Jrp3?@EdW&fi}7U7YdXD)nXe7nUfv)Ov1@duq4WOF$|7ZGN1{YsMbAdu6kh zMRDicsPu>{2#Y*(U`fYCkjDFEzutU*UmGLz|3?3nRg7N8ovutT@jjHjPeoj29>eQP znJ1&UwY0s>bUS17Tqk`zF0~*fc#pyn@wv<I3Qu5E^laHtHwXEoW*%v&^@oc(A=tXUPiJQ(Hse71$_#fNQX5vNn!OE~u%Kdn$XKU?2s6(|7w`|qq=b%`b3=r-epjI9UH zl(|d~DOs{?!<*USiGFXZAnW#lb7LrbNf37A!nr>i^WkmEm{#)j_7pA8T>H za{H$Ax&L3|UC*DLXJV1C0Ay<79C6Pp)pOSf+yDM_ z?ftdilWy^)FP3(AqHDf_?L!UE#nOlF9V@2)+HbRZ&RYhN`r1zsxqCN#6!==|Q{l3A z%JIjUn{P1lyDGi9KI212)ykinmGMU$BQLAIGVEXe zRWLb^qi(`h!H#v(!g7K6PjX6T+gW^g(>!s1#gzUq#aB``OFgeh=bqJ_W^-vXzYEAW z{|~mfUwJ*p?su(Q-o}p~H5vcCI-T$965htyzv6o2@ALKTy)wUE^ydXz2`s8>M-wzKa9xZ;K>RY^M-O(2JE4!EctG&PGM6}ZJy9-JbT>kP3%LVFxnz;1Q>g4-> zFCCcm%q6y;vwy|*0+U_;lkWY$%wA&7cUeo8JJ9|}i~E)6oS!eaJtsYqOSx#hC=cWw z?V4)0JF}wyBz+0F*X3}<7v%ZY?c2ovePBN}#peO~9!9~yrB+Vkl$ zfA8Nv7iuN5=wAqK!1`msvs}7vZvDSu&Rd2# zqH|eQubw*Qd}Y7kLqW}BPj_9Y+IaD4n3j-I{DBttB{SOVOybr`Dg3WFyy4(we*SW~+sZv}=jHtUiY~u@Y?0^Vl2}pV;_`Q}l?{V{vsk}1u zsc_-?@p)U5=VN!*yQSTi8U=m|sM#!y7`{EoD~xr0Y}RV!LYJ!#~lt zx$D1Oh&Au!2(l7Wx__v}{mNn=>u>D5pX$FgdVrK#f|M?Q@;X@ljrRYye_r1EeYSJO zaf63~Uj?=w|NK0c)qY;h>nFF}G-bIb>L(piex*25UVfEr^}Fl#JKbM8bkvB*>$+Xp zdv5og|5gDX-%9@8*6&?s`+Z(QZo?%(!JisxHjDC}?0WF?>MVY*)!B?ZAB5F7$A2hk&`sX=w(?@}yn@}pW zo!{3-E3II5a<2a%fWNZ)=atbEiTJCo(!ZDk?f=DXOhLa&4=kpk_ux{OtZ2^XD%J zQE|Bv%6UFEIBv>j)5>dGmL7;G{T#LN#oNs8ps$^hsiCQooxiTQUN#fidOp3`*hx*ckfn zX2Qn&`Ab+IoQqsmm*VO)b&C}b!>Z{V$w9)!OU)NWeJh@JoZUym=ahb3sTD)|&t(mq z=Vz|@_Jbog+{JathC`Q<_eW3PTX1g5!e&!rrDFxhxF$C3%DU9`ZE4a=)dOK$)KWfu zdp5Q2m6O89j~kX9y~wYwRQg=;wshb@UHsKs?AePIicjaK8XtDf=PzS^u62rEQ&uo= zy>aTPDRQq@cdviA^2)!r*IwjHys9lMnZfuWe{S;K()9BTe$&faxerX7)wZs;%R?~j zH0M^Y8O9&omNF|UEfBvm?ZOS!wO^jx=Wq#sbpPq`|9`(e&;M&>Rdk2f>$sDP1HVmX z>iLV0&lU&FY41LB;ODjApb*7{$&9__)3~oN9OLJI^KM1QuB(>mk5BzSU7z%8?wK-| zz3$u9_B3qpP}usxr?z35gvwflkYL4>Hn|xdU@w){|hnZ2D`(%jOMs=zS_Lc{(aQP`s(_k`?BR9 zHIrQS`h?$YFZTp5*VuCK);Z&u!6LGGF-5|Q>>ixIZFe)i?9JWqXRJR~>+d%e{JKEy zq`p+{hG&~*XXtO|49rjex$4-T%*d?RrrKtybLqZ=Krz^IXCGw`<;e zU9mQNC>Xmw{M!H3KVC08ed%!fhhMNJy^4n|vOo{ux_`~ceeXSkqM1Ds}l`9B*Ro$c8_`<7`_qqSvzyESS|5N?^j$7I?p1 zDY?k|=BD4>_40QAmb2QYZBu^rdd7zitJI&X(*D}>@A>qlCpwQO&`L~cSDa6Ui>!5M zdEU=ucm2=od3^BXb}duKhma!ovL~1zlW$_Mi&0@yd7m)wb1o zFMqO!GXIcNe5L*)Q7tR~`M>pc8a8wO+-W}C#5A?9wPP1gzPCbF(6_TM_a1d;-1EKg z6n3kg?(EYGKa$n@=aIFdS}TdVY3?Gf1lY;}kVPhChEN2U*@` zTp=tSWp6XN;}^S{jS|C!6}RWSy}$p+ZJhla3~l_9PySl|n#Z}gja5^EN3fLr zpQLw7)1*~vcOKne{pp|Mtj2}T?7n-xx-C^!TD0zXi~GKJA2z=K_u={;)_$LVC;x8O z26$X#-fE}D11Q~ODD z&Z6Xo`5TJ=hwuJZTX9xjes?BIzP-XHQJ;z@+BR~Um8a+N^M^5f5N^5tPg$$U|Fp^{ zRhy-r`yMHKx6XOX;4z_zon1qkU-0XOdy_uQS(LH4GjHkP1$A$Zl$X6fKdI&M{j1s% zJc3{Myz{HrR%+;!o!xch+iVN8PMY18>AQ~ZxOjMv{cnC5gQx9_MS0pfs^%$}+AHph zw&+e`QtLOFnVc{GrfA_t!N>1s8~WXTb|~@QrW5R8pg|M$W7pPQvfU)dDZ1|J<H-Z)tdG1_O^ZhdQgX9rI`DXCmUN=ddu%HRat%MW)*Y! z-J8Y@m!HNyWGYy)Y+>|brTY&HVk4$UYjPY~#GZe3#ZL=SrTN#^-v4mN`JLanGjhLg zyy4*e@M+Ob!-d9^%xlcv_pS)LZBpjxZ~N1n>8t2->AU+4Q@ORi{+hn1dFvj|#uL{| zvkwKgy1QxT3h;9O|ss*WidQ%XD>?+c_JM1j=NLZ&L&m( ze%dx=C5F3mKKQK{axxC$>W-hs#UKFgeSN#J7*v z?R9Gyz08ijp4aReW1jh;C0)2QdfNF2X z)wyh!VE7_=ZR*20=6=_gtl4#K_FIOUzqxap4hjV3Up{L-@AMtN*)O;_u4P%>Kcd;i zXTIfNl$!OfwD|gH@$E{dckifpXX}6N)fcekyBgI|MPsW{9A2Xwf{DXIY+u$`B$=i zaA6gUmFpL|GX2Im%e^=G4lvj^-t6mGC%`XuWjf1`)oedF?;Tyh5Vu`af}K6H-Io7l0AH9a#Z|9j!bi%-s0r@8c0 zKAkDK=Wj#DI!S){E7E^=|M?+4^?uuZn@6wnUz@$z^e5@u-Txmi#DY>-t+cS*SF4%T z{7d)!pZRBVRm1)HVt*>y@_H5t3I^66h@5q0x5t5P{oZ@JnM3Nn-Nn-{4`O zzVgD0Z$Iks$~<^}{nasRrA67tf@fXnu6dvHr~bCxN@3Z$x~AjGj1eC+-fvM}wC><- zp%vRLO1@lq{r(y62jPDo+yAOb-uCpN z=Hq(f_xl*?w_Xwy1a}2bt*|ToHre^AavM+Aj?|P-&upifmg?J^{%!PpJf*L@+WyTaeR9Gf4j?-w-wP$UstTpe)Vt9+sW(uYL`nrc)sre zGyjitTL)xB7z&O zl@`4_(&B#isG60XO~gW}2j?j~KZ^v~0V=79n1`h+bTO{ZI=%4aE zcM-Eg!~R_tOCK%|6g+=+-Wtghn_svr;gPFd5&cBQLMh#vq3`oLak>A2Z~E1>q=f{3 zTAb@!yzcwn%^P2M^p*!QR9t5i)a<+eVTHEkx!s#S?Y}cC+9qHvm(-K||Nm?nqTSnl zo|jrH1xc-ccyVj7*{*UiIWgJi@^eaFe^6|!*Z*OpyglOSbMfyNj=ZQ=GufqI^XKSw zt*Z=wk8J#x^)J)ag)8~c;_N589vJ@H|2AIsKVL&uL;QlY1*iNwet&d1Tq``|UdIaY zM~$890t=6BFWScZVBZ5t>!KI0#O1#}SMgDLwbmlDb=^^M(fj*;Uwppy`W?$MmCdq( zU(;-yE-tOGxzs+bD?jVJ-|T|T@1{u~Y5Q!+-uLJ6~2wHDq-J!8thA>(et^OZL7K_WrwauS|E(W@qQA`7`gsi|WJfZ2aFUmiX^qWA{8` z&-Xrg9?2zvW+6(8yps-{Z-=Z*=+kho#}Zgm>j}fp*E-Em)yKdDpSI) zi-pho^YH9p^T(w>RG(n)BDcco*$I|8L#z<*5vRt}_37{Lr(@&C8`Ew!-VO`i?u| zT7GjR#Y7~e?mQEW7c%(I|NndL+!wLM-*XqIzc}X8&+$1g^3&Io`B|^kd*w?X8|3!0 z`MO+LTIGGHxNFg2-rNn-;w^XIdAa%i{x8?q?_asb%_L^~Z}Cs#_kUjfn0aZ{E$7hX ze6qHow^#l6q0sv)Uei9k)Jo~q^eV?g#bN8BEXrSsX)_#{km);LTyRZ+$KTWQx7U8^ z_xIY{&HU$&UWHAfa{E0)wJ+y3D(5bGJa;bp)9H`oXMft<{w_$vM`_W!rGLa%!Dnb7 zjSZvt=^+oJZ2f-j_|^aZ)&BgwKW6{@ZfEiG+CfIPucfNi*EY( zy|^--QShh2(fyvLn9Yi*<{J|axB1)sTvC1LwR&C%ukh8wA@e@}c=g~={F@Lf8Kp&P z-|yG|Z(`-HTBhGBJa6~AH z%{S+~d-w9P=B*>&e63wCmVLY>$Gv{>1gne6ik7akZ#X)5^#!RbmM&6vD*C=J@RiPz zb7t>1`p>_u*_9g|@_ygua3PS7eTEw#Dnrm%8D>dnB3La%u*Ovs$N`1QpPw_2CH=(xE#IBD-% z)n(?}mp#!am6^0?ame(U85x|Kmv3!}IvM!NVoBV`mz$$`8uX4{+H!;2uJEl>(6|4S zPF~oRza;X_q>`0^UGG)~zS_)rJ~WMmA$i-@LrH#&3%t*~-FWUbS1^OKTV7or2$bd3 z&0PI?!kcL(46tcKTZYL?*JVH2Fn@#CvspsC3_O`)?_b? z>z*E5eG#s0f(?ecyB8fw^18t6adLfV*%T{o&y#_tOqe_jo=yvmxGemI;nHatuKpl( z#jj2N^Ocpw7mUCZrELQT;uD_mggI0 z?U85job+jONyEl9%lAEry!^!=B_`5i-5VDM&QRazP*sK(i|*uXpS7o+achdW`%J+L zs!z@JmoghfzO@yOJFci{ne@#>Ho+tR-|CA}+%GP3iOMeZa|$Y(!f+(b?5|+1{uRc| zX;!W7D-TboI=FnjlJUZ`{|j903uW7vywI@JGGf@f_3y27Zkf6Ma%R6@neJINN$J1> z>9rHZ)z3vT$gC`nty;eBk&fjCcK7dU`rZAVozdIWR^O`ZoFH?x)#1_OMBm?ibrym* zDo^&Bo5KP(lR)TAs{aJ{>8*>t(ASBEbuFf~M741A@d zqUwG!L37J8n`KN4&;NZlk7`ud>UA^lm5Rzz`&v`W?dSYWBejf@3b$lVoiu-kpHooL zlq0Xa63!ocl3HkJ_|ZG;Y3M24QZujl%olgfu6nWIX1H+N;d1u{yT7NsSB|{$Z-V@h zo5Fswx0oWX*S8i@+qZp6%LJUb5{=-e|P?&XO|p3f{;5sG^R6fqyFK zTma2D0j6cP+vTh-Ulxo?1%>mJe_!UteLbP_Ozh8ODlQ7rz%&LPLu_BW`Ep9O^o+k3_`7+&3p*7uN`MU2} z7ncNjboEU-x}{*H>Bl4Uzf3YYAm6axi)o7N(mv;)qA8HR&o--V>+61Ay?S)(Pd0_h z!|BtdmQI>yt@rh6i#T*|q3$l}SBn47USJMcEcfrF|KdZl=hd6NyEtEp;XrNYgl{so z_x^B~%IO&~Ki~cS`|U_ZF4e=q6-Q!Pm$@E(_ruf8=hD8%y!!5~jz0rmDS(nd?&c@Y z!*AS~CHOFSx%=KP&+do4+E5q0(D@)JB?KM}EE4qp;N8jjA$iLN!$Lc zI}lU0=Vf^Kr}aDuH3|K5E{k|y`}y-{>J-z`w^ng^Y;)F~bK>IY7MT!L5mUFIw`5a> zZHr}j+4IXzSECXRv#Wk;di=t1Cqrw~Lrv?Xt2fu*{e0-xlH8;7>i1ZcPFYsDb<*N1 zi5^~klYYPWY@BZQF|Y9QA`=Iu1pD<*G)jdoS+cr&nm$>X>OD<&_wmePt|kVC3I7B0 zAYM51GPJHvIGAhpya%c`&ofEb+ANqHxGVEh?SZ~c$+o32yZ%+`pDLJol$)u9v)a2~ z?7bH&i=yG~_FZKWk69S49)GJ{x|DspG^1n3<{Q?$E6+_*<1pB>@9l|?%D3ap9Rx1z zdbO=Zt!%Q~uW6bS*S$I7!RT=}v}Q|5eiL7lK>V{;4?o;$Tk@nMRF%o$(7R^#@9*yJ zE`NXT?(TB=HJh}pyymtnd7`oN%*Q5%*jL}0-TOuIEAKKmcAVGPeJ?O;UU+4%q9o&s zOJ}C7;>vcL#MofC*rzBWnej!>vqPJVx^HqYZ2Y7l$@oI()9F=fZe}uEkP%{V4oW-P z*>z^gYo3+96)&q^_na_4NA?2|&w@-qsUy{op=u1}r$SZVg|zMk{zHpCmLgzwY5x7+I8l>1lB z=iN3=YFQEXox!88Yl=jEO`xQ%dBwMginq=|IY-`1lUTTS*?}oiOV2q6efmFjug=<~ z`HFVB+gHASEus4OYx|X=`9?iw6|YX686EbzXRW*E`@6R;Sg9m?E609&xp}$t0`slA zKHhoI>v_Lw$`me8As@0tGTO@X)Q&$IXJ4%heD#{YzpUHr;#yGOS8soAcyZSv=2zXj z-l?c8&nVszY8%17Xfl(CSKD=N_nyU9mhmsw*tOv5wtSz1fxALH{_HPNRn#=~0__Wo zt;q;0oARp)be_j9rP|U>qhv3 z-M@Ez`!;u~s_WF{bH(=u?9=oUc+_Q8@${EPcM?mYuQ+dOL~LA0+~udKS7v*6Pm;&P@|o_;hdOUd=9 z>hsVph70S~`&wGh`rXwPAAIi*@6oV%o0shTI^##^@9bIU)U8%?PnvzZ$NOH@%;1W5 zv(|)uJiB$4(&O;A8%l*{Y_`!(+jNd+hWJspqdMA|_1}WHW$tcH^_`=z;%b(nk>2Vj zC9m~nS#?BS`y$7}f8XPFLy#9S>YQ|8JU%xaNwh zS&kj?Q?GvNTel~*JhjN@N_YP3#M<8%Ps~`W8vDz1y>=FlprGb5EpuDNF#ZEGX3Us0 z@4bNT=7tdOxhgk(*?wAx&z?7P;*FRd-}w{L%$A>i`pD>%%p{da;~s{Rjh-(hm$5K2 zsHB8#dFiaTlFK>DEv-${lbvB>Si4H;h3N;UWcv9VGC4SH^PVIlIn@@$Lu1`YO8-&m~7 zn(nYrV+EJiRTq_lB}+wLW~|in5teNJ9HAgwxI67~PRp_clg<+!r`42sE$3dbnl)iE zzp0epvPWyWgSR?*bSmCFaP3J(VW8|rg%`VAlzUvP!{_Lx@2cI={g`FBa)QK{dGlKW z-t7MWd;jkO|2Nh8`U*ULX~oVJ%nJjy`?D}8YH0@DnSWaF;=|c9db3Mi%gZgE1fO60 zVt!y)MCCKL?curc1v_n-U1MKPX>@n--;;BRpM$e>;)T`;6POlF)9YHK5fs9(<{e|H zxaPa&U43O{nd}cZ&gvU#vA$u55&r4jw`zKtL{!<->6d|BjTL;5#5UfB!uHmKX-6lSi+AZ~bM=XzdbTvhR2zqd?8aRO#SJ zWe!)arNq1N+MHi-?ZT6WXx8)zF$-nBWl%!ZLlrDPsOw+UJXj6g2fgAf%a!!S6$A0eWNceH# z)p9=0MTg5C{61b^ykV2biQn4{m=DCo$F6%D5Ul@T%E^W|Z)Z0o+>TqAyY1W8!Qx==l83&emtJR8^6yeb8b}O(;PRZ39Mbax0o~cckDaYk{Dz^n;UW>2QK z1#JKMj(ZE|f!rr|=XsyMH;MP@tF7S~8EfjpWVc@YHcc})Xy2VepRLz(GkP5gc1ZK@ zkkRe6E|c4J{TSCQ{>eutW|ZERy6$Z2t~UGZ6wQ^t&R67@Uj4`N;KL8TITCq4KOLUy zd%f5?WL?x3ZMVpiha!z7yw@C1_)C=~L(g{>Mv3R# z=^HYZo%Q@*`F-8?t2{FH|Btg2>_~h3EBbq|Z-`_1Pp^>p#ym&4XECnx*8tW^BR z%cqt`&$hjGB z^Xrjqi23_}JH z=(9uePN#IT8A|59dL!S-`?c)K+SUFH*WDkRdr!;M;bwT)_}#ktoamfCmEZN*MXmXE zH8`8zzEyp$x38~6Ms)T)?nggO-6pekl>FVMZYK3QvpmeSl<_+Ix%#T_?y1HN1)sCe z@qIN3Gc9L)7aM(6d+i*yO_JO~@_Q~9R+X$;;eSH>_c8^+i^}S%wy#ut4(gx$xOZo# z3KL6w%xyQn8;sQsvyUsPGc)|T)zdw5!tr^#wYd1=gQBbs^*ZjKQ2w;!2V1IZ;52FP zK%qLprg+`S9F=Rhuf{S9M}6&Nyzk_@+IGr}IICAqwUrm1M@Za#UCzz$px3)qI(XCJ zTi=pOK5kTDE;}GMzdq3GM{%(0rpbrj?TLDKV8fcZx9?;xI{rF{|M8{x-JksyEILsr zSWr>hcV{8jyBAx`6jNQNKHg*`%)erG^8QnKxs0J-Y4qGDOSTy#3Rsqo1=3rqA*{doV#SzU;~$sm-6}EL?LZX4Sj) zpL^w&Y;@{nI=0Dm>7|z;VQ!H-Z*E9=!t^XiQ_^78S?~M|yMm|eM-M0~DaAgpwNX;K z#L6ZoDEN|zxxb^M1e6P0b{zoACOi-noTz8;p`*h?T%y9oWeNA6#}{2(zI-^__nqG_ zbbsK-=MFEtj%`W(eUI6C-u{|zZ(6he$8A5kEB*eut{{fu$IA2P?6;Zc_Oe@_`~K?N zQFop;{+J%t(eYxTcW+rlRv$xy0@uU>m+G5Y;(|Qt3H&G1bEf;%q^C!-G-)Ww^c{F5 z*YUq9T+n{nM{QpvrK%r2Y7C3Y4Xm%2Pnlc5D6nVpsT(u*ZCnxVVDM-AmOtlL3*OlM zbm6{zimI=Kg)g2DcFhI*rN3?K(w*lR4s2K#)sXOe+pagi%ISw~wrv z|LyoO`~A~oWPkH)$g4c~XaDy-=`}iy9UXF3i!ZW76xq+(Qg10e&um?(FVCOk_`MO* zEDRC03lr|%O8R!-xKKyO3&TZvJ#pLq9Qypdx6$3jW!HgfaFpzopr05h4V*#H0l literal 0 HcmV?d00001 diff --git a/akka-docs/cluster/images/phi2.png b/akka-docs/cluster/images/phi2.png new file mode 100644 index 0000000000000000000000000000000000000000..af2e7569910466d3add52f02106253a86fe94a14 GIT binary patch literal 25535 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 literal 0 HcmV?d00001 diff --git a/akka-docs/cluster/images/phi3.png b/akka-docs/cluster/images/phi3.png new file mode 100644 index 0000000000000000000000000000000000000000..bda3c5d345df4c81785524bea99cab95dc62a430 GIT binary patch literal 26430 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 MUHx3vIVCg!02?1;EC2ui literal 0 HcmV?d00001 From 3f200c9920c7a79602bffee9b1dcdcea6bf0cdc7 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Fri, 21 Sep 2012 16:23:55 +0200 Subject: [PATCH 3/4] Improvements based on feedback, see #2251 --- akka-docs/cluster/cluster-usage.rst | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/akka-docs/cluster/cluster-usage.rst b/akka-docs/cluster/cluster-usage.rst index 2848291a32..b123e24db4 100644 --- a/akka-docs/cluster/cluster-usage.rst +++ b/akka-docs/cluster/cluster-usage.rst @@ -219,19 +219,30 @@ The nodes in the cluster monitor each other by sending heartbeats to detect if a unreachable from the rest of the cluster. The heartbeat arrival times is interpreted by an implementation of `The Phi Accrual Failure Detector `_. -It calculates a *phi* value representing the likelihood that the node is down. + +The suspicion level of failure is given by a value called *phi*. +The basic idea of the phi failure detector is to express the value of *phi* on a scale that +is dynamically adjusted to reflect current network conditions. + +The value of *phi* is calculated as:: + + phi = -log10(1 - F(timeSinceLastHeartbeat) + +where F is the cumulative distribution function of a normal distribution with mean +and standard deviation estimated from historical heartbeat inter-arrival times. In the :ref:`cluster_configuration` you can adjust the ``akka.cluster.failure-detector.threshold`` -to define when a *phi* value is to be considered as a failure. -A low ``threshold`` is prone to generate many wrong suspicions but ensures +to define when a *phi* value is considered to be a failure. + +A low ``threshold`` is prone to generate many false positives but ensures a quick detection in the event of a real crash. Conversely, a high ``threshold`` generates fewer mistakes but needs more time to detect actual crashes. The default ``threshold`` is 8 and is appropriate for most situations. However in cloud environments, such as Amazon EC2, the value could be increased to 12 in order to account for network issues that sometimes occur on such platforms. -The following chart illustrates how *phi* increase with increasing time since previous -heartbeat. +The following chart illustrates how *phi* increase with increasing time since the +previous heartbeat. .. image:: images/phi1.png @@ -239,7 +250,7 @@ Phi is calculated from the mean and standard deviation of historical inter arrival times. The previous chart is an example for standard deviation of 200 ms. If the heartbeats arrive with less deviation the curve becomes steeper, i.e. it's possible to determine failure more quickly. The curve looks like this for -standard deviation of 100 ms. +a standard deviation of 100 ms. .. image:: images/phi2.png From f6f81d1fd0b4cadfb0441fcfadb1873eacda2a64 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Fri, 21 Sep 2012 16:40:17 +0200 Subject: [PATCH 4/4] Move phi images to new dir, see #2251 --- akka-docs/{ => rst}/cluster/images/phi1.png | Bin akka-docs/{ => rst}/cluster/images/phi2.png | Bin akka-docs/{ => rst}/cluster/images/phi3.png | Bin 3 files changed, 0 insertions(+), 0 deletions(-) rename akka-docs/{ => rst}/cluster/images/phi1.png (100%) rename akka-docs/{ => rst}/cluster/images/phi2.png (100%) rename akka-docs/{ => rst}/cluster/images/phi3.png (100%) diff --git a/akka-docs/cluster/images/phi1.png b/akka-docs/rst/cluster/images/phi1.png similarity index 100% rename from akka-docs/cluster/images/phi1.png rename to akka-docs/rst/cluster/images/phi1.png diff --git a/akka-docs/cluster/images/phi2.png b/akka-docs/rst/cluster/images/phi2.png similarity index 100% rename from akka-docs/cluster/images/phi2.png rename to akka-docs/rst/cluster/images/phi2.png diff --git a/akka-docs/cluster/images/phi3.png b/akka-docs/rst/cluster/images/phi3.png similarity index 100% rename from akka-docs/cluster/images/phi3.png rename to akka-docs/rst/cluster/images/phi3.png