-
Notifications
You must be signed in to change notification settings - Fork 0
AOSA đ bookköd
Welcome to the aosabook wiki!
https://barionleg.github.io/aosabook/src/v1/web/fr/riak.html
Riak â ŃŃĐŸ ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœĐ°Ń ĐŸŃĐșĐ°Đ·ĐŸŃŃŃĐŸĐčŃĐžĐČĐ°Ń Đ±Đ°Đ·Đ° ĐŽĐ°ĐœĐœŃŃ Ń ĐŸŃĐșŃŃŃŃĐŒ ĐžŃŃ ĐŸĐŽĐœŃĐŒ ĐșĐŸĐŽĐŸĐŒ, ĐșĐŸŃĐŸŃĐ°Ń ĐŽĐ”ĐŒĐŸĐœŃŃŃĐžŃŃĐ”Ń, ĐșаĐș ŃĐŸĐ·ĐŽĐ°ĐČаŃŃ ĐČŃŃĐŸĐșĐŸĐœĐ°ĐłŃŃĐ¶Đ”ĐœĐœŃĐ” ŃĐžŃŃĐ”ĐŒŃ Ń ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžĐ”ĐŒ Erlang/OTP. ĐĐŸ ĐŒĐœĐŸĐłĐŸĐŒ Đ±Đ»Đ°ĐłĐŸĐŽĐ°ŃŃ ĐČĐŸĐ·ĐŒĐŸĐ¶ĐœĐŸŃŃŃĐŒ Erlang ĐŽĐ»Ń ĐŒĐ°ŃŃĐŸĐČĐŸ ĐŒĐ°ŃŃŃабОŃŃĐ”ĐŒŃŃ ŃĐžŃŃĐ”ĐŒ, Riak ĐżŃĐ”ĐŽĐ»Đ°ĐłĐ°Đ”Ń ŃŃĐœĐșŃОО, ĐœĐ” Ń Đ°ŃаĐșŃĐ”ŃĐœŃĐ” ĐŽĐ»Ń Đ±Đ°Đ· ĐŽĐ°ĐœĐœŃŃ , ŃаĐșОД ĐșаĐș ĐČŃŃĐŸĐșĐ°Ń ĐŽĐŸŃŃŃĐżĐœĐŸŃŃŃ Ń Đ»ĐžĐœĐ”ĐčĐœĐŸĐč ĐŒĐ°ŃŃŃабОŃŃĐ”ĐŒĐŸŃŃŃŃ, ĐșаĐș Ń ŃĐŸŃĐșĐž Đ·ŃĐ”ĐœĐžŃ Đ”ĐŒĐșĐŸŃŃĐž, ŃаĐș Đž ĐżŃĐŸĐżŃŃĐșĐœĐŸĐč ŃĐżĐŸŃĐŸĐ±ĐœĐŸŃŃĐž.
ĐаŃа Erlang/OTP ĐŸĐ±Đ”ŃпДŃĐžĐČĐ°Đ”Ń ĐžĐŽĐ”Đ°Đ»ŃĐœŃŃ ĐżĐ»Đ°ŃŃĐŸŃĐŒŃ ĐŽĐ»Ń ŃазŃĐ°Đ±ĐŸŃĐșĐž ŃаĐșĐžŃ ŃĐžŃŃĐ”ĐŒ, ĐșаĐș Riak, ĐżĐŸŃĐșĐŸĐ»ŃĐșŃ ĐŸĐœĐ° ĐžĐ·ĐœĐ°ŃалŃĐœĐŸ ĐŸĐ±Đ”ŃпДŃĐžĐČĐ°Đ”Ń ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃŃ ŃĐČŃĐ·Ń ĐŒĐ”Đ¶ĐŽŃ ŃĐ·Đ»Đ°ĐŒĐž, ĐŸŃĐ”ŃДЎО ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč, ĐŽĐ”ŃĐ”ĐșŃĐŸŃŃ ĐŸŃĐžĐ±ĐŸĐș Đž абŃŃŃаĐșŃĐžŃ ŃĐžŃŃĐ”ĐŒ ĐșĐ»ĐžĐ”ĐœŃ-ŃĐ”ŃĐČĐ”Ń. ĐŃĐŸĐŒĐ” ŃĐŸĐłĐŸ, ĐœĐ°ĐžĐ±ĐŸĐ»Đ”Đ” ŃаŃŃĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ĐŒŃĐ” ŃĐ°Đ±Đ»ĐŸĐœŃ ĐČ Erlang ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœŃ ĐČ Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”ĐșĐ°Ń , ĐŸĐ±ŃŃĐœĐŸ ĐœĐ°Đ·ŃĐČĐ°Đ”ĐŒŃŃ Â«OTP Behaviors». ĐĐœĐž ŃĐŸĐŽĐ”ŃĐ¶Đ°Ń ĐŸĐ±ŃĐžĐč ĐșĐŸĐŽ ĐŽĐ»Ń ŃĐżŃаĐČĐ»Đ”ĐœĐžŃ ĐżĐ°ŃĐ°Đ»Đ»Đ”Đ»ĐžĐ·ĐŒĐŸĐŒ Đž ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșĐž ĐŸŃĐžĐ±ĐŸĐș, ŃŃĐŸ ŃĐżŃĐŸŃĐ°Đ”Ń ĐżĐ°ŃаллДлŃĐœĐŸĐ” ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃĐŸĐČĐ°ĐœĐžĐ” Đž ĐżŃĐ”ĐŽĐŸŃĐČŃаŃĐ°Đ”Ń ĐżĐŸĐżĐ°ĐŽĐ°ĐœĐžĐ” ŃазŃĐ°Đ±ĐŸŃŃĐžĐșа ĐČ Đ»ĐŸĐČŃŃĐșĐž, ĐżŃĐžŃŃŃОД ŃŃĐŸĐŒŃ ŃĐžĐżŃ ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃĐŸĐČĐ°ĐœĐžŃ. «ĐĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ» ĐŸŃŃлДжОĐČаŃŃŃŃ ŃŃпДŃĐČĐžĐ·ĐŸŃĐ°ĐŒĐž, ĐșĐŸŃĐŸŃŃĐ” ŃĐ°ĐŒĐž ĐżĐŸ ŃДбД ŃĐČĐ»ŃŃŃŃŃ Â«ĐĐŸĐČĐ”ĐŽĐ”ĐœĐžŃĐŒĐžÂ», ŃĐłŃŃппОŃĐŸĐČĐ°ĐœĐœŃĐŒĐž ĐČ ĐŽĐ”ŃĐ”ĐČŃŃŃ ĐœĐ°ĐŽĐ·ĐŸŃа. ĐĐ”ŃĐ”ĐČĐŸ ĐșĐŸĐœŃŃĐŸĐ»Ń ŃпаĐșĐŸĐČŃĐČаДŃŃŃ ĐČ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ” Đž заŃĐ”ĐŒ ŃĐČĐ»ŃĐ”ŃŃŃ Đ±Đ»ĐŸĐșĐŸĐŒ ĐżŃĐŸĐłŃĐ°ĐŒĐŒŃ Erlang.
ĐĐŸĐ»ĐœĐ°Ń ŃĐžŃŃĐ”ĐŒĐ° Erlang, ŃаĐșĐ°Ń ĐșаĐș Riak, ĐżŃДЎŃŃаĐČĐ»ŃĐ”Ń ŃĐŸĐ±ĐŸĐč ĐœĐ°Đ±ĐŸŃ ŃĐ»Đ°Đ±ĐŸŃĐČŃĐ·Đ°ĐœĐœŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč, ĐșĐŸŃĐŸŃŃĐ” ĐČĐ·Đ°ĐžĐŒĐŸĐŽĐ”ĐčŃŃĐČŃŃŃ ĐŽŃŃĐł Ń ĐŽŃŃĐłĐŸĐŒ. ĐĐ”ĐșĐŸŃĐŸŃŃĐ” ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ ĐœĐ°ĐżĐžŃĐ°ĐœŃ ŃазŃĐ°Đ±ĐŸŃŃĐžĐșĐŸĐŒ, ĐœĐ”ĐșĐŸŃĐŸŃŃĐ” ĐČŃ ĐŸĐŽŃŃ ĐČ ŃŃĐ°ĐœĐŽĐ°ŃŃĐœŃŃ ĐșĐŸĐŒĐżĐ»Đ”ĐșŃаŃĐžŃ Erlang/OTP, а ĐŽŃŃгОД ĐŒĐŸĐłŃŃ Đ±ŃŃŃ ĐșĐŸĐŒĐżĐŸĐœĐ”ĐœŃĐ°ĐŒĐž Ń ĐŸŃĐșŃŃŃŃĐŒ ĐžŃŃ ĐŸĐŽĐœŃĐŒ ĐșĐŸĐŽĐŸĐŒ. ĐĐœĐž загŃŃжаŃŃŃŃ ĐżĐŸŃĐ»Đ”ĐŽĐŸĐČаŃДлŃĐœĐŸ Đž запŃŃĐșаŃŃŃŃ ŃŃĐ”ĐœĐ°ŃĐžĐ”ĐŒ запŃŃĐșа, ŃĐŸĐ·ĐŽĐ°ĐœĐœŃĐŒ ĐœĐ° ĐŸŃĐœĐŸĐČĐ” ŃпОŃĐșа ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč Đž ĐžŃ ĐČĐ”ŃŃĐžĐč.
ЧŃĐŸÂ ŃазлОŃаДŃŃŃÂ ĐŒĐ”Đ¶ĐŽŃ ŃĐžŃŃĐ”ĐŒĐ°ĐŒĐž, ŃаĐș ŃŃĐŸ запŃŃĐșĐ°Đ”ĐŒŃĐ” ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ, ĐžĐœŃДгŃĐžŃĐŸĐČĐ°ĐœĐœŃĐ” ĐČ ĐČŃĐżŃŃĐș. Đ ŃŃĐ°ĐœĐŽĐ°ŃŃĐœĐŸĐŒ ĐŽĐžŃŃŃОбŃŃĐžĐČĐ” Erlang ŃаĐčĐ»Ń Đ·Đ°ĐżŃŃĐșа запŃŃĐșаŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ Kernel О StdLib (ŃŃĐ°ĐœĐŽĐ°ŃŃĐœĐ°Ń Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”Đșа). ĐĐŸŃлД ŃŃŃĐ°ĐœĐŸĐČĐșО ŃаĐșжД запŃŃĐșаДŃŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ”Â SASL (ĐĐžĐ±Đ»ĐžĐŸŃĐ”Đșа ĐżĐŸĐŽĐŽĐ”ŃжĐșĐž ŃĐžŃŃĐ”ĐŒĐœĐŸĐč аŃŃ
ĐžŃĐ”ĐșŃŃŃŃ). SASL ŃĐŸĐŽĐ”ŃĐ¶ĐžŃ ĐžĐœŃŃŃŃĐŒĐ”ĐœŃŃ ĐČŃĐżŃŃĐșа Đž ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐžŃ, а ŃаĐșжД ŃŃĐœĐșŃОО ĐČĐ”ĐŽĐ”ĐœĐžŃ Đ¶ŃŃĐœĐ°Đ»ĐŸĐČ. Riak ĐČĐ”ĐŽĐ”Ń ŃĐ”Đ±Ń ŃлДЎŃŃŃĐžĐŒ ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ, запŃŃĐșĐ°Ń ŃпДŃĐžŃĐžŃĐœŃĐ” ĐŽĐ»Ń Riak ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ Đž ĐžŃ
заĐČĐžŃĐžĐŒĐŸŃŃĐž, ĐČ ŃĐŸĐŒ ŃĐžŃлД Kernel , StdLib О SASL . ĐĐŸĐ»ĐœĐ°Ń, ĐłĐŸŃĐŸĐČĐ°Ń Đș ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžŃ ŃĐ±ĐŸŃĐșа Riak ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń ŃŃĐž ŃŃĐ°ĐœĐŽĐ°ŃŃĐœŃĐ” ŃĐ»Đ”ĐŒĐ”ĐœŃŃ ĐŽĐžŃŃŃОбŃŃĐžĐČа Erlang/OTP Đž запŃŃĐșĐ°Đ”Ń ĐžŃ
ĐŸĐŽĐœĐŸĐČŃĐ”ĐŒĐ”ĐœĐœĐŸ ĐżŃО riak startĐČŃĐ·ĐŸĐČĐ” ĐșĐŸĐŒĐ°ĐœĐŽŃ ĐČ ĐșĐŸĐŒĐ°ĐœĐŽĐœĐŸĐč ŃŃŃĐŸĐșĐ”. Riak ŃĐŸŃŃĐŸĐžŃ ĐžĐ· ĐœĐ”ŃĐșĐŸĐ»ŃĐșĐžŃ
ŃĐ»ĐŸĐ¶ĐœŃŃ
ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč, Đž ŃŃŃ ĐłĐ»Đ°ĐČŃ ĐœĐ” ŃлДЎŃĐ”Ń ŃаŃŃĐŒĐ°ŃŃĐžĐČаŃŃ ĐșаĐș ĐżĐŸĐ»ĐœĐŸĐ” ŃŃĐșĐŸĐČĐŸĐŽŃŃĐČĐŸ. ĐĐŸ ĐČ ĐșаŃĐ”ŃŃĐČĐ” ĐČĐČĐ”ĐŽĐ”ĐœĐžŃ ĐČ OTP, гЎД ĐžŃĐżĐŸĐ»ŃĐ·ŃŃŃŃŃ ĐżŃĐžĐŒĐ”ŃŃ ĐžĐ· ĐžŃŃ
ĐŸĐŽĐœĐŸĐłĐŸ ĐșĐŸĐŽĐ° Riak. Đ ĐžŃŃĐœĐșĐž Đž ĐżŃĐžĐŒĐ”ŃŃ ŃĐżŃĐŸŃĐ”ĐœŃ ĐŽĐ»Ń ŃДлДĐč ĐŽĐ”ĐŒĐŸĐœŃŃŃаŃОО.
Erlang â ŃŃĐŸ ŃŃĐœĐșŃĐžĐŸĐœĐ°Đ»ŃĐœŃĐč Đž паŃаллДлŃĐœŃĐč ŃĐ·ŃĐș ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃĐŸĐČĐ°ĐœĐžŃ, ĐșĐŸŃĐŸŃŃĐč ĐșĐŸĐŒĐżĐžĐ»ĐžŃŃĐ”ŃŃŃ ĐČ Đ±Đ°ĐčŃĐŸĐČŃĐč ĐșĐŸĐŽ Đž ĐČŃĐżĐŸĐ»ĐœŃĐ”ŃŃŃ ĐœĐ° ĐČĐžŃŃŃалŃĐœĐŸĐč ĐŒĐ°ŃĐžĐœĐ”. ĐŃĐŸĐłŃĐ°ĐŒĐŒŃ ŃĐŸŃŃĐŸŃŃ ĐžĐ· ŃŃĐœĐșŃĐžĐč, ĐșĐŸŃĐŸŃŃĐ” ĐČŃĐ·ŃĐČаŃŃ ĐŽŃŃĐł ĐŽŃŃга, ŃŃĐŸ ŃаŃŃĐŸ ĐżŃĐžĐČĐŸĐŽĐžŃ Đș ĐżĐŸĐ±ĐŸŃĐœŃĐŒ ŃŃŃĐ”ĐșŃĐ°ĐŒ, ŃаĐșĐžĐŒ ĐșаĐș пДŃДЎаŃа ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč ĐŒĐ”Đ¶ĐŽŃ ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒĐž, ĐČĐČĐŸĐŽ/ĐČŃĐČĐŸĐŽ ОлО ĐŸĐżĐ”ŃаŃОО Ń Đ±Đ°Đ·ĐŸĐč ĐŽĐ°ĐœĐœŃŃ . ĐĐ”ŃĐ”ĐŒĐ”ĐœĐœŃĐŒ ĐČ Erlang ĐŒĐŸĐ¶ĐœĐŸ ĐżŃĐžŃĐČаОĐČаŃŃ ŃĐŸĐ»ŃĐșĐŸ ĐŸĐŽĐžĐœ Ńаз, Ń.Đ”. ĐșаĐș ŃĐŸĐ»ŃĐșĐŸ ĐžŃ Đ·ĐœĐ°ŃĐ”ĐœĐžĐ” бŃĐŽĐ”Ń ĐżŃĐžŃĐČĐŸĐ”ĐœĐŸ, ĐžŃ Đ±ĐŸĐ»ŃŃĐ” ĐœĐ”Đ»ŃĐ·Ń Đ±ŃĐŽĐ”Ń ĐžĐ·ĐŒĐ”ĐœĐžŃŃ. Đ ŃĐ·ŃĐșĐ” ŃĐžŃĐŸĐșĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ŃŃŃ ŃĐŸĐżĐŸŃŃаĐČĐ»Đ”ĐœĐžĐ” Ń ĐŸĐ±ŃазŃĐŸĐŒ, ĐșаĐș ĐČ ŃлДЎŃŃŃĐ”ĐŒ ĐżŃĐžĐŒĐ”ŃĐ” ĐČŃŃĐžŃĐ»Đ”ĐœĐžŃ ŃаĐșŃĐŸŃОала:
-ĐŒĐŸĐŽŃĐ»Ń(ŃаĐșŃĐŸŃОал).
-ŃĐșŃĐżĐŸŃŃ([ŃаĐș/1]).
ŃаĐșŃ(0) -> 1;
fac(N), ĐșĐŸĐłĐŽĐ° N>0 ->
Prev = fac(N-1),
N*Prev.
Đ ŃŃĐŸĐŒ ĐżŃĐžĐŒĐ”ŃĐ” пДŃĐČĐŸĐ” ĐżŃĐ”ĐŽĐ»ĐŸĐ¶Đ”ĐœĐžĐ” ĐŸĐżŃДЎДлŃĐ”Ń ŃаĐșŃĐŸŃОал 0, ĐČŃĐŸŃĐŸĐ” â ŃаĐșŃĐŸŃОал ĐżĐŸĐ»ĐŸĐ¶ĐžŃДлŃĐœŃŃ ŃĐžŃДл. ĐąĐ”Đ»ĐŸ ĐșĐ°Đ¶ĐŽĐŸĐłĐŸ ĐżŃĐ”ĐŽĐ»ĐŸĐ¶Đ”ĐœĐžŃ ĐżŃДЎŃŃаĐČĐ»ŃĐ”Ń ŃĐŸĐ±ĐŸĐč ĐżĐŸŃĐ»Đ”ĐŽĐŸĐČаŃДлŃĐœĐŸŃŃŃ ĐČŃŃĐ°Đ¶Đ”ĐœĐžĐč, а ĐżĐŸŃĐ»Đ”ĐŽĐœĐ”Đ” ĐČŃŃĐ°Đ¶Đ”ĐœĐžĐ” ŃĐČĐ»ŃĐ”ŃŃŃ ŃДзŃĐ»ŃŃаŃĐŸĐŒ ŃŃĐŸĐłĐŸ ĐżŃĐ”ĐŽĐ»ĐŸĐ¶Đ”ĐœĐžŃ. ĐŃĐ·ĐŸĐČ ŃŃĐŸĐč ŃŃĐœĐșŃОО Ń ĐŸŃŃĐžŃаŃДлŃĐœŃĐŒ ŃĐžŃĐ»ĐŸĐŒ ĐżŃĐžĐČĐ”ĐŽĐ”Ń Đș ĐŸŃОбĐșĐ” ĐČĐŸ ĐČŃĐ”ĐŒŃ ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐžŃ, ĐżĐŸŃĐșĐŸĐ»ŃĐșŃ ĐœĐž ĐŸĐŽĐœĐŸ ĐżŃĐ”ĐŽĐ»ĐŸĐ¶Đ”ĐœĐžĐ” ĐœĐ” ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃĐ”Ń. ĐĐ”ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșа ŃŃĐŸĐłĐŸ ŃĐ»ŃŃĐ°Ń ŃĐČĐ»ŃĐ”ŃŃŃ ĐżŃĐžĐŒĐ”ŃĐŸĐŒ Â«ĐœĐ”Đ·Đ°ŃĐžŃĐœĐŸĐłĐŸÂ» ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃĐŸĐČĐ°ĐœĐžŃ, ĐżŃаĐșŃĐžĐșа, ĐżĐŸĐŸŃŃŃĐ”ĐŒĐ°Ń ĐČ Erlang.
Đ ĐŒĐŸĐŽŃлД ŃŃĐœĐșŃОО ĐČŃĐ·ŃĐČаŃŃŃŃ ĐŸĐ±ŃŃĐœŃĐŒ ŃĐżĐŸŃĐŸĐ±ĐŸĐŒ; Đ ĐżŃĐŸŃĐžĐČĐœĐŸĐŒ ŃĐ»ŃŃаД ĐžĐŒŃ ĐŒĐŸĐŽŃĐ»Ń ĐŽĐŸĐ»Đ¶ĐœĐŸ ĐžĐŒĐ”ŃŃ ĐżŃĐ”ŃĐžĐșŃ, ĐœĐ°ĐżŃĐžĐŒĐ”Ń factorial:fac(3). ĐĐŸĐ¶ĐœĐŸ ĐŸĐżŃДЎДлОŃŃ ŃŃĐœĐșŃОО Ń ŃĐ”ĐŒ жД ĐžĐŒĐ”ĐœĐ”ĐŒ, ĐœĐŸ Ń ŃĐ°Đ·ĐœŃĐŒ ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČĐŸĐŒ аŃĐłŃĐŒĐ”ĐœŃĐŸĐČ, ĐœĐ°Đ·ŃĐČĐ°Đ”ĐŒŃĐŒÂ arity . Đ ĐŽĐžŃĐ”ĐșŃĐžĐČĐ” ŃĐșŃĐżĐŸŃŃа ĐŒĐŸĐŽŃлѠfactorialŃŃĐœĐșŃОѠfacаŃĐœĐŸŃŃĐž 1 ĐŸĐ±ŃŃĐČĐ»Đ”ĐœĐ° ââĐșаĐș fac/1.
Erlang ĐżĐŸĐŽĐŽĐ”ŃжОĐČĐ°Đ”Ń ĐșĐŸŃŃДжО (ŃаĐșжД ĐœĐ°Đ·ŃĐČĐ°Đ”ĐŒŃĐ” «ŃĐžĐżĐ°ĐŒĐž ĐżŃĐŸĐŽŃĐșŃĐŸĐČ») Đž ŃпОŃĐșĐž. ĐĐŸŃŃДжО ŃаĐșжД заĐșĐ»ŃŃаŃŃŃŃ ĐČ ŃОгŃŃĐœŃĐ” ŃĐșĐŸĐ±ĐșО {ok,37}. ĐĐŸŃŃŃĐż Đș ŃĐ»Đ”ĐŒĐ”ĐœŃĐ°ĐŒ ĐșĐŸŃŃДжДĐč ĐŸŃŃŃĐ”ŃŃĐČĐ»ŃĐ”ŃŃŃ ĐżĐŸ ĐžŃ
ĐżĐŸĐ·ĐžŃОО. ĐапОŃĐž â ŃŃĐŸ Đ”ŃĐ” ĐŸĐŽĐžĐœ ŃОп ĐŽĐ°ĐœĐœŃŃ
; ĐŸĐœĐž ĐżĐŸĐ·ĐČĐŸĐ»ŃŃŃ ĐœĐ°ĐŒ Ń
ŃĐ°ĐœĐžŃŃ ŃĐžĐșŃĐžŃĐŸĐČĐ°ĐœĐœĐŸĐ” ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČĐŸ ŃĐ»Đ”ĐŒĐ”ĐœŃĐŸĐČ, Đș ĐșĐŸŃĐŸŃŃĐŒ ĐŸŃŃŃĐ”ŃŃĐČĐ»ŃĐ”ŃŃŃ ĐŽĐŸŃŃŃĐż Đž ĐŒĐ°ĐœĐžĐżŃлОŃĐŸĐČĐ°ĐœĐžĐ” ĐžĐŒĐž ĐżĐŸ ĐžĐŒĐ”ĐœĐž. ĐŃ ĐŸĐżŃДЎДлŃĐ”ĐŒ запОŃŃ ŃлДЎŃŃŃĐžĐŒ ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ: -record(state, {id, msg_list=[]}). ŃŃĐŸĐ±Ń ŃĐŸĐ·ĐŽĐ°ŃŃ Đ”Đ” ŃĐșĐ·Đ”ĐŒĐżĐ»ŃŃ, ĐŒŃ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ĐŒ ĐČŃŃĐ°Đ¶Đ”ĐœĐžĐ”Â Var = #state{id=1}Đž ОзĐČлДĐșĐ°Đ”ĐŒ Đ”ĐłĐŸ ŃĐŸĐŽĐ”ŃĐ¶ĐžĐŒĐŸĐ”, ĐžŃĐżĐŸĐ»ŃĐ·ŃŃ: Var#state.id. ĐĐ»Ń ĐżĐ”ŃĐ”ĐŒĐ”ĐœĐœĐŸĐłĐŸ ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČа ŃĐ»Đ”ĐŒĐ”ĐœŃĐŸĐČ ĐŒŃ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ĐŒ ŃпОŃĐșĐž, ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃĐ” ĐČ ĐșĐČаЎŃаŃĐœŃŃ
ŃĐșĐŸĐ±ĐșаŃ
: {[}23,34{]}. ĐĐ±ĐŸĐ·ĐœĐ°ŃĐ”ĐœĐžĐ”Â {[}X|Xs{]}ŃĐșазŃĐČĐ°Đ”Ń ĐœĐ° ĐœĐ”ĐżŃŃŃĐŸĐč ŃпОŃĐŸĐș Ń ĐœĐ°ŃĐ°Đ»ĐŸĐŒ (Â«ĐłĐŸĐ»ĐŸĐČĐŸĐč») XĐž ĐșĐŸĐœŃĐŸĐŒ («Ń
ĐČĐŸŃŃĐŸĐŒÂ») Ń
ĐČĐŸŃŃĐŸĐŒÂ Xs. ĐĐŽĐ”ĐœŃĐžŃĐžĐșаŃĐŸŃŃ, ĐœĐ°ŃĐžĐœĐ°ŃŃОДŃŃ ŃĐŸ ŃŃŃĐŸŃĐœĐŸĐč бŃĐșĐČŃ, ĐŸĐ±ĐŸĐ·ĐœĐ°ŃаŃŃ Đ°ŃĐŸĐŒŃ , ĐșĐŸŃĐŸŃŃĐ” ĐœĐ” ĐžĐŒĐ”ŃŃ Đ·ĐœĐ°ŃĐ”ĐœĐžŃ; ĐĐ»Đ”ĐŒĐ”ĐœŃ okĐČ ĐșĐŸŃŃДжД {ok,37}ŃĐČĐ»ŃĐ”ŃŃŃ ĐżŃĐžĐŒĐ”ŃĐŸĐŒ аŃĐŸĐŒĐ°. ĐŃĐŸĐŒŃ ŃаŃŃĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃŃŃŃŃ ĐŽĐ»Ń ĐŽĐžŃŃĐ”ŃĐ”ĐœŃОаŃОО ŃДзŃĐ»ŃŃаŃĐŸĐČ ŃŃĐœĐșŃОО: ĐșаĐș Đž ŃДзŃĐ»ŃŃаŃŃ ok, ĐŒĐŸĐłŃŃ Đ±ŃŃŃ ŃДзŃĐ»ŃŃаŃŃ ŃĐŸŃĐŒŃ {error, "Error String"}.
ĐŃĐŸŃĐ”ŃŃŃ ĐČ ŃĐžŃŃĐ”ĐŒĐ°Ń Erlang ĐČŃĐżĐŸĐ»ĐœŃŃŃŃŃ ĐŸĐŽĐœĐŸĐČŃĐ”ĐŒĐ”ĐœĐœĐŸ ĐČ ĐČŃĐŽĐ”Đ»Đ”ĐœĐœĐŸĐŒ ĐżŃĐŸŃŃŃĐ°ĐœŃŃĐČĐ” ĐżĐ°ĐŒŃŃĐž Đž ĐČĐ·Đ°ĐžĐŒĐŸĐŽĐ”ĐčŃŃĐČŃŃŃ ĐŽŃŃĐł Ń ĐŽŃŃĐłĐŸĐŒ ĐżĐŸŃŃДЎŃŃĐČĐŸĐŒ пДŃДЎаŃĐž ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč. ĐŃĐŸŃĐ”ŃŃŃ ĐŒĐŸĐ¶ĐœĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ĐŽĐ»Ń ŃĐ°ĐŒŃŃ ŃĐ°Đ·ĐœŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč: ĐŸŃ ŃĐ»ŃĐ·ĐŸĐČ Đ±Đ°Đ· ĐŽĐ°ĐœĐœŃŃ ĐŽĐŸ ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșĐŸĐČ ĐżŃĐŸŃĐŸĐșĐŸĐ»ĐŸĐČ Đž ŃĐżŃаĐČĐ»Đ”ĐœĐžŃ ŃŃаŃŃĐžŃĐŸĐČĐșĐ°ĐŒĐž жŃŃĐœĐ°Đ»ĐŸĐČ ĐŽŃŃĐłĐžŃ ĐżŃĐŸŃĐ”ŃŃĐŸĐČ. Đ„ĐŸŃŃ ŃŃĐž ĐżŃĐŸŃĐ”ŃŃŃ ĐŸĐ±ŃабаŃŃĐČаŃŃ ŃĐ°Đ·ĐœŃĐ” ŃĐžĐżŃ Đ·Đ°ĐżŃĐŸŃĐŸĐČ, ĐČ ŃĐżĐŸŃĐŸĐ±Đ°Ń ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșĐž ŃŃĐžŃ Đ·Đ°ĐżŃĐŸŃĐŸĐČ Đ”ŃŃŃ ŃŃ ĐŸĐŽŃŃĐČа.
ĐĐŸŃĐșĐŸĐ»ŃĐșŃ ĐżŃĐŸŃĐ”ŃŃŃ ŃŃŃĐ”ŃŃĐČŃŃŃ ŃĐŸĐ»ŃĐșĐŸ ĐČĐœŃŃŃĐž ĐČĐžŃŃŃалŃĐœĐŸĐč ĐŒĐ°ŃĐžĐœŃ (ĐĐ), ĐŸĐŽĐœĐ° ĐČĐžŃŃŃалŃĐœĐ°Ń ĐŒĐ°ŃĐžĐœĐ° ĐŒĐŸĐ¶Đ”Ń ĐŸĐŽĐœĐŸĐČŃĐ”ĐŒĐ”ĐœĐœĐŸ запŃŃĐșаŃŃ ĐŒĐžĐ»Đ»ĐžĐŸĐœŃ ĐżŃĐŸŃĐ”ŃŃĐŸĐČ, Đž ŃŃŃ ĐČĐŸĐ·ĐŒĐŸĐ¶ĐœĐŸŃŃŃ ŃĐžŃĐŸĐșĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń Riak. ĐапŃĐžĐŒĐ”Ń, ĐșажЎŃĐč запŃĐŸŃ Đș базД ĐŽĐ°ĐœĐœŃŃ â ŃŃĐ”ĐœĐžĐ”, запОŃŃ Đž ŃĐŽĐ°Đ»Đ”ĐœĐžĐ” â ĐŒĐŸĐŽĐ”Đ»ĐžŃŃĐ”ŃŃŃ ĐșаĐș ĐŸŃЎДлŃĐœŃĐč ĐżŃĐŸŃĐ”ŃŃ, Đž ŃаĐșĐŸĐč ĐżĐŸĐŽŃ ĐŸĐŽ бŃĐ» Đ±Ń ĐœĐ”ĐČĐŸĐ·ĐŒĐŸĐ¶Đ”Đœ ĐČ Đ±ĐŸĐ»ŃŃĐžĐœŃŃĐČĐ” ŃДалОзаŃĐžĐč ĐżĐŸŃĐŸĐșĐŸĐČ ĐœĐ° ŃŃĐŸĐČĐœĐ” ĐĐĄ.
ĐŃĐŸŃĐ”ŃŃŃ ĐžĐŽĐ”ĐœŃĐžŃĐžŃĐžŃŃŃŃŃŃ ĐžĐŽĐ”ĐœŃĐžŃĐžĐșаŃĐŸŃĐ°ĐŒĐž ĐżŃĐŸŃĐ”ŃŃĐŸĐČ, ĐœĐ°Đ·ŃĐČĐ°Đ”ĐŒŃĐŒĐž PID, ĐœĐŸ ĐžŃ
ŃаĐșжД ĐŒĐŸĐ¶ĐœĐŸ заŃДгОŃŃŃĐžŃĐŸĐČаŃŃ ĐżĐŸĐŽ ĐżŃĐ”ĐČĐŽĐŸĐœĐžĐŒĐŸĐŒ; ĐżŃĐ”ĐČĐŽĐŸĐœĐžĐŒŃ ŃлДЎŃĐ”Ń ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ŃĐŸĐ»ŃĐșĐŸ ĐŽĐ»Ń ĐŽĐŸĐ»ĐłĐŸĐ¶ĐžĐČŃŃĐžŃ
«ŃŃаŃĐžŃĐ”ŃĐșĐžŃ
» ĐżŃĐŸŃĐ”ŃŃĐŸĐČ. РДгОŃŃŃаŃĐžŃ ĐżŃĐŸŃĐ”ŃŃа ĐżĐŸĐŽ ŃĐŸĐ±ŃŃĐČĐ”ĐœĐœŃĐŒ ĐżŃĐ”ĐČĐŽĐŸĐœĐžĐŒĐŸĐŒ ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ĐŽŃŃĐłĐžĐŒ ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒ пДŃДЎаĐČаŃŃ Đ”ĐŒŃ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ, ЎажД ĐœĐ” Đ·ĐœĐ°Ń Đ”ĐłĐŸ PID. ĐŃĐŸŃĐ”ŃŃŃ ŃĐŸĐ·ĐŽĐ°ŃŃŃŃ Ń ĐżĐŸĐŒĐŸŃŃŃ ĐČŃŃŃĐŸĐ”ĐœĐœĐŸĐč ŃŃĐœĐșŃОО (BIF) spawn(Module, Function, Arguments). BIF â ŃŃĐŸ ŃŃĐœĐșŃОО, ĐžĐœŃДгŃĐžŃĐŸĐČĐ°ĐœĐœŃĐ” ĐČ ĐČĐžŃŃŃалŃĐœŃŃ ĐŒĐ°ŃĐžĐœŃ ĐŽĐ»Ń ĐŽĐŸŃŃĐžĐ¶Đ”ĐœĐžŃ ŃĐŸĐłĐŸ, ŃŃĐŸ бŃĐ»ĐŸ Đ±Ń ĐœĐ”ĐČĐŸĐ·ĐŒĐŸĐ¶ĐœĐŸ ОлО ŃлОŃĐșĐŸĐŒ ĐŒĐ”ĐŽĐ»Đ”ĐœĐœĐŸ ĐČŃĐżĐŸĐ»ĐœĐžŃŃ ĐČ Â«ŃĐžŃŃĐŸĐŒ ĐŃĐ»Đ°ĐœĐłĐ”Â». BIF spawn/3ĐżŃĐžĐœĐžĐŒĐ°Đ”Ń ĐČ ĐșаŃĐ”ŃŃĐČĐ” паŃĐ°ĐŒĐ”ŃŃĐŸĐČ a Module, a FunctionĐž ŃпОŃĐŸĐș Arguments. ĐŃĐŸŃ ĐČŃĐ·ĐŸĐČ ĐČĐŸĐ·ĐČŃаŃĐ°Đ”Ń PID ŃĐŸĐ»ŃĐșĐŸ ŃŃĐŸ ŃĐŸĐ·ĐŽĐ°ĐœĐœĐŸĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа (Â«ĐżĐŸŃĐŸĐ¶ĐŽĐ”ĐœĐœĐŸĐłĐŸÂ») Đž ĐČ ĐșаŃĐ”ŃŃĐČĐ” ĐżĐŸĐ±ĐŸŃĐœĐŸĐłĐŸ ŃŃŃĐ”ĐșŃа ŃĐŸĐ·ĐŽĐ°Đ”Ń ĐœĐŸĐČŃĐč ĐżŃĐŸŃĐ”ŃŃ, ĐșĐŸŃĐŸŃŃĐč ĐœĐ°ŃĐžĐœĐ°Đ”ŃŃŃ Ń ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐžŃ ŃŃĐŸĐč ŃŃĐœĐșŃОО ĐŒĐŸĐŽŃĐ»Ń Ń Đ°ŃĐłŃĐŒĐ”ĐœŃĐ°ĐŒĐž, ĐŸĐżĐžŃĐ°ĐœĐœŃĐŒĐž ĐČŃŃĐ”.
ĐĄĐŸĐŸĐ±ŃĐ”ĐœĐžĐ”Â MsgĐŸŃĐżŃаĐČĐ»ŃĐ”ŃŃŃ PID-ĐżŃĐŸŃĐ”ŃŃŃ: PidÂ Ń ĐżĐŸĐŒĐŸŃŃŃ Pid ! Msg. ĐŃĐŸŃĐ”ŃŃ ĐŒĐŸĐ¶Đ”Ń ĐŸĐżŃДЎДлОŃŃ ŃĐČĐŸĐč ŃĐŸĐ±ŃŃĐČĐ”ĐœĐœŃĐč PID, ĐČŃĐ·ĐČаĐČ BIF self, а заŃĐ”ĐŒ пДŃДЎаŃŃ Đ”ĐłĐŸ ĐŽŃŃĐłĐžĐŒ ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒ, ŃŃĐŸĐ±Ń ĐŸĐœĐž ĐŒĐŸĐłĐ»Đž Ń ĐœĐžĐŒ ĐČĐ·Đ°ĐžĐŒĐŸĐŽĐ”ĐčŃŃĐČĐŸĐČаŃŃ. ĐŃĐ”ĐŽĐżĐŸĐ»ĐŸĐ¶ĐžĐŒ, ĐżŃĐŸŃĐ”ŃŃ ĐŸĐ¶ĐžĐŽĐ°Đ”Ń ĐżĐŸĐ»ŃŃĐ”ĐœĐžŃ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč ĐČОЎа {ok, N}О {error, Reason}. ĐĐ»Ń ĐžŃ
ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșĐž ĐŸĐœ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń ŃлДЎŃŃŃĐžĐč ĐșĐŸĐŽ:
ĐżĐŸĐ»ŃŃĐžŃŃ
{ĐŸĐș, N} ->
N+1;
{ĐŸŃОбĐșа, _} ->
0
ĐșĐŸĐœĐ”Ń
РДзŃĐ»ŃŃаŃĐŸĐŒ ŃĐČĐ»ŃĐ”ŃŃŃ ŃĐžŃĐ»ĐŸ, ĐŸĐżŃДЎДлŃĐ”ĐŒĐŸĐ” ĐżŃĐ”ĐŽĐ»ĐŸĐ¶Đ”ĐœĐžĐ”ĐŒ ŃĐŸĐżĐŸŃŃаĐČĐ»Đ”ĐœĐžŃ Ń ĐŸĐ±ŃазŃĐŸĐŒ. ĐŃлО Đ·ĐœĐ°ŃĐ”ĐœĐžĐ” пДŃĐ”ĐŒĐ”ĐœĐœĐŸĐč ĐœĐ” ŃŃДбŃĐ”ŃŃŃ ĐŽĐ»Ń ŃĐŸĐżĐŸŃŃаĐČĐ»Đ”ĐœĐžŃ Ń ĐŸĐ±ŃазŃĐŸĐŒ, ĐČ ĐșаŃĐ”ŃŃĐČĐ” ĐżĐŸĐŽŃŃĐ°ĐœĐŸĐČĐŸŃĐœĐŸĐłĐŸ Đ·ĐœĐ°Đșа ĐŒĐŸĐ¶ĐœĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ŃĐžĐŒĐČĐŸĐ» ĐżĐŸĐŽŃĐ”ŃĐșĐžĐČĐ°ĐœĐžŃ, ĐșаĐș ĐżĐŸĐșĐ°Đ·Đ°ĐœĐŸ ĐČŃŃĐ”.
ĐĐ”ŃДЎаŃа ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč ĐŒĐ”Đ¶ĐŽŃ ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒĐž ŃĐČĐ»ŃĐ”ŃŃŃ Đ°ŃĐžĐœŃ
ŃĐŸĐœĐœĐŸĐč, Đž ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ, ĐżĐŸĐ»ŃŃĐ”ĐœĐœŃĐ” ĐżŃĐŸŃĐ”ŃŃĐŸĐŒ, ĐżĐŸĐŒĐ”ŃаŃŃŃŃ ĐČ ĐżĐŸŃŃĐŸĐČŃĐč ŃŃĐžĐș ĐżŃĐŸŃĐ”ŃŃа ĐČ ĐżĐŸŃŃĐŽĐșĐ” ĐżĐŸŃŃŃĐżĐ»Đ”ĐœĐžŃ. йДпДŃŃ ĐżŃĐ”ĐŽĐżĐŸĐ»ĐŸĐ¶ĐžĐŒ, ŃŃĐŸ ĐżŃĐžĐČĐ”ĐŽĐ”ĐœĐœĐŸĐ”Â receiveĐČŃŃĐ” ĐČŃŃĐ°Đ¶Đ”ĐœĐžĐ” ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐŸ: Đ”ŃлО пДŃĐČŃĐč ŃĐ»Đ”ĐŒĐ”ĐœŃ ĐČ ĐżĐŸŃŃĐŸĐČĐŸĐŒ ŃŃĐžĐșĐ” ŃаĐČĐ”ĐœÂ {ok, N}, {error, Reason}бŃĐŽĐ”Ń ĐČĐŸĐ·ĐČŃаŃĐ”Đœ ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃŃŃĐžĐč ŃДзŃĐ»ŃŃаŃ. ĐŃлО пДŃĐČĐŸĐ” ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐČ ĐżĐŸŃŃĐŸĐČĐŸĐŒ ŃŃĐžĐșĐ” ĐœĐ” ĐČ ŃŃĐŸĐč ŃĐŸŃĐŒĐ”, ĐŸĐœĐŸ бŃĐŽĐ”Ń Ń
ŃĐ°ĐœĐžŃŃŃŃ ĐČ ĐżĐŸŃŃĐŸĐČĐŸĐŒ ŃŃĐžĐșĐ”, а ĐČŃĐŸŃĐŸĐ” бŃĐŽĐ”Ń ĐŸĐ±ŃĐ°Đ±ĐŸŃĐ°ĐœĐŸ ŃаĐșĐžĐŒ жД ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ. ĐŃлО ĐœĐž ĐŸĐŽĐœĐŸ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐœĐ” ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃĐ”Ń, Đ±Đ»ĐŸĐș ĐżŃĐžĐ”ĐŒĐ° бŃĐŽĐ”Ń Đ¶ĐŽĐ°ŃŃ, ĐżĐŸĐșа ĐœĐ” бŃĐŽĐ”Ń ĐżĐŸĐ»ŃŃĐ”ĐœĐŸ ĐżĐŸĐŽŃ
ĐŸĐŽŃŃДД ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ”.
ĐŃĐŸŃĐ”ŃŃŃ Đ·Đ°ĐČĐ”ŃŃаŃŃŃŃ ĐżĐŸ ĐŽĐČŃĐŒ ĐżŃĐžŃĐžĐœĐ°ĐŒ. ĐŃлО Đ±ĐŸĐ»ŃŃĐ” ĐœĐ”Ń ĐșĐŸĐŽĐ° ĐŽĐ»Ń ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐžŃ, ĐłĐŸĐČĐŸŃŃŃ, ŃŃĐŸ ĐŸĐœĐž заĐČĐ”ŃŃаŃŃŃŃ ĐżĐŸÂ ĐŸĐ±ŃŃĐœĐŸĐč пŃĐžŃĐžĐœĐ” . ĐŃлО ĐżŃĐŸŃĐ”ŃŃ ĐŸĐ±ĐœĐ°ŃŃжОĐČĐ°Đ”Ń ĐŸŃОбĐșŃ ĐČĐŸ ĐČŃĐ”ĐŒŃ ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐžŃ, ŃŃĐžŃаДŃŃŃ, ŃŃĐŸ ĐŸĐœ заĐČĐ”ŃŃОлŃŃ ĐżĐŸÂ ĐœĐ”ĐœĐŸŃĐŒĐ°Đ»ŃĐœĐŸĐč пŃĐžŃĐžĐœĐ” . ĐаĐČĐ”ŃŃаŃŃĐžĐč ĐżŃĐŸŃĐ”ŃŃ ĐœĐ” ĐżĐŸĐČлОŃĐ”Ń ĐœĐ° ĐŽŃŃгОД ĐżŃĐŸŃĐ”ŃŃŃ, Đ”ŃлО ĐŸĐœĐž ĐœĐ” ŃĐČŃĐ·Đ°ĐœŃ ĐŽŃŃĐł Ń ĐŽŃŃĐłĐŸĐŒ. ĐŃĐŸŃĐ”ŃŃŃ ĐŒĐŸĐłŃŃ ŃĐČŃĐ·ŃĐČаŃŃŃŃ ĐŽŃŃĐł Ń ĐŽŃŃĐłĐŸĐŒ, ĐČŃĐ·ŃĐČĐ°Ń ŃŃĐœĐșŃĐžŃ BIF link(Pid)ОлО ĐČŃĐ·ŃĐČаŃ spawn_link(Module, Function, Arguments). ĐŃлО ĐżŃĐŸŃĐ”ŃŃ Đ·Đ°ĐČĐ”ŃŃаДŃŃŃ, ĐŸĐœ ĐŸŃĐżŃаĐČĐ»ŃĐ”Ń ŃĐžĐłĐœĐ°Đ» EXIT ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒ, ŃĐČŃĐ·Đ°ĐœĐœŃĐŒ Ń ĐœĐžĐŒ. ĐŃлО ĐżŃĐžŃĐžĐœĐ° заĐČĐ”ŃŃĐ”ĐœĐžŃ ĐœĐ”ĐœĐŸŃĐŒĐ°Đ»ŃĐœĐ°Ń, ĐżŃĐŸŃĐ”ŃŃ Đ·Đ°ĐČĐ”ŃŃаДŃŃŃ ŃĐ°ĐŒ, ŃаŃĐżŃĐŸŃŃŃĐ°ĐœŃŃ ŃĐžĐłĐœĐ°Đ» EXIT. ĐŃĐ·ŃĐČĐ°Ń ŃŃĐœĐșŃĐžŃ BIF process_flag(trap_exit, true), ĐżŃĐŸŃĐ”ŃŃŃ ĐŒĐŸĐłŃŃ ĐżĐŸĐ»ŃŃаŃŃ ŃĐžĐłĐœĐ°Đ»Ń EXIT ĐČ ĐČОЎД ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč Erlang ĐČ ŃĐČĐŸĐč ĐżĐŸŃŃĐŸĐČŃĐč ŃŃĐžĐș Đž ĐŸĐ±ŃабаŃŃĐČаŃŃ ĐžŃ
ĐČĐŒĐ”ŃŃĐŸ заĐČĐ”ŃŃĐ”ĐœĐžŃ.
Riak ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń ŃĐžĐłĐœĐ°Đ»Ń EXIT ĐŽĐ»Ń ĐŒĐŸĐœĐžŃĐŸŃĐžĐœĐłĐ° ŃĐ°Đ±ĐŸŃĐŸŃĐżĐŸŃĐŸĐ±ĐœĐŸŃŃĐž ĐżŃĐŸŃĐ”ŃŃĐŸĐČ, ĐČŃĐżĐŸĐ»ĐœŃŃŃĐžŃ ĐœĐ”ĐșŃĐžŃĐžŃĐ”ŃĐșŃŃ ŃĐ°Đ±ĐŸŃŃ, ĐžĐœĐžŃООŃĐŸĐČĐ°ĐœĐœŃŃ ĐșĐŸĐœĐ”ŃĐœŃĐŒĐž аĐČŃĐŸĐŒĐ°ŃĐ°ĐŒĐž, ĐŸĐ±ŃабаŃŃĐČаŃŃĐžĐŒĐž запŃĐŸŃŃ. ĐĐŸĐłĐŽĐ° ŃŃĐž ĐżŃĐŸŃĐ”ŃŃŃ Đ·Đ°ĐČĐ”ŃŃаŃŃŃŃ ĐœĐ”ĐœĐŸŃĐŒĐ°Đ»ŃĐœĐŸ, ŃĐžĐłĐœĐ°Đ» EXIT ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń Đ»ĐžĐ±ĐŸ ĐžĐłĐœĐŸŃĐžŃĐŸĐČаŃŃ ĐŸŃОбĐșŃ, Đ»ĐžĐ±ĐŸ пДŃДзапŃŃŃĐžŃŃ ĐżŃĐŸŃĐ”ŃŃ.
Đ Đ°ĐœĐ”Đ” ĐŒŃ ĐżŃДЎŃŃаĐČОлО ĐžĐŽĐ”Ń ĐŸ ŃĐŸĐŒ, ŃŃĐŸ ĐżŃĐŸŃĐ”ŃŃŃ ŃлДЎŃŃŃ ĐŸĐ±ŃĐ”ĐŒŃ ŃĐ°Đ±Đ»ĐŸĐœŃ ĐœĐ”Đ·Đ°ĐČĐžŃĐžĐŒĐŸ ĐŸŃ ŃДлО, ĐŽĐ»Ń ĐșĐŸŃĐŸŃĐŸĐč ĐŸĐœĐž ŃĐŸĐ·ĐŽĐ°ĐœŃ. ĐĐ»Ń ĐœĐ°Ńала ĐżŃĐŸŃĐ”ŃŃ ĐŽĐŸĐ»Đ¶Đ”Đœ бŃŃŃ Â«ĐżĐŸŃĐŸĐ¶ĐŽĐ”ĐœÂ» Đž, ĐżŃĐž ĐœĐ”ĐŸĐ±Ń
ĐŸĐŽĐžĐŒĐŸŃŃĐž, заŃДгОŃŃŃĐžŃĐŸĐČĐ°Đœ Đ”ĐłĐŸ ĐżŃĐ”ĐČĐŽĐŸĐœĐžĐŒ. ĐĐ”ŃĐČŃĐŒ ĐŽĐ”ĐčŃŃĐČĐžĐ”ĐŒ ĐČĐœĐŸĐČŃ ŃĐŸĐ·ĐŽĐ°ĐœĐœĐŸĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа ŃĐČĐ»ŃĐ”ŃŃŃ ĐžĐœĐžŃОалОзаŃĐžŃ ĐŽĐ°ĐœĐœŃŃ
ŃĐžĐșла ĐżŃĐŸŃĐ”ŃŃа. ĐŃĐž ĐŽĐ°ĐœĐœŃĐ” ŃаŃŃĐŸ ŃĐČĐ»ŃŃŃŃŃ ŃДзŃĐ»ŃŃаŃĐŸĐŒ аŃĐłŃĐŒĐ”ĐœŃĐŸĐČ, пДŃДЎаĐČĐ°Đ”ĐŒŃŃ
ŃŃĐœĐșŃОО BIF spawn ĐČĐŸ ĐČŃĐ”ĐŒŃ ĐžĐœĐžŃОалОзаŃОО ĐżŃĐŸŃĐ”ŃŃа. ĐĐłĐŸ ĐŽĐ°ĐœĐœŃĐ” Ń
ŃĐ°ĐœŃŃŃŃ ĐČ ĐżĐ”ŃĐ”ĐŒĐ”ĐœĐœĐŸĐč, ĐșĐŸŃĐŸŃĐ°Ń ŃŃĐžŃаДŃŃŃ ŃĐŸŃŃĐŸŃĐœĐžĐ”ĐŒ ĐżŃĐŸŃĐ”ŃŃа. ĐĄĐŸŃŃĐŸŃĐœĐžĐ”, ŃаŃŃĐŸ Ń
ŃĐ°ĐœŃŃДДŃŃ ĐČ Đ·Đ°ĐżĐžŃĐž, пДŃДЎаДŃŃŃ ŃŃĐœĐșŃОО ĐżŃĐžĐ”ĐŒĐ°-ĐŸŃĐ”ĐœĐșĐž, запŃŃĐșаŃŃĐ”Đč ŃĐžĐșĐ», ĐșĐŸŃĐŸŃŃĐč ĐżŃĐžĐœĐžĐŒĐ°Đ”Ń ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ”, ĐŸĐ±ŃабаŃŃĐČĐ°Đ”Ń Đ”ĐłĐŸ, ĐŸĐ±ĐœĐŸĐČĐ»ŃĐ”Ń ŃĐŸŃŃĐŸŃĐœĐžĐ” Đž ĐČĐŸĐ·ĐČŃаŃĐ°Đ”Ń Đ”ĐłĐŸ ĐČ ĐșаŃĐ”ŃŃĐČĐ” аŃĐłŃĐŒĐ”ĐœŃа â «Ń
ĐČĐŸŃŃĐŸĐČĐŸĐč ŃĐ”ĐșŃŃŃĐžĐČĐœŃĐč» ĐČŃĐ·ĐŸĐČ. ĐŃлО ĐŸĐŽĐœĐŸ Оз ĐŸĐ±ŃабаŃŃĐČĐ°Đ”ĐŒŃŃ
ĐžĐŒ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč ŃĐČĐ»ŃĐ”ŃŃŃ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ”ĐŒ «ŃŃĐŸĐżÂ», ĐżŃĐŸŃĐ”ŃŃ ĐČŃĐżĐŸĐ»ĐœĐžŃ ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃŃŃŃŃ ĐŸŃĐžŃŃĐșŃ Đž заĐČĐ”ŃŃĐžŃŃŃ.
ĐŃĐŸ ĐżĐŸĐČŃĐŸŃŃŃŃаŃŃŃ ŃĐ”ĐŒĐ° ĐżŃĐŸŃĐ”ŃŃĐŸĐČ, ĐœĐ”Đ·Đ°ĐČĐžŃĐžĐŒĐŸ ĐŸŃ ĐżĐŸŃŃаĐČĐ»Đ”ĐœĐœĐŸĐč пДŃДЎ ĐœĐžĐŒĐž заЎаŃĐž. ĐĐŒĐ”Ń ŃŃĐŸ ĐČ ĐČОЎŃ, ЎаĐČаĐčŃĐ” ĐżĐŸŃĐŒĐŸŃŃĐžĐŒ ĐœĐ° ŃазлОŃĐžŃ ĐŒĐ”Đ¶ĐŽŃ ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒĐž, ĐșĐŸŃĐŸŃŃĐ” ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃŃŃ ŃŃĐŸĐŒŃ ŃĐ°Đ±Đ»ĐŸĐœŃ:
-
ĐŃĐłŃĐŒĐ”ĐœŃŃ, пДŃДЎаĐČĐ°Đ”ĐŒŃĐ” ŃŃĐœĐșŃОО BIF,Â
spawnбŃĐŽŃŃ ĐŸŃлОŃаŃŃŃŃ ĐŸŃ ĐŸĐŽĐœĐŸĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа Đș ĐŽŃŃĐłĐŸĐŒŃ. - ĐĐ°ĐŒ ĐœĐ”ĐŸĐ±Ń ĐŸĐŽĐžĐŒĐŸ ŃĐ”ŃĐžŃŃ, ŃлДЎŃĐ”Ń Đ»Đž ŃДгОŃŃŃĐžŃĐŸĐČаŃŃ ĐżŃĐŸŃĐ”ŃŃ ĐżĐŸĐŽ ĐżŃĐ”ĐČĐŽĐŸĐœĐžĐŒĐŸĐŒ, Đž Đ”ŃлО Ўа, ŃĐŸ ĐșаĐșĐŸĐč ĐżŃĐ”ĐČĐŽĐŸĐœĐžĐŒ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ.
- Đ ŃŃĐœĐșŃОО ĐžĐœĐžŃОалОзаŃОО ŃĐŸŃŃĐŸŃĐœĐžŃ ĐżŃĐŸŃĐ”ŃŃа ĐżŃДЎпŃĐžĐœĐžĐŒĐ°Đ”ĐŒŃĐ” ĐŽĐ”ĐčŃŃĐČĐžŃ Đ±ŃĐŽŃŃ ŃазлОŃаŃŃŃŃ ĐČ Đ·Đ°ĐČĐžŃĐžĐŒĐŸŃŃĐž ĐŸŃ Đ·Đ°ĐŽĐ°Ń, ĐșĐŸŃĐŸŃŃĐ” бŃĐŽĐ”Ń ĐČŃĐżĐŸĐ»ĐœŃŃŃ ĐżŃĐŸŃĐ”ŃŃ.
- ĐĄĐŸŃŃĐŸŃĐœĐžĐ” ŃĐžŃŃĐ”ĐŒŃ ĐČ ĐșĐ°Đ¶ĐŽĐŸĐŒ ŃĐ»ŃŃаД ĐżŃДЎŃŃаĐČĐ»Đ”ĐœĐŸ ĐŽĐ°ĐœĐœŃĐŒĐž ŃĐžĐșла, ĐŸĐŽĐœĐ°ĐșĐŸ ŃĐŸĐŽĐ”ŃĐ¶ĐžĐŒĐŸĐ” ĐŽĐ°ĐœĐœŃŃ Đ±ŃĐŽĐ”Ń ŃазлОŃаŃŃŃŃ ĐČ Đ·Đ°ĐČĐžŃĐžĐŒĐŸŃŃĐž ĐŸŃ ĐżŃĐŸŃĐ”ŃŃа.
- ĐŃĐž ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐžĐž ŃĐžĐșла ĐżĐŸĐ»ŃŃĐ”ĐœĐžŃ-ĐŸŃĐ”ĐœĐșĐž ĐżŃĐŸŃĐ”ŃŃŃ Đ±ŃĐŽŃŃ ĐżĐŸĐ»ŃŃаŃŃ ŃĐ°Đ·ĐœŃĐ” ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ Đž ĐŸĐ±ŃабаŃŃĐČаŃŃ ĐžŃ ĐżĐŸ-ŃĐ°Đ·ĐœĐŸĐŒŃ.
- ĐаĐșĐŸĐœĐ”Ń, ĐșĐŸĐłĐŽĐ° ĐżŃĐŸŃĐ”ŃŃ ĐČŃĐșĐ»ŃŃĐ”Đœ, ĐŸŃĐžŃŃĐșа бŃĐŽĐ”Ń ĐČаŃŃĐžŃĐŸĐČаŃŃŃŃ ĐŸŃ ĐŸĐŽĐœĐŸĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа Đș ĐŽŃŃĐłĐŸĐŒŃ.
йаĐșĐžĐŒ ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ, ЎажД Đ”ŃлО ŃŃŃĐ”ŃŃĐČŃĐ”Ń ŃĐșĐ”Đ»Đ”Ń ŃĐŸĐŽĐŸĐČŃŃ ĐŽĐ”ĐčŃŃĐČĐžĐč, ŃŃĐž ĐŽĐ”ĐčŃŃĐČĐžŃ ĐŽĐŸĐżĐŸĐ»ĐœŃŃŃŃŃ ĐșĐŸĐœĐșŃĐ”ŃĐœŃĐŒĐž, ĐœĐ”ĐżĐŸŃŃДЎŃŃĐČĐ”ĐœĐœĐŸ ŃĐČŃĐ·Đ°ĐœĐœŃĐŒĐž Ń Đ·Đ°ĐŽĐ°ŃĐ°ĐŒĐž, ĐżĐŸŃŃаĐČĐ»Đ”ĐœĐœŃĐŒĐž пДŃДЎ ĐșажЎŃĐŒ ĐżŃĐŸŃĐ”ŃŃĐŸĐŒ. ĐŃĐżĐŸĐ»ŃĐ·ŃŃ ŃŃĐŸŃ ŃĐșĐ”Đ»Đ”Ń ĐČ ĐșаŃĐ”ŃŃĐČĐ” ŃĐ°Đ±Đ»ĐŸĐœĐ°, ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃŃŃ ĐŒĐŸĐłŃŃ ŃĐŸĐ·ĐŽĐ°ĐČаŃŃ ĐżŃĐŸŃĐ”ŃŃŃ Erlang, ĐșĐŸŃĐŸŃŃĐ” ĐŽĐ”ĐčŃŃĐČŃŃŃ ĐșаĐș ŃĐ”ŃĐČĐ”ŃŃ, ĐșĐŸĐœĐ”ŃĐœŃĐ” аĐČŃĐŸĐŒĐ°ŃŃ, ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșĐž ŃĐŸĐ±ŃŃĐžĐč Đž ŃŃпДŃĐČĐžĐ·ĐŸŃŃ. ĐĐŸ ĐČĐŒĐ”ŃŃĐŸ ŃĐŸĐłĐŸ, ŃŃĐŸĐ±Ń ĐșажЎŃĐč Ńаз пДŃĐ”ĐŸĐżŃДЎДлŃŃŃ ŃŃĐž ŃĐ°Đ±Đ»ĐŸĐœŃ, ĐŸĐœĐž бŃлО ŃазŃĐ°Đ±ĐŸŃĐ°ĐœŃ ĐșаĐș ĐŒĐŸĐŽŃлО Đž ĐœĐ°Đ·ĐČĐ°ĐœŃ Â«ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃĐŒĐžÂ». ĐĐœĐž ŃĐČĐ»ŃŃŃŃŃ ŃаŃŃŃŃ ĐżŃĐŸĐŒĐ”Đ¶ŃŃĐŸŃĐœĐŸĐč плаŃŃĐŸŃĐŒŃ OTP.
ĐŃĐœĐŸĐČĐœĐ°Ń ĐșĐŸĐŒĐ°ĐœĐŽĐ° ŃазŃĐ°Đ±ĐŸŃŃĐžĐșĐŸĐČ Riak ŃазбŃĐŸŃĐ°ĐœĐ° ĐżŃĐžĐŒĐ”ŃĐœĐŸ ĐżĐŸ ĐŽŃĐ¶ĐžĐœĐ” ĐłĐ”ĐŸĐłŃаŃĐžŃĐ”ŃĐșĐžŃ ŃĐ”ĐłĐžĐŸĐœĐŸĐČ. ĐДз ĐŸŃĐ”ĐœŃ ŃĐŸĐœĐșĐŸĐč ĐșĐŸĐŸŃĐŽĐžĐœĐ°ŃОО Đž ŃĐ°Đ±Đ»ĐŸĐœĐŸĐČ ĐŽĐ»Ń ŃĐ°Đ±ĐŸŃŃ ŃДзŃĐ»ŃŃĐ°Ń Đ±ŃĐŽĐ”Ń ŃĐŸŃŃĐŸŃŃŃ ĐžĐ· ŃазлОŃĐœŃŃ ŃДалОзаŃĐžĐč ĐșĐ»ĐžĐ”ĐœŃ/ŃĐ”ŃĐČĐ”Ń, ĐœĐ” ĐŸĐ±ŃабаŃŃĐČаŃŃĐžŃ ĐșŃаĐčĐœĐžĐ” ĐŸŃĐŸĐ±ŃĐ” ŃĐ»ŃŃаО Đž ŃĐČŃĐ·Đ°ĐœĐœŃĐ” Ń ĐœĐžĐŒĐž ĐŸŃОбĐșĐž ĐșĐŸĐœĐșŃŃĐ”ĐœŃОО. ĐĐ”ŃĐŸŃŃĐœĐŸ, ĐœĐ” бŃĐŽĐ”Ń Đ”ĐŽĐžĐœĐŸĐłĐŸ ŃĐżĐŸŃĐŸĐ±Đ° ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșĐž ĐžĐœŃĐžĐŽĐ”ĐœŃĐŸĐČ ĐœĐ° ĐșĐ»ĐžĐ”ĐœŃĐ” Đž ŃĐ”ŃĐČĐ”ŃĐ” ОлО ĐŸĐ±Đ”ŃпДŃĐ”ĐœĐžŃ ŃĐŸĐłĐŸ, ŃŃĐŸĐ±Ń ĐŸŃĐČĐ”Ń ĐœĐ° запŃĐŸŃ ĐŽĐ”ĐčŃŃĐČĐžŃДлŃĐœĐŸ бŃĐ» ĐŸŃĐČĐ”ŃĐŸĐŒ, а ĐœĐ” ĐżŃĐŸŃŃĐŸ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ”ĐŒ, ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃŃŃĐžĐŒ ĐČĐœŃŃŃĐ”ĐœĐœĐžĐŒ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃĐŒ ĐżŃĐŸŃĐŸĐșĐŸĐ»Đ°.
OTP â ŃŃĐŸ ĐœĐ°Đ±ĐŸŃ Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”Đș Erlang Đž ĐżŃĐžĐœŃĐžĐżĐŸĐČ ĐżŃĐŸĐ”ĐșŃĐžŃĐŸĐČĐ°ĐœĐžŃ, ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»ŃŃŃĐžĐč ĐłĐŸŃĐŸĐČŃĐ” Đș ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžŃ ĐžĐœŃŃŃŃĐŒĐ”ĐœŃŃ ĐŽĐ»Ń ŃазŃĐ°Đ±ĐŸŃĐșĐž ĐœĐ°ĐŽĐ”Đ¶ĐœŃŃ ŃĐžŃŃĐ”ĐŒ. ĐĐŸĐ»ŃŃĐžĐœŃŃĐČĐŸ ŃŃĐžŃ ŃĐ°Đ±Đ»ĐŸĐœĐŸĐČ Đž Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”Đș ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»ŃŃŃŃŃ ĐČ ŃĐŸŃĐŒĐ” Â«ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐč».
ĐĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” OTP ŃĐ”ŃĐ°Đ”Ń ŃŃĐž ĐżŃĐŸĐ±Đ»Đ”ĐŒŃ, ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»ŃŃ ĐŒĐŸĐŽŃлО, ŃДалОзŃŃŃОД ĐœĐ°ĐžĐ±ĐŸĐ»Đ”Đ” ŃаŃĐżŃĐŸŃŃŃĐ°ĐœĐ”ĐœĐœŃĐ” ŃĐ°Đ±Đ»ĐŸĐœŃ ĐżĐ°ŃĐ°Đ»Đ»Đ”Đ»ĐžĐ·ĐŒĐ°. ĐĐŸĐŽ ĐżŃĐžĐșŃŃŃĐžĐ”ĐŒ, бДз ĐČĐ”ĐŽĐŸĐŒĐ° ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃŃа, ĐŒĐŸĐŽŃлО ĐŸĐ±Đ”ŃпДŃĐžĐČаŃŃ ĐœĐ°ĐŽĐ”Đ¶ĐœŃŃ ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșŃ ĐŸŃĐžĐ±ĐŸĐș Đž ĐŸŃĐŸĐ±ŃŃ ŃĐ»ŃŃаДĐČ. Đ ŃДзŃĐ»ŃŃаŃĐ” ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” OTP ĐŸĐ±Đ”ŃпДŃĐžĐČĐ°Đ”Ń ĐœĐ°Đ±ĐŸŃ ŃŃĐ°ĐœĐŽĐ°ŃŃОзОŃĐŸĐČĐ°ĐœĐœŃŃ Đ±Đ»ĐŸĐșĐŸĐČ ĐŽĐ»Ń ĐżŃĐŸĐ”ĐșŃĐžŃĐŸĐČĐ°ĐœĐžŃ Đž ĐżĐŸŃŃŃĐŸĐ”ĐœĐžŃ ĐżŃĐŸĐŒŃŃĐ»Đ”ĐœĐœŃŃ ŃĐžŃŃĐ”ĐŒ ĐșаŃĐ”ŃŃĐČа.
ĐĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ OTP ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»ŃŃŃŃŃ ĐČ ĐČОЎД ĐŒĐŸĐŽŃлДĐč ĐČ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐž, stdlib ĐșĐŸŃĐŸŃĐŸĐ” ŃĐČĐ»ŃĐ”ŃŃŃ ŃаŃŃŃŃ ĐŽĐžŃŃŃОбŃŃĐžĐČа Erlang/OTP. ĐĐŸĐœĐșŃĐ”ŃĐœŃĐč ĐșĐŸĐŽ, ĐœĐ°ĐżĐžŃĐ°ĐœĐœŃĐč ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃŃĐŸĐŒ, ĐżĐŸĐŒĐ”ŃаДŃŃŃ ĐČ ĐŸŃЎДлŃĐœŃĐč ĐŒĐŸĐŽŃĐ»Ń Đž ĐČŃĐ·ŃĐČаДŃŃŃ Ń ĐżĐŸĐŒĐŸŃŃŃ ĐœĐ°Đ±ĐŸŃа ĐżŃĐ”ĐŽĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃŃ
ŃŃĐœĐșŃĐžĐč ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ĐŽĐ»Ń ĐșĐ°Đ¶ĐŽĐŸĐłĐŸ Оз ĐČаŃĐžĐ°ĐœŃĐŸĐČ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ. ĐŃĐŸŃ Â«ĐŒĐŸĐŽŃĐ»Ń ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа» бŃĐŽĐ”Ń ŃĐŸĐŽĐ”ŃжаŃŃ ĐČĐ”ŃŃ ĐșĐŸĐœĐșŃĐ”ŃĐœŃĐč ĐșĐŸĐŽ, ĐœĐ”ĐŸĐ±Ń
ĐŸĐŽĐžĐŒŃĐč ĐŽĐ»Ń ĐŽĐŸŃŃĐžĐ¶Đ”ĐœĐžŃ Đ¶Đ”Đ»Đ°Đ”ĐŒĐŸĐč ŃŃĐœĐșŃĐžĐŸĐœĐ°Đ»ŃĐœĐŸŃŃĐž.
ĐĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” OTP ĐČĐșĐ»ŃŃĐ°Đ”Ń ĐČ ŃĐ”Đ±Ń ŃĐ°Đ±ĐŸŃОД ĐżŃĐŸŃĐ”ŃŃŃ, ĐșĐŸŃĐŸŃŃĐ” ŃаĐșŃĐžŃĐ”ŃĐșĐž ĐČŃĐżĐŸĐ»ĐœŃŃŃ ĐČŃŃĐžŃĐ»Đ”ĐœĐžŃ, Đž ŃŃпДŃĐČĐžĐ·ĐŸŃŃ, ŃŃŃ Đ·Đ°ĐŽĐ°Ńа â ĐșĐŸĐœŃŃĐŸĐ»ĐžŃĐŸĐČаŃŃ ŃĐ°Đ±ĐŸŃĐœĐžĐșĐŸĐČ Đž ĐŽŃŃĐłĐžŃ ŃŃпДŃĐČĐžĐ·ĐŸŃĐŸĐČ. ĐĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” ŃĐ°Đ±ĐŸŃĐœĐžĐșĐŸĐČ, ŃаŃŃĐŸ ŃŃ Đ”ĐŒĐ°ŃĐžŃĐ”ŃĐșĐž ĐžĐ·ĐŸĐ±ŃĐ°Đ¶Đ°Đ”ĐŒĐŸĐ” ĐČ ĐČОЎД ĐșŃŃжĐșĐŸĐČ, ĐČĐșĐ»ŃŃĐ°Đ”Ń ĐČ ŃĐ”Đ±Ń ŃĐ”ŃĐČĐ”ŃŃ, ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșĐž ŃĐŸĐ±ŃŃĐžĐč Đž ĐșĐŸĐœĐ”ŃĐœŃĐ” аĐČŃĐŸĐŒĐ°ŃŃ. Đ ŃĐșĐŸĐČĐŸĐŽĐžŃДлО, ĐżŃДЎŃŃаĐČĐ»Đ”ĐœĐœŃĐ” ĐČ ĐČОЎД ĐżŃŃĐŒĐŸŃĐłĐŸĐ»ŃĐœĐžĐșĐŸĐČ, ĐșĐŸĐœŃŃĐŸĐ»ĐžŃŃŃŃ ŃĐČĐŸĐžŃ ĐŽĐ”ŃĐ”Đč, ĐșаĐș ŃĐ°Đ±ĐŸŃĐžŃ , ŃаĐș Đž ŃŃĐșĐŸĐČĐŸĐŽĐžŃДлДĐč, ŃĐŸĐ·ĐŽĐ°ĐČĐ°Ń ĐŽĐ”ŃĐ”ĐČĐŸ ĐœĐ°ĐŽĐ·ĐŸŃа.
![[ĐĐ”ŃĐ”ĐČĐŸ ĐșĐŸĐœŃŃĐŸĐ»Ń OTP Riak]](https://barionleg.github.io/aosabook/src/v1/web/images/riak/supervision-tree.png)
Đ ĐžŃŃĐœĐŸĐș 15.1: ĐĐ”ŃĐ”ĐČĐŸ ĐœĐ°ĐŽĐ·ĐŸŃа OTP Riak
ĐĐ”ŃĐ”ĐČŃŃ ĐșĐŸĐœŃŃĐŸĐ»Ń ŃĐłŃŃппОŃĐŸĐČĐ°ĐœŃ ĐČ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”, ĐœĐ°Đ·ŃĐČĐ°Đ”ĐŒĐŸĐ” ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ”ĐŒ. ĐŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ OTP â ŃŃĐŸ ĐœĐ” ŃĐŸĐ»ŃĐșĐŸ ŃŃĐœĐŽĐ°ĐŒĐ”ĐœŃалŃĐœŃĐ” Đ±Đ»ĐŸĐșĐž ŃĐžŃŃĐ”ĐŒ Erlang, ĐœĐŸ Đž ŃĐżĐŸŃĐŸĐ± ŃпаĐșĐŸĐČĐșĐž ĐżĐŸĐČŃĐŸŃĐœĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ĐŒŃŃ ĐșĐŸĐŒĐżĐŸĐœĐ”ĐœŃĐŸĐČ. ĐĄĐžŃŃĐ”ĐŒŃ ĐżŃĐŸĐŒŃŃĐ»Đ”ĐœĐœĐŸĐłĐŸ ŃŃĐŸĐČĐœŃ, ŃаĐșОД ĐșаĐș Riak, ŃĐŸŃŃĐŸŃŃ ĐžĐ· ĐœĐ°Đ±ĐŸŃа ŃĐ»Đ°Đ±ĐŸŃĐČŃĐ·Đ°ĐœĐœŃŃ Đž ĐżĐŸŃĐ”ĐœŃОалŃĐœĐŸ ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč. ĐĐ”ĐșĐŸŃĐŸŃŃĐ” Оз ŃŃĐžŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč ŃĐČĐ»ŃŃŃŃŃ ŃаŃŃŃŃ ŃŃĐ°ĐœĐŽĐ°ŃŃĐœĐŸĐłĐŸ ĐŽĐžŃŃŃОбŃŃĐžĐČа Erlang, а ĐŽŃŃгОД â ŃаŃŃŃĐŒĐž, ŃпДŃОалŃĐœĐŸ ŃДалОзŃŃŃĐžĐŒĐž ŃŃĐœĐșŃĐžĐŸĐœĐ°Đ»ŃĐœŃĐ” ĐČĐŸĐ·ĐŒĐŸĐ¶ĐœĐŸŃŃĐž Riak.
ĐŃĐžĐŒĐ”ŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč OTP ĐČĐșĐ»ŃŃаŃŃ Corba ORB ОлО Đ°ĐłĐ”ĐœŃ ĐżŃĐŸŃŃĐŸĐłĐŸ ĐżŃĐŸŃĐŸĐșĐŸĐ»Đ° ŃĐ”ŃĐ”ĐČĐŸĐłĐŸ ŃĐżŃаĐČĐ»Đ”ĐœĐžŃ (SNMP). ĐŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ” OTP â ŃŃĐŸ ĐżĐŸĐČŃĐŸŃĐœĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ĐŒŃĐč ĐșĐŸĐŒĐżĐŸĐœĐ”ĐœŃ, ĐșĐŸŃĐŸŃŃĐč ĐłŃŃппОŃŃĐ”Ń ĐŒĐŸĐŽŃлО Ń ŃŃпДŃĐČĐžĐ·ĐŸŃĐ°ĐŒĐž Đž ŃĐ°Đ±ĐŸŃĐžĐŒĐž ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒĐž. ĐĄ ŃŃĐŸĐłĐŸ ĐŒĐŸĐŒĐ”ĐœŃа, ĐșĐŸĐłĐŽĐ° бŃĐŽĐ”Ń ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃŃŃ ŃĐ”ŃĐŒĐžĐœ «пŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ”Â», ĐŸĐœ бŃĐŽĐ”Ń ĐŸĐ·ĐœĐ°ŃаŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ” OTP.
ĐĐŸĐŽŃлО ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ ŃĐŸĐŽĐ”ŃĐ¶Đ°Ń ĐČĐ”ŃŃ ĐŸĐ±ŃĐžĐč ĐșĐŸĐŽ ĐŽĐ»Ń ĐșĐ°Đ¶ĐŽĐŸĐłĐŸ ŃОпа ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ. Đ„ĐŸŃŃ ĐŒĐŸĐ¶ĐœĐŸ ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČаŃŃ ŃĐČĐŸĐč ŃĐŸĐ±ŃŃĐČĐ”ĐœĐœŃĐč ĐŒĐŸĐŽŃĐ»Ń ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ, ŃŃĐŸ ŃŃДбŃĐ”ŃŃŃ ĐŽĐ”Đ»Đ°ŃŃ ĐŸŃĐ”ĐœŃ ŃДЎĐșĐŸ, ĐżĐŸŃĐșĐŸĐ»ŃĐșŃ ŃĐ”, ĐșĐŸŃĐŸŃŃĐ” ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»ŃŃŃŃŃ ĐŽĐžŃŃŃОбŃŃĐžĐČĐŸĐŒ Erlang/OTP, бŃĐŽŃŃ ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČĐŸĐČаŃŃ Đ±ĐŸĐ»ŃŃĐžĐœŃŃĐČŃ ŃĐ°Đ±Đ»ĐŸĐœĐŸĐČ, ĐșĐŸŃĐŸŃŃĐ” ĐČŃ Đ±ŃĐŽĐ”ŃĐ” ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ĐČ ŃĐČĐŸĐ”ĐŒ ĐșĐŸĐŽĐ”. ĐбŃĐ°Ń ŃŃĐœĐșŃĐžĐŸĐœĐ°Đ»ŃĐœĐŸŃŃŃ, ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»ŃĐ”ĐŒĐ°Ń ĐČ ĐŒĐŸĐŽŃлД ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ, ĐČĐșĐ»ŃŃĐ°Đ”Ń ŃлДЎŃŃŃОД ĐŸĐżĐ”ŃаŃОО:
- ŃĐŸĐ·ĐŽĐ°ĐœĐžĐ” Đž ĐżŃĐž ĐœĐ”ĐŸĐ±Ń ĐŸĐŽĐžĐŒĐŸŃŃĐž запОŃŃ ĐżŃĐŸŃĐ”ŃŃа;
- ĐŸŃĐżŃаĐČĐșа Đž ĐżĐŸĐ»ŃŃĐ”ĐœĐžĐ” ĐșĐ»ĐžĐ”ĐœŃŃĐșĐžŃ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč ĐżĐŸŃŃДЎŃŃĐČĐŸĐŒ ŃĐžĐœŃ ŃĐŸĐœĐœŃŃ ĐžĐ»Đž аŃĐžĐœŃ ŃĐŸĐœĐœŃŃ ĐČŃĐ·ĐŸĐČĐŸĐČ, ĐČĐșĐ»ŃŃĐ°Ń ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐžĐ” ĐČĐœŃŃŃĐ”ĐœĐœĐ”ĐłĐŸ ĐżŃĐŸŃĐŸĐșĐŸĐ»Đ° ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč;
- Ń ŃĐ°ĐœĐ”ĐœĐžĐ” ĐŽĐ°ĐœĐœŃŃ ŃĐžĐșла Đž ŃĐżŃаĐČĐ»Đ”ĐœĐžĐ” ŃĐžĐșĐ»ĐŸĐŒ ĐżŃĐŸŃĐ”ŃŃа; Đ
- ĐŸŃŃĐ°ĐœĐŸĐČĐșа ĐżŃĐŸŃĐ”ŃŃа.
ĐĐ°ĐœĐœŃĐ” ŃĐžĐșла â ŃŃĐŸ пДŃĐ”ĐŒĐ”ĐœĐœĐ°Ń, ĐșĐŸŃĐŸŃĐ°Ń Đ±ŃĐŽĐ”Ń ŃĐŸĐŽĐ”ŃжаŃŃ ĐŽĐ°ĐœĐœŃĐ”, ĐșĐŸŃĐŸŃŃĐ” ĐżĐŸŃŃДбŃŃŃŃŃ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ ĐŒĐ”Đ¶ĐŽŃ ĐČŃĐ·ĐŸĐČĐ°ĐŒĐž. ĐĐŸŃлД ĐČŃĐ·ĐŸĐČа ĐČĐŸĐ·ĐČŃаŃаДŃŃŃ ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐœĐ°Ń ĐČĐ”ŃŃĐžŃ ĐŽĐ°ĐœĐœŃŃ . ĐŃĐž ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐœŃĐ” ĐŽĐ°ĐœĐœŃĐ”, ŃаŃŃĐŸ ĐœĐ°Đ·ŃĐČĐ°Đ”ĐŒŃĐ” ĐœĐŸĐČŃĐŒĐž ĐŽĐ°ĐœĐœŃĐŒĐž ĐČ ŃĐžĐșлД, бŃĐŽŃŃ ĐżĐ”ŃĐ”ĐŽĐ°ĐœŃ ĐČ ĐșаŃĐ”ŃŃĐČĐ” аŃĐłŃĐŒĐ”ĐœŃа ĐżŃĐž ŃлДЎŃŃŃĐ”ĐŒ ĐČŃĐ·ĐŸĐČĐ”. ĐĐ°ĐœĐœŃĐ” ĐČ ŃĐžĐșлД ŃаŃŃĐŸ ĐœĐ°Đ·ŃĐČаŃŃ ŃĐŸŃŃĐŸŃĐœĐžĐ”ĐŒ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ.
Đ€ŃĐœĐșŃĐžĐŸĐœĐ°Đ»ŃĐœĐŸŃŃŃ, ĐșĐŸŃĐŸŃĐ°Ń ĐŽĐŸĐ»Đ¶ĐœĐ° бŃŃŃ ĐČĐșĐ»ŃŃĐ”ĐœĐ° ĐČ ĐŒĐŸĐŽŃĐ»Ń ĐŸĐ±ŃĐ”ĐłĐŸ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ ŃĐ”ŃĐČĐ”ŃĐœĐŸĐłĐŸ ŃОпа ĐŽĐ»Ń ŃДалОзаŃОО ĐșĐŸĐœĐșŃĐ”ŃĐœĐŸĐłĐŸ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ, ĐČĐșĐ»ŃŃĐ°Đ”Ń ĐČ ŃДбŃ:
- ĐžĐœĐžŃОалОзаŃĐžŃ ĐŽĐ°ĐœĐœŃŃ ŃĐžĐșла ĐżŃĐŸŃĐ”ŃŃа Đž, Đ”ŃлО ĐżŃĐŸŃĐ”ŃŃ Đ·Đ°ŃДгОŃŃŃĐžŃĐŸĐČĐ°Đœ, ĐžĐŒŃ ĐżŃĐŸŃĐ”ŃŃа.
- ĐșĐŸĐœĐșŃĐ”ŃĐœĐŸĐ” ŃĐżŃаĐČĐ»Đ”ĐœĐžĐ” ĐșĐ»ĐžĐ”ĐœŃŃĐșĐžĐŒĐž запŃĐŸŃĐ°ĐŒĐž Đž, Đ”ŃлО ŃĐžĐœŃ ŃĐŸĐœĐœĐŸ, ĐŸŃĐČĐ”Ń, ĐŸŃĐżŃаĐČĐ»ŃĐ”ĐŒŃĐč ĐŸĐ±ŃаŃĐœĐŸ ĐșĐ»ĐžĐ”ĐœŃŃ.
- ŃĐżŃаĐČĐ»Đ”ĐœĐžĐ” Đž ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐžĐ” ĐŽĐ°ĐœĐœŃŃ ĐČ ŃĐžĐșлД ĐżŃĐŸŃĐ”ŃŃа ĐŒĐ”Đ¶ĐŽŃ ŃазлОŃĐœŃĐŒĐž запŃĐŸŃĐ°ĐŒĐž.
- ĐŸŃĐžŃŃĐșа ĐŽĐ°ĐœĐœŃŃ ŃĐžĐșла пДŃДЎ заĐČĐ”ŃŃĐ”ĐœĐžĐ”ĐŒ ĐżŃĐŸŃĐ”ŃŃа.
ĐбŃОД ŃĐ”ŃĐČĐ”ŃŃ, ŃДалОзŃŃŃОД ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” ĐșĐ»ĐžĐ”ĐœŃ/ŃĐ”ŃĐČĐ”Ń, ĐŸĐżŃДЎДлŃŃŃŃŃ ĐČ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐž, gen_serverĐșĐŸŃĐŸŃĐŸĐ” ŃĐČĐ»ŃĐ”ŃŃŃ ŃаŃŃŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ stdlib(ĐĄŃĐ°ĐœĐŽĐ°ŃŃĐœĐ°Ń Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”Đșа). ĐĐ»Ń ĐŸĐ±ŃŃŃĐœĐ”ĐœĐžŃ ŃĐœĐžĐČĐ”ŃŃалŃĐœŃŃ
ŃĐ”ŃĐČĐ”ŃĐŸĐČ ĐŒŃ Đ±ŃĐŽĐ”ĐŒ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ĐŒĐŸĐŽŃлѠriak_core_node_watcher.erlĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ riak_core. ĐŃĐŸ ŃĐ”ŃĐČĐ”Ń, ĐșĐŸŃĐŸŃŃĐč ĐŸŃŃлДжОĐČĐ°Đ”Ń Đž ŃĐŸĐŸĐ±ŃĐ°Đ”Ń ĐŸ ĐŽĐŸŃŃŃĐżĐœĐŸŃŃĐž ĐżĐŸĐŽŃĐ”ŃĐČĐžŃĐŸĐČ Đž ŃĐ·Đ»ĐŸĐČ ĐČ ĐșлаŃŃĐ”ŃĐ” Riak. ĐĐ°ĐłĐŸĐ»ĐŸĐČĐșĐž Đž ĐŽĐžŃĐ”ĐșŃĐžĐČŃ ĐŒĐŸĐŽŃлДĐč ŃлДЎŃŃŃОД:
-ĐŒĐŸĐŽŃĐ»Ń(riak_core_node_watcher).
-ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” (gen_server).
%% API
-export([start_link/0,service_up/2,service_down/1,node_up/0,node_down/0,services/0,
Services/1,nodes/1,avsn/0]).
%% ĐŸĐ±ŃаŃĐœŃŃ ĐČŃĐ·ĐŸĐČĐŸĐČ gen_server
-export([init/1,handle_call/3,handle_cast/2,handle_info/2,terminate/2, code_change/3]).
-record(state, {status=up, Services=[], Peers=[], avsn=0, bcast_tref,
bcast_mod={gen_server, abcast}}).
ĐбŃĐžĐč ŃĐ”ŃĐČĐ”Ń ĐŒĐŸĐ¶ĐœĐŸ лДгĐșĐŸ ŃаŃĐżĐŸĐ·ĐœĐ°ŃŃ ĐżĐŸ ĐŽĐžŃĐ”ĐșŃĐžĐČĐ”. -behavior(gen_server). ĐŃа ĐŽĐžŃĐ”ĐșŃĐžĐČа ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ŃŃŃ ĐșĐŸĐŒĐżĐžĐ»ŃŃĐŸŃĐŸĐŒ ĐŽĐ»Ń ĐŸĐ±Đ”ŃпДŃĐ”ĐœĐžŃ ĐżŃаĐČОлŃĐœĐŸĐłĐŸ ŃĐșŃĐżĐŸŃŃа ĐČŃĐ”Ń
ŃŃĐœĐșŃĐžĐč ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа. ĐапОŃŃ Â«state» бŃĐŽĐ”Ń ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃŃŃ ĐŽĐ»Ń ĐŽĐ°ĐœĐœŃŃ
ŃĐžĐșла ŃĐ”ŃĐČĐ”Ńа.
Đ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐžÂ gen_serverĐČĐŒĐ”ŃŃĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžŃ BIF spawnĐž ŃŃĐœĐșŃĐžĐč spawn_linkĐČŃ Đ±ŃĐŽĐ”ŃĐ” ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ŃŃĐœĐșŃОО gen_server:startО gen_server:start_link. ĐŃĐœĐŸĐČĐœĐŸĐ” ŃазлОŃОД ĐŒĐ”Đ¶ĐŽŃ spawnО startзаĐșĐ»ŃŃаДŃŃŃ ĐČ ŃĐžĐœŃ
ŃĐŸĐœĐœĐŸĐŒ Ń
аŃаĐșŃĐ”ŃĐ” ĐžŃ
ĐČŃĐ·ĐŸĐČа. ĐŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžĐ”Â startĐČĐŒĐ”ŃŃĐŸÂ spawnĐŽĐ”Đ»Đ°Đ”Ń Đ·Đ°ĐżŃŃĐș ŃĐ°Đ±ĐŸŃĐ”ĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа Đ±ĐŸĐ»Đ”Đ” ĐŽĐ”ŃĐ”ŃĐŒĐžĐœĐžŃĐŸĐČĐ°ĐœĐœŃĐŒ Đž ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ĐžĐ·Đ±Đ”Đ¶Đ°ŃŃ ĐœĐ”ĐżŃДЎĐČĐžĐŽĐ”ĐœĐœŃŃ
ŃŃĐ»ĐŸĐČĐžĐč ĐłĐŸĐœĐșĐž, ĐżĐŸŃĐșĐŸĐ»ŃĐșŃ ĐČŃĐ·ĐŸĐČ ĐœĐ” ĐČĐ”ŃĐœĐ”Ń PID ŃĐ°Đ±ĐŸŃĐ”ĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа ĐŽĐŸ ŃĐ”Ń
ĐżĐŸŃ, ĐżĐŸĐșа ĐŸĐœ ĐœĐ” бŃĐŽĐ”Ń ĐžĐœĐžŃОалОзОŃĐŸĐČĐ°Đœ. ĐŃ ĐŒĐŸĐ¶Đ”ŃĐ” ĐČŃĐ·ĐČаŃŃ ŃŃŃ ŃŃĐœĐșŃĐžŃ, ĐžŃĐżĐŸĐ»ŃĐ·ŃŃ ĐŸĐŽĐœŃ ĐžĐ· ŃлДЎŃŃŃĐžŃ
ŃĐžĐłĐœĐ°ŃŃŃ:
gen_server:start_link(ServerName, CallbackModule, Arguments, Options)
gen_server:start_link(CallbackModule, Arguments, Options)
ServerNameâ ŃŃĐŸ ĐșĐŸŃŃДж ĐČ ŃĐŸŃĐŒĐ”Â {local, Name}ОлО {global, Name}, заŃĐ”ĐŒ ŃĐșазŃĐČаДŃŃŃ, ŃŃĐŸÂ NameŃŃĐŸ ĐłĐ»ĐŸĐ±Đ°Đ»ŃĐœŃĐč ОлО Đ»ĐŸĐșалŃĐœŃĐč ĐżŃĐ”ĐČĐŽĐŸĐœĐžĐŒ ĐżŃĐŸŃĐ”ŃŃа, Đ”ŃлО ĐŸĐœ ĐŽĐŸĐ»Đ¶Đ”Đœ бŃŃŃ Đ·Đ°ŃДгОŃŃŃĐžŃĐŸĐČĐ°Đœ. ĐĐ»ĐŸĐ±Đ°Đ»ŃĐœŃĐ” ĐžĐŒĐ”ĐœĐ° ĐŸĐ±Đ”ŃпДŃĐžĐČаŃŃ ĐżŃĐŸĐ·ŃаŃĐœŃĐč ĐŽĐŸŃŃŃĐż Đș ŃĐ”ŃĐČĐ”ŃĐ°ĐŒ ĐČ ĐșлаŃŃĐ”ŃĐ” ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃŃ
ŃĐ·Đ»ĐŸĐČ Erlang. ĐŃлО ĐČŃ ĐœĐ” Ń
ĐŸŃĐžŃĐ” ŃДгОŃŃŃĐžŃĐŸĐČаŃŃ ĐżŃĐŸŃĐ”ŃŃ Đž ĐČĐŒĐ”ŃŃĐŸ ŃŃĐŸĐłĐŸ ŃŃŃлаДŃĐ”ŃŃ ĐœĐ° ĐœĐ”ĐłĐŸ, ĐžŃĐżĐŸĐ»ŃĐ·ŃŃ Đ”ĐłĐŸ PID, ĐČĐ°ĐŒ ŃлДЎŃĐ”Ń ĐŸĐżŃŃŃĐžŃŃ Đ°ŃĐłŃĐŒĐ”ĐœŃ match, ĐžŃĐżĐŸĐ»ŃĐ·ŃŃ ĐČĐŒĐ”ŃŃĐŸ ŃŃĐŸĐłĐŸ ŃŃĐœĐșŃОѠstart_link/3ОлО start/3. CallbackModuleâ ŃŃĐŸ ĐžĐŒŃ ĐŒĐŸĐŽŃĐ»Ń, ĐČ ĐșĐŸŃĐŸŃĐŸĐŒ ŃĐ°Đ·ĐŒĐ”ŃĐ”ĐœŃ ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃĐ” ŃŃĐœĐșŃОО ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа, ArgumentsŃĐČĐ»ŃĐ”ŃŃŃ ĐŽĐ”ĐčŃŃĐČĐžŃДлŃĐœŃĐŒ «ŃĐ”ŃĐŒĐžĐœĐŸĐŒÂ» Erlang, ĐșĐŸŃĐŸŃŃĐč пДŃДЎаДŃŃŃ ŃŃĐœĐșŃОО ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа init/1, а ŃаĐșжД OptionsŃĐČĐ»ŃĐ”ŃŃŃ ŃпОŃĐșĐŸĐŒ, ĐșĐŸŃĐŸŃŃĐč ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ĐČĐ°ĐŒ ŃĐșазаŃŃ ĐżĐ°ŃĐ°ĐŒĐ”ŃŃŃ ŃĐżŃаĐČĐ»Đ”ĐœĐžŃ ĐżĐ°ĐŒŃŃŃŃ, ŃаĐșОД ĐșаĐș fullsweep_afterО heapsize, а ŃаĐșжД ŃŃаŃŃĐžŃĐŸĐČĐșŃ Đž паŃĐ°ĐŒĐ”ŃŃŃ ĐŸŃлаЎĐșĐž.
Đ ĐœĐ°ŃĐ”ĐŒ ĐżŃĐžĐŒĐ”ŃĐ” ĐŒŃ ĐČŃĐ·ŃĐČĐ°Đ”ĐŒÂ start_link/4, ŃДгОŃŃŃĐžŃŃŃ ĐżŃĐŸŃĐ”ŃŃ Ń ŃĐ”ĐŒ жД ĐžĐŒĐ”ĐœĐ”ĐŒ, ŃŃĐŸ Đž ĐŒĐŸĐŽŃĐ»Ń ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа, Ń ĐżĐŸĐŒĐŸŃŃŃ ĐŒĐ°ĐșŃĐŸŃа ?MODULE. ĐŃĐŸŃ ĐŒĐ°ĐșŃĐŸŃ ŃŃĐ°ĐœŃлОŃŃĐ”ŃŃŃ ĐČ ĐžĐŒŃ ĐŒĐŸĐŽŃĐ»Ń ĐżŃДпŃĐŸŃĐ”ŃŃĐŸŃĐŸĐŒ ĐżŃĐž ĐșĐŸĐŒĐżĐžĐ»ŃŃОО ĐșĐŸĐŽĐ°. ĐŃДгЎа ĐżĐŸĐ»Đ”Đ·ĐœĐŸ ĐœĐ°Đ·ŃĐČаŃŃ ŃĐČĐŸĐ” ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” ĐżŃĐ”ĐČĐŽĐŸĐœĐžĐŒĐŸĐŒ, ŃĐŸĐČпаЎаŃŃĐžĐŒ Ń ĐžĐŒĐ”ĐœĐ”ĐŒ ĐŒĐŸĐŽŃĐ»Ń, ĐČ ĐșĐŸŃĐŸŃĐŸĐŒ ĐŸĐœĐŸ ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐŸ. ĐŃ ĐœĐ” пДŃĐ”ĐŽĐ°Đ”ĐŒ аŃĐłŃĐŒĐ”ĐœŃŃ, ĐżŃĐŸŃŃĐŸ ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»ŃŃ ĐżŃŃŃĐŸĐč ŃпОŃĐŸĐș. ХпОŃĐŸĐș ĐŸĐżŃĐžĐč ŃаĐșжД ĐżŃŃŃ:
start_link() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
ĐŃĐ”ĐČĐžĐŽĐœĐ°Ń ŃĐ°Đ·ĐœĐžŃа ĐŒĐ”Đ¶ĐŽŃ ŃŃĐœĐșŃĐžŃĐŒĐžÂ start_linkО startзаĐșĐ»ŃŃаДŃŃŃ ĐČ ŃĐŸĐŒ, ŃŃĐŸÂ start_linkĐżŃĐŸŃĐ”ŃŃ ŃĐČŃĐ·ŃĐČаДŃŃŃ Ń Đ”ĐłĐŸ ŃĐŸĐŽĐžŃĐ”Đ»Đ”ĐŒ, ŃаŃĐ” ĐČŃĐ”ĐłĐŸ Ń ŃŃпДŃĐČĐžĐ·ĐŸŃĐŸĐŒ, а start ŃŃĐŸ ĐœĐ” ŃаĐș. ĐŃĐŸ заŃĐ»ŃжОĐČĐ°Đ”Ń ŃĐșĐ°Đ·Đ°ĐœĐžŃ, ĐżĐŸŃĐșĐŸĐ»ŃĐșŃ ĐŸŃĐČĐ”ŃŃŃĐČĐ”ĐœĐœĐŸŃŃŃ Đ·Đ° ĐżŃĐžĐČŃĐ·ĐșŃ Đș ŃŃпДŃĐČĐžĐ·ĐŸŃŃ Đ»Đ”Đ¶ĐžŃ ĐœĐ° ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐž OTP. Đ€ŃĐœĐșŃОО startŃаŃŃĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃŃŃŃŃ ĐżŃĐž ŃĐ”ŃŃĐžŃĐŸĐČĐ°ĐœĐžĐž ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ ĐŸĐ±ĐŸĐ»ĐŸŃĐșĐž, ĐżĐŸŃŃĐŸĐŒŃ ĐŸŃОбĐșа ĐČĐČĐŸĐŽĐ°, ĐČŃĐ·ŃĐČаŃŃĐ°Ń ŃĐ±ĐŸĐč ĐżŃĐŸŃĐ”ŃŃа ĐŸĐ±ĐŸĐ»ĐŸŃĐșĐž, ĐœĐ” ĐżĐŸĐČлОŃĐ”Ń ĐœĐ° ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”. ĐŃĐ” ŃĐŸŃĐŒŃ ŃŃĐœĐșŃĐžĐč startО start_linkĐČĐŸĐ·ĐČŃаŃĐŸĐČ {ok, Pid}.
Đ€ŃĐœĐșŃОО startО start_linkŃĐŸĐ·ĐŽĐ°ĐŽŃŃ ĐœĐŸĐČŃĐč ĐżŃĐŸŃĐ”ŃŃ, ĐșĐŸŃĐŸŃŃĐč ĐČŃĐ·ĐŸĐČĐ”Ń ŃŃĐœĐșŃĐžŃ ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа init(Arguments)Ń ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»Đ”ĐœĐœŃĐŒĐžÂ CallbackModuleпаŃĐ°ĐŒĐ”ŃŃĐ°ĐŒĐžÂ Arguments. Đ€ŃĐœĐșŃОѠinitĐŽĐŸĐ»Đ¶ĐœĐ° ĐžĐœĐžŃОалОзОŃĐŸĐČаŃŃ LoopDataŃĐ”ŃĐČĐ”Ń Đž ĐŽĐŸĐ»Đ¶ĐœĐ° ĐČĐ”ŃĐœŃŃŃ ĐșĐŸŃŃДж ĐČ ŃĐŸŃĐŒĐ”Â {ok, LoopData}. LoopData ŃĐŸĐŽĐ”ŃĐ¶ĐžŃ ĐżĐ”ŃĐČŃĐč ŃĐșĐ·Đ”ĐŒĐżĐ»ŃŃ ĐŽĐ°ĐœĐœŃŃ
ŃĐžĐșла, ĐșĐŸŃĐŸŃŃĐ” бŃĐŽŃŃ ĐżĐ”ŃДЎаĐČаŃŃŃŃ ĐŒĐ”Đ¶ĐŽŃ ŃŃĐœĐșŃĐžŃĐŒĐž ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа. ĐŃлО ĐČŃ Ń
ĐŸŃĐžŃĐ” ŃĐŸŃ
ŃĐ°ĐœĐžŃŃ ĐœĐ”ĐșĐŸŃĐŸŃŃĐ” аŃĐłŃĐŒĐ”ĐœŃŃ, ĐșĐŸŃĐŸŃŃĐ” ĐČŃ ĐżĐ”ŃДЎалО ŃŃĐœĐșŃОО init, ĐČŃ ĐŒĐŸĐ¶Đ”ŃĐ” ŃЎДлаŃŃ ŃŃĐŸ ĐČ ĐżĐ”ŃĐ”ĐŒĐ”ĐœĐœĐŸĐč LoopData. LoopDataĐČ ŃĐ”ŃĐČĐ”ŃĐ” ĐŒĐŸĐœĐžŃĐŸŃĐžĐœĐłĐ° ŃĐ·Đ»ĐŸĐČ Riak â ŃŃĐŸ ŃДзŃĐ»ŃŃĐ°Ń ĐČŃĐ·ĐŸĐČа ŃŃĐœĐșŃОО schedule_broadcast/1Ń Đ·Đ°ĐżĐžŃŃŃ ŃОпа, stateĐżĐŸĐ»Ń ĐșĐŸŃĐŸŃĐŸĐč ĐžĐŒĐ”ŃŃ Đ·ĐœĐ°ŃĐ”ĐœĐžŃ ĐżĐŸ ŃĐŒĐŸĐ»ŃĐ°ĐœĐžŃ:
init([]) ->
%% ХлДЎОŃĐ” за ŃĐŸĐ±ŃŃĐžŃĐŒĐž ĐČĐșĐ»ŃŃĐ”ĐœĐžŃ/ĐČŃĐșĐ»ŃŃĐ”ĐœĐžŃ Ńзла
net_kernel:monitor_nodes(true),
%% ĐаŃŃŃĐŸĐčĐșа ŃаблОŃŃ ETS ĐŽĐ»Ń ĐŸŃŃлДжОĐČĐ°ĐœĐžŃ ŃĐŸŃŃĐŸŃĐœĐžŃ Ńзла
ets:new(?MODULE, [protected,named_table]),
{ok, Schedule_broadcast (#ŃĐŸŃŃĐŸŃĐœĐžĐ”{})}.
Đ„ĐŸŃŃ ĐżŃĐŸŃĐ”ŃŃ-ŃŃпДŃĐČĐžĐ·ĐŸŃ ĐŒĐŸĐ¶Đ”Ń ĐČŃĐ·ĐČаŃŃ ŃŃĐœĐșŃОѠstart_link/4, ŃŃĐœĐșŃĐžŃ ĐČŃĐ·ŃĐČĐ°Đ”Ń ĐŽŃŃĐłĐŸĐč ĐżŃĐŸŃĐ”ŃŃ init/1 : ŃĐŸŃ, ĐșĐŸŃĐŸŃŃĐč ŃĐŸĐ»ŃĐșĐŸ ŃŃĐŸ бŃĐ» ŃĐŸĐ·ĐŽĐ°Đœ. ĐĐŸŃĐșĐŸĐ»ŃĐșŃ ŃДлŃŃ ŃŃĐŸĐłĐŸ ŃĐ”ŃĐČĐ”Ńа ŃĐČĐ»ŃĐ”ŃŃŃ ĐŸĐ±ĐœĐ°ŃŃĐ¶Đ”ĐœĐžĐ”, запОŃŃ Đž ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐŸ ĐŽĐŸŃŃŃĐżĐœĐŸŃŃĐž ĐżĐŸĐŽŃĐ”ŃĐČĐžŃĐŸĐČ Riak, ĐžĐœĐžŃОалОзаŃĐžŃ Đ·Đ°ĐżŃаŃĐžĐČĐ°Đ”Ń ŃŃĐ”ĐŽŃ ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐžŃ Erlang ŃĐČĐ”ĐŽĐŸĐŒĐ»ŃŃŃ Đ”Đ” ĐŸ ŃаĐșĐžŃ
ŃĐŸĐ±ŃŃĐžŃŃ
Đž ŃĐŸŃŃĐŸĐžŃ ĐžĐ· ŃаблОŃŃ ĐŽĐ»Ń Ń
ŃĐ°ĐœĐ”ĐœĐžŃ ŃŃĐŸĐč ĐžĐœŃĐŸŃĐŒĐ°ŃОО. ĐŃĐŸ ĐœĐ”ĐŸĐ±Ń
ĐŸĐŽĐžĐŒĐŸ ŃЎДлаŃŃ ĐżŃĐž ĐžĐœĐžŃОалОзаŃОО, ĐżĐŸŃĐșĐŸĐ»ŃĐșŃ ĐČŃĐ·ĐŸĐČŃ Đș ŃĐ”ŃĐČĐ”ŃŃ Đ·Đ°ĐČĐ”ŃŃĐžŃŃŃ ĐœĐ”ŃЎаŃĐœĐŸ, Đ”ŃлО ŃŃа ŃŃŃŃĐșŃŃŃа Đ”ŃĐ” ĐœĐ” ŃŃŃĐ”ŃŃĐČŃĐ”Ń. ĐДлаĐčŃĐ” ŃĐŸĐ»ŃĐșĐŸ ŃĐŸ, ŃŃĐŸ ĐœĐ”ĐŸĐ±Ń
ĐŸĐŽĐžĐŒĐŸ, Đž ĐŒĐžĐœĐžĐŒĐžĐ·ĐžŃŃĐčŃĐ” ĐŸĐżĐ”ŃаŃОО ĐČ ĐČаŃĐ”Đč ŃŃĐœĐșŃОО init, ĐżĐŸŃĐșĐŸĐ»ŃĐșŃ ĐČŃĐ·ĐŸĐČ initĐČŃĐżĐŸĐ»ĐœŃĐ”ŃŃŃ ŃĐžĐœŃ
ŃĐŸĐœĐœĐŸ, ŃŃĐŸ ĐżŃĐ”ĐŽĐŸŃĐČŃаŃĐ°Đ”Ń Đ·Đ°ĐżŃŃĐș ĐČŃĐ”Ń
ĐŽŃŃгОŃ
ĐżŃĐŸŃĐ”ŃŃĐŸĐČ ĐŽĐŸ ŃĐ”Ń
ĐżĐŸŃ, ĐżĐŸĐșа ŃŃĐœĐșŃĐžŃ ĐœĐ” ĐČĐ”ŃĐœĐ”Ń ŃĐČĐŸĐč ŃДзŃĐ»ŃŃаŃ.
ĐŃлО ĐČŃ Ń
ĐŸŃĐžŃĐ” ĐŸŃĐżŃаĐČĐžŃŃ ŃĐžĐœŃ
ŃĐŸĐœĐœĐŸĐ” ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐœĐ° ŃĐČĐŸĐč ŃĐ”ŃĐČĐ”Ń, ĐČŃ Đ±ŃĐŽĐ”ŃĐ” ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ŃŃĐœĐșŃОѠgen_server:call/2. ĐŃĐžĐœŃ
ŃĐŸĐœĐœŃĐ” ĐČŃĐ·ĐŸĐČŃ ĐČŃĐżĐŸĐ»ĐœŃŃŃŃŃ Ń ĐżĐŸĐŒĐŸŃŃŃ ŃŃĐœĐșŃОО gen_server:cast/2. ĐаĐČаĐčŃĐ” ĐČĐŸĐ·ŃĐŒĐ”ĐŒ ĐŽĐČĐ” ŃŃĐœĐșŃОО Оз Service API Riak; ĐŸŃŃалŃĐœŃŃ ŃаŃŃŃ ĐșĐŸĐŽĐ° ĐŒŃ ĐżŃĐ”ĐŽĐŸŃŃаĐČĐžĐŒ ĐżĐŸĐ·Đ¶Đ”. ĐĐœĐž ĐČŃĐ·ŃĐČаŃŃŃŃ ĐșĐ»ĐžĐ”ĐœŃŃĐșĐžĐŒĐž ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒĐž Đž ĐżŃĐžĐČĐŸĐŽŃŃ Đș ĐŸŃĐżŃаĐČĐșĐ” ŃĐžĐœŃ
ŃĐŸĐœĐœĐŸĐłĐŸ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ ŃĐ”ŃĐČĐ”ŃĐœĐŸĐŒŃ ĐżŃĐŸŃĐ”ŃŃŃ, заŃДгОŃŃŃĐžŃĐŸĐČĐ°ĐœĐœĐŸĐŒŃ Ń ŃĐ”ĐŒ жД ĐžĐŒĐ”ĐœĐ”ĐŒ, ŃŃĐŸ Đž ĐŒĐŸĐŽŃĐ»Ń. ĐбŃаŃĐžŃĐ” ĐČĐœĐžĐŒĐ°ĐœĐžĐ”, ŃŃĐŸ ĐżŃĐŸĐČĐ”ŃĐșа ĐŽĐ°ĐœĐœŃŃ
, ĐŸŃĐżŃаĐČĐ»ŃĐ”ĐŒŃŃ
ĐœĐ° ŃĐ”ŃĐČĐ”Ń, ĐŽĐŸĐ»Đ¶ĐœĐ° ĐČŃĐżĐŸĐ»ĐœŃŃŃŃŃ ĐœĐ° ŃŃĐŸŃĐŸĐœĐ” ĐșĐ»ĐžĐ”ĐœŃа. ĐŃлО ĐșĐ»ĐžĐ”ĐœŃ ĐŸŃĐżŃаĐČĐžŃ ĐœĐ”ĐČĐ”ŃĐœŃŃ ĐžĐœŃĐŸŃĐŒĐ°ŃĐžŃ, ŃĐ”ŃĐČĐ”Ń ĐŸŃĐșĐ»ŃŃĐžŃŃŃ.
service_up(Id, Pid) ->
gen_server:call(?MODULE, {service_up, Id, Pid}).
service_down(Id) ->
gen_server:call(?MODULE, {service_down, Id}).
ĐаĐș ŃĐŸĐ»ŃĐșĐŸ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ ĐżĐŸĐ»ŃŃĐ”ĐœŃ, ĐżŃĐŸŃĐ”ŃŃ gen_serverĐČŃĐ·ŃĐČĐ°Đ”Ń ŃŃĐœĐșŃĐžŃ ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа, handle_call/3ĐŸĐ±ŃабаŃŃĐČаŃŃŃŃ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ ĐČ ŃĐŸĐŒ жД ĐżĐŸŃŃĐŽĐșĐ”, ĐČ ĐșĐŸŃĐŸŃĐŸĐŒ ĐŸĐœĐž бŃлО ĐŸŃĐżŃаĐČĐ»Đ”ĐœŃ:
handle_call({service_up, Id, Pid}, _From, State) ->
%% ĐĐ±ĐœĐŸĐČĐžŃŃ ĐœĐ°Đ±ĐŸŃ Đ°ĐșŃĐžĐČĐœŃŃ
ŃĐ”ŃĐČĐžŃĐŸĐČ Đ»ĐŸĐșалŃĐœĐŸ
Services = ordsets:add_element(Id, State#state.services),
S2 = State#state { Services = Services } ,
%% УЎалОŃĐ” ĐČŃĐ” ŃŃŃĐ”ŃŃĐČŃŃŃОД mrefs ĐŽĐ»Ń ŃŃĐŸĐč ŃĐ»ŃжбŃ
delete_service_mref(Id),
%% ĐаŃŃŃĐŸĐčŃĐ” ĐŒĐŸĐœĐžŃĐŸŃ ĐŽĐ»Ń Pid, ââĐżŃДЎŃŃаĐČĐ»ŃŃŃĐ”ĐłĐŸ ŃŃŃ ŃĐ»ŃжбŃ
Mref = erlang:monitor(process, Pid),
erlang:put(Mref, Id),
erlang:put( Id, Mref),
%% ĐĐ±ĐœĐŸĐČĐžŃĐ” ĐœĐ°ŃŃ Đ»ĐŸĐșалŃĐœŃŃ ŃаблОŃŃ ETS Đž ŃŃĐ°ĐœŃлОŃŃĐčŃĐ”
S3 = local_update(S2),
{reply, ok, update_avsn(S3)};
handle_call({service_down, Id}, _From, State) ->
%% ĐĐ±ĐœĐŸĐČĐžŃŃ ĐœĐ°Đ±ĐŸŃ Đ°ĐșŃĐžĐČĐœŃŃ
ŃĐ”ŃĐČĐžŃĐŸĐČ Đ»ĐŸĐșалŃĐœĐŸ
Services = ordsets:del_element(Id, State#state.services),
S2 = State#state { Services = Services },
% % УЎалОŃŃ ĐČŃĐ” ŃŃŃĐ”ŃŃĐČŃŃŃОД mrefs ĐŽĐ»Ń ŃŃĐŸĐč ŃĐ»ŃжбŃ
delete_service_mref(Id),
%% ĐĐ±ĐœĐŸĐČĐžŃŃ Đ»ĐŸĐșалŃĐœŃŃ ŃаблОŃŃ ETS Đž ŃŃĐ°ĐœŃлОŃĐŸĐČаŃŃ
S3 = local_update(S2),
{reply, ok, update_avsn(S3)};
ĐбŃаŃĐžŃĐ” ĐČĐœĐžĐŒĐ°ĐœĐžĐ” ĐœĐ° ĐČĐŸĐ·ĐČŃаŃĐ°Đ”ĐŒĐŸĐ” Đ·ĐœĐ°ŃĐ”ĐœĐžĐ” ŃŃĐœĐșŃОО ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа. ĐĐŸŃŃДж ŃĐŸĐŽĐ”ŃĐ¶ĐžŃ ŃĐżŃаĐČĐ»ŃŃŃĐžĐč аŃĐŸĐŒÂ reply, ŃĐŸĐŸĐ±ŃаŃŃĐžĐč ŃĐœĐžĐČĐ”ŃŃалŃĐœĐŸĐŒŃ ĐșĐŸĐŽŃ, ŃŃĐŸÂ gen_serverĐČŃĐŸŃĐŸĐč ŃĐ»Đ”ĐŒĐ”ĐœŃ ĐșĐŸŃŃДжа (ĐșĐŸŃĐŸŃŃĐč ĐČ ĐŸĐ±ĐŸĐžŃ
ŃĐ»ŃŃаŃŃ
ŃĐČĐ»ŃĐ”ŃŃŃ Đ°ŃĐŸĐŒĐŸĐŒÂ ok) ŃĐČĐ»ŃĐ”ŃŃŃ ĐŸŃĐČĐ”ŃĐŸĐŒ, ĐČĐŸĐ·ĐČŃаŃĐ°Đ”ĐŒŃĐŒ ĐșĐ»ĐžĐ”ĐœŃŃ. ĐąŃĐ”ŃĐžĐč ŃĐ»Đ”ĐŒĐ”ĐœŃ ĐșĐŸŃŃДжа â new State, ĐșĐŸŃĐŸŃŃĐč ĐČ ĐœĐŸĐČĐŸĐč ĐžŃĐ”ŃаŃОО ŃĐ”ŃĐČĐ”Ńа пДŃДЎаДŃŃŃ ĐČ ĐșаŃĐ”ŃŃĐČĐ” ŃŃĐ”ŃŃĐ”ĐłĐŸ аŃĐłŃĐŒĐ”ĐœŃа ŃŃĐœĐșŃОО handle_call/3; ĐČ ĐŸĐ±ĐŸĐžŃ
ŃĐ»ŃŃаŃŃ
ŃĐŸŃŃĐŸŃĐœĐžĐ” ĐŸĐ±ĐœĐŸĐČĐ»ŃĐ”ŃŃŃ, ŃŃĐŸĐ±Ń ĐŸŃŃазОŃŃ ĐœĐŸĐČŃĐč ĐœĐ°Đ±ĐŸŃ ĐŽĐŸŃŃŃĐżĐœŃŃ
ŃŃĐ»ŃĐł. ĐŃĐłŃĐŒĐ”ĐœŃ _From пŃДЎŃŃаĐČĐ»ŃĐ”Ń ŃĐŸĐ±ĐŸĐč ĐșĐŸŃŃДж, ŃĐŸĐŽĐ”ŃжаŃĐžĐč ŃĐœĐžĐșалŃĐœŃŃ ŃŃŃĐ»ĐșŃ ĐœĐ° ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” Đž PID ĐșĐ»ĐžĐ”ĐœŃŃĐșĐŸĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа. ĐĐ”ŃŃ ĐșĐŸŃŃДж ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ŃŃŃ ĐČ Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”ŃĐœŃŃ
ŃŃĐœĐșŃĐžŃŃ
, ĐșĐŸŃĐŸŃŃĐ” ĐŒŃ ĐœĐ” бŃĐŽĐ”ĐŒ ĐŸĐ±ŃŃжЎаŃŃ ĐČ ŃŃĐŸĐč глаĐČĐ”. Đ Đ±ĐŸĐ»ŃŃĐžĐœŃŃĐČĐ” ŃĐ»ŃŃаДĐČ ĐČĐ°ĐŒ ŃŃĐŸ ĐœĐ” ĐżĐŸĐœĐ°ĐŽĐŸĐ±ĐžŃŃŃ.
ĐĐŸĐŽŃлѠgen_serverŃĐŸĐŽĐ”ŃĐ¶ĐžŃ ŃĐŸĐ±ŃŃĐČĐ”ĐœĐœŃĐ” ĐŒĐ”Ń
Đ°ĐœĐžĐ·ĐŒŃ Đž ĐŸĐłŃĐ°Đ¶ĐŽĐ”ĐœĐžŃ, ĐșĐŸŃĐŸŃŃĐ” ĐżŃĐŸŃ
ĐŸĐŽŃŃ ĐżĐŸĐŽ ĐżĐŸĐČĐ”ŃŃ
ĐœĐŸŃŃŃŃ. ĐŃлО ĐČĐ°Ń ĐșĐ»ĐžĐ”ĐœŃ ĐŸŃĐżŃаĐČĐ»ŃĐ”Ń ŃĐžĐœŃ
ŃĐŸĐœĐœĐŸĐ” ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐœĐ° ĐČĐ°Ń ŃĐ”ŃĐČĐ”Ń, а ĐČŃ ĐœĐ” ĐżĐŸĐ»ŃŃаДŃĐ” ĐŸŃĐČĐ”Ńа ĐČ ŃĐ”ŃĐ”ĐœĐžĐ” ĐżŃŃĐž ŃĐ”ĐșŃĐœĐŽ, ĐżŃĐŸŃĐ”ŃŃ ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐžŃ ŃŃĐœĐșŃОО call/2заĐČĐ”ŃŃаДŃŃŃ. ĐŃ ĐŒĐŸĐ¶Đ”ŃĐ” пДŃĐ”ĐŸĐżŃДЎДлОŃŃ ŃŃĐŸ, ĐžŃĐżĐŸĐ»ŃĐ·ŃŃ gen_server:call(Name, Message, Timeout)Đ·ĐœĐ°ŃĐ”ĐœĐžĐ”Â TimeoutĐČ ĐŒĐžĐ»Đ»ĐžŃĐ”ĐșŃĐœĐŽĐ°Ń
ОлО аŃĐŸĐŒÂ infinity.
ĐĐ”ŃĐČĐŸĐœĐ°ŃалŃĐœĐŸ ĐŒĐ”Ń
Đ°ĐœĐžĐ·ĐŒ ŃаĐčĐŒ-аŃŃа бŃĐ» ĐČĐČĐ”ĐŽĐ”Đœ ĐŽĐ»Ń Đ·Đ°ŃĐžŃŃ ĐŸŃ ĐČĐ·Đ°ĐžĐŒĐŸĐ±Đ»ĐŸĐșĐžŃĐŸĐČĐŸĐș, гаŃĐ°ĐœŃĐžŃŃŃ, ŃŃĐŸ ŃĐ”ŃĐČĐ”ŃŃ, ĐșĐŸŃĐŸŃŃĐ” ŃĐ»ŃŃаĐčĐœĐŸ Đ·ĐČĐŸĐœŃŃ ĐŽŃŃĐł ĐŽŃŃĐłŃ, ĐżĐŸ ŃĐŒĐŸĐ»ŃĐ°ĐœĐžŃ Đ·Đ°ĐČĐ”ŃŃаŃŃŃŃ ĐżĐŸŃлД ŃаĐčĐŒ-аŃŃа. ĐаŃĐ”ĐŒ ĐŸŃŃлДжОĐČаДŃŃŃ ĐŸŃŃĐ”Ń ĐŸ ŃĐ±ĐŸĐ”, ŃŃĐŸ ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ĐŸŃлаЎОŃŃ Đž ĐžŃĐżŃаĐČĐžŃŃ ŃŃŃ ĐŸŃОбĐșŃ. ĐĐŸĐ»ŃŃĐžĐœŃŃĐČĐŸ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč бŃĐŽŃŃ ĐœĐŸŃĐŒĐ°Đ»ŃĐœĐŸ ŃĐ°Đ±ĐŸŃаŃŃ Ń ĐżŃŃĐžŃĐ”ĐșŃĐœĐŽĐœŃĐŒ ŃаĐčĐŒĐ°ŃŃĐŸĐŒ, ĐœĐŸ ĐżŃĐž ĐŸŃĐ”ĐœŃ Đ±ĐŸĐ»ŃŃĐžŃ
ĐœĐ°ĐłŃŃĐ·ĐșаŃ
ĐČĐ°ĐŒ ĐŒĐŸĐ¶Đ”Ń ĐżĐŸŃŃĐ”Đ±ĐŸĐČаŃŃŃŃ Đ±ĐŸĐ»Đ”Đ” ŃĐŸĐœĐșĐ°Ń ĐœĐ°ŃŃŃĐŸĐčĐșа ŃŃĐŸĐłĐŸ Đ·ĐœĐ°ŃĐ”ĐœĐžŃ Đž, ĐČĐŸĐ·ĐŒĐŸĐ¶ĐœĐŸ, ЎажД Đ”ĐłĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžĐ”Â infinity; ŃŃĐŸŃ ĐČŃĐ±ĐŸŃ Đ·Đ°ĐČĐžŃĐžŃ ĐŸŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ. ĐĐ”ŃŃ ĐșŃĐžŃĐžŃĐ”ŃĐșĐžĐč ĐșĐŸĐŽ ĐČ Erlang/OTP ĐžŃĐżĐŸĐ»ŃĐ·ŃДѠinfinity. Đ ĐșĐŸĐŽĐ” Riak, ĐČ Đ·Đ°ĐČĐžŃĐžĐŒĐŸŃŃĐž ĐŸŃ ĐŒĐ”ŃŃĐŸĐżĐŸĐ»ĐŸĐ¶Đ”ĐœĐžŃ, ĐŽĐ»Ń ŃаĐčĐŒĐ°ŃŃа ĐžŃĐżĐŸĐ»ŃĐ·ŃŃŃŃŃ ŃĐ°Đ·ĐœŃĐ” Đ·ĐœĐ°ŃĐ”ĐœĐžŃ: infinityŃаŃŃĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ŃŃŃ ĐŒĐ”Đ¶ĐŽŃ ŃĐČŃĐ·Đ°ĐœĐœŃĐŒĐž ĐČĐœŃŃŃĐ”ĐœĐœĐžĐŒĐž ĐșĐŸĐŒĐżĐŸĐœĐ”ĐœŃĐ°ĐŒĐž, а Đ·ĐœĐ°ŃĐ”ĐœĐžĐ”Â Timeout, Đ·Đ°ĐŽĐ°ĐœĐœĐŸĐ” ĐżĐŸĐ»ŃĐ·ĐŸĐČаŃДлŃŃĐșĐžĐŒ паŃĐ°ĐŒĐ”ŃŃĐŸĐŒ, ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ŃŃŃ ĐČ ŃĐ”Ń
ŃĐ»ŃŃаŃŃ
, ĐșĐŸĐłĐŽĐ° ĐșĐ»ĐžĐ”ĐœŃŃĐșĐŸĐ” ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ”, ĐČĐ·Đ°ĐžĐŒĐŸĐŽĐ”ĐčŃŃĐČŃŃŃДД Ń Riak, ŃĐșĐ°Đ·Đ°Đ»ĐŸ, ŃŃĐŸ ĐŸĐżĐ”ŃаŃĐžŃ ĐžĐŒĐ”Đ”Ń ŃаĐčĐŒ-аŃŃ.
ĐŃĐž ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžĐž ŃŃĐœĐșŃОО gen_server:call/2ĐŽŃŃгОД ĐŒĐ”ŃŃ Đ·Đ°ŃĐžŃŃ ĐŸĐ±ŃабаŃŃĐČаŃŃ ŃĐ»ŃŃаĐč, ĐșĐŸĐłĐŽĐ° ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐŸŃĐżŃаĐČĐ»ŃĐ”ŃŃŃ ĐœĐ° ĐœĐ”ŃŃŃĐ”ŃŃĐČŃŃŃĐžĐč ŃĐ”ŃĐČĐ”Ń, Đž ŃĐ»ŃŃаĐč, ĐșĐŸĐłĐŽĐ° ŃĐ”ŃĐČĐ”Ń ĐČŃŃ
ĐŸĐŽĐžŃ ĐžĐ· ŃŃŃĐŸŃ ĐżĐ”ŃДЎ ĐŸŃĐżŃаĐČĐșĐŸĐč ĐŸĐ±ŃаŃĐœĐŸ ŃĐČĐŸĐ”ĐłĐŸ ĐŸŃĐČĐ”Ńа. Đ ĐŸĐ±ĐŸĐžŃ
ŃĐ»ŃŃаŃŃ
ĐČŃĐ·ŃĐČаŃŃĐžĐč ĐżŃĐŸŃĐ”ŃŃ ĐŸŃŃĐ°ĐœĐŸĐČĐžŃŃŃ. Р«ŃĐžŃŃĐŸĐŒÂ» ĐŃĐ»Đ°ĐœĐłĐ” ĐŸŃĐżŃаĐČĐșа ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ, ĐșĐŸŃĐŸŃĐŸĐ” ĐœĐžĐșĐŸĐłĐŽĐ° ĐœĐ” ĐŸĐ±ŃабаŃŃĐČаДŃŃŃ (ŃĐŸĐżĐŸŃŃаĐČĐ»Đ”ĐœĐžĐ” Ń ĐŸĐ±ŃазŃĐŸĐŒ) ĐČ ĐżŃĐ”ĐŽĐ»ĐŸĐ¶Đ”ĐœĐžĐž ĐżŃĐžĐ”ĐŒĐ°, ŃĐČĐ»ŃĐ”ŃŃŃ ĐŸŃОбĐșĐŸĐč, ĐșĐŸŃĐŸŃĐ°Ń ĐŒĐŸĐ¶Đ”Ń ĐČŃĐ·ĐČаŃŃ ŃŃĐ”ŃĐșŃ ĐżĐ°ĐŒŃŃĐž. ЧŃĐŸĐ±Ń ĐżŃĐ”ĐŸĐŽĐŸĐ»Đ”ŃŃ ŃŃŃ ĐżŃĐŸĐ±Đ»Đ”ĐŒŃ, Riak ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń ĐŽĐČĐ” ŃĐ°Đ·ĐœŃĐ” ŃŃŃаŃДгОО, ĐșĐ°Đ¶ĐŽĐ°Ń ĐžĐ· ĐșĐŸŃĐŸŃŃŃ
ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń Â«ĐŸĐ±ŃĐ”ĐŒĐœŃД» ĐżŃĐ”ĐŽĐ»ĐŸĐ¶Đ”ĐœĐžŃ ŃĐŸĐżĐŸŃŃаĐČĐ»Đ”ĐœĐžŃ. Đ ĐŒĐ”ŃŃаŃ
, гЎД ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐŒĐŸĐ¶Đ”Ń Đ±ŃŃŃ ĐŸŃĐżŃаĐČĐ»Đ”ĐœĐŸ ĐżĐŸĐ»ŃĐ·ĐŸĐČаŃĐ”Đ»Đ”ĐŒ, ĐœĐ”ŃаŃĐżĐŸĐ·ĐœĐ°ĐœĐœĐŸĐ” ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐŒĐŸĐ¶Đ”Ń Đ±ŃŃŃ ĐœĐ”Đ·Đ°ĐŒĐ”ŃĐœĐŸ забŃŃĐŸ. ĐŃлО ŃаĐșĐŸĐ” ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐŒĐŸĐ¶Đ”Ń ĐżŃĐžĐčŃĐž ŃĐŸĐ»ŃĐșĐŸ ĐŸŃ ĐČĐœŃŃŃĐ”ĐœĐœĐžŃ
ĐșĐŸĐŒĐżĐŸĐœĐ”ĐœŃĐŸĐČ Riak, ŃŃĐŸŃ ŃĐ»ŃŃаĐč ŃŃĐžŃаДŃŃŃ ĐŸŃОбĐșĐŸĐč, ĐșĐŸŃĐŸŃĐ°Ń Đ·Đ°ŃĐ”ĐŒ ĐČŃĐ·ŃĐČĐ°Đ”Ń ĐČĐœŃŃŃĐ”ĐœĐœĐžĐč ĐŸŃŃĐ”Ń ĐŸ ŃĐ±ĐŸĐ”, ĐżŃДЎŃĐżŃДжЎаŃŃĐžĐč ĐŸĐ± ĐŸŃОбĐșĐ”, Đž пДŃДзагŃŃĐ·ĐșŃ ŃĐ°Đ±ĐŸŃĐ”ĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа, ĐșĐŸŃĐŸŃŃĐč Đ”ĐłĐŸ ĐżĐŸĐ»ŃŃОл.
ĐĐ”ŃДЎаŃа аŃĐžĐœŃ
ŃĐŸĐœĐœŃŃ
ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč ŃĐ°Đ±ĐŸŃĐ°Đ”Ń ŃаĐșĐžĐŒ жД ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ. ĐĄĐŸĐŸĐ±ŃĐ”ĐœĐžŃ ĐŸŃĐżŃаĐČĐ»ŃŃŃŃŃ Đ°ŃĐžĐœŃ
ŃĐŸĐœĐœĐŸ ĐœĐ° ĐŸĐ±ŃĐžĐč ŃĐ”ŃĐČĐ”Ń Đž ĐŸĐ±ŃабаŃŃĐČаŃŃŃŃ ŃŃĐœĐșŃОДĐč ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа handle_cast/2. Đ€ŃĐœĐșŃĐžŃ ĐŽĐŸĐ»Đ¶ĐœĐ° ĐČĐŸĐ·ĐČŃаŃаŃŃ ĐșĐŸŃŃДж ĐČОЎа {reply, NewState}. ĐŃĐžĐœŃ
ŃĐŸĐœĐœŃĐ” ĐČŃĐ·ĐŸĐČŃ ĐžŃĐżĐŸĐ»ŃĐ·ŃŃŃŃŃ, ĐșĐŸĐłĐŽĐ° ĐŸŃĐČĐ”Ń ŃĐ”ŃĐČĐ”Ńа ĐœĐ” ŃŃДбŃĐ”ŃŃŃ Đž ŃŃŃĐ”ŃŃĐČŃĐ”Ń ĐœĐ”Đ±ĐŸĐ»ŃŃĐŸĐč ŃĐžŃĐș ŃĐŸĐ·ĐŽĐ°ĐœĐžŃ Đ±ĐŸĐ»ŃŃĐ”ĐłĐŸ ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČа ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč, ŃĐ”ĐŒ ŃĐ”ŃĐČĐ”Ń ĐŒĐŸĐ¶Đ”Ń ĐŸĐ±ŃĐ°Đ±ĐŸŃаŃŃ. Đ ŃĐ”Ń
ŃĐ»ŃŃаŃŃ
, ĐșĐŸĐłĐŽĐ° ĐŸŃĐČĐ”Ń ĐœĐ” ĐŸĐ±ŃзаŃĐ”Đ»Đ”Đœ, ĐœĐŸ ĐŒŃ Ń
ĐŸŃĐžĐŒ ĐŽĐŸĐ¶ĐŽĐ°ŃŃŃŃ ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșĐž ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ, ĐżŃДжЎД ŃĐ”ĐŒ ĐżĐŸĐČŃĐŸŃĐœĐŸ пДŃДЎаĐČаŃŃ ĐœĐŸĐČŃĐč запŃĐŸŃ, ĐŒŃ Đ±ŃĐŽĐ”ĐŒ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ŃŃĐœĐșŃОѠgen_server:call/2, ĐșĐŸŃĐŸŃĐ°Ń ĐČĐŸĐ·ĐČŃаŃĐ°Đ”Ń Đ°ŃĐŸĐŒÂ okĐŸĐ±ŃаŃĐœĐŸ. ĐŃДЎŃŃаĐČŃŃĐ” ŃДбД ĐżŃĐŸŃĐ”ŃŃ, ĐșĐŸŃĐŸŃŃĐč ĐłĐ”ĐœĐ”ŃĐžŃŃĐ”Ń Đ·Đ°ĐżĐžŃĐž Đ±Đ°Đ·Ń ĐŽĐ°ĐœĐœŃŃ
Ń Đ±ĐŸĐ»ŃŃĐ”Đč ŃĐșĐŸŃĐŸŃŃŃŃ, ŃĐ”ĐŒ ĐŒĐŸĐ¶Đ”Ń ĐżĐŸŃŃДблŃŃŃ Riak. ĐŃĐżĐŸĐ»ŃĐ·ŃŃ Đ°ŃĐžĐœŃ
ŃĐŸĐœĐœŃĐ” ĐČŃĐ·ĐŸĐČŃ, ĐŒŃ ŃĐžŃĐșŃĐ”ĐŒ Đ·Đ°ĐżĐŸĐ»ĐœĐžŃŃ ĐżĐŸŃŃĐŸĐČŃĐč ŃŃĐžĐș ĐżŃĐŸŃĐ”ŃŃа Đž, ŃĐ»Đ”ĐŽĐŸĐČаŃДлŃĐœĐŸ, ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ĐČŃŃ ĐżĐ°ĐŒŃŃŃ Ńзла Erlang. ĐĐ»Ń ŃДгŃлОŃĐŸĐČĐ°ĐœĐžŃ ĐœĐ°ĐłŃŃĐ·ĐșĐž Riak ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń ŃĐČĐŸĐčŃŃĐČа ŃĐ”ŃОалОзаŃОО ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč ŃĐžĐœŃ
ŃĐŸĐœĐœŃŃ
ĐČŃĐ·ĐŸĐČĐŸĐČ gen_server, ĐșĐŸŃĐŸŃŃĐ” ĐŸĐ±ŃабаŃŃĐČаŃŃ ŃлДЎŃŃŃĐžĐč запŃĐŸŃ ŃĐŸĐ»ŃĐșĐŸ ĐżĐŸŃлД ĐżĐŸĐ»ĐœĐŸĐč ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșĐž ĐżŃДЎŃĐŽŃŃĐ”ĐłĐŸ. ĐŃĐŸŃ ĐżĐŸĐŽŃ
ĐŸĐŽ ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ĐžĐ·Đ±Đ”Đ¶Đ°ŃŃ ĐŽĐŸĐ±Đ°ĐČĐ»Đ”ĐœĐžŃ ĐșĐŸĐŽĐ° ŃĐżŃаĐČĐ»Đ”ĐœĐžŃ ĐżĐ”ŃДгŃŃĐ·ĐșĐŸĐč: ĐżĐŸĐŒĐžĐŒĐŸ ĐŸĐ±Đ”ŃпДŃĐ”ĐœĐžŃ ĐżĐ°ŃĐ°Đ»Đ»Đ”Đ»ĐžĐ·ĐŒĐ°, ĐżŃĐŸŃĐ”ŃŃŃ gen_serverĐŒĐŸĐłŃŃ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃŃŃ ĐŽĐ»Ń ĐČĐČĐ”ĐŽĐ”ĐœĐžŃ ŃĐŸŃĐ”Đș ŃĐ”ŃОалОзаŃОО.
ĐаĐș ĐŸŃŃĐ°ĐœĐŸĐČĐžŃŃ ŃĐ”ŃĐČĐ”Ń? Đ ŃŃĐœĐșŃĐžŃŃ
ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа handle_call/3О handle_cast/2ĐČĐŒĐ”ŃŃĐŸ ĐČĐŸĐ·ĐČŃаŃа {reply, Reply, NewState}ОлО {noreply, NewState}ĐŒĐŸĐ¶ĐœĐŸ ĐČĐ”ŃĐœŃŃŃ {stop, Reason, Reply, NewState}ОлО ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČĐ”ĐœĐœĐŸÂ {stop, Reason, NewState}. ЧŃĐŸ-ŃĐŸ ĐŽĐŸĐ»Đ¶ĐœĐŸ ĐČŃĐ·ĐČаŃŃ ŃŃĐŸ ĐČĐŸĐ·ĐČŃаŃĐ°Đ”ĐŒĐŸĐ” Đ·ĐœĐ°ŃĐ”ĐœĐžĐ”, ŃаŃŃĐŸ ŃŃĐŸ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐŸ заĐČĐ”ŃŃĐ”ĐœĐžĐž ŃĐ°Đ±ĐŸŃŃ, ĐŸŃĐżŃаĐČĐ»Đ”ĐœĐœĐŸĐ” ĐœĐ° ŃĐ”ŃĐČĐ”Ń. ĐаĐș ŃĐŸĐ»ŃĐșĐŸ ĐșĐŸŃŃДж ĐŸŃŃĐ°ĐœĐŸĐČĐșĐž, ŃĐŸĐŽĐ”ŃжаŃĐžĐč ReasonĐž ĐżĐŸĐ»ŃŃĐ”ĐœÂ State, ĐŸĐ±ŃĐžĐč ĐșĐŸĐŽ ĐČŃĐżĐŸĐ»ĐœŃĐ”Ń ŃŃĐœĐșŃĐžŃ ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа terminate(Reason, State).
ĐŃа ŃŃĐœĐșŃОѠterminateâ Đ»ŃŃŃДД ĐŒĐ”ŃŃĐŸ ĐŽĐ»Ń ĐČŃŃаĐČĐșĐž ĐșĐŸĐŽĐ° ĐŸŃĐžŃŃĐșĐž ŃĐ”ŃĐČĐ”Ńа State О Đ»ŃбŃŃ
ĐŽŃŃгОŃ
ĐżĐŸŃŃĐŸŃĐœĐœŃŃ
ĐŽĐ°ĐœĐœŃŃ
, ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ĐŒŃŃ
ŃĐžŃŃĐ”ĐŒĐŸĐč. Đ ĐœĐ°ŃĐ”ĐŒ ĐżŃĐžĐŒĐ”ŃĐ” ĐŒŃ ĐŸŃĐżŃаĐČĐ»ŃĐ”ĐŒ ŃĐžĐœĐ°Đ»ŃĐœĐŸĐ” ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐœĐ°ŃĐžĐŒ ŃĐ·Đ»Đ°ĐŒ, ŃŃĐŸĐ±Ń ĐŸĐœĐž Đ·ĐœĐ°Đ»Đž, ŃŃĐŸ ŃŃĐŸŃ ĐŒĐŸĐœĐžŃĐŸŃ Ńзла ŃДпДŃŃ ĐŸŃŃĐ°ĐœĐŸĐČĐ»Đ”Đœ. Đ ŃŃĐŸĐŒ ĐżŃĐžĐŒĐ”ŃĐ” пДŃĐ”ĐŒĐ”ĐœĐœĐ°Ń StateŃĐŸĐŽĐ”ŃĐ¶ĐžŃ Đ·Đ°ĐżĐžŃŃ Ń ĐżĐŸĐ»ŃĐŒĐžÂ statusО peers :
заĐČĐ”ŃŃĐ”ĐœĐžŃ(_Reason, State) ->
%% ĐĄĐŸĐŸĐ±ŃĐžŃĐ” ĐœĐ°ŃĐžĐŒ ŃĐ·Đ»Đ°ĐŒ, ŃŃĐŸ ĐŒŃ ĐŸŃĐșĐ»ŃŃĐ°Đ”ĐŒ
ŃĐžŃĐŸĐșĐŸĐČĐ”ŃаŃДлŃĐœŃŃ ŃаŃŃŃĐ»ĐșŃ(State#state.peers, State#state {status = down }).
ĐŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžĐ” ŃŃĐœĐșŃĐžĐč ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ ĐČ ĐșаŃĐ”ŃŃĐČĐ” Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”ŃĐœŃŃ
ŃŃĐœĐșŃĐžĐč Đž ĐČŃĐ·ĐŸĐČ ĐžŃ
Оз ĐŽŃŃгОŃ
ĐŒĐ”ŃŃ ĐżŃĐŸĐłŃĐ°ĐŒĐŒŃ â ĐŸŃĐ”ĐœŃ ĐżĐ»ĐŸŃ
Đ°Ń ĐżŃаĐșŃĐžĐșа. ĐапŃĐžĐŒĐ”Ń, ĐœĐžĐșĐŸĐłĐŽĐ° ĐœĐ” ŃлДЎŃĐ”Ń ĐČŃĐ·ŃĐČаŃŃ riak_core_node_watcher:init(Args)Оз ĐŽŃŃĐłĐŸĐłĐŸ ĐŒĐŸĐŽŃĐ»Ń, ŃŃĐŸĐ±Ń ĐżĐŸĐ»ŃŃĐžŃŃ ĐžŃŃ
ĐŸĐŽĐœĐŸĐ” ŃĐŸŃŃĐŸŃĐœĐžĐ” ĐŽĐ°ĐœĐœŃŃ
ŃĐžĐșла. ĐŃĐŸ ĐœĐ”ĐŸĐ±Ń
ĐŸĐŽĐžĐŒĐŸ ŃЎДлаŃŃ ĐżĐŸŃŃДЎŃŃĐČĐŸĐŒ ŃĐžĐœŃ
ŃĐŸĐœĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ŃĐ”ŃĐČĐ”Ńа. ĐŃĐ·ĐŸĐČŃ ŃŃĐœĐșŃĐžĐč ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ĐŽĐŸĐ»Đ¶ĐœŃ ĐžŃŃ
ĐŸĐŽĐžŃŃ ŃĐŸĐ»ŃĐșĐŸ Оз ĐŒĐŸĐŽŃлДĐč Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”ĐșĐž ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ, ĐČŃĐ·ĐŸĐČŃ, ĐČĐŸĐ·ĐœĐžĐșаŃŃОД ĐČ ŃДзŃĐ»ŃŃаŃĐ” ŃĐŸĐ±ŃŃĐžŃ ĐČ ŃĐžŃŃĐ”ĐŒĐ”, Đž ĐœĐžĐșĐŸĐłĐŽĐ° ĐœĐ”ĐżĐŸŃŃДЎŃŃĐČĐ”ĐœĐœĐŸ ĐŸŃ ĐżĐŸĐ»ŃĐ·ĐŸĐČаŃДлŃ.
ĐĐŸĐ»ŃŃĐŸĐ” ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČĐŸ ĐŽŃŃĐłĐžŃ Â«ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐč ŃĐ°Đ±ĐŸŃĐœĐžĐșĐŸĐČ» ĐŒĐŸĐ¶Đ”Ń Đ±ŃŃŃ ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐŸ Đž ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐŸ ĐœĐ° ĐŸŃĐœĐŸĐČĐ” ŃĐ”Ń Đ¶Đ” ОЎДĐč.
ĐĐŸĐœĐ”ŃĐœŃĐ” аĐČŃĐŸĐŒĐ°ŃŃ (FSM), ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐœŃĐ” ĐČ ĐŒĐŸĐŽŃлД ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ gen_fsm, ŃĐČĐ»ŃŃŃŃŃ ĐČĐ°Đ¶ĐœĐ”ĐčŃĐžĐŒ ĐșĐŸĐŒĐżĐŸĐœĐ”ĐœŃĐŸĐŒ ĐżŃĐž ŃДалОзаŃОО ŃŃĐ”ĐșĐŸĐČ ĐżŃĐŸŃĐŸĐșĐŸĐ»ĐŸĐČ ĐČ ŃДлДĐșĐŸĐŒĐŒŃĐœĐžĐșаŃĐžĐŸĐœĐœŃŃ
ŃĐžŃŃĐ”ĐŒĐ°Ń
(ĐŸĐ±Đ»Đ°ŃŃŃ, ĐŽĐ»Ń ĐșĐŸŃĐŸŃĐŸĐč бŃĐ» ĐžĐ·ĐŸĐ±ŃĐ”ŃĐ”Đœ Erlang). ĐĄĐŸŃŃĐŸŃĐœĐžŃ ĐŸĐżŃДЎДлŃŃŃŃŃ ĐșаĐș ŃŃĐœĐșŃОО ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа, ĐœĐ°Đ·ĐČĐ°ĐœĐœŃĐ” ĐČ ŃĐ”ŃŃŃ ŃĐŸŃŃĐŸŃĐœĐžŃ Đž ĐČĐŸĐ·ĐČŃаŃаŃŃОД ĐșĐŸŃŃДж, ŃĐŸĐŽĐ”ŃжаŃĐžĐč ŃлДЎŃŃŃОД StateĐž ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐœŃĐ” ĐŽĐ°ĐœĐœŃĐ” ŃĐžĐșла. ĐŃ ĐŒĐŸĐ¶Đ”ŃĐ” ĐŸŃĐżŃаĐČĐ»ŃŃŃ ŃĐŸĐ±ŃŃĐžŃ ĐČ ŃŃĐž ŃĐŸŃŃĐŸŃĐœĐžŃ ŃĐžĐœŃ
ŃĐŸĐœĐœĐŸ ОлО аŃĐžĐœŃ
ŃĐŸĐœĐœĐŸ. ĐĐŸĐŽŃĐ»Ń ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ĐșĐŸĐœĐ”ŃĐœĐŸĐłĐŸ аĐČŃĐŸĐŒĐ°Ńа ŃаĐșжД ĐŽĐŸĐ»Đ¶Đ”Đœ ŃĐșŃĐżĐŸŃŃĐžŃĐŸĐČаŃŃ ŃŃĐ°ĐœĐŽĐ°ŃŃĐœŃĐ” ŃŃĐœĐșŃОО ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа, а ĐžĐŒĐ”ĐœĐœĐŸÂ init, terminateО handle_info.
ĐŃĐ”ĐČĐžĐŽĐœĐŸ, ŃŃĐŸ ĐșĐŸĐœĐ”ŃĐœŃĐ” аĐČŃĐŸĐŒĐ°ŃŃ ĐœĐ” ŃĐČĐ»ŃŃŃŃŃ ŃпДŃĐžŃĐžŃĐœŃĐŒĐž ĐŽĐ»Ń ŃДлДĐșĐŸĐŒĐŒŃĐœĐžĐșаŃĐžĐč. Đ Riak ĐŸĐœĐž ĐžŃĐżĐŸĐ»ŃĐ·ŃŃŃŃŃ ĐČ ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșаŃ
запŃĐŸŃĐŸĐČ. ĐĐŸĐłĐŽĐ° ĐșĐ»ĐžĐ”ĐœŃ ĐŸŃĐżŃаĐČĐ»ŃĐ”Ń Đ·Đ°ĐżŃĐŸŃ ŃОпа get, putОлО delete, ĐżŃĐŸŃĐ”ŃŃ, ŃĐ»ŃŃаŃŃĐžĐč ŃŃĐŸŃ Đ·Đ°ĐżŃĐŸŃ, ŃĐŸĐ·ĐŽĐ°ŃŃ ĐœĐŸĐČŃĐč ĐżŃĐŸŃĐ”ŃŃ, ŃДалОзŃŃŃĐžĐč gen_fsmŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃŃŃДД ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”. ĐапŃĐžĐŒĐ”Ń, riak_kv_get_fsmĐŸŃĐČĐ”ŃĐ°Đ”Ń Đ·Đ° ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșŃ Đ·Đ°ĐżŃĐŸŃа get, ĐżĐŸĐ»ŃŃĐ”ĐœĐžĐ” ĐŽĐ°ĐœĐœŃŃ
Đž ĐČĐŸĐ·ĐČŃĐ°Ń ĐžŃ
ĐșĐ»ĐžĐ”ĐœŃŃĐșĐŸĐŒŃ ĐżŃĐŸŃĐ”ŃŃŃ. ĐŃĐŸŃĐ”ŃŃ FSM ĐżŃĐŸŃ
ĐŸĐŽĐžŃ ŃĐ”ŃДз ŃĐ°Đ·ĐœŃĐ” ŃĐŸŃŃĐŸŃĐœĐžŃ ĐČ Đ·Đ°ĐČĐžŃĐžĐŒĐŸŃŃĐž ĐŸŃ ŃĐŸĐłĐŸ, ĐŸĐżŃДЎДлŃĐ”Ń Đ»Đž ĐŸĐœ, Ń ĐșаĐșĐžŃ
ŃĐ·Đ»ĐŸĐČ Đ·Đ°ĐżŃаŃĐžĐČаŃŃ ĐŽĐ°ĐœĐœŃĐ”, ĐŸŃĐżŃаĐČĐ»ŃĐ”Ń Đ»Đž ĐŸĐœ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ ŃŃĐžĐŒ ŃĐ·Đ»Đ°ĐŒ Đž ĐżĐŸĐ»ŃŃĐ°Đ”Ń Đ»Đž ĐŸĐœ ĐŽĐ°ĐœĐœŃĐ” ĐČ ĐŸŃĐČĐ”Ń.
ĐбŃĐ°Đ±ĐŸŃŃĐžĐșĐž ŃĐŸĐ±ŃŃĐžĐč â ŃŃĐŸ Đ”ŃĐ” ĐŸĐŽĐœĐŸ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”, ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐœĐŸĐ” ĐČ ĐŒĐŸĐŽŃлД gen_event. ĐĐŽĐ”Ń ŃĐŸŃŃĐŸĐžŃ ĐČ ŃĐŸĐŒ, ŃŃĐŸĐ±Ń ŃĐŸĐ·ĐŽĐ°ŃŃ ŃĐ”ĐœŃŃалŃĐœŃŃ ŃĐŸŃĐșŃ, ĐżŃĐžĐœĐžĐŒĐ°ŃŃŃŃ ŃĐŸĐ±ŃŃĐžŃ ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœĐŸĐłĐŸ ŃОпа. ĐĄĐŸĐ±ŃŃĐžŃ ĐŒĐŸĐłŃŃ ĐŸŃĐżŃаĐČĐ»ŃŃŃŃŃ ŃĐžĐœŃ
ŃĐŸĐœĐœĐŸ ОлО аŃĐžĐœŃ
ŃĐŸĐœĐœĐŸ, Đž ĐżŃĐž ĐžŃ
ĐżĐŸĐ»ŃŃĐ”ĐœĐžĐž ĐżŃĐžĐŒĐ”ĐœŃĐ”ŃŃŃ Đ·Đ°ŃĐ°ĐœĐ”Đ” ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃĐč ĐœĐ°Đ±ĐŸŃ ĐŽĐ”ĐčŃŃĐČĐžĐč. ĐŃĐž ĐżĐŸĐ»ŃŃĐ”ĐœĐžĐž ŃĐŸĐ±ŃŃĐžŃ ĐŒŃ ĐŒĐŸĐ¶Đ”ĐŒ, ĐœĐ°ĐżŃĐžĐŒĐ”Ń, ĐŸŃŃлДЎОŃŃ Đ”ĐłĐŸ ĐČ ŃаĐčлД, ĐŸŃĐżŃаĐČĐžŃŃ ŃĐžĐłĐœĐ°Đ» ŃŃĐ”ĐČĐŸĐłĐž ĐČ ĐČОЎД SMS ОлО ĐŸĐ±ŃĐ”ĐŽĐžĐœĐžŃŃ Đ”ĐłĐŸ ĐČ ŃŃаŃĐžŃŃĐžĐșŃ. ĐĐ°Đ¶ĐŽĐŸĐ” Оз ŃŃĐžŃ
ĐŽĐ”ĐčŃŃĐČĐžĐč ĐŸĐżŃДЎДлŃĐ”ŃŃŃ ĐČ ĐŸŃЎДлŃĐœĐŸĐŒ ĐŒĐŸĐŽŃлД ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ŃĐŸ ŃĐČĐŸĐžĐŒĐž ŃĐŸĐ±ŃŃĐČĐ”ĐœĐœŃĐŒĐž ĐŽĐ°ĐœĐœŃĐŒĐž ŃĐžĐșла, ŃĐŸŃ
ŃĐ°ĐœŃĐ”ĐŒŃĐŒĐž ĐŒĐ”Đ¶ĐŽŃ ĐČŃĐ·ĐŸĐČĐ°ĐŒĐž. ĐбŃĐ°Đ±ĐŸŃŃĐžĐșĐž ĐŒĐŸĐ¶ĐœĐŸ ĐŽĐŸĐ±Đ°ĐČĐ»ŃŃŃ, ŃЎалŃŃŃ ĐžĐ»Đž ĐŸĐ±ĐœĐŸĐČĐ»ŃŃŃ ĐŽĐ»Ń ĐșĐ°Đ¶ĐŽĐŸĐłĐŸ ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșа ŃĐŸĐ±ŃŃĐžĐč. ĐŃаĐș, ĐœĐ° ĐżŃаĐșŃĐžĐșĐ” ĐŽĐ»Ń ĐșĐ°Đ¶ĐŽĐŸĐłĐŸ ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșа ŃĐŸĐ±ŃŃĐžĐč ĐŒĐŸĐ¶Đ”Ń Đ±ŃŃŃ ĐœĐ”ŃĐșĐŸĐ»ŃĐșĐŸ ĐŒĐŸĐŽŃлДĐč ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа, Đž ĐČ ŃĐ°Đ·ĐœŃŃ
ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșаŃ
ĐŒĐŸĐłŃŃ ŃŃŃĐ”ŃŃĐČĐŸĐČаŃŃ ŃĐ°Đ·ĐœŃĐ” ŃĐșĐ·Đ”ĐŒĐżĐ»ŃŃŃ ŃŃĐžŃ
ĐŒĐŸĐŽŃлДĐč. Đ ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșĐ°ĐŒ ĐŸŃĐœĐŸŃŃŃŃŃ ĐżŃĐŸŃĐ”ŃŃŃ, ĐżĐŸĐ»ŃŃаŃŃОД ŃĐžĐłĐœĐ°Đ»Ń ŃŃĐ”ĐČĐŸĐłĐž, ĐŸŃŃлДжОĐČĐ°Đ”ĐŒŃĐ” ĐŽĐ°ĐœĐœŃĐ” ĐČ ŃДалŃĐœĐŸĐŒ ĐČŃĐ”ĐŒĐ”ĐœĐž, ŃĐŸĐ±ŃŃĐžŃ, ŃĐČŃĐ·Đ°ĐœĐœŃĐ” Ń ŃĐŸĐ±ŃŃĐžŃĐŒĐž, ОлО ĐżŃĐŸŃŃŃĐ” жŃŃĐœĐ°Đ»Ń.
Đ Riak ĐŸĐŽĐœĐŸ Оз ĐżŃĐžĐŒĐ”ĐœĐ”ĐœĐžĐč ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ gen_event â ŃĐżŃаĐČĐ»Đ”ĐœĐžĐ” ĐżĐŸĐŽĐżĐžŃĐșĐ°ĐŒĐž ĐœĐ° «ĐșĐŸĐ»ŃŃĐ”ĐČŃĐ” ŃĐŸĐ±ŃŃОѻ, Ń. Đ”. ĐžĐ·ĐŒĐ”ĐœĐ”ĐœĐžŃ ŃĐ»Đ”ĐœŃŃĐČа ĐČ ŃзлаŃ
ОлО ĐœĐ°Đ·ĐœĐ°ŃĐ”ĐœĐžŃ ŃĐ°Đ·ĐŽĐ”Đ»ĐŸĐČ ĐČ ĐșлаŃŃĐ”ŃĐ” Riak. ĐŃĐŸŃĐ”ŃŃŃ ĐœĐ° ŃзлД Riak ĐŒĐŸĐłŃŃ Đ·Đ°ŃДгОŃŃŃĐžŃĐŸĐČаŃŃ ŃŃĐœĐșŃĐžŃ ĐČ ŃĐșĐ·Đ”ĐŒĐżĐ»ŃŃД riak_core_ring_events, ĐșĐŸŃĐŸŃĐ°Ń ŃДалОзŃĐ”Ń ĐŽĐ°ĐœĐœĐŸĐ” ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”Â gen_event. ĐĐŸĐłĐŽĐ° ŃĐ”ĐœŃŃалŃĐœŃĐč ĐżŃĐŸŃĐ”ŃŃ, ŃĐżŃаĐČĐ»ŃŃŃĐžĐč ĐșĐŸĐ»ŃŃĐŸĐŒ ŃŃĐŸĐłĐŸ Ńзла, ĐžĐ·ĐŒĐ”ĐœŃĐ”Ń Đ·Đ°ĐżĐžŃŃ ĐŸ ŃĐ»Đ”ĐœŃŃĐČĐ” ĐŽĐ»Ń ĐČŃĐ”ĐłĐŸ ĐșлаŃŃĐ”Ńа, ĐŸĐœ запŃŃĐșĐ°Đ”Ń ŃĐŸĐ±ŃŃОД, ĐșĐŸŃĐŸŃĐŸĐ” заŃŃаĐČĐ»ŃĐ”Ń ĐșажЎŃĐč ĐŒĐŸĐŽŃĐ»Ń ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ĐČŃĐ·ŃĐČаŃŃ Đ·Đ°ŃДгОŃŃŃĐžŃĐŸĐČĐ°ĐœĐœŃŃ ŃŃĐœĐșŃĐžŃ. йаĐșĐžĐŒ ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ, ŃазлОŃĐœŃĐŒ ŃаŃŃŃĐŒ Riak бŃĐŽĐ”Ń ĐżŃĐŸŃĐ” ŃДагОŃĐŸĐČаŃŃ ĐœĐ° ĐžĐ·ĐŒĐ”ĐœĐ”ĐœĐžŃ ĐČ Đ»ŃĐ±ĐŸĐč Оз ŃĐ”ĐœŃŃалŃĐœŃŃ
ŃŃŃŃĐșŃŃŃ ĐŽĐ°ĐœĐœŃŃ
Riak, ĐœĐ” ŃŃĐ»ĐŸĐ¶ĐœŃŃ ŃĐ”ĐœŃŃалŃĐœŃĐč ĐŒĐ”ĐœĐ”ĐŽĐ¶Đ”Ń ŃŃĐŸĐč ŃŃŃŃĐșŃŃŃŃ ĐŽĐ°ĐœĐœŃŃ
.
ĐĐ°ĐžĐ±ĐŸĐ»Đ”Đ” ŃаŃĐżŃĐŸŃŃŃĐ°ĐœĐ”ĐœĐœŃĐ” ĐŒĐŸĐŽĐ”Đ»Đž ĐșĐŸĐœĐșŃŃĐ”ĐœŃОО Đž ĐŸĐ±ŃĐ”ĐœĐžŃ ŃĐżŃаĐČĐ»ŃŃŃŃŃ ĐŸĐŽĐœĐžĐŒ Оз ŃŃĐ”Ń
ĐŸŃĐœĐŸĐČĐœŃŃ
ŃĐžĐżĐŸĐČ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ, ĐșĐŸŃĐŸŃŃĐ” ĐŒŃ ŃĐŸĐ»ŃĐșĐŸ ŃŃĐŸ ĐżŃДЎŃŃаĐČОлО: gen_server, gen_fsmО gen_event. ĐĐŽĐœĐ°ĐșĐŸ ĐČ Đ±ĐŸĐ»ŃŃĐžŃ
ŃĐžŃŃĐ”ĐŒĐ°Ń
ŃĐŸ ĐČŃĐ”ĐŒĐ”ĐœĐ”ĐŒ ĐŒĐŸĐłŃŃ ĐČĐŸĐ·ĐœĐžĐșĐœŃŃŃ ŃĐ°Đ±Đ»ĐŸĐœŃ, ŃпДŃĐžŃĐžŃĐœŃĐ” ĐŽĐ»Ń ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ, Đž ĐżĐŸŃŃĐ”Đ±ĐŸĐČаŃŃ ŃĐŸĐ·ĐŽĐ°ĐœĐžŃ ĐœĐŸĐČĐŸĐłĐŸ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ. Riak ĐČĐșĐ»ŃŃĐ°Đ”Ń ŃаĐșĐŸĐ” ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”, riak_core_vnodeĐșĐŸŃĐŸŃĐŸĐ” ŃĐŸŃĐŒĐ°Đ»ĐžĐ·ŃĐ”Ń ŃĐżĐŸŃĐŸĐ± ŃДалОзаŃОО ĐČĐžŃŃŃалŃĐœĐŸĐłĐŸ Ńзла. ĐĐžŃŃŃалŃĐœŃĐ” ŃĐ·Đ»Ń â ŃŃĐŸ ĐŸŃĐœĐŸĐČĐœĐ°Ń Đ°Đ±ŃŃŃаĐșŃĐžŃ Ń
ŃĐ°ĐœĐžĐ»ĐžŃа ĐČ Riak, ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»ŃŃŃĐ°Ń Đ”ĐŽĐžĐœŃĐč ĐžĐœŃĐ”ŃŃĐ”ĐčŃ ĐŸŃ Ń
ŃĐ°ĐœĐžĐ»ĐžŃа «ĐșĐ»ŃŃ-Đ·ĐœĐ°ŃĐ”ĐœĐžĐ”Â» Đș ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃŃŃĐžĐŒ аĐČŃĐŸĐŒĐ°ŃĐ°ĐŒ. ĐĐœŃĐ”ŃŃĐ”ĐčŃ ĐŒĐŸĐŽŃĐ»Ń ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ĐŸĐżŃДЎДлŃĐ”ŃŃŃ Ń ĐżĐŸĐŒĐŸŃŃŃ ŃŃĐœĐșŃОО behavior_info/1ŃлДЎŃŃŃĐžĐŒ ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ:
Behavior_info(ĐŸĐ±ŃаŃĐœŃĐ” ĐČŃĐ·ĐŸĐČŃ) ->
[{init,1},
{handle_command,3},
{handoff_starting,2},
{handoff_cancelled,1},
{handoff_finished,2},
{handle_handoff_command,3},
{handle_handoff_data,2},
{ encode_handoff_item,2},
{is_empty,1},
{terminate,2},
{delete,1}];
Đ ŃŃĐŸĐŒ ĐżŃĐžĐŒĐ”ŃĐ” ĐżĐŸĐșĐ°Đ·Đ°ĐœĐ°Â behavior_info/1ŃŃĐœĐșŃОѠriak_core_vnode. ХпОŃĐŸĐș ĐșĐŸŃŃДжДĐč {CallbackFunction, Arity}Â ĐŸĐżŃДЎДлŃĐ”Ń ĐșĐŸĐœŃŃаĐșŃ, ĐșĐŸŃĐŸŃŃĐč ĐŽĐŸĐ»Đ¶Đ”Đœ ŃĐŸĐ±Đ»ŃЎаŃŃ ĐŒĐŸĐŽŃĐ»Ń ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа. ĐĐŸĐœĐșŃĐ”ŃĐœŃĐ” ŃДалОзаŃОО ĐČĐžŃŃŃалŃĐœŃŃ
ŃĐ·Đ»ĐŸĐČ ĐŽĐŸĐ»Đ¶ĐœŃ ŃĐșŃĐżĐŸŃŃĐžŃĐŸĐČаŃŃ ŃŃĐž ŃŃĐœĐșŃОО, ĐžĐœĐ°ŃĐ” ĐșĐŸĐŒĐżĐžĐ»ŃŃĐŸŃ ĐČŃЎаŃŃ ĐżŃДЎŃĐżŃĐ”Đ¶ĐŽĐ”ĐœĐžĐ”. Đ Đ”Đ°Đ»ĐžĐ·ĐŸĐČаŃŃ ŃĐŸĐ±ŃŃĐČĐ”ĐœĐœĐŸĐ” ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” OTP ĐŸŃĐœĐŸŃĐžŃДлŃĐœĐŸ ĐżŃĐŸŃŃĐŸ. ĐĐŸĐŒĐžĐŒĐŸ ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐžŃ ĐČаŃĐžŃ
ŃŃĐœĐșŃĐžĐč ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа, ĐžŃĐżĐŸĐ»ŃĐ·ŃŃ ĐŒĐŸĐŽŃлО proc_libО sysÂ ĐŒĐŸĐŽŃлО, ĐČŃ ĐŽĐŸĐ»Đ¶ĐœŃ Đ·Đ°ĐżŃŃĐșаŃŃ ĐžŃ
Ń ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃĐŒĐž ŃŃĐœĐșŃĐžŃĐŒĐž, ŃĐżŃаĐČĐ»ŃŃŃ ŃĐžŃŃĐ”ĐŒĐœŃĐŒĐž ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃĐŒĐž Đž ĐŸŃŃлДжОĐČаŃŃ ŃĐŸĐŽĐžŃДлŃŃĐșĐžĐč ĐżŃĐŸŃĐ”ŃŃ ĐœĐ° ŃĐ»ŃŃаĐč, Đ”ŃлО ĐŸĐœ заĐČĐ”ŃŃĐžŃŃŃ.
ĐаЎаŃа ŃŃпДŃĐČĐžĐ·ĐŸŃа ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ â ŃлДЎОŃŃ Đ·Đ° ŃĐČĐŸĐžĐŒĐž ĐŽĐŸŃĐ”ŃĐœĐžĐŒĐž ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒĐž Đž ĐżĐŸ заŃĐ°ĐœĐ”Đ” ĐœĐ°ŃŃŃĐŸĐ”ĐœĐœŃĐŒ ĐżŃаĐČĐžĐ»Đ°ĐŒ ĐČŃĐżĐŸĐ»ĐœŃŃŃ ĐœĐ”ĐŸĐ±Ń
ĐŸĐŽĐžĐŒŃĐ” ĐŽĐ”ĐčŃŃĐČĐžŃ ĐżŃĐž ĐžŃ
заĐČĐ”ŃŃĐ”ĐœĐžĐž. ĐĐ”ŃĐž ĐŒĐŸĐłŃŃ Đ±ŃŃŃ ĐșаĐș ĐŽŃŃĐłĐžĐŒĐž ŃŃĐșĐŸĐČĐŸĐŽĐžŃДлŃĐŒĐž, ŃаĐș Đž ŃĐ°Đ±ĐŸŃĐœĐžĐșĐ°ĐŒĐž ĐżŃĐŸŃĐ”ŃŃа. ĐŃĐŸ ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ĐșĐŸĐŽŃ Riak ŃĐŸŃŃĐ”ĐŽĐŸŃĐŸŃĐžŃŃŃŃ ĐœĐ° ĐżŃаĐČОлŃĐœĐŸĐŒ ŃĐ»ŃŃаД, ŃŃĐŸ ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ŃŃпДŃĐČĐžĐ·ĐŸŃŃ ĐŸĐ±ŃабаŃŃĐČаŃŃ ĐŸŃОбĐșĐž ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐœĐŸĐłĐŸ ĐŸĐ±Đ”ŃпДŃĐ”ĐœĐžŃ, ĐżĐŸĐČŃĐ”Đ¶ĐŽĐ”ĐœĐœŃĐ” ĐŽĐ°ĐœĐœŃĐ” ОлО ŃĐžŃŃĐ”ĐŒĐœŃĐ” ĐŸŃОбĐșĐž Đ”ĐŽĐžĐœĐŸĐŸĐ±ŃĐ°Đ·ĐœĐŸ ĐČĐŸ ĐČŃĐ”Đč ŃĐžŃŃĐ”ĐŒĐ”. Đ ĐŒĐžŃĐ” Erlang ŃŃĐŸŃ ĐœĐ”Đ·Đ°ŃĐžŃĐ”ĐœĐœŃĐč ĐżĐŸĐŽŃ
ĐŸĐŽ Đș ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃĐŸĐČĐ°ĐœĐžŃ ŃаŃŃĐŸ ĐœĐ°Đ·ŃĐČаŃŃ ŃŃŃаŃДгОДĐč «пŃŃŃŃ ĐżŃĐŸĐžĐ·ĐŸĐčĐŽĐ”Ń ŃĐ±ĐŸĐč». ĐĐŸŃĐ”ŃĐœĐžĐ” ĐżŃĐŸŃĐ”ŃŃŃ, ŃĐŸŃŃаĐČĐ»ŃŃŃОД ĐŽĐ”ŃĐ”ĐČĐŸ ĐșĐŸĐœŃŃĐŸĐ»Ń, ĐŒĐŸĐłŃŃ ĐČĐșĐ»ŃŃаŃŃ ĐșаĐș ŃŃпДŃĐČĐžĐ·ĐŸŃŃ, ŃаĐș Đž ŃĐ°Đ±ĐŸŃОД ĐżŃĐŸŃĐ”ŃŃŃ. Đ Đ°Đ±ĐŸŃОД ĐżŃĐŸŃĐ”ŃŃŃ â ŃŃĐŸ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” OTP, ĐČĐșĐ»ŃŃаŃ gen_fsm, gen_serverО gen_event. ĐĐŸĐŒĐ°ĐœĐŽĐ° РОаĐșа, ĐșĐŸŃĐŸŃĐŸĐč ĐœĐ” ĐœŃĐ¶ĐœĐŸ Đ·Đ°ĐœĐžĐŒĐ°ŃŃŃŃ ĐŒĐ°ŃĐłĐžĐœĐ°Đ»ŃĐœŃĐŒĐž ĐŽĐ”Đ»Đ°ĐŒĐž, ĐŒĐŸĐ¶Đ”Ń ŃĐ°Đ±ĐŸŃаŃŃ Ń ĐŒĐ”ĐœŃŃĐ”Đč Đ±Đ°Đ·ĐŸĐč ĐșĐŸĐŽĐ°. ĐŃŃ Đ±Đ°Đ·Ń ĐșĐŸĐŽĐ° Đ±Đ»Đ°ĐłĐŸĐŽĐ°ŃŃ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžŃ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐč ĐżŃĐŸŃĐ” ĐżĐŸĐœŃŃŃ, ĐżĐŸŃĐșĐŸĐ»ŃĐșŃ ĐŸĐœĐ° ĐžĐŒĐ”Đ”Ń ĐŽĐ”Đ»ĐŸ ŃĐŸĐ»ŃĐșĐŸ Ń ĐșĐŸĐœĐșŃĐ”ŃĐœŃĐŒ ĐșĐŸĐŽĐŸĐŒ. Riak ĐžĐŒĐ”Đ”Ń ŃŃпДŃĐČĐžĐ·ĐŸŃ ĐČŃŃĐŸĐșĐŸĐłĐŸ ŃŃĐŸĐČĐœŃ, ĐșаĐș Đž ĐČ Đ±ĐŸĐ»ŃŃĐžĐœŃŃĐČĐ” ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč Erlang, а ŃаĐșжД ŃŃпДŃĐČĐžĐ·ĐŸŃŃ Đ±ĐŸĐ»Đ”Đ” ĐœĐžĐ·ĐșĐŸĐłĐŸ ŃŃĐŸĐČĐœŃ ĐŽĐ»Ń ŃĐżŃаĐČĐ»Đ”ĐœĐžŃ ĐłŃŃĐżĐżĐ°ĐŒĐž ĐżŃĐŸŃĐ”ŃŃĐŸĐČ ĐżĐŸ ŃŃĐœĐșŃĐžĐŸĐœĐ°Đ»ŃĐœĐŸŃŃĐž, ŃаĐșОД ĐșаĐș ĐČĐžŃŃŃалŃĐœŃĐ” ŃĐ·Đ»Ń Riak, ĐżŃĐŸŃĐ»ŃŃĐžĐČаŃДлО ŃĐŸĐșĐ”ŃĐŸĐČ TCP Đž ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșĐž запŃĐŸŃĐŸĐČ-ĐŸŃĐČĐ”ŃĐŸĐČ.
ЧŃĐŸĐ±Ń ĐżŃĐŸĐŽĐ”ĐŒĐŸĐœŃŃŃĐžŃĐŸĐČаŃŃ, ĐșаĐș ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČĐ°Đœ ŃŃпДŃĐČĐžĐ·ĐŸŃ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ, ĐŒŃ ĐČĐŸŃĐżĐŸĐ»ŃĐ·ŃĐ”ĐŒŃŃ ĐŒĐŸĐŽŃĐ»Đ”ĐŒÂ riak_core_sup.erl. ĐŃĐŸŃ ĐŸŃĐœĐŸĐČĐœĐŸĐč ŃŃпДŃĐČĐžĐ·ĐŸŃ ŃĐČĐ»ŃĐ”ŃŃŃ ŃŃпДŃĐČĐžĐ·ĐŸŃĐŸĐŒ ŃĐ°ĐŒĐŸĐłĐŸ ĐČŃŃĐŸĐșĐŸĐłĐŸ ŃŃĐŸĐČĐœŃ ĐŸŃĐœĐŸĐČĐœĐŸĐłĐŸ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ Riak. ĐĐœ запŃŃĐșĐ°Đ”Ń ŃŃаŃĐžŃĐ”ŃĐșĐžĐč ĐœĐ°Đ±ĐŸŃ ŃĐ°Đ±ĐŸŃĐžŃ
Đž ŃŃпДŃĐČĐžĐ·ĐŸŃĐŸĐČ, а ŃаĐșжД ĐŽĐžĐœĐ°ĐŒĐžŃĐ”ŃĐșĐŸĐ” ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČĐŸ ŃĐ°Đ±ĐŸŃĐžŃ
, ŃĐżŃаĐČĐ»ŃŃŃĐžŃ
ŃĐŸĐ”ĐŽĐžĐœĐ”ĐœĐžŃĐŒĐž HTTP Đž HTTPS RESTful API Ńзла, ŃĐžŃĐ»ĐŸ, ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœĐŸĐ” ĐČ ŃаĐčлаŃ
ĐșĐŸĐœŃОгŃŃаŃОО, ŃпДŃĐžŃĐžŃĐœŃŃ
ĐŽĐ»Ń ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ Ńзла. ĐĐŸĐŽĐŸĐ±ĐœĐŸÂ gen_servers, ĐČŃĐ” ĐŒĐŸĐŽŃлО ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ŃŃпДŃĐČĐžĐ·ĐŸŃа ĐŽĐŸĐ»Đ¶ĐœŃ ĐČĐșĐ»ŃŃаŃŃ ĐŽĐžŃĐ”ĐșŃĐžĐČŃ  -behavior(supervisor).. ĐĐœĐž запŃŃĐșаŃŃŃŃ Ń ĐżĐŸĐŒĐŸŃŃŃ ŃŃĐœĐșŃĐžĐč startОлО start_linkĐżŃĐžĐœĐžĐŒĐ°ŃŃ ĐČ ĐșаŃĐ”ŃŃĐČĐ” ĐœĐ”ĐŸĐ±ŃзаŃДлŃĐœŃŃ
аŃĐłŃĐŒĐ”ĐœŃĐŸĐČ ServerName, the CallBackModuleĐž a Argument, ĐșĐŸŃĐŸŃŃĐ” бŃĐŽŃŃ ĐżĐ”ŃĐ”ĐŽĐ°ĐœŃ ĐČ ŃŃĐœĐșŃĐžŃ ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа init/1.
ĐĐ»ŃĐŽŃ ĐœĐ° пДŃĐČŃĐ” ŃŃŃĐŸĐșĐž ĐșĐŸĐŽĐ° ĐŒĐŸĐŽŃлѠriak_core_sup.erl, ĐżĐŸĐŒĐžĐŒĐŸ ĐŽĐžŃĐ”ĐșŃĐžĐČŃ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ Đž ĐŒĐ°ĐșŃĐŸŃа, ĐșĐŸŃĐŸŃŃĐč ĐŒŃ ĐŸĐżĐžŃĐ”ĐŒ ĐżĐŸĐ·Đ¶Đ”, ĐŒŃ ĐŒĐŸĐ¶Đ”ĐŒ ŃĐČОЎДŃŃ ŃŃĐœĐșŃОѠstart_link/3:
-ĐŒĐŸĐŽŃĐ»Ń(riak_core_sup).
-ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” (ŃŃĐșĐŸĐČĐŸĐŽĐžŃДлŃ).
%% API
-export([start_link/0]).
%% ĐбŃаŃĐœŃĐ” ĐČŃĐ·ĐŸĐČŃ ŃŃпДŃĐČĐžĐ·ĐŸŃа
-export([init/1]).
-define(CHILD(I, Type), {I, {I, start_link, []}, ĐżĐŸŃŃĐŸŃĐœĐœŃĐč, 5000, йОп, [I]}).
start_link() ->
ŃŃпДŃĐČĐžĐ·ĐŸŃ:start_link({local, ?MODULE}, ?MODULE, []).
ĐапŃŃĐș ŃŃпДŃĐČĐžĐ·ĐŸŃа ĐČŃĐ·ĐŸĐČĐ”Ń ŃĐŸĐ·ĐŽĐ°ĐœĐžĐ” (Â«ĐżĐŸŃĐŸĐ¶ĐŽĐ”ĐœĐžĐ”Â») ĐœĐŸĐČĐŸĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа Đž ĐČŃĐ·ĐŸĐČ ŃŃĐœĐșŃОО ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа init/1ĐŒĐŸĐŽŃĐ»Ń ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа riak_core_sup.erl. ĐŃĐŸÂ ServerNameĐșĐŸŃŃДж ĐČ ŃĐŸŃĐŒĐ”Â {local, Name}ОлО {global, Name}, гЎД Nameâ заŃДгОŃŃŃĐžŃĐŸĐČĐ°ĐœĐœĐŸĐ” ĐžĐŒŃ ŃŃпДŃĐČĐžĐ·ĐŸŃа. Đ ĐœĐ°ŃĐ”ĐŒ ĐżŃĐžĐŒĐ”ŃĐ” Đž заŃДгОŃŃŃĐžŃĐŸĐČĐ°ĐœĐœĐŸĐ” ĐžĐŒŃ, Đž ĐŒĐŸĐŽŃĐ»Ń â ŃŃĐŸ аŃĐŸĐŒÂ riak_core_sup, ĐČĐ·ŃŃŃĐč Оз ĐŒĐ°ĐșŃĐŸŃа ?MODULE. ĐŃ ĐżĐ”ŃĐ”ĐŽĐ°Đ”ĐŒ ĐżŃŃŃĐŸĐč ŃпОŃĐŸĐș ĐČ ĐșаŃĐ”ŃŃĐČĐ” аŃĐłŃĐŒĐ”ĐœŃа init/1, ĐșĐŸŃĐŸŃŃĐč бŃĐŽĐ”Ń ŃаŃŃĐŒĐ°ŃŃĐžĐČаŃŃŃŃ ĐșаĐș ĐœŃлДĐČĐŸĐ” Đ·ĐœĐ°ŃĐ”ĐœĐžĐ”. ĐŃа ŃŃĐœĐșŃОѠinitŃĐČĐ»ŃĐ”ŃŃŃ Đ”ĐŽĐžĐœŃŃĐČĐ”ĐœĐœĐŸĐč ŃŃĐœĐșŃОДĐč ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ŃŃпДŃĐČĐžĐ·ĐŸŃа. ĐĐœ ĐŽĐŸĐ»Đ¶Đ”Đœ ĐČĐ”ŃĐœŃŃŃ ĐșĐŸŃŃДж ĐČ ŃĐŸŃĐŒĐ°ŃĐ”:
{ĐŸĐș, {SupervisorSpecification, ChildSpecificationList}}
гЎД SupervisorSpecificationâ ĐșĐŸŃŃДж Оз ŃŃĐ”Ń
ŃĐ»Đ”ĐŒĐ”ĐœŃĐŸĐČ {RestartStrategy, AllowedRestarts, MaxSeconds}, ŃĐŸĐŽĐ”ŃжаŃĐžĐč ĐžĐœŃĐŸŃĐŒĐ°ŃĐžŃ ĐŸ ŃĐŸĐŒ, ĐșаĐș ĐŸĐ±ŃабаŃŃĐČаŃŃ ŃĐ±ĐŸĐž Đž пДŃДзапŃŃĐșĐž ĐżŃĐŸŃĐ”ŃŃĐŸĐČ. RestartStrategyâ ŃŃĐŸ ĐŸĐŽĐžĐœ Оз ŃŃĐ”Ń
паŃĐ°ĐŒĐ”ŃŃĐŸĐČ ĐșĐŸĐœŃОгŃŃаŃОО, ŃĐșазŃĐČаŃŃĐžĐč, ĐșаĐș ĐżĐŸĐČлОŃŃŃ ĐœĐ° «ŃĐŸĐŽŃŃĐČĐ”ĐœĐœŃД» ĐżŃĐŸŃĐ”ŃŃŃ ĐČ ŃĐ»ŃŃаД ĐœĐ”ŃŃаŃĐœĐŸĐłĐŸ заĐČĐ”ŃŃĐ”ĐœĐžŃ ŃĐ°Đ±ĐŸŃŃ:
-
one_for_one: ĐœĐž ĐŸĐŽĐžĐœ Оз ĐŽŃŃĐłĐžŃ ĐżŃĐŸŃĐ”ŃŃĐŸĐČ ĐČ ĐŽĐ”ŃĐ”ĐČĐ” ĐœĐ°ĐŽĐ·ĐŸŃа ĐœĐ” заŃŃагОĐČаДŃŃŃ. -
rest_for_one: ĐŃĐŸŃĐ”ŃŃŃ, запŃŃĐ”ĐœĐœŃĐ” ĐżĐŸŃлД заĐČĐ”ŃŃĐ”ĐœĐžŃ ĐżŃĐŸŃĐ”ŃŃа, ĐŸŃŃĐ°ĐœĐ°ĐČлОĐČаŃŃŃŃ Đž пДŃДзапŃŃĐșаŃŃŃŃ. -
one_for_all: ĐŃĐ” ĐżŃĐŸŃĐ”ŃŃŃ ĐŸŃŃĐ°ĐœĐŸĐČĐ»Đ”ĐœŃ Đž пДŃДзапŃŃĐ”ĐœŃ.
AllowedRestartsŃĐșазŃĐČаДŃ, ŃĐșĐŸĐ»ŃĐșĐŸ Ńаз ĐŽĐŸŃĐ”ŃĐœĐžĐ” ŃĐ»Đ”ĐŒĐ”ĐœŃŃ ŃŃпДŃĐČĐžĐ·ĐŸŃа ĐŒĐŸĐłŃŃ Đ·Đ°ĐČĐ”ŃŃĐžŃŃ ŃĐ°Đ±ĐŸŃŃ ĐČ ĐžĐœŃĐ”ŃĐČалД, MaxSeconds пŃДжЎД ŃĐ”ĐŒ ŃŃпДŃĐČĐžĐ·ĐŸŃ Đ·Đ°ĐČĐ”ŃŃĐžŃ ŃĐ”Đ±Ń (Đž Đ”ĐłĐŸ ĐŽĐŸŃĐ”ŃĐœĐžĐ” ŃĐ»Đ”ĐŒĐ”ĐœŃŃ). ĐĐŸĐłĐŽĐ° ĐżŃĐŸŃĐ”ŃŃ Đ·Đ°ĐČĐ”ŃŃаДŃŃŃ, ĐŸĐœ ĐŸŃĐżŃаĐČĐ»ŃĐ”Ń ŃĐžĐłĐœĐ°Đ» EXIT ŃĐČĐŸĐ”ĐŒŃ ŃŃпДŃĐČĐžĐ·ĐŸŃŃ, ĐșĐŸŃĐŸŃŃĐč, ĐČ Đ·Đ°ĐČĐžŃĐžĐŒĐŸŃŃĐž ĐŸŃ ŃŃŃаŃДгОО пДŃДзапŃŃĐșа, ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃŃŃĐžĐŒ ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ ĐŸĐ±ŃабаŃŃĐČĐ°Đ”Ń Đ·Đ°ĐČĐ”ŃŃĐ”ĐœĐžĐ” ŃĐ°Đ±ĐŸŃŃ. ĐĄŃпДŃĐČĐžĐ·ĐŸŃ Đ·Đ°ĐČĐ”ŃŃĐ°Đ”Ń ŃĐ°Đ±ĐŸŃŃ ĐżĐŸŃлД ĐŽĐŸŃŃĐžĐ¶Đ”ĐœĐžŃ ĐŒĐ°ĐșŃĐžĐŒĐ°Đ»ŃĐœĐŸ ŃазŃĐ”ŃĐ”ĐœĐœĐŸĐłĐŸ ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČа пДŃДзапŃŃĐșĐŸĐČ Đž гаŃĐ°ĐœŃĐžŃŃĐ”Ń, ŃŃĐŸ ŃĐžĐșлОŃĐ”ŃĐșОД пДŃДзапŃŃĐșĐž Đž ĐŽŃŃгОД ĐżŃĐŸĐ±Đ»Đ”ĐŒŃ, ĐœĐ” ŃĐ”ŃĐ”ĐœĐœŃĐ” ĐœĐ° Đ”ĐłĐŸ ŃŃĐŸĐČĐœĐ”, ĐżĐŸĐ·Đ¶Đ” пДŃĐ”ĐčĐŽŃŃ ĐœĐ° ŃлДЎŃŃŃĐžĐč ŃŃĐŸĐČĐ”ĐœŃ. ĐĄĐșĐŸŃДД ĐČŃĐ”ĐłĐŸ, ĐżŃĐŸĐ±Đ»Đ”ĐŒĐ° ĐČ ĐżŃĐŸŃĐ”ŃŃĐ” ĐČ ĐŽŃŃĐłĐŸĐŒ ĐżĐŸĐŽĐŽĐ”ŃĐ”ĐČĐ”, ŃŃĐŸ ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ŃŃпДŃĐČĐžĐ·ĐŸŃŃ Đ±ĐŸĐ»Đ”Đ” ĐČŃŃĐŸĐșĐŸĐłĐŸ ŃŃĐŸĐČĐœŃ Đ·Đ°ĐșŃŃŃŃ ĐșĐŸĐœŃŃĐŸĐ»ĐžŃŃŃŃДД ĐżĐŸĐŽĐŽĐ”ŃĐ”ĐČĐŸ Đž пДŃДЎДлаŃŃ Đ”ĐłĐŸ.
ĐĐ»ŃĐŽŃ ĐœĐ° ĐżĐŸŃĐ»Đ”ĐŽĐœŃŃ ŃŃŃĐŸĐșŃ ŃŃĐœĐșŃОО ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа init/1ĐŒĐŸĐŽŃлѠriak_core_sup.erl, ĐŒŃ ĐŒĐŸĐ¶Đ”ĐŒ Đ·Đ°ĐŒĐ”ŃĐžŃŃ, ŃŃĐŸ ŃŃĐŸŃ ĐșĐŸĐœĐșŃĐ”ŃĐœŃĐč ĐŒĐŸĐœĐžŃĐŸŃ ĐžĐŒĐ”Đ”Ń ŃŃŃаŃĐ”ĐłĐžŃ Â«ĐŸĐŽĐžĐœ Đș ĐŸĐŽĐœĐŸĐŒŃ», ŃŃĐŸ ĐŸĐ·ĐœĐ°ŃаДŃ, ŃŃĐŸ ĐżŃĐŸŃĐ”ŃŃŃ ĐœĐ”Đ·Đ°ĐČĐžŃĐžĐŒŃ ĐŽŃŃĐł ĐŸŃ ĐŽŃŃга. ĐĄŃпДŃĐČĐžĐ·ĐŸŃ ĐŽĐŸĐżŃŃŃĐžŃ ĐŒĐ°ĐșŃĐžĐŒŃĐŒ ĐŽĐ”ŃŃŃŃ ĐżĐ”ŃДзапŃŃĐșĐŸĐČ, ŃŃĐŸĐ±Ń ĐżĐ”ŃДзапŃŃŃĐžŃŃ ŃДбŃ.
ChildSpecificationListŃĐșазŃĐČаДŃ, ĐșаĐșĐžŃ
ĐŽĐŸŃĐ”ŃĐœĐžŃ
ŃĐ»Đ”ĐŒĐ”ĐœŃĐŸĐČ ŃŃпДŃĐČĐžĐ·ĐŸŃ ĐŽĐŸĐ»Đ¶Đ”Đœ запŃŃĐșаŃŃ Đž ĐŸŃŃлДжОĐČаŃŃ, а ŃаĐșжД ĐžĐœŃĐŸŃĐŒĐ°ŃĐžŃ ĐŸ ŃĐŸĐŒ, ĐșаĐș Đ”ĐłĐŸ ĐŸŃŃĐ°ĐœĐŸĐČĐžŃŃ Đž пДŃДзапŃŃŃĐžŃŃ. ĐĐœ ĐżŃДЎŃŃаĐČĐ»Đ”Đœ ŃпОŃĐșĐŸĐŒ ĐșĐŸŃŃДжДĐč ĐČ ŃлДЎŃŃŃĐ”ĐŒ ĐČОЎД:
{Id, {ĐĐŸĐŽŃĐ»Ń, Đ€ŃĐœĐșŃĐžŃ, ĐŃĐłŃĐŒĐ”ĐœŃŃ}, ĐĐ”ŃДзапŃŃĐș, ĐаĐČĐ”ŃŃĐ”ĐœĐžĐ” ŃĐ°Đ±ĐŸŃŃ, йОп, ХпОŃĐŸĐș ĐŒĐŸĐŽŃлДĐč}
Idâ ŃĐœĐžĐșалŃĐœŃĐč ĐžĐŽĐ”ĐœŃĐžŃĐžĐșаŃĐŸŃ ĐŽĐ°ĐœĐœĐŸĐłĐŸ ŃŃпДŃĐČĐžĐ·ĐŸŃа. ĐĐŸŃŃДж Module, FunctionО ArgumentsĐżŃДЎŃŃаĐČĐ»ŃĐ”Ń ŃĐŸĐ±ĐŸĐč ŃĐșŃĐżĐŸŃŃĐžŃĐŸĐČĐ°ĐœĐœŃŃ ŃŃĐœĐșŃĐžŃ, ĐșĐŸŃĐŸŃĐ°Ń Đ·Đ°ĐżŃŃĐșĐ°Đ”Ń ĐČŃĐ·ĐŸĐČ start_linkŃŃĐœĐșŃОО ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ, ĐșĐŸŃĐŸŃĐ°Ń ĐČĐŸĐ·ĐČŃаŃĐ°Đ”Ń ĐșĐŸŃŃДж ĐČ ŃĐŸŃĐŒĐ”Â {ok, Pid}. ĐĄŃŃаŃДгОŃ RestartĐŸĐżĐžŃŃĐČаДŃ, ŃŃĐŸ ĐŽĐŸĐ»Đ¶ĐœĐŸ ĐżŃĐŸĐžĐ·ĐŸĐčŃĐž ĐČ Đ·Đ°ĐČĐžŃĐžĐŒĐŸŃŃĐž ĐŸŃ ŃОпа ĐŸŃŃĐ°ĐœĐŸĐČĐșĐž ĐżŃĐŸŃĐ”ŃŃа, ĐșĐŸŃĐŸŃŃĐč ĐŒĐŸĐ¶Đ”Ń Đ±ŃŃŃ:
-
ĐżŃĐŸŃĐ”ŃŃŃÂ
transient, ĐșĐŸŃĐŸŃŃĐ” ĐœĐžĐșĐŸĐłĐŽĐ° ĐœĐ” пДŃДзапŃŃĐșаŃŃŃŃ; -
ĐżŃĐŸŃĐ”ŃŃŃÂ
temporary, ĐșĐŸŃĐŸŃŃĐ” пДŃДзапŃŃĐșаŃŃŃŃ ŃĐŸĐ»ŃĐșĐŸ ĐČ ŃĐ»ŃŃаД аĐČаŃĐžĐčĐœĐŸĐłĐŸ заĐČĐ”ŃŃĐ”ĐœĐžŃ ŃĐ°Đ±ĐŸŃŃ; Đ -
ĐżŃĐŸŃĐ”ŃŃŃÂ
permanent, ĐșĐŸŃĐŸŃŃĐ” ĐČŃДгЎа пДŃДзапŃŃĐșаŃŃŃŃ ĐœĐ”Đ·Đ°ĐČĐžŃĐžĐŒĐŸ ĐŸŃ ŃĐŸĐłĐŸ, ŃĐČĐ»ŃĐ”ŃŃŃ Đ»Đž ĐżŃĐžŃĐžĐœĐ° ĐžŃ ĐŸŃŃĐ°ĐœĐŸĐČĐșĐž ĐœĐŸŃĐŒĐ°Đ»ŃĐœĐŸĐč ОлО ĐœĐ”ĐœĐŸŃĐŒĐ°Đ»ŃĐœĐŸĐč.
Shutdownâ Đ·ĐœĐ°ŃĐ”ĐœĐžĐ” ĐČ ĐŒĐžĐ»Đ»ĐžŃĐ”ĐșŃĐœĐŽĐ°Ń
, ŃĐșазŃĐČаŃŃДД ĐČŃĐ”ĐŒŃ, ĐżĐŸ ĐžŃŃĐ”ŃĐ”ĐœĐžĐž ĐșĐŸŃĐŸŃĐŸĐłĐŸ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ ŃазŃĐ”ŃĐ”ĐœĐŸ ĐČŃĐżĐŸĐ»ĐœŃŃŃ ŃŃĐœĐșŃĐžŃ, terminateĐ”ŃлО ĐŸĐœĐŸ ĐŸŃŃĐ°ĐœĐ°ĐČлОĐČаДŃŃŃ ĐžĐ·-за пДŃДзапŃŃĐșа ОлО заĐČĐ”ŃŃĐ”ĐœĐžŃ ŃĐ°Đ±ĐŸŃŃ. ĐŃĐŸĐŒÂ infinityŃаĐșжД ĐŒĐŸĐ¶ĐœĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ, ĐœĐŸ ĐŽĐ»Ń ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ, ĐŸŃлОŃĐœĐŸĐłĐŸ ĐŸŃ ŃŃпДŃĐČĐžĐ·ĐŸŃĐŸĐČ, ŃŃĐŸ ĐœĐ°ŃŃĐŸŃŃДлŃĐœĐŸ ĐœĐ” ŃĐ”ĐșĐŸĐŒĐ”ĐœĐŽŃĐ”ŃŃŃ. TypeŃĐČĐ»ŃĐ”ŃŃŃ Đ»ĐžĐ±ĐŸ аŃĐŸĐŒĐŸĐŒÂ workerĐČ ĐŸŃĐœĐŸŃĐ”ĐœĐžĐž ŃĐœĐžĐČĐ”ŃŃалŃĐœŃŃ
ŃĐ”ŃĐČĐ”ŃĐŸĐČ, ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșĐŸĐČ ŃĐŸĐ±ŃŃĐžĐč Đž ĐșĐŸĐœĐ”ŃĐœŃŃ
аĐČŃĐŸĐŒĐ°ŃĐŸĐČ, Đ»ĐžĐ±ĐŸ аŃĐŸĐŒĐŸĐŒÂ supervisor. ĐĄĐČŃĐ·Đ°ĐœĐœŃĐ” ŃĐŸÂ ModuleListŃпОŃĐșĐŸĐŒ ĐŒĐŸĐŽŃлДĐč, ŃДалОзŃŃŃĐžŃ
ŃŃĐŸ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”, ĐŸĐœĐž ĐžŃĐżĐŸĐ»ŃĐ·ŃŃŃŃŃ ĐŽĐ»Ń ŃĐżŃаĐČĐ»Đ”ĐœĐžŃ Đž ĐżŃĐžĐŸŃŃĐ°ĐœĐŸĐČĐșĐž ĐżŃĐŸŃĐ”ŃŃĐŸĐČ ĐČĐŸ ĐČŃĐ”ĐŒŃ ĐżŃĐŸŃДЎŃŃ ĐłĐŸŃŃŃĐ”ĐłĐŸ ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐžŃ ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐœĐŸĐłĐŸ ĐŸĐ±Đ”ŃпДŃĐ”ĐœĐžŃ. ĐąĐŸĐ»ŃĐșĐŸ ŃŃŃĐ”ŃŃĐČŃŃŃОД ОлО ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐœŃĐ” ĐżĐŸĐ»ŃĐ·ĐŸĐČаŃĐ”Đ»Đ”ĐŒ ĐČаŃĐžĐ°ĐœŃŃ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ ĐŒĐŸĐłŃŃ Đ±ŃŃŃ ŃаŃŃŃŃ ŃŃĐŸĐłĐŸ ŃпОŃĐșа Đž, ŃĐ»Đ”ĐŽĐŸĐČаŃДлŃĐœĐŸ, ĐČĐșĐ»ŃŃĐ”ĐœŃ ĐČ ĐŽĐ”ŃĐ”ĐČĐŸ ĐșĐŸĐœŃŃĐŸĐ»Ń.
Đ ĐœĐ°ŃŃĐŸŃŃĐ”ĐŒŃ ĐŒĐŸĐŒĐ”ĐœŃŃ ĐŒŃ ĐŽĐŸĐ»Đ¶ĐœŃ Đ±ŃŃŃ ĐČ ŃĐŸŃŃĐŸŃĐœĐžĐž ĐŸĐżĐžŃаŃŃ ŃŃŃаŃĐ”ĐłĐžŃ ĐżĐ”ŃДзагŃŃĐ·ĐșĐž, ĐŸĐżŃДЎДлŃŃŃŃŃ ĐŒĐ”Đ¶ĐżŃĐŸŃĐ”ŃŃĐœŃĐ” заĐČĐžŃĐžĐŒĐŸŃŃĐž, ĐżĐŸŃĐŸĐłĐž ŃŃŃĐŸĐčŃĐžĐČĐŸŃŃĐž Đș ŃĐ±ĐŸŃĐŒ Đž ĐżŃĐŸŃДЎŃŃŃ ŃŃĐșалаŃОО ĐœĐ° ĐŸŃĐœĐŸĐČĐ” ĐŸĐ±ŃĐ”Đč аŃŃ
ĐžŃĐ”ĐșŃŃŃŃ. ĐŃ ŃаĐșжД ĐŽĐŸĐ»Đ¶ĐœŃ ŃĐŒĐ”ŃŃ ĐżĐŸĐœĐžĐŒĐ°ŃŃ, ŃŃĐŸ ĐżŃĐŸĐžŃŃ
ĐŸĐŽĐžŃ ĐČ init/1ĐżŃĐžĐŒĐ”ŃĐ” ŃŃĐœĐșŃОО ĐŒĐŸĐŽŃлѠriak_core_sup.erl. ĐĐ»Ń ĐœĐ°Ńала ЎаĐČаĐčŃĐ” ОзŃŃĐžĐŒ ĐŒĐ°ĐșŃĐŸŃ CHILD. ĐĐœ ŃĐŸĐ·ĐŽĐ°Đ”Ń ŃпДŃĐžŃĐžĐșаŃĐžŃ ĐŽĐ»Ń ĐŸĐŽĐœĐŸĐłĐŸ ĐŽĐŸŃĐ”ŃĐœĐ”ĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа, ĐžŃĐżĐŸĐ»ŃĐ·ŃŃ ĐžĐŒŃ ĐŒĐŸĐŽŃĐ»Ń ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ĐșаĐș Id, ĐŽĐ”Đ»Đ°Ń Đ”ĐłĐŸ ĐżĐŸŃŃĐŸŃĐœĐœŃĐŒ Đž ĐŸĐżŃДЎДлŃŃ 5-ŃĐ”ĐșŃĐœĐŽĐœĐŸĐ” ĐČŃĐ”ĐŒŃ Đ·Đ°ĐČĐ”ŃŃĐ”ĐœĐžŃ. ĐĐŸŃĐŸĐșĐž ĐŒĐŸĐłŃŃ Đ±ŃŃŃ ŃĐ°Đ±ĐŸŃĐžĐŒĐž ОлО ŃŃпДŃĐČаĐčĐ·Đ”ŃĐ°ĐŒĐž. ĐаĐČаĐčŃĐ” ĐżĐŸŃĐŒĐŸŃŃĐžĐŒ ĐœĐ° ĐżŃĐžĐŒĐ”Ń Đž ĐżĐŸŃĐŒĐŸŃŃĐžĐŒ, ŃŃĐŸ ĐŒŃ ĐŒĐŸĐ¶Đ”ĐŒ Оз ĐœĐ”ĐłĐŸ ОзĐČлДŃŃ:
-define(CHILD(I, Type), {I, {I, start_link, []}, ĐżĐŸŃŃĐŸŃĐœĐœŃĐč, 5000, йОп, [I]}).
init([]) ->
RiakWebs = ŃпОŃĐșĐž ŃДгОŃŃŃĐŸĐČ: Flatten(riak_core_web:bindings(http),
riak_core_web:bindings(https)) of
[] ->
%% ĐżŃĐŸĐČĐ”ŃĐșа ŃŃаŃŃŃ
ĐœĐ°ŃŃŃĐŸĐ”Đș, Đ”ŃлО app.config
%% ĐœĐ” бŃĐ» ĐŸĐ±ĐœĐŸĐČĐ»Đ”Đœ
riak_core_web:old_binding();
ĐŃĐžĐČŃĐ·Đșа -> ĐĐŸĐœĐ”Ń
ĐżŃĐžĐČŃĐ·ĐșĐž
,
Children =
[?CHILD(riak_core_vnode_sup, ŃŃпДŃĐČĐžĐ·ĐŸŃ),
?CHILD(riak_core_handoff_manager, ŃĐ°Đ±ĐŸŃĐžĐč),
?CHILD(riak_core_handoff_listener, ŃĐ°Đ±ĐŸŃĐžĐč),
?CHILD(riak_core_ring_events, ŃĐ°Đ±ĐŸŃĐžĐč),
?CHILD(riak_core_ring_manager, ŃĐ°Đ±ĐŸŃĐžĐč), ?CHILD(riak_core_ring_manager, ŃĐ°Đ±ĐŸŃĐžĐč),
? CHILD(riak_core_node_watcher_events, ŃĐ°Đ±ĐŸŃĐžĐč),
?CHILD(riak_core_node_watcher, ŃĐ°Đ±ĐŸŃĐžĐč),
?CHILD(riak_core_gossip, ŃĐ°Đ±ĐŸŃĐžĐč) |
RiakWebs
],
{ok, {{one_for_one, 10, 10}, ĐĐ”ŃĐž}}.
ĐĐŸĐ»ŃŃĐžĐœŃŃĐČĐŸ Оз ChildrenзапŃŃĐ”ĐœĐœŃŃ
ŃŃĐžĐŒ ŃŃпДŃĐČĐžĐ·ĐŸŃĐŸĐŒ ŃŃаŃĐžŃĐ”ŃĐșĐž ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃŃ
ŃĐ°Đ±ĐŸŃĐžŃ
(ОлО, ĐČ ŃĐ»ŃŃаД Ń vnode_supŃŃпДŃĐČĐžĐ·ĐŸŃĐŸĐŒ). ĐŃĐșĐ»ŃŃĐ”ĐœĐžĐ”ĐŒ ŃĐČĐ»ŃĐ”ŃŃŃ ŃаŃŃŃ RiakWebs, ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐžĐ” ĐșĐŸŃĐŸŃĐŸĐč ŃĐČĐ»ŃĐ”ŃŃŃ ĐŽĐžĐœĐ°ĐŒĐžŃĐ”ŃĐșĐžĐŒ Đž заĐČĐžŃĐžŃ ĐŸŃ HTTP-ŃаŃŃĐž ŃаĐčла ĐșĐŸĐœŃОгŃŃаŃОО Riak.
Đа ĐžŃĐșĐ»ŃŃĐ”ĐœĐžĐ”ĐŒ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”ŃĐœĐŸĐłĐŸ ŃОпа, ĐČŃĐ” ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ OTP, ĐČĐșĐ»ŃŃĐ°Ń ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ Riak, бŃĐŽŃŃ ĐžĐŒĐ”ŃŃ ŃĐŸĐ±ŃŃĐČĐ”ĐœĐœĐŸĐ” ĐŽĐ”ŃĐ”ĐČĐŸ ĐșĐŸĐœŃŃĐŸĐ»Ń. Đ Riak ĐČ ŃзлД Erlang ĐČŃĐżĐŸĐ»ĐœŃŃŃŃŃ ĐœĐ”ŃĐșĐŸĐ»ŃĐșĐŸ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč ĐČŃŃĐŸĐșĐŸĐłĐŸ ŃŃĐŸĐČĐœŃ, ĐœĐ°ĐżŃĐžĐŒĐ”Ń, riak_coreĐŽĐ»Ń Đ°Đ»ĐłĐŸŃĐžŃĐŒĐŸĐČ ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃŃ
ŃĐžŃŃĐ”ĐŒÂ riak_kvĐŽĐ»Ń ŃĐ”ĐŒĐ°ĐœŃĐžĐșĐž Ń
ŃĐ°ĐœĐ”ĐœĐžŃ ĐșĐ»ŃŃĐ”Đč/Đ·ĐœĐ°ŃĐ”ĐœĐžĐč, webmachineĐŽĐ»Ń HTTP Đž ĐŒĐœĐŸĐłĐžŃ
ĐŽŃŃгОŃ
. ĐОжД ĐŒŃ ĐČОЎДлО ŃаŃŃĐžŃĐ”ĐœĐœĐŸĐ” ĐŽĐ”ŃĐ”ĐČĐŸ, riak_coreĐżŃДЎŃŃаĐČĐ»ŃŃŃДД ĐŒĐœĐŸĐłĐŸŃŃĐŸĐČĐœĐ”ĐČŃĐč ĐœĐ°ĐŽĐ·ĐŸŃ, ĐșĐŸŃĐŸŃŃĐŒ ŃĐżŃаĐČĐ»ŃĐ”Ń Riak. ĐĐŽĐœĐžĐŒ Оз ĐŸŃĐœĐŸĐČĐœŃŃ
ĐżŃĐ”ĐžĐŒŃŃĐ”ŃŃĐČ ŃŃĐŸĐč ŃŃŃŃĐșŃŃŃŃ ŃĐČĐ»ŃĐ”ŃŃŃ ŃĐŸ, ŃŃĐŸ ŃĐ°Đ±ĐŸŃа ĐżĐŸĐŽŃĐžŃŃĐ”ĐŒŃ ĐŒĐŸĐ¶Đ”Ń Đ±ŃŃŃ ĐżŃĐ”ŃĐČĐ°ĐœĐ° (Оз-за ĐŸŃОбĐșĐž, ĐżŃĐŸĐ±Đ»Đ”ĐŒŃ ĐŸĐșŃŃжаŃŃĐ”Đč ŃŃĐ”ĐŽŃ ĐžĐ»Đž ĐżŃĐ”ĐŽĐœĐ°ĐŒĐ”ŃĐ”ĐœĐœĐŸĐłĐŸ ĐŽĐ”ĐčŃŃĐČĐžŃ), а заŃĐ”ĐŒ пДŃĐČĐŸĐœĐ°ŃалŃĐœĐŸ бŃĐŽĐ”Ń ĐŸŃŃĐ°ĐœĐŸĐČĐ»Đ”ĐœĐŸ ŃĐŸĐ»ŃĐșĐŸ ŃŃĐŸ ĐżĐŸĐŽĐŽĐ”ŃĐ”ĐČĐŸ.
ĐĄŃпДŃĐČĐžĐ·ĐŸŃ ĐżĐ”ŃДзапŃŃŃĐžŃ ĐœĐ”ĐŸĐ±Ń
ĐŸĐŽĐžĐŒŃĐ” ĐżŃĐŸŃĐ”ŃŃŃ, Đž ĐČŃŃ ŃĐžŃŃĐ”ĐŒĐ° ĐœĐ” бŃĐŽĐ”Ń Đ·Đ°ŃŃĐŸĐœŃŃа. Đа ĐżŃаĐșŃĐžĐșĐ” ĐŒŃ ĐŸĐ±ĐœĐ°ŃŃжОлО, ŃŃĐŸ ŃŃа ĐŸĐżĐ”ŃаŃĐžŃ ĐșĐŸŃŃĐ”ĐșŃĐœĐ° ĐŽĐ»Ń Riak. ĐĐŸĐ»ŃĐ·ĐŸĐČаŃĐ”Đ»Ń ĐŒĐŸĐ¶Đ”Ń ĐżŃОЎŃĐŒĐ°ŃŃ, ĐșаĐș ĐČŃĐșĐ»ŃŃĐžŃŃ ĐČĐžŃŃŃалŃĐœŃĐč ŃзДл, ĐœĐŸ ŃŃпДŃĐČĐžĐ·ĐŸŃ ĐżĐ”ŃДзапŃŃŃĐžŃ Đ”ĐłĐŸÂ riak_core_vnode_sup. ĐŃлО ĐŸĐœĐž ŃŃпДŃĐœĐŸ ĐżŃĐ”ŃĐČŃŃ ĐżĐŸŃĐ»Đ”ĐŽĐœĐ”Đ”, ŃŃпДŃĐČĐžĐ·ĐŸŃ riak_core пДŃДзапŃŃŃĐžŃ Đ”ĐłĐŸ, пДŃДЎаĐČ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐŸĐ± ĐŸŃĐșĐ»ŃŃĐ”ĐœĐžĐž ŃŃпДŃĐČĐžĐ·ĐŸŃŃ Đ±ĐŸĐ»Đ”Đ” ĐČŃŃĐŸĐșĐŸĐłĐŸ ŃŃĐŸĐČĐœŃ. ĐŃĐŸŃ ĐŒĐ”Ń
Đ°ĐœĐžĐ·ĐŒ ĐžĐ·ĐŸĐ»ŃŃОО Đž ĐČĐŸŃŃŃĐ°ĐœĐŸĐČĐ»Đ”ĐœĐžŃ ĐžĐœŃĐžĐŽĐ”ĐœŃĐŸĐČ ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ŃазŃĐ°Đ±ĐŸŃŃĐžĐșĐ°ĐŒ Riak (Đž Erlang) ĐŽĐŸĐČĐŸĐ»ŃĐœĐŸ ĐżŃĐŸŃŃĐŸ ŃĐŸĐ·ĐŽĐ°ĐČаŃŃ ĐŸŃĐșĐ°Đ·ĐŸŃŃŃĐŸĐčŃĐžĐČŃĐ” ŃĐžŃŃĐ”ĐŒŃ.
ĐŠĐ”ĐœĐœĐŸŃŃŃ ŃŃĐŸĐč ĐŒĐŸĐŽĐ”Đ»Đž ĐŒĐŸĐœĐžŃĐŸŃĐžĐœĐłĐ° бŃла ĐżŃĐŸĐŽĐ”ĐŒĐŸĐœŃŃŃĐžŃĐŸĐČĐ°ĐœĐ°, ĐșĐŸĐłĐŽĐ° ĐżŃĐŸĐŒŃŃĐ»Đ”ĐœĐœŃĐč ĐżĐŸĐ»ŃĐ·ĐŸĐČаŃĐ”Đ»Ń ŃĐŸĐ·ĐŽĐ°Đ» ŃĐșŃŃŃĐ”ĐŒĐ°Đ»ŃĐœŃŃ ŃŃДЎŃ, ŃŃĐŸĐ±Ń ĐŸĐżŃДЎДлОŃŃ, гЎД ĐżŃĐŸĐžĐ·ĐŸĐčĐŽĐ”Ń ŃĐ±ĐŸĐč ĐœĐ”ŃĐșĐŸĐ»ŃĐșĐžŃ ŃĐžŃŃĐ”ĐŒ баз ĐŽĐ°ĐœĐœŃŃ . ĐŃа ŃŃДЎа ĐżĐŸŃĐŸĐ¶ĐŽĐ°Đ»Đ° ĐłĐžĐłĐ°ĐœŃŃĐșОД пОĐșĐž ĐœĐ°ĐłŃŃĐ·ĐșĐž Đž ŃŃĐ»ĐŸĐČĐžŃ, Đ±Đ»Đ°ĐłĐŸĐżŃĐžŃŃĐœŃĐ” ĐŽĐ»Ń ĐžĐœŃĐžĐŽĐ”ĐœŃĐŸĐČ. ĐĐœĐž бŃлО ŃбОŃŃ Ń ŃĐŸĐ»ĐșŃ, ĐŸĐ±ĐœĐ°ŃŃжОĐČ, ŃŃĐŸ РОаĐș ĐżŃĐŸŃŃĐŸ ĐœĐ” ĐŸŃŃĐ°ĐœĐŸĐČĐžŃŃŃ ĐŽĐ°Đ¶Đ” ĐČ ŃĐ°ĐŒŃŃ Ń ŃĐŽŃĐžŃ ŃŃĐ»ĐŸĐČĐžŃŃ . ĐąĐŸŃĐœĐ”Đ”, ĐșĐŸĐœĐ”ŃĐœĐŸ, ĐŸĐœĐž ĐŒĐŸĐłĐ»Đž ĐżŃĐ”ŃŃĐČаŃŃ ĐżŃĐŸŃĐ”ŃŃŃ ĐžĐ»Đž ĐżĐŸĐŽŃĐžŃŃĐ”ĐŒŃ ĐżĐŸ ĐŸŃЎДлŃĐœĐŸŃŃĐž Đž ŃĐ°Đ·ĐœŃĐŒĐž ŃĐżĐŸŃĐŸĐ±Đ°ĐŒĐž, ĐœĐŸ ŃŃпДŃĐČаĐčĐ·Đ”ŃŃ ĐŸŃĐžŃалО Đž пДŃДзапŃŃĐșалО ĐČŃĐ” ĐœĐ”ĐŸĐ±Ń ĐŸĐŽĐžĐŒĐŸĐ” ĐŽĐ»Ń ĐČĐŸŃŃŃĐ°ĐœĐŸĐČĐ»Đ”ĐœĐžŃ ĐČŃĐ”Đč ŃĐžŃŃĐ”ĐŒŃ ĐČ ŃĐ°Đ±ĐŸŃĐ”ĐŒ ŃĐŸŃŃĐŸŃĐœĐžĐž.
ĐĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”, applicationĐșĐŸŃĐŸŃĐŸĐ” ĐŒŃ ĐżŃДЎŃŃаĐČОлО ŃĐ°ĐœĐ”Đ”, ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ŃŃŃ ĐŽĐ»Ń ŃпаĐșĐŸĐČĐșĐž ĐŒĐŸĐŽŃлДĐč ОлО ŃĐ”ŃŃŃŃĐŸĐČ Erlang ĐČ ĐżĐŸĐČŃĐŸŃĐœĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ĐŒŃĐ” ĐșĐŸĐŒĐżĐŸĐœĐ”ĐœŃŃ. Đ OTP Đ”ŃŃŃ ĐŽĐČа ŃОпа ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč. ĐĐ°ĐžĐ±ĐŸĐ»Đ”Đ” ŃаŃĐżŃĐŸŃŃŃĐ°ĐœĐ”ĐœĐœĐ°Ń ŃĐŸŃĐŒĐ°, ĐœĐ°Đ·ŃĐČĐ°Đ”ĐŒĐ°Ń ĐŸĐ±ŃŃĐœŃĐŒĐž ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃĐŒĐž, запŃŃĐșĐ°Đ”Ń ŃĐżŃаĐČĐ»ŃŃŃДД ĐŽĐ”ŃĐ”ĐČĐŸ Đž ĐČŃĐ” ĐœĐ”ĐŸĐ±Ń
ĐŸĐŽĐžĐŒŃĐ” ŃŃаŃĐžŃĐ”ŃĐșОД ŃĐ°Đ±ĐŸŃОД ĐżŃĐŸŃĐ”ŃŃŃ. «ĐĐžĐ±Đ»ĐžĐŸŃĐ”ŃĐœŃД» ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ, ŃаĐșОД ĐșаĐș «ХŃĐ°ĐœĐŽĐ°ŃŃĐœĐ°Ń Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”Đșа», ĐžĐœŃДгŃĐžŃĐŸĐČĐ°ĐœĐœŃĐ” ĐČ ĐŽĐžŃŃŃОбŃŃĐžĐČ Erlang, ŃĐŸĐŽĐ”ŃĐ¶Đ°Ń Â«Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”ŃĐœŃД» ĐŒĐŸĐŽŃлО, ĐœĐŸ ĐœĐ” запŃŃĐșаŃŃ ĐŽĐ”ŃĐ”ĐČĐŸ ŃĐżŃаĐČĐ»Đ”ĐœĐžŃ. ĐŃĐŸ ĐœĐ” ĐŸĐ·ĐœĐ°ŃаДŃ, ŃŃĐŸ ĐșĐŸĐŽ ĐœĐ” ŃĐŸĐŽĐ”ŃĐ¶ĐžŃ ĐżŃĐŸŃĐ”ŃŃĐŸĐČ ĐžĐ»Đž ĐŽĐ”ŃĐ”ĐČŃĐ”ĐČ ŃŃпДŃĐČОзОО. ĐŃĐŸ ĐČŃĐ”ĐłĐŸ лОŃŃ ĐŸĐ·ĐœĐ°ŃаДŃ, ŃŃĐŸ ĐŸĐœĐž бŃĐŽŃŃ Đ·Đ°ĐżŃŃĐ”ĐœŃ ĐșаĐș ŃаŃŃŃ ĐŽĐ”ŃĐ”ĐČа, ĐżŃĐžĐœĐ°ĐŽĐ»Đ”Đ¶Đ°ŃĐ”ĐłĐŸ ĐŽŃŃĐłĐŸĐŒŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ.
ĐĄĐžŃŃĐ”ĐŒĐ° Erlang бŃĐŽĐ”Ń ŃĐŸŃŃĐŸŃŃŃ ĐžĐ· ĐœĐ°Đ±ĐŸŃа ŃĐ»Đ°Đ±ĐŸ ŃĐČŃĐ·Đ°ĐœĐœŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč. ĐĐ”ĐșĐŸŃĐŸŃŃĐ” Оз ĐœĐžŃ ĐœĐ°ĐżĐžŃĐ°ĐœŃ ŃазŃĐ°Đ±ĐŸŃŃĐžĐșĐ°ĐŒĐž, ĐŽŃŃгОД ĐŽĐŸŃŃŃĐżĐœŃ Ń ĐŸŃĐșŃŃŃŃĐŒ ĐžŃŃ ĐŸĐŽĐœŃĐŒ ĐșĐŸĐŽĐŸĐŒ, а ŃŃĐ”ŃŃĐž ŃĐČĐ»ŃŃŃŃŃ ĐœĐ”ĐŸŃŃĐ”ĐŒĐ»Đ”ĐŒĐŸĐč ŃаŃŃŃŃ ĐŽĐžŃŃŃОбŃŃĐžĐČа Erlang/OTP. ĐĄĐžŃŃĐ”ĐŒĐ° ĐČŃĐ”ĐŒĐ”ĐœĐž ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐžŃ Erlang Đž ДД ĐžĐœŃŃŃŃĐŒĐ”ĐœŃŃ ĐŸĐŽĐžĐœĐ°ĐșĐŸĐČĐŸ ĐŸĐ±ŃабаŃŃĐČаŃŃ ĐČŃĐ” ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ, ĐœĐ”Đ·Đ°ĐČĐžŃĐžĐŒĐŸ ĐŸŃ ŃĐŸĐłĐŸ, ŃĐČĐ»ŃŃŃŃŃ Đ»Đž ĐŸĐœĐž ŃаŃŃŃŃ ĐŽĐžŃŃŃОбŃŃĐžĐČа Erlang ОлО ĐœĐ”Ń.
Riak бŃĐ» ŃазŃĐ°Đ±ĐŸŃĐ°Đœ ĐŽĐ»Ń ĐŸĐ±Đ”ŃпДŃĐ”ĐœĐžŃ ĐžŃĐșĐ»ŃŃĐžŃДлŃĐœĐŸĐč ĐœĐ°ĐŽĐ”Đ¶ĐœĐŸŃŃĐž Đž ĐŽĐŸŃŃŃĐżĐœĐŸŃŃĐž ĐČ Đ±ĐŸĐ»ŃŃĐžŃ ĐŒĐ°ŃŃŃĐ°Đ±Đ°Ń Đž бŃĐ» ĐČĐŽĐŸŃ ĐœĐŸĐČĐ»Đ”Đœ ŃĐžŃŃĐ”ĐŒĐŸĐč Ń ŃĐ°ĐœĐ”ĐœĐžŃ ĐŽĐ°ĐœĐœŃŃ Dynamo ĐŸŃ Amazon [ DHJ+07 ]. ĐŃŃ ĐžŃĐ”ĐșŃŃŃŃ Dynamo Đž Riak ŃĐŸŃĐ”ŃаŃŃ ĐČ ŃДбД аŃпДĐșŃŃ ĐșаĐș ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃŃ Ń Đ”Ń-ŃĐ°Đ±Đ»ĐžŃ (DHT), ŃаĐș Đž ŃŃаЎОŃĐžĐŸĐœĐœŃŃ Đ±Đ°Đ· ĐŽĐ°ĐœĐœŃŃ . ĐĐČа ĐșĐ»ŃŃĐ”ĐČŃŃ ĐŒĐ”ŃĐŸĐŽĐ°, ĐșĐŸŃĐŸŃŃĐ” ĐžŃĐżĐŸĐ»ŃĐ·ŃŃŃ Riak Đž Dynamo, â ŃŃĐŸÂ ĐżĐŸŃĐ»Đ”ĐŽĐŸĐČаŃДлŃĐœĐŸĐ” Ń Đ”ŃĐžŃĐŸĐČĐ°ĐœĐžĐ”Â ĐŽĐ»Ń ŃĐ°Đ·ĐŒĐ”ŃĐ”ĐœĐžŃ ŃДплОĐș О пŃĐŸŃĐŸĐșĐŸĐ» ŃплДŃĐ”ĐœÂ ĐŽĐ»Ń ĐŸĐ±ĐŒĐ”ĐœĐ° ĐŸĐ±ŃĐžĐŒ ŃĐŸŃŃĐŸŃĐœĐžĐ”ĐŒ.
ĐĄĐŸĐłĐ»Đ°ŃĐŸĐČĐ°ĐœĐœĐŸĐ” Ń Đ”ŃĐžŃĐŸĐČĐ°ĐœĐžĐ” ŃŃДбŃĐ”Ń, ŃŃĐŸĐ±Ń ĐČŃĐ” ŃĐ·Đ»Ń ĐČ ŃĐžŃŃĐ”ĐŒĐ” Đ·ĐœĐ°Đ»Đž ĐŽŃŃĐł ĐŸ ĐŽŃŃгД Đž Đ·ĐœĐ°Đ»Đž, ĐșаĐșĐžĐŒĐž ŃĐ°Đ·ĐŽĐ”Đ»Đ°ĐŒĐž ĐČĐ»Đ°ĐŽĐ”Đ”Ń ĐșажЎŃĐč ŃзДл. ĐŃĐž ĐŽĐ°ĐœĐœŃĐ” ĐŸ ĐœĐ°Đ·ĐœĐ°ŃĐ”ĐœĐžĐž ĐŒĐŸĐ¶ĐœĐŸ Ń ŃĐ°ĐœĐžŃŃ ĐČ ŃаĐčлД ĐșĐŸĐœŃОгŃŃаŃОО Ń ŃĐ”ĐœŃŃĐ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐœŃĐŒ ŃĐżŃаĐČĐ»Đ”ĐœĐžĐ”ĐŒ, ĐœĐŸ ĐČ Đ±ĐŸĐ»ŃŃĐžŃ ĐșĐŸĐœŃОгŃŃаŃĐžŃŃ ŃŃĐŸ ŃŃĐ°ĐœĐŸĐČĐžŃŃŃ ŃŃДзĐČŃŃаĐčĐœĐŸ ŃĐ»ĐŸĐ¶ĐœĐŸ. ĐŃŃĐłĐŸĐč алŃŃĐ”ŃĐœĐ°ŃĐžĐČĐŸĐč ŃĐČĐ»ŃĐ”ŃŃŃ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžĐ” ŃĐ”ĐœŃŃалŃĐœĐŸĐłĐŸ ŃĐ”ŃĐČĐ”Ńа ĐșĐŸĐœŃОгŃŃаŃОО, ĐœĐŸ ŃŃĐŸ ŃĐŸĐ·ĐŽĐ°Đ”Ń Đ”ĐŽĐžĐœŃŃ ŃĐŸŃĐșŃ ĐŸŃĐșаза ĐČ ŃĐžŃŃĐ”ĐŒĐ”. ĐĐŒĐ”ŃŃĐŸ ŃŃĐŸĐłĐŸ Riak ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń ĐżŃĐŸŃĐŸĐșĐŸĐ» ŃплДŃĐ”Đœ ĐŽĐ»Ń ŃаŃĐżŃĐŸŃŃŃĐ°ĐœĐ”ĐœĐžŃ ĐŽĐ°ĐœĐœŃŃ ĐŸ ŃĐ»Đ”ĐœŃŃĐČĐ” ĐČ ĐșлаŃŃĐ”ŃĐ” Đž ĐČлаЎДлŃŃĐ” ŃĐ°Đ·ĐŽĐ”Đ»ĐŸĐČ ĐżĐŸ ĐČŃĐ”Đč ŃĐžŃŃĐ”ĐŒĐ”.
ĐŃĐŸŃĐŸĐșĐŸĐ»Ń ŃплДŃĐ”Đœ, ŃаĐșжД ĐœĐ°Đ·ŃĐČĐ°Đ”ĐŒŃĐ” ŃĐżĐžĐŽĐ”ĐŒĐžŃĐ”ŃĐșĐžĐŒĐž ĐżŃĐŸŃĐŸĐșĐŸĐ»Đ°ĐŒĐž, ŃĐ°Đ±ĐŸŃаŃŃ ĐžĐŒĐ”ĐœĐœĐŸ ŃаĐș, ĐșаĐș Đ·ĐČŃŃаŃ. ĐĐŸĐłĐŽĐ° ŃзДл ĐČ ŃĐžŃŃĐ”ĐŒĐ” Đ¶Đ”Đ»Đ°Đ”Ń ĐžĐ·ĐŒĐ”ĐœĐžŃŃ ŃаŃŃŃ ĐŸĐ±ŃĐžŃ ĐŽĐ°ĐœĐœŃŃ , ĐŸĐœ ĐČĐœĐŸŃĐžŃ ĐžĐ·ĐŒĐ”ĐœĐ”ĐœĐžŃ ĐČ ŃĐČĐŸŃ Đ»ĐŸĐșалŃĐœŃŃ ĐșĐŸĐżĐžŃ ĐŽĐ°ĐœĐœŃŃ Đž пДŃĐ”ĐŽĐ°Đ”Ń ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐœŃĐ” ĐŽĐ°ĐœĐœŃĐ” ŃĐ»ŃŃаĐčĐœĐŸĐŒŃ ŃĐ·Đ»Ń. ĐĐŸĐ»ŃŃĐžĐČ ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐžĐ”, ŃзДл ĐŸĐ±ŃĐ”ĐŽĐžĐœŃĐ”Ń ĐżĐŸĐ»ŃŃĐ”ĐœĐœŃĐ” ĐžĐ·ĐŒĐ”ĐœĐ”ĐœĐžŃ ŃĐŸ ŃĐČĐŸĐžĐŒ Đ»ĐŸĐșалŃĐœŃĐŒ ŃĐŸŃŃĐŸŃĐœĐžĐ”ĐŒ Đž ŃĐœĐŸĐČа пДŃĐ”ĐŽĐ°Đ”Ń ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐŽŃŃĐłĐŸĐŒŃ ŃĐ»ŃŃаĐčĐœĐŸĐŒŃ ŃĐ·Đ»Ń.
ĐŃĐž запŃŃĐșĐ” ĐșлаŃŃĐ”Ńа Riak ĐČŃĐ” ŃĐ·Đ»Ń ĐŽĐŸĐ»Đ¶ĐœŃ Đ±ŃŃŃ ĐœĐ°ŃŃŃĐŸĐ”ĐœŃ Ń ĐŸĐŽĐžĐœĐ°ĐșĐŸĐČŃĐŒ ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČĐŸĐŒ ŃĐ°Đ·ĐŽĐ”Đ»ĐŸĐČ. ĐаŃĐ”ĐŒ ĐșĐŸĐ»ŃŃĐŸ ŃĐŸĐłĐ»Đ°ŃĐŸĐČĐ°ĐœĐœĐŸĐłĐŸ Ń
Đ”ŃĐžŃĐŸĐČĐ°ĐœĐžŃ ĐŽĐ”Đ»ĐžŃŃŃ ĐœĐ° ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČĐŸ ŃĐ°Đ·ĐŽĐ”Đ»ĐŸĐČ, Đž ĐșажЎŃĐč ĐžĐœŃĐ”ŃĐČал ŃĐŸŃ
ŃĐ°ĐœŃĐ”ŃŃŃ Đ»ĐŸĐșалŃĐœĐŸ ĐșаĐș {HashRange, Owner}паŃа. ĐĐ”ŃĐČŃĐč ŃзДл ĐșлаŃŃĐ”Ńа ĐżŃĐŸŃŃĐŸ заŃĐČĐ»ŃĐ”Ń ĐżŃаĐČа ĐœĐ° ĐČŃĐ” ŃазЎДлŃ. ĐĐŸĐłĐŽĐ° ĐœĐŸĐČŃĐč ŃзДл ĐżŃĐžŃĐŸĐ”ĐŽĐžĐœŃĐ”ŃŃŃ Đș ĐșлаŃŃĐ”ŃŃ, ĐŸĐœ ĐŸĐ±ŃаŃаДŃŃŃ Đș ŃŃŃĐ”ŃŃĐČŃŃŃĐ”ĐŒŃ ŃĐ·Đ»Ń Đ·Đ° ŃпОŃĐșĐŸĐŒÂ {HashRange, Owner}Â ĐŸĐŽĐœĐŸŃĐ°ĐœĐłĐŸĐČŃŃ
ŃĐ·Đ»ĐŸĐČ. ĐаŃĐ”ĐŒ ĐŸĐœ запŃаŃĐžĐČĐ°Đ”Ń ĐżĐ°ŃŃ (ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČĐŸ ŃĐ°Đ·ĐŽĐ”Đ»ĐŸĐČ)/(ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČĐŸ ŃĐ·Đ»ĐŸĐČ), ĐŸĐ±ĐœĐŸĐČĐ»ŃŃ ŃĐČĐŸĐ” Đ»ĐŸĐșалŃĐœĐŸĐ” ŃĐŸŃŃĐŸŃĐœĐžĐ”, ŃŃĐŸĐ±Ń ĐŸŃŃазОŃŃ ĐœĐŸĐČĐŸĐ” ĐČĐ»Đ°ĐŽĐ”ĐœĐžĐ”. ĐĐ±ĐœĐŸĐČĐ»Đ”ĐœĐœĐ°Ń ĐžĐœŃĐŸŃĐŒĐ°ŃĐžŃ ĐŸ ĐČлаЎДлŃŃĐ” заŃĐ”ĐŒ пДŃДЎаДŃŃŃ ĐŸĐŽĐœĐŸŃĐ°ĐœĐłĐŸĐČĐŸĐŒŃ ŃĐ·Đ»Ń. ĐŃĐŸ ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐœĐŸĐ” ŃĐŸŃŃĐŸŃĐœĐžĐ” заŃĐ”ĐŒ ŃаŃĐżŃĐŸŃŃŃĐ°ĐœĐžĐ»ĐŸŃŃ ĐżĐŸ ĐČŃĐ”ĐŒŃ ĐșлаŃŃĐ”ŃŃ Ń ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžĐ”ĐŒ ĐŸĐżĐžŃĐ°ĐœĐœĐŸĐłĐŸ ĐČŃŃĐ” Đ°Đ»ĐłĐŸŃĐžŃĐŒĐ°.
ĐŃĐżĐŸĐ»ŃĐ·ŃŃ ĐżŃĐŸŃĐŸĐșĐŸĐ» ŃплДŃĐ”Đœ, Riak ĐžĐ·Đ±Đ”ĐłĐ°Đ”Ń ŃĐŸĐ·ĐŽĐ°ĐœĐžŃ Đ”ĐŽĐžĐœĐŸĐč ŃĐŸŃĐșĐž ĐŸŃĐșаза ĐČ ĐČОЎД ŃĐ”ĐœŃŃĐ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐœĐŸĐłĐŸ ŃĐ”ŃĐČĐ”Ńа ĐșĐŸĐœŃОгŃŃаŃОО, ĐŸŃĐČĐŸĐ±ĐŸĐ¶ĐŽĐ°Ń ŃĐžŃŃĐ”ĐŒĐœŃŃ ĐŸĐżĐ”ŃаŃĐŸŃĐŸĐČ ĐŸŃ ĐœĐ”ĐŸĐ±Ń ĐŸĐŽĐžĐŒĐŸŃŃĐž ĐżĐŸĐŽĐŽĐ”ŃжОĐČаŃŃ ĐșŃĐžŃĐžŃĐ”ŃĐșОД ĐŽĐ°ĐœĐœŃĐ” ĐșĐŸĐœŃОгŃŃаŃОО ĐșлаŃŃĐ”Ńа. ĐŃĐ±ĐŸĐč ŃзДл ĐŒĐŸĐ¶Đ”Ń Đ·Đ°ŃĐ”ĐŒ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ĐżĐŸĐ»ŃŃĐ”ĐœĐœŃĐ” ĐŽĐ°ĐœĐœŃĐ” ĐŸ ĐœĐ°Đ·ĐœĐ°ŃĐ”ĐœĐžĐž ŃĐ°Đ·ĐŽĐ”Đ»ĐŸĐČ ĐČ ŃĐžŃŃĐ”ĐŒĐ” ĐŽĐ»Ń ĐŒĐ°ŃŃŃŃŃОзаŃОО запŃĐŸŃĐŸĐČ. ĐŃĐž ŃĐŸĐČĐŒĐ”ŃŃĐœĐŸĐŒ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžĐž ĐżŃĐŸŃĐŸĐșĐŸĐ» Gossip Đž ĐżĐŸŃĐ»Đ”ĐŽĐŸĐČаŃДлŃĐœĐŸĐ” Ń Đ”ŃĐžŃĐŸĐČĐ°ĐœĐžĐ” ĐżĐŸĐ·ĐČĐŸĐ»ŃŃŃ Riak ŃŃĐœĐșŃĐžĐŸĐœĐžŃĐŸĐČаŃŃ ĐșаĐș ĐŽĐ”ĐčŃŃĐČĐžŃДлŃĐœĐŸ ĐŽĐ”ŃĐ”ĐœŃŃĐ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐœĐ°Ń ŃĐžŃŃĐ”ĐŒĐ°, ŃŃĐŸ ĐžĐŒĐ”Đ”Ń ĐČĐ°Đ¶ĐœŃĐ” ĐżĐŸŃлДЎŃŃĐČĐžŃ ĐŽĐ»Ń ŃазĐČĐ”ŃŃŃĐČĐ°ĐœĐžŃ Đž ŃĐșŃплŃаŃаŃОО ĐșŃŃĐżĐœĐŸĐŒĐ°ŃŃŃĐ°Đ±ĐœŃŃ ŃĐžŃŃĐ”ĐŒ.
ĐĐŸĐ»ŃŃĐžĐœŃŃĐČĐŸ ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃŃĐŸĐČ ŃŃĐžŃаŃŃ, ŃŃĐŸ ĐŒĐ”ĐœŃŃОД Đž ĐżŃĐŸŃŃŃĐ” Đ±Đ°Đ·Ń ĐșĐŸĐŽĐ° ĐœĐ” ŃĐŸĐ»ŃĐșĐŸ лДгŃĐ” ĐżĐŸĐŽĐŽĐ”ŃжОĐČаŃŃ, ĐœĐŸ Đž ŃаŃŃĐŸ ŃĐŸĐŽĐ”ŃĐ¶Đ°Ń ĐŒĐ”ĐœŃŃĐ” ĐŸŃĐžĐ±ĐŸĐș. ĐŃĐżĐŸĐ»ŃĐ·ŃŃ Đ±Đ°Đ·ĐŸĐČŃĐ” ĐżŃĐžĐŒĐžŃĐžĐČŃ ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐžŃ Erlang ĐŽĐ»Ń ŃĐČŃĐ·Đž ĐČ ĐșлаŃŃĐ”ŃĐ”, Riak ĐŒĐŸĐ¶Đ”Ń ĐœĐ°ŃаŃŃ Ń ŃŃĐœĐŽĐ°ĐŒĐ”ĐœŃалŃĐœĐŸ ĐœĐ°ĐŽĐ”Đ¶ĐœĐŸĐłĐŸ ŃŃĐŸĐČĐœŃ Đ°ŃĐžĐœŃ ŃĐŸĐœĐœĐŸĐłĐŸ ĐŸĐ±ĐŒĐ”ĐœĐ° ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃĐŒĐž Đž ĐżĐŸŃŃŃĐŸĐžŃŃ ŃĐČĐŸĐž ŃĐŸĐ±ŃŃĐČĐ”ĐœĐœŃĐ” ĐżŃĐŸŃĐŸĐșĐŸĐ»Ń, ĐœĐ” бДŃĐżĐŸĐșĐŸŃŃŃ ĐŸĐ± ŃŃĐŸĐč Đ±Đ°Đ·ĐŸĐČĐŸĐč ŃДалОзаŃОО. ĐĐŸ ĐŒĐ”ŃĐ” ŃĐŸĐłĐŸ, ĐșаĐș Riak ŃŃĐ°ĐœĐŸĐČОлŃŃ Đ·ŃĐ”Đ»ĐŸĐč ŃĐžŃŃĐ”ĐŒĐŸĐč, ĐœĐ”ĐșĐŸŃĐŸŃŃĐ” аŃпДĐșŃŃ Đ”Đ” ŃĐ”ŃĐ”ĐČĐŸĐłĐŸ ĐČĐ·Đ°ĐžĐŒĐŸĐŽĐ”ĐčŃŃĐČĐžŃ ĐŸŃĐŸŃлО ĐŸŃ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžŃ ĐČŃŃŃĐŸĐ”ĐœĐœĐŸĐłĐŸ ĐŽĐžŃŃŃОбŃŃĐžĐČа Erlang (Đș ĐżŃŃĐŒĐŸĐŒŃ ĐŒĐ°ĐœĐžĐżŃлОŃĐŸĐČĐ°ĐœĐžŃ TCP-ŃĐŸĐșĐ”ŃĐ°ĐŒĐž), ĐČ ŃĐŸ ĐČŃĐ”ĐŒŃ ĐșаĐș ĐŽŃŃгОД ĐŸŃŃаĐČалОŃŃ Ń ĐŸŃĐŸŃĐŸ ĐżĐŸĐŽŃ ĐŸĐŽŃŃĐžĐŒĐž ĐŽĐ»Ń ĐČĐșĐ»ŃŃĐ”ĐœĐœŃŃ ĐżŃĐžĐŒĐžŃĐžĐČĐŸĐČ. ĐаŃаĐČ Ń ĐČŃŃŃĐŸĐ”ĐœĐœĐŸĐč пДŃДЎаŃĐž ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč Erlang ĐŽĐ»Ń ĐČŃĐ”ĐłĐŸ, ĐșĐŸĐŒĐ°ĐœĐŽĐ° Riak ŃĐŒĐŸĐłĐ»Đ° ĐŸŃĐ”ĐœŃ Đ±ŃŃŃŃĐŸ ĐżĐŸŃŃŃĐŸĐžŃŃ ĐČŃŃ ŃĐžŃŃĐ”ĐŒŃ. ĐŃĐž ĐżŃĐžĐŒĐžŃĐžĐČŃ ĐŽĐŸŃŃаŃĐŸŃĐœĐŸ ŃĐžŃŃŃ Đž ĐżĐŸĐœŃŃĐœŃ, ŃŃĐŸĐ±Ń ĐżĐŸŃĐŸĐŒ бŃĐ»ĐŸ лДгĐșĐŸ Đ·Đ°ĐŒĐ”ĐœĐžŃŃ ŃĐ” ĐœĐ”ĐŒĐœĐŸĐłĐžĐ” ĐŒĐ”ŃŃа, гЎД ĐŸĐœĐž ĐŸĐșазалОŃŃ ĐœĐ” Đ»ŃŃŃĐžĐŒ ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ ĐżĐŸĐŽŃ ĐŸĐŽŃŃĐžĐŒĐž ĐŽĐ»Ń ĐżŃĐŸĐžĐ·ĐČĐŸĐŽŃŃĐČа.
ĐŃĐŸĐŒĐ” ŃĐŸĐłĐŸ, Đ±Đ»Đ°ĐłĐŸĐŽĐ°ŃŃ Ń Đ°ŃаĐșŃĐ”ŃŃ ĐŸĐ±ĐŒĐ”ĐœĐ° ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃĐŒĐž Erlang Đž лДгĐșĐŸĐŒŃ ŃĐŽŃŃ ĐČĐžŃŃŃалŃĐœĐŸĐč ĐŒĐ°ŃĐžĐœŃ Erlang ĐżĐŸĐ»ŃĐ·ĐŸĐČаŃĐ”Đ»Ń ĐŒĐŸĐ¶Đ”Ń Ń Đ»Đ”ĐłĐșĐŸŃŃŃŃ Đ·Đ°ĐżŃŃĐșаŃŃ 12 ŃĐ·Đ»ĐŸĐČ ĐœĐ° 1 ĐŒĐ°ŃĐžĐœĐ” ОлО 12 ŃĐ·Đ»ĐŸĐČ ĐœĐ° 12 ĐŒĐ°ŃĐžĐœĐ°Ń . ĐŃĐŸ Đ·ĐœĐ°ŃĐžŃДлŃĐœĐŸ ŃĐżŃĐŸŃĐ°Đ”Ń ŃазŃĐ°Đ±ĐŸŃĐșŃ Đž ŃĐ”ŃŃĐžŃĐŸĐČĐ°ĐœĐžĐ” ĐżĐŸ ŃŃаĐČĐœĐ”ĐœĐžŃ Ń Đ±ĐŸĐ»Đ”Đ” ŃŃжДлŃĐŒĐž ĐŒĐ”Ń Đ°ĐœĐžĐ·ĐŒĐ°ĐŒĐž ĐŸĐ±ĐŒĐ”ĐœĐ° ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃĐŒĐž Đž ĐșлаŃŃĐ”ŃОзаŃОО. ĐŃĐŸ бŃĐ»ĐŸ ĐŸŃĐŸĐ±Đ”ĐœĐœĐŸ ŃĐ”ĐœĐœĐŸ Оз-за ŃŃĐœĐŽĐ°ĐŒĐ”ĐœŃалŃĐœĐŸ ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœĐŸĐč ĐżŃĐžŃĐŸĐŽŃ Riak. ĐŃŃĐŸŃĐžŃĐ”ŃĐșĐž ŃĐ»ĐŸĐ¶ĐžĐ»ĐŸŃŃ ŃаĐș, ŃŃĐŸ Đ±ĐŸĐ»ŃŃĐžĐœŃŃĐČĐŸ ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃŃ ŃĐžŃŃĐ”ĐŒ ĐŸŃĐ”ĐœŃ ŃĐ»ĐŸĐ¶ĐœĐŸ ŃĐ°Đ±ĐŸŃаŃŃ ĐČ Â«ŃĐ”Đ¶ĐžĐŒĐ” ŃазŃĐ°Đ±ĐŸŃĐșО» ĐœĐ° ĐŸĐŽĐœĐŸĐŒ ĐœĐŸŃŃбŃĐșĐ” ŃазŃĐ°Đ±ĐŸŃŃĐžĐșа. Đ ŃДзŃĐ»ŃŃаŃĐ” ŃазŃĐ°Đ±ĐŸŃŃĐžĐșĐ°ĐŒ ŃаŃŃĐŸ ĐżŃĐžŃ ĐŸĐŽĐžŃŃŃ ŃĐ”ŃŃĐžŃĐŸĐČаŃŃ ŃĐČĐŸĐč ĐșĐŸĐŽ ĐČ ŃŃДЎД, ĐșĐŸŃĐŸŃĐ°Ń ŃĐČĐ»ŃĐ”ŃŃŃ ĐżĐŸĐŽĐŒĐœĐŸĐ¶Đ”ŃŃĐČĐŸĐŒ ĐžŃ ĐżĐŸĐ»ĐœĐŸĐč ŃĐžŃŃĐ”ĐŒŃ, Ń ŃĐŸĐČĐ”ŃŃĐ”ĐœĐœĐŸ ĐŽŃŃĐłĐžĐŒ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”ĐŒ. ĐĐŸŃĐșĐŸĐ»ŃĐșŃ ĐŒĐœĐŸĐłĐŸŃĐ·Đ»ĐŸĐČĐŸĐč ĐșлаŃŃĐ”Ń Riak ĐŒĐŸĐ¶ĐœĐŸ лДгĐșĐŸ запŃŃŃĐžŃŃ ĐœĐ° ĐŸĐŽĐœĐŸĐŒ ĐœĐŸŃŃбŃĐșĐ” бДз ŃŃĐ”Đ·ĐŒĐ”ŃĐœĐŸĐłĐŸ ĐżĐŸŃŃĐ”Đ±Đ»Đ”ĐœĐžŃ ŃĐ”ŃŃŃŃĐŸĐČ ĐžĐ»Đž ŃĐ»ĐŸĐ¶ĐœĐŸĐč ĐœĐ°ŃŃŃĐŸĐčĐșĐž, ĐČ ĐżŃĐŸŃĐ”ŃŃĐ” ŃазŃĐ°Đ±ĐŸŃĐșĐž ĐŒĐŸĐ¶ĐœĐŸ лДгŃĐ” ŃĐŸĐ·ĐŽĐ°ĐČаŃŃ ĐșĐŸĐŽ, ĐłĐŸŃĐŸĐČŃĐč Đș ŃазĐČĐ”ŃŃŃĐČĐ°ĐœĐžŃ ĐČ ŃĐ°Đ±ĐŸŃĐ”Đč ŃŃДЎД.
ĐŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžĐ” ŃŃпДŃĐČĐžĐ·ĐŸŃĐŸĐČ Erlang/OTP ĐŽĐ”Đ»Đ°Đ”Ń Riak ĐłĐŸŃĐ°Đ·ĐŽĐŸ Đ±ĐŸĐ»Đ”Đ” ŃŃŃĐŸĐčŃĐžĐČŃĐŒ Đș ŃĐ±ĐŸŃĐŒ ĐżĐŸĐŽĐșĐŸĐŒĐżĐŸĐœĐ”ĐœŃĐŸĐČ. РОаĐș ĐžĐŽĐ”Ń ĐŽĐ°Đ»ŃŃĐ”; ĐĐŽĐŸŃ ĐœĐŸĐČĐ»Đ”ĐœĐœŃĐč ŃаĐșĐžĐŒ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”ĐŒ, ĐșлаŃŃĐ”Ń Riak ŃаĐșжД ĐŒĐŸĐ¶Đ”Ń Đ»Đ”ĐłĐșĐŸ ĐżŃĐŸĐŽĐŸĐ»Đ¶Đ°ŃŃ ŃŃĐœĐșŃĐžĐŸĐœĐžŃĐŸĐČаŃŃ, ЎажД ĐșĐŸĐłĐŽĐ° ŃДлŃĐ” ŃĐ·Đ»Ń ĐČŃŃ ĐŸĐŽŃŃ ĐžĐ· ŃŃŃĐŸŃ Đž ĐžŃŃДзаŃŃ ĐžĐ· ŃĐžŃŃĐ”ĐŒŃ. ĐŃĐŸ ĐŒĐŸĐ¶Đ”Ń ĐżŃĐžĐČĐ”ŃŃĐž Đș ĐżĐŸŃĐŸĐč ŃĐŽĐžĐČĐžŃДлŃĐœĐŸĐŒŃ ŃŃĐŸĐČĐœŃ ŃŃŃĐŸĐčŃĐžĐČĐŸŃŃĐž. ĐĐŽĐœĐžĐŒ Оз ĐżŃĐžĐŒĐ”ŃĐŸĐČ ŃŃĐŸĐłĐŸ бŃĐ» ŃĐ»ŃŃаĐč, ĐșĐŸĐłĐŽĐ° ĐșŃŃĐżĐœĐŸĐ” ĐżŃДЎпŃĐžŃŃОД ĐżŃĐŸĐČĐŸĐŽĐžĐ»ĐŸ ŃŃŃĐ”ŃŃ-ŃĐ”ŃŃĐžŃĐŸĐČĐ°ĐœĐžĐ” ŃазлОŃĐœŃŃ Đ±Đ°Đ· ĐŽĐ°ĐœĐœŃŃ Đž ĐœĐ°ĐŒĐ”ŃĐ”ĐœĐœĐŸ ĐČŃĐČĐŸĐŽĐžĐ»ĐŸ ĐžŃ ĐžĐ· ŃŃŃĐŸŃ, ŃŃĐŸĐ±Ń ĐœĐ°Đ±Đ»ŃЎаŃŃ Đ·Đ° ĐžŃ ĐłŃĐ°ĐœĐžŃĐœŃĐŒĐž ŃŃĐ»ĐŸĐČĐžŃĐŒĐž. ĐĐŸĐłĐŽĐ° ĐŸĐœĐž ĐŽĐŸĐ±ŃалОŃŃ ĐŽĐŸ РОаĐșа, ĐŸĐœĐž ŃаŃŃĐ”ŃŃлОŃŃ. ĐажЎŃĐč Ńаз, ĐșĐŸĐłĐŽĐ° ĐŸĐœĐž ĐœĐ°Ń ĐŸĐŽĐžĐ»Đž ŃĐżĐŸŃĐŸĐ± (ĐżĐŸŃŃДЎŃŃĐČĐŸĐŒ ĐŒĐ°ĐœĐžĐżŃĐ»ŃŃĐžĐč ĐœĐ° ŃŃĐŸĐČĐœĐ” ĐĐĄ, ĐżĐ»ĐŸŃ ĐŸĐłĐŸ IPC Đž Ń. ĐŽ.) ĐżŃĐžĐČĐ”ŃŃĐž Đș ŃĐ±ĐŸŃ ĐżĐŸĐŽŃĐžŃŃĐ”ĐŒŃ Riak, ĐŸĐœĐž ĐœĐ°Đ±Đ»ŃЎалО ĐŸŃĐ”ĐœŃ ĐșŃаŃĐșĐŸĐČŃĐ”ĐŒĐ”ĐœĐœĐŸĐ” ĐżĐ°ĐŽĐ”ĐœĐžĐ” ĐżŃĐŸĐžĐ·ĐČĐŸĐŽĐžŃДлŃĐœĐŸŃŃĐž, а заŃĐ”ĐŒ ŃĐžŃŃĐ”ĐŒĐ° ĐČĐŸĐ·ĐČŃаŃалаŃŃ Đș ĐœĐŸŃĐŒĐ°Đ»ŃĐœĐŸĐŒŃ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ. ĐŃĐŸ ĐżŃŃĐŒĐŸĐč ŃДзŃĐ»ŃŃĐ°Ń ĐżŃĐŸĐŽŃĐŒĐ°ĐœĐœĐŸĐłĐŸ ĐżĐŸĐŽŃ ĐŸĐŽĐ° «пŃŃŃŃ ŃŃŃ ĐœĐ”Ń». РОаĐș аĐșĐșŃŃаŃĐœĐŸ пДŃДзапŃŃĐșал ĐșажЎŃŃ ĐžĐ· ŃŃĐžŃ ĐżĐŸĐŽŃĐžŃŃĐ”ĐŒ ĐżĐŸ ŃŃĐ”Đ±ĐŸĐČĐ°ĐœĐžŃ, Đž ĐČŃŃ ŃĐžŃŃĐ”ĐŒĐ° ĐżŃĐŸŃŃĐŸ ĐżŃĐŸĐŽĐŸĐ»Đ¶Đ°Đ»Đ° ŃŃĐœĐșŃĐžĐŸĐœĐžŃĐŸĐČаŃŃ. ĐŃĐŸŃ ĐŸĐżŃŃ ĐżĐŸĐșазŃĐČĐ°Đ”Ń ĐžĐŒĐ”ĐœĐœĐŸ ŃŃ ŃŃŃĐŸĐčŃĐžĐČĐŸŃŃŃ, ĐșĐŸŃĐŸŃŃŃ ĐŸĐ±Đ”ŃпДŃĐžĐČĐ°Đ”Ń ĐżĐŸĐŽŃ ĐŸĐŽ Erlang/OTP Đș ŃĐŸĐ·ĐŽĐ°ĐœĐžŃ ĐżŃĐŸĐłŃĐ°ĐŒĐŒ.
ĐŃа глаĐČа ĐŸŃĐœĐŸĐČĐ°ĐœĐ° ĐœĐ° ĐșĐŸĐœŃпДĐșŃĐ°Ń Đ»Đ”ĐșŃĐžĐč Đ€ŃĐ°ĐœŃĐ”ŃĐșĐŸ ЧДзаŃĐžĐœĐž Đž ХаĐčĐŒĐŸĐœĐ° ĐąĐŸĐŒĐżŃĐŸĐœĐ° 2009 ĐłĐŸĐŽĐ°, ĐżŃĐŸŃĐžŃĐ°ĐœĐœŃŃ ĐČ ĐŠĐ”ĐœŃŃалŃĐœĐŸ-ĐĐČŃĐŸĐżĐ”ĐčŃĐșĐŸĐč ŃĐșĐŸĐ»Đ” ŃŃĐœĐșŃĐžĐŸĐœĐ°Đ»ŃĐœĐŸĐłĐŸ ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃĐŸĐČĐ°ĐœĐžŃ, ĐżŃĐŸŃ ĐŸĐŽĐžĐČŃĐ”Đč ĐČ ĐŃЎапДŃŃĐ” Đž ĐĐŸĐŒĐŸŃĐœĐŸ. ĐĐŸĐ»ŃŃĐŸĐč ĐČĐșлаЎ ĐČĐœĐ”Ń ĐĄĐ°ĐčĐŒĐŸĐœ ĐąĐŸĐŒĐżŃĐŸĐœ Оз ĐĐ”ĐœŃŃĐșĐŸĐłĐŸ ŃĐœĐžĐČĐ”ŃŃĐžŃĐ”Ńа ĐČ ĐĐ”ĐœŃĐ”ŃбДŃĐž, ĐДлОĐșĐŸĐ±ŃĐžŃĐ°ĐœĐžŃ. ĐŃĐŸĐ±Đ°Ń Đ±Đ»Đ°ĐłĐŸĐŽĐ°ŃĐœĐŸŃŃŃ ĐČŃŃажаДŃŃŃ ĐČŃĐ”ĐŒ ŃĐ”ŃĐ”ĐœĐ·Đ”ĐœŃĐ°ĐŒ, ĐșĐŸŃĐŸŃŃĐ” ĐœĐ° ŃĐ°Đ·ĐœŃŃ ŃŃĐ°ĐżĐ°Ń ĐœĐ°ĐżĐžŃĐ°ĐœĐžŃ ŃŃĐŸĐč глаĐČŃ ĐżŃĐ”ĐŽĐŸŃŃаĐČОлО ŃĐ”ĐœĐœŃĐ” ĐŸŃĐ·ŃĐČŃ.
ĐаŃа Erlang/OTP ĐŸĐ±Đ”ŃпДŃĐžĐČĐ°Đ”Ń ĐžĐŽĐ”Đ°Đ»ŃĐœŃŃ ĐżĐ»Đ°ŃŃĐŸŃĐŒŃ ĐŽĐ»Ń ŃазŃĐ°Đ±ĐŸŃĐșĐž ŃаĐșĐžŃ ŃĐžŃŃĐ”ĐŒ, ĐșаĐș Riak, ĐżĐŸŃĐșĐŸĐ»ŃĐșŃ ĐŸĐœĐ° ĐžĐ·ĐœĐ°ŃалŃĐœĐŸ ĐŸĐ±Đ”ŃпДŃĐžĐČĐ°Đ”Ń ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃŃ ŃĐČŃĐ·Ń ĐŒĐ”Đ¶ĐŽŃ ŃĐ·Đ»Đ°ĐŒĐž, ĐŸŃĐ”ŃДЎО ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč, ĐŽĐ”ŃĐ”ĐșŃĐŸŃŃ ĐŸŃĐžĐ±ĐŸĐș Đž абŃŃŃаĐșŃĐžŃ ŃĐžŃŃĐ”ĐŒ ĐșĐ»ĐžĐ”ĐœŃ-ŃĐ”ŃĐČĐ”Ń. ĐŃĐŸĐŒĐ” ŃĐŸĐłĐŸ, ĐœĐ°ĐžĐ±ĐŸĐ»Đ”Đ” ŃаŃŃĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ĐŒŃĐ” ŃĐ°Đ±Đ»ĐŸĐœŃ ĐČ Erlang ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœŃ ĐČ Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”ĐșĐ°Ń , ĐŸĐ±ŃŃĐœĐŸ ĐœĐ°Đ·ŃĐČĐ°Đ”ĐŒŃŃ Â«OTP Behaviors». ĐĐœĐž ŃĐŸĐŽĐ”ŃĐ¶Đ°Ń ĐŸĐ±ŃĐžĐč ĐșĐŸĐŽ ĐŽĐ»Ń ŃĐżŃаĐČĐ»Đ”ĐœĐžŃ ĐżĐ°ŃĐ°Đ»Đ»Đ”Đ»ĐžĐ·ĐŒĐŸĐŒ Đž ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșĐž ĐŸŃĐžĐ±ĐŸĐș, ŃŃĐŸ ŃĐżŃĐŸŃĐ°Đ”Ń ĐżĐ°ŃаллДлŃĐœĐŸĐ” ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃĐŸĐČĐ°ĐœĐžĐ” Đž ĐżŃĐ”ĐŽĐŸŃĐČŃаŃĐ°Đ”Ń ĐżĐŸĐżĐ°ĐŽĐ°ĐœĐžĐ” ŃазŃĐ°Đ±ĐŸŃŃĐžĐșа ĐČ Đ»ĐŸĐČŃŃĐșĐž, ĐżŃĐžŃŃŃОД ŃŃĐŸĐŒŃ ŃĐžĐżŃ ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃĐŸĐČĐ°ĐœĐžŃ. «ĐĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ» ĐŸŃŃлДжОĐČаŃŃŃŃ ŃŃпДŃĐČĐžĐ·ĐŸŃĐ°ĐŒĐž, ĐșĐŸŃĐŸŃŃĐ” ŃĐ°ĐŒĐž ĐżĐŸ ŃДбД ŃĐČĐ»ŃŃŃŃŃ Â«ĐĐŸĐČĐ”ĐŽĐ”ĐœĐžŃĐŒĐžÂ», ŃĐłŃŃппОŃĐŸĐČĐ°ĐœĐœŃĐŒĐž ĐČ ĐŽĐ”ŃĐ”ĐČŃŃŃ ĐœĐ°ĐŽĐ·ĐŸŃа. ĐĐ”ŃĐ”ĐČĐŸ ĐșĐŸĐœŃŃĐŸĐ»Ń ŃпаĐșĐŸĐČŃĐČаДŃŃŃ ĐČ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ” Đž заŃĐ”ĐŒ ŃĐČĐ»ŃĐ”ŃŃŃ Đ±Đ»ĐŸĐșĐŸĐŒ ĐżŃĐŸĐłŃĐ°ĐŒĐŒŃ Erlang.
ĐĐŸĐ»ĐœĐ°Ń ŃĐžŃŃĐ”ĐŒĐ° Erlang, ŃаĐșĐ°Ń ĐșаĐș Riak, ĐżŃДЎŃŃаĐČĐ»ŃĐ”Ń ŃĐŸĐ±ĐŸĐč ĐœĐ°Đ±ĐŸŃ ŃĐ»Đ°Đ±ĐŸŃĐČŃĐ·Đ°ĐœĐœŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč, ĐșĐŸŃĐŸŃŃĐ” ĐČĐ·Đ°ĐžĐŒĐŸĐŽĐ”ĐčŃŃĐČŃŃŃ ĐŽŃŃĐł Ń ĐŽŃŃĐłĐŸĐŒ. ĐĐ”ĐșĐŸŃĐŸŃŃĐ” ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ ĐœĐ°ĐżĐžŃĐ°ĐœŃ ŃазŃĐ°Đ±ĐŸŃŃĐžĐșĐŸĐŒ, ĐœĐ”ĐșĐŸŃĐŸŃŃĐ” ĐČŃ ĐŸĐŽŃŃ ĐČ ŃŃĐ°ĐœĐŽĐ°ŃŃĐœŃŃ ĐșĐŸĐŒĐżĐ»Đ”ĐșŃаŃĐžŃ Erlang/OTP, а ĐŽŃŃгОД ĐŒĐŸĐłŃŃ Đ±ŃŃŃ ĐșĐŸĐŒĐżĐŸĐœĐ”ĐœŃĐ°ĐŒĐž Ń ĐŸŃĐșŃŃŃŃĐŒ ĐžŃŃ ĐŸĐŽĐœŃĐŒ ĐșĐŸĐŽĐŸĐŒ. ĐĐœĐž загŃŃжаŃŃŃŃ ĐżĐŸŃĐ»Đ”ĐŽĐŸĐČаŃДлŃĐœĐŸ Đž запŃŃĐșаŃŃŃŃ ŃŃĐ”ĐœĐ°ŃĐžĐ”ĐŒ запŃŃĐșа, ŃĐŸĐ·ĐŽĐ°ĐœĐœŃĐŒ ĐœĐ° ĐŸŃĐœĐŸĐČĐ” ŃпОŃĐșа ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč Đž ĐžŃ ĐČĐ”ŃŃĐžĐč.
ЧŃĐŸ ŃазлОŃаДŃŃŃ ĐŒĐ”Đ¶ĐŽŃ ŃĐžŃŃĐ”ĐŒĐ°ĐŒĐž, ŃаĐș ŃŃĐŸ запŃŃĐșĐ°Đ”ĐŒŃĐ” ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ, ĐžĐœŃДгŃĐžŃĐŸĐČĐ°ĐœĐœŃĐ” ĐČ ĐČŃĐżŃŃĐș. Đ ŃŃĐ°ĐœĐŽĐ°ŃŃĐœĐŸĐŒ ĐŽĐžŃŃŃОбŃŃĐžĐČĐ” Erlang ŃаĐčĐ»Ń Đ·Đ°ĐżŃŃĐșа запŃŃĐșаŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ Kernel Đž StdLib (ŃŃĐ°ĐœĐŽĐ°ŃŃĐœĐ°Ń Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”Đșа). ĐĐŸŃлД ŃŃŃĐ°ĐœĐŸĐČĐșĐž ŃаĐșжД запŃŃĐșаДŃŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ” SASL (ĐĐžĐ±Đ»ĐžĐŸŃĐ”Đșа ĐżĐŸĐŽĐŽĐ”ŃжĐșĐž ŃĐžŃŃĐ”ĐŒĐœĐŸĐč аŃŃ ĐžŃĐ”ĐșŃŃŃŃ). SASL ŃĐŸĐŽĐ”ŃĐ¶ĐžŃ ĐžĐœŃŃŃŃĐŒĐ”ĐœŃŃ ĐČŃĐżŃŃĐșа Đž ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐžŃ, а ŃаĐșжД ŃŃĐœĐșŃОО ĐČĐ”ĐŽĐ”ĐœĐžŃ Đ¶ŃŃĐœĐ°Đ»ĐŸĐČ. Riak ĐČĐ”ĐŽĐ”Ń ŃĐ”Đ±Ń ŃлДЎŃŃŃĐžĐŒ ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ, запŃŃĐșĐ°Ń ŃпДŃĐžŃĐžŃĐœŃĐ” ĐŽĐ»Ń Riak ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ Đž ĐžŃ Đ·Đ°ĐČĐžŃĐžĐŒĐŸŃŃĐž, ĐČ ŃĐŸĐŒ ŃĐžŃлД Kernel , StdLib Đž SASL . ĐĐŸĐ»ĐœĐ°Ń, ĐłĐŸŃĐŸĐČĐ°Ń Đș ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžŃ ŃĐ±ĐŸŃĐșа Riak ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń ŃŃĐž ŃŃĐ°ĐœĐŽĐ°ŃŃĐœŃĐ” ŃĐ»Đ”ĐŒĐ”ĐœŃŃ ĐŽĐžŃŃŃОбŃŃĐžĐČа Erlang/OTP Đž запŃŃĐșĐ°Đ”Ń ĐžŃ ĐŸĐŽĐœĐŸĐČŃĐ”ĐŒĐ”ĐœĐœĐŸ ĐżŃĐž riak startĐČŃĐ·ĐŸĐČĐ” ĐșĐŸĐŒĐ°ĐœĐŽŃ ĐČ ĐșĐŸĐŒĐ°ĐœĐŽĐœĐŸĐč ŃŃŃĐŸĐșĐ”. Riak ŃĐŸŃŃĐŸĐžŃ ĐžĐ· ĐœĐ”ŃĐșĐŸĐ»ŃĐșĐžŃ ŃĐ»ĐŸĐ¶ĐœŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč, Đž ŃŃŃ ĐłĐ»Đ°ĐČŃ ĐœĐ” ŃлДЎŃĐ”Ń ŃаŃŃĐŒĐ°ŃŃĐžĐČаŃŃ ĐșаĐș ĐżĐŸĐ»ĐœĐŸĐ” ŃŃĐșĐŸĐČĐŸĐŽŃŃĐČĐŸ. ĐĐŸ ĐČ ĐșаŃĐ”ŃŃĐČĐ” ĐČĐČĐ”ĐŽĐ”ĐœĐžŃ ĐČ OTP, гЎД ĐžŃĐżĐŸĐ»ŃĐ·ŃŃŃŃŃ ĐżŃĐžĐŒĐ”ŃŃ ĐžĐ· ĐžŃŃ ĐŸĐŽĐœĐŸĐłĐŸ ĐșĐŸĐŽĐ° Riak. Đ ĐžŃŃĐœĐșĐž Đž ĐżŃĐžĐŒĐ”ŃŃ ŃĐżŃĐŸŃĐ”ĐœŃ ĐŽĐ»Ń ŃДлДĐč ĐŽĐ”ĐŒĐŸĐœŃŃŃаŃОО.
15.1. ĐŃаŃĐșĐŸĐ” ĐČĐČĐ”ĐŽĐ”ĐœĐžĐ” ĐČ Erlang Erlang â ŃŃĐŸ ŃŃĐœĐșŃĐžĐŸĐœĐ°Đ»ŃĐœŃĐč Đž паŃаллДлŃĐœŃĐč ŃĐ·ŃĐș ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃĐŸĐČĐ°ĐœĐžŃ, ĐșĐŸŃĐŸŃŃĐč ĐșĐŸĐŒĐżĐžĐ»ĐžŃŃĐ”ŃŃŃ ĐČ Đ±Đ°ĐčŃĐŸĐČŃĐč ĐșĐŸĐŽ Đž ĐČŃĐżĐŸĐ»ĐœŃĐ”ŃŃŃ ĐœĐ° ĐČĐžŃŃŃалŃĐœĐŸĐč ĐŒĐ°ŃĐžĐœĐ”. ĐŃĐŸĐłŃĐ°ĐŒĐŒŃ ŃĐŸŃŃĐŸŃŃ ĐžĐ· ŃŃĐœĐșŃĐžĐč, ĐșĐŸŃĐŸŃŃĐ” ĐČŃĐ·ŃĐČаŃŃ ĐŽŃŃĐł ĐŽŃŃга, ŃŃĐŸ ŃаŃŃĐŸ ĐżŃĐžĐČĐŸĐŽĐžŃ Đș ĐżĐŸĐ±ĐŸŃĐœŃĐŒ ŃŃŃĐ”ĐșŃĐ°ĐŒ, ŃаĐșĐžĐŒ ĐșаĐș пДŃДЎаŃа ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč ĐŒĐ”Đ¶ĐŽŃ ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒĐž, ĐČĐČĐŸĐŽ/ĐČŃĐČĐŸĐŽ ОлО ĐŸĐżĐ”ŃаŃОО Ń Đ±Đ°Đ·ĐŸĐč ĐŽĐ°ĐœĐœŃŃ . ĐĐ”ŃĐ”ĐŒĐ”ĐœĐœŃĐŒ ĐČ Erlang ĐŒĐŸĐ¶ĐœĐŸ ĐżŃĐžŃĐČаОĐČаŃŃ ŃĐŸĐ»ŃĐșĐŸ ĐŸĐŽĐžĐœ Ńаз, Ń.Đ”. ĐșаĐș ŃĐŸĐ»ŃĐșĐŸ ĐžŃ Đ·ĐœĐ°ŃĐ”ĐœĐžĐ” бŃĐŽĐ”Ń ĐżŃĐžŃĐČĐŸĐ”ĐœĐŸ, ĐžŃ Đ±ĐŸĐ»ŃŃĐ” ĐœĐ”Đ»ŃĐ·Ń Đ±ŃĐŽĐ”Ń ĐžĐ·ĐŒĐ”ĐœĐžŃŃ. Đ ŃĐ·ŃĐșĐ” ŃĐžŃĐŸĐșĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ŃŃŃ ŃĐŸĐżĐŸŃŃаĐČĐ»Đ”ĐœĐžĐ” Ń ĐŸĐ±ŃазŃĐŸĐŒ, ĐșаĐș ĐČ ŃлДЎŃŃŃĐ”ĐŒ ĐżŃĐžĐŒĐ”ŃĐ” ĐČŃŃĐžŃĐ»Đ”ĐœĐžŃ ŃаĐșŃĐŸŃОала:
-ĐŒĐŸĐŽŃĐ»Ń(ŃаĐșŃĐŸŃОал). -ŃĐșŃĐżĐŸŃŃ([ŃаĐș/1]). ŃаĐșŃ(0) -> 1; fac(N), ĐșĐŸĐłĐŽĐ° N>0 -> Prev = fac(N-1), N*Prev. Đ ŃŃĐŸĐŒ ĐżŃĐžĐŒĐ”ŃĐ” пДŃĐČĐŸĐ” ĐżŃĐ”ĐŽĐ»ĐŸĐ¶Đ”ĐœĐžĐ” ĐŸĐżŃДЎДлŃĐ”Ń ŃаĐșŃĐŸŃОал 0, ĐČŃĐŸŃĐŸĐ” â ŃаĐșŃĐŸŃОал ĐżĐŸĐ»ĐŸĐ¶ĐžŃДлŃĐœŃŃ ŃĐžŃДл. ĐąĐ”Đ»ĐŸ ĐșĐ°Đ¶ĐŽĐŸĐłĐŸ ĐżŃĐ”ĐŽĐ»ĐŸĐ¶Đ”ĐœĐžŃ ĐżŃДЎŃŃаĐČĐ»ŃĐ”Ń ŃĐŸĐ±ĐŸĐč ĐżĐŸŃĐ»Đ”ĐŽĐŸĐČаŃДлŃĐœĐŸŃŃŃ ĐČŃŃĐ°Đ¶Đ”ĐœĐžĐč, а ĐżĐŸŃĐ»Đ”ĐŽĐœĐ”Đ” ĐČŃŃĐ°Đ¶Đ”ĐœĐžĐ” ŃĐČĐ»ŃĐ”ŃŃŃ ŃДзŃĐ»ŃŃаŃĐŸĐŒ ŃŃĐŸĐłĐŸ ĐżŃĐ”ĐŽĐ»ĐŸĐ¶Đ”ĐœĐžŃ. ĐŃĐ·ĐŸĐČ ŃŃĐŸĐč ŃŃĐœĐșŃОО Ń ĐŸŃŃĐžŃаŃДлŃĐœŃĐŒ ŃĐžŃĐ»ĐŸĐŒ ĐżŃĐžĐČĐ”ĐŽĐ”Ń Đș ĐŸŃОбĐșĐ” ĐČĐŸ ĐČŃĐ”ĐŒŃ ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐžŃ, ĐżĐŸŃĐșĐŸĐ»ŃĐșŃ ĐœĐž ĐŸĐŽĐœĐŸ ĐżŃĐ”ĐŽĐ»ĐŸĐ¶Đ”ĐœĐžĐ” ĐœĐ” ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃĐ”Ń. ĐĐ”ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșа ŃŃĐŸĐłĐŸ ŃĐ»ŃŃĐ°Ń ŃĐČĐ»ŃĐ”ŃŃŃ ĐżŃĐžĐŒĐ”ŃĐŸĐŒ Â«ĐœĐ”Đ·Đ°ŃĐžŃĐœĐŸĐłĐŸÂ» ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃĐŸĐČĐ°ĐœĐžŃ, ĐżŃаĐșŃĐžĐșа, ĐżĐŸĐŸŃŃŃĐ”ĐŒĐ°Ń ĐČ Erlang.
Đ ĐŒĐŸĐŽŃлД ŃŃĐœĐșŃОО ĐČŃĐ·ŃĐČаŃŃŃŃ ĐŸĐ±ŃŃĐœŃĐŒ ŃĐżĐŸŃĐŸĐ±ĐŸĐŒ; Đ ĐżŃĐŸŃĐžĐČĐœĐŸĐŒ ŃĐ»ŃŃаД ĐžĐŒŃ ĐŒĐŸĐŽŃĐ»Ń ĐŽĐŸĐ»Đ¶ĐœĐŸ ĐžĐŒĐ”ŃŃ ĐżŃĐ”ŃĐžĐșŃ, ĐœĐ°ĐżŃĐžĐŒĐ”Ń factorial:fac(3). ĐĐŸĐ¶ĐœĐŸ ĐŸĐżŃДЎДлОŃŃ ŃŃĐœĐșŃОО Ń ŃĐ”ĐŒ жД ĐžĐŒĐ”ĐœĐ”ĐŒ, ĐœĐŸ Ń ŃĐ°Đ·ĐœŃĐŒ ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČĐŸĐŒ аŃĐłŃĐŒĐ”ĐœŃĐŸĐČ, ĐœĐ°Đ·ŃĐČĐ°Đ”ĐŒŃĐŒ arity . Đ ĐŽĐžŃĐ”ĐșŃĐžĐČĐ” ŃĐșŃĐżĐŸŃŃа ĐŒĐŸĐŽŃĐ»Ń factorialŃŃĐœĐșŃĐžŃ facаŃĐœĐŸŃŃĐž 1 ĐŸĐ±ŃŃĐČĐ»Đ”ĐœĐ° ââĐșаĐș fac/1.
Erlang ĐżĐŸĐŽĐŽĐ”ŃжОĐČĐ°Đ”Ń ĐșĐŸŃŃДжО (ŃаĐșжД ĐœĐ°Đ·ŃĐČĐ°Đ”ĐŒŃĐ” «ŃĐžĐżĐ°ĐŒĐž ĐżŃĐŸĐŽŃĐșŃĐŸĐČ») Đž ŃпОŃĐșĐž. ĐĐŸŃŃДжО ŃаĐșжД заĐșĐ»ŃŃаŃŃŃŃ ĐČ ŃОгŃŃĐœŃĐ” ŃĐșĐŸĐ±ĐșĐž {ok,37}. ĐĐŸŃŃŃĐż Đș ŃĐ»Đ”ĐŒĐ”ĐœŃĐ°ĐŒ ĐșĐŸŃŃДжДĐč ĐŸŃŃŃĐ”ŃŃĐČĐ»ŃĐ”ŃŃŃ ĐżĐŸ ĐžŃ ĐżĐŸĐ·ĐžŃОО. ĐапОŃĐž â ŃŃĐŸ Đ”ŃĐ” ĐŸĐŽĐžĐœ ŃОп ĐŽĐ°ĐœĐœŃŃ ; ĐŸĐœĐž ĐżĐŸĐ·ĐČĐŸĐ»ŃŃŃ ĐœĐ°ĐŒ Ń ŃĐ°ĐœĐžŃŃ ŃĐžĐșŃĐžŃĐŸĐČĐ°ĐœĐœĐŸĐ” ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČĐŸ ŃĐ»Đ”ĐŒĐ”ĐœŃĐŸĐČ, Đș ĐșĐŸŃĐŸŃŃĐŒ ĐŸŃŃŃĐ”ŃŃĐČĐ»ŃĐ”ŃŃŃ ĐŽĐŸŃŃŃĐż Đž ĐŒĐ°ĐœĐžĐżŃлОŃĐŸĐČĐ°ĐœĐžĐ” ĐžĐŒĐž ĐżĐŸ ĐžĐŒĐ”ĐœĐž. ĐŃ ĐŸĐżŃДЎДлŃĐ”ĐŒ запОŃŃ ŃлДЎŃŃŃĐžĐŒ ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ: -record(state, {id, msg_list=[]}). ŃŃĐŸĐ±Ń ŃĐŸĐ·ĐŽĐ°ŃŃ Đ”Đ” ŃĐșĐ·Đ”ĐŒĐżĐ»ŃŃ, ĐŒŃ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ĐŒ ĐČŃŃĐ°Đ¶Đ”ĐœĐžĐ” Var = #state{id=1}Đž ОзĐČлДĐșĐ°Đ”ĐŒ Đ”ĐłĐŸ ŃĐŸĐŽĐ”ŃĐ¶ĐžĐŒĐŸĐ”, ĐžŃĐżĐŸĐ»ŃĐ·ŃŃ: Var#state.id. ĐĐ»Ń ĐżĐ”ŃĐ”ĐŒĐ”ĐœĐœĐŸĐłĐŸ ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČа ŃĐ»Đ”ĐŒĐ”ĐœŃĐŸĐČ ĐŒŃ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ĐŒ ŃпОŃĐșĐž, ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃĐ” ĐČ ĐșĐČаЎŃаŃĐœŃŃ ŃĐșĐŸĐ±ĐșĐ°Ń : {[}23,34{]}. ĐĐ±ĐŸĐ·ĐœĐ°ŃĐ”ĐœĐžĐ” {[}X|Xs{]}ŃĐșазŃĐČĐ°Đ”Ń ĐœĐ° ĐœĐ”ĐżŃŃŃĐŸĐč ŃпОŃĐŸĐș Ń ĐœĐ°ŃĐ°Đ»ĐŸĐŒ (Â«ĐłĐŸĐ»ĐŸĐČĐŸĐč») XĐž ĐșĐŸĐœŃĐŸĐŒ (Â«Ń ĐČĐŸŃŃĐŸĐŒÂ») Ń ĐČĐŸŃŃĐŸĐŒ Xs. ĐĐŽĐ”ĐœŃĐžŃĐžĐșаŃĐŸŃŃ, ĐœĐ°ŃĐžĐœĐ°ŃŃОДŃŃ ŃĐŸ ŃŃŃĐŸŃĐœĐŸĐč бŃĐșĐČŃ, ĐŸĐ±ĐŸĐ·ĐœĐ°ŃаŃŃ Đ°ŃĐŸĐŒŃ , ĐșĐŸŃĐŸŃŃĐ” ĐœĐ” ĐžĐŒĐ”ŃŃ Đ·ĐœĐ°ŃĐ”ĐœĐžŃ; ĐĐ»Đ”ĐŒĐ”ĐœŃ okĐČ ĐșĐŸŃŃДжД {ok,37}ŃĐČĐ»ŃĐ”ŃŃŃ ĐżŃĐžĐŒĐ”ŃĐŸĐŒ аŃĐŸĐŒĐ°. ĐŃĐŸĐŒŃ ŃаŃŃĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃŃŃŃŃ ĐŽĐ»Ń ĐŽĐžŃŃĐ”ŃĐ”ĐœŃОаŃОО ŃДзŃĐ»ŃŃаŃĐŸĐČ ŃŃĐœĐșŃОО: ĐșаĐș Đž ŃДзŃĐ»ŃŃаŃŃ ok, ĐŒĐŸĐłŃŃ Đ±ŃŃŃ ŃДзŃĐ»ŃŃаŃŃ ŃĐŸŃĐŒŃ {error, "Error String"}.
ĐŃĐŸŃĐ”ŃŃŃ ĐČ ŃĐžŃŃĐ”ĐŒĐ°Ń Erlang ĐČŃĐżĐŸĐ»ĐœŃŃŃŃŃ ĐŸĐŽĐœĐŸĐČŃĐ”ĐŒĐ”ĐœĐœĐŸ ĐČ ĐČŃĐŽĐ”Đ»Đ”ĐœĐœĐŸĐŒ ĐżŃĐŸŃŃŃĐ°ĐœŃŃĐČĐ” ĐżĐ°ĐŒŃŃĐž Đž ĐČĐ·Đ°ĐžĐŒĐŸĐŽĐ”ĐčŃŃĐČŃŃŃ ĐŽŃŃĐł Ń ĐŽŃŃĐłĐŸĐŒ ĐżĐŸŃŃДЎŃŃĐČĐŸĐŒ пДŃДЎаŃĐž ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč. ĐŃĐŸŃĐ”ŃŃŃ ĐŒĐŸĐ¶ĐœĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ĐŽĐ»Ń ŃĐ°ĐŒŃŃ ŃĐ°Đ·ĐœŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč: ĐŸŃ ŃĐ»ŃĐ·ĐŸĐČ Đ±Đ°Đ· ĐŽĐ°ĐœĐœŃŃ ĐŽĐŸ ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșĐŸĐČ ĐżŃĐŸŃĐŸĐșĐŸĐ»ĐŸĐČ Đž ŃĐżŃаĐČĐ»Đ”ĐœĐžŃ ŃŃаŃŃĐžŃĐŸĐČĐșĐ°ĐŒĐž жŃŃĐœĐ°Đ»ĐŸĐČ ĐŽŃŃĐłĐžŃ ĐżŃĐŸŃĐ”ŃŃĐŸĐČ. Đ„ĐŸŃŃ ŃŃĐž ĐżŃĐŸŃĐ”ŃŃŃ ĐŸĐ±ŃабаŃŃĐČаŃŃ ŃĐ°Đ·ĐœŃĐ” ŃĐžĐżŃ Đ·Đ°ĐżŃĐŸŃĐŸĐČ, ĐČ ŃĐżĐŸŃĐŸĐ±Đ°Ń ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșĐž ŃŃĐžŃ Đ·Đ°ĐżŃĐŸŃĐŸĐČ Đ”ŃŃŃ ŃŃ ĐŸĐŽŃŃĐČа.
ĐĐŸŃĐșĐŸĐ»ŃĐșŃ ĐżŃĐŸŃĐ”ŃŃŃ ŃŃŃĐ”ŃŃĐČŃŃŃ ŃĐŸĐ»ŃĐșĐŸ ĐČĐœŃŃŃĐž ĐČĐžŃŃŃалŃĐœĐŸĐč ĐŒĐ°ŃĐžĐœŃ (ĐĐ), ĐŸĐŽĐœĐ° ĐČĐžŃŃŃалŃĐœĐ°Ń ĐŒĐ°ŃĐžĐœĐ° ĐŒĐŸĐ¶Đ”Ń ĐŸĐŽĐœĐŸĐČŃĐ”ĐŒĐ”ĐœĐœĐŸ запŃŃĐșаŃŃ ĐŒĐžĐ»Đ»ĐžĐŸĐœŃ ĐżŃĐŸŃĐ”ŃŃĐŸĐČ, Đž ŃŃŃ ĐČĐŸĐ·ĐŒĐŸĐ¶ĐœĐŸŃŃŃ ŃĐžŃĐŸĐșĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń Riak. ĐапŃĐžĐŒĐ”Ń, ĐșажЎŃĐč запŃĐŸŃ Đș базД ĐŽĐ°ĐœĐœŃŃ â ŃŃĐ”ĐœĐžĐ”, запОŃŃ Đž ŃĐŽĐ°Đ»Đ”ĐœĐžĐ” â ĐŒĐŸĐŽĐ”Đ»ĐžŃŃĐ”ŃŃŃ ĐșаĐș ĐŸŃЎДлŃĐœŃĐč ĐżŃĐŸŃĐ”ŃŃ, Đž ŃаĐșĐŸĐč ĐżĐŸĐŽŃ ĐŸĐŽ бŃĐ» Đ±Ń ĐœĐ”ĐČĐŸĐ·ĐŒĐŸĐ¶Đ”Đœ ĐČ Đ±ĐŸĐ»ŃŃĐžĐœŃŃĐČĐ” ŃДалОзаŃĐžĐč ĐżĐŸŃĐŸĐșĐŸĐČ ĐœĐ° ŃŃĐŸĐČĐœĐ” ĐĐĄ.
ĐŃĐŸŃĐ”ŃŃŃ ĐžĐŽĐ”ĐœŃĐžŃĐžŃĐžŃŃŃŃŃŃ ĐžĐŽĐ”ĐœŃĐžŃĐžĐșаŃĐŸŃĐ°ĐŒĐž ĐżŃĐŸŃĐ”ŃŃĐŸĐČ, ĐœĐ°Đ·ŃĐČĐ°Đ”ĐŒŃĐŒĐž PID, ĐœĐŸ ĐžŃ ŃаĐșжД ĐŒĐŸĐ¶ĐœĐŸ заŃДгОŃŃŃĐžŃĐŸĐČаŃŃ ĐżĐŸĐŽ ĐżŃĐ”ĐČĐŽĐŸĐœĐžĐŒĐŸĐŒ; ĐżŃĐ”ĐČĐŽĐŸĐœĐžĐŒŃ ŃлДЎŃĐ”Ń ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ŃĐŸĐ»ŃĐșĐŸ ĐŽĐ»Ń ĐŽĐŸĐ»ĐłĐŸĐ¶ĐžĐČŃŃĐžŃ Â«ŃŃаŃĐžŃĐ”ŃĐșĐžŃ Â» ĐżŃĐŸŃĐ”ŃŃĐŸĐČ. РДгОŃŃŃаŃĐžŃ ĐżŃĐŸŃĐ”ŃŃа ĐżĐŸĐŽ ŃĐŸĐ±ŃŃĐČĐ”ĐœĐœŃĐŒ ĐżŃĐ”ĐČĐŽĐŸĐœĐžĐŒĐŸĐŒ ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ĐŽŃŃĐłĐžĐŒ ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒ пДŃДЎаĐČаŃŃ Đ”ĐŒŃ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ, ЎажД ĐœĐ” Đ·ĐœĐ°Ń Đ”ĐłĐŸ PID. ĐŃĐŸŃĐ”ŃŃŃ ŃĐŸĐ·ĐŽĐ°ŃŃŃŃ Ń ĐżĐŸĐŒĐŸŃŃŃ ĐČŃŃŃĐŸĐ”ĐœĐœĐŸĐč ŃŃĐœĐșŃОО (BIF) spawn(Module, Function, Arguments). BIF â ŃŃĐŸ ŃŃĐœĐșŃОО, ĐžĐœŃДгŃĐžŃĐŸĐČĐ°ĐœĐœŃĐ” ĐČ ĐČĐžŃŃŃалŃĐœŃŃ ĐŒĐ°ŃĐžĐœŃ ĐŽĐ»Ń ĐŽĐŸŃŃĐžĐ¶Đ”ĐœĐžŃ ŃĐŸĐłĐŸ, ŃŃĐŸ бŃĐ»ĐŸ Đ±Ń ĐœĐ”ĐČĐŸĐ·ĐŒĐŸĐ¶ĐœĐŸ ОлО ŃлОŃĐșĐŸĐŒ ĐŒĐ”ĐŽĐ»Đ”ĐœĐœĐŸ ĐČŃĐżĐŸĐ»ĐœĐžŃŃ ĐČ Â«ŃĐžŃŃĐŸĐŒ ĐŃĐ»Đ°ĐœĐłĐ”Â». BIF spawn/3ĐżŃĐžĐœĐžĐŒĐ°Đ”Ń ĐČ ĐșаŃĐ”ŃŃĐČĐ” паŃĐ°ĐŒĐ”ŃŃĐŸĐČ a Module, a FunctionĐž ŃпОŃĐŸĐș Arguments. ĐŃĐŸŃ ĐČŃĐ·ĐŸĐČ ĐČĐŸĐ·ĐČŃаŃĐ°Đ”Ń PID ŃĐŸĐ»ŃĐșĐŸ ŃŃĐŸ ŃĐŸĐ·ĐŽĐ°ĐœĐœĐŸĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа (Â«ĐżĐŸŃĐŸĐ¶ĐŽĐ”ĐœĐœĐŸĐłĐŸÂ») Đž ĐČ ĐșаŃĐ”ŃŃĐČĐ” ĐżĐŸĐ±ĐŸŃĐœĐŸĐłĐŸ ŃŃŃĐ”ĐșŃа ŃĐŸĐ·ĐŽĐ°Đ”Ń ĐœĐŸĐČŃĐč ĐżŃĐŸŃĐ”ŃŃ, ĐșĐŸŃĐŸŃŃĐč ĐœĐ°ŃĐžĐœĐ°Đ”ŃŃŃ Ń ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐžŃ ŃŃĐŸĐč ŃŃĐœĐșŃОО ĐŒĐŸĐŽŃĐ»Ń Ń Đ°ŃĐłŃĐŒĐ”ĐœŃĐ°ĐŒĐž, ĐŸĐżĐžŃĐ°ĐœĐœŃĐŒĐž ĐČŃŃĐ”.
ĐĄĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” MsgĐŸŃĐżŃаĐČĐ»ŃĐ”ŃŃŃ PID-ĐżŃĐŸŃĐ”ŃŃŃ: Pid Ń ĐżĐŸĐŒĐŸŃŃŃ Pid ! Msg. ĐŃĐŸŃĐ”ŃŃ ĐŒĐŸĐ¶Đ”Ń ĐŸĐżŃДЎДлОŃŃ ŃĐČĐŸĐč ŃĐŸĐ±ŃŃĐČĐ”ĐœĐœŃĐč PID, ĐČŃĐ·ĐČаĐČ BIF self, а заŃĐ”ĐŒ пДŃДЎаŃŃ Đ”ĐłĐŸ ĐŽŃŃĐłĐžĐŒ ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒ, ŃŃĐŸĐ±Ń ĐŸĐœĐž ĐŒĐŸĐłĐ»Đž Ń ĐœĐžĐŒ ĐČĐ·Đ°ĐžĐŒĐŸĐŽĐ”ĐčŃŃĐČĐŸĐČаŃŃ. ĐŃĐ”ĐŽĐżĐŸĐ»ĐŸĐ¶ĐžĐŒ, ĐżŃĐŸŃĐ”ŃŃ ĐŸĐ¶ĐžĐŽĐ°Đ”Ń ĐżĐŸĐ»ŃŃĐ”ĐœĐžŃ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč ĐČОЎа {ok, N}Đž {error, Reason}. ĐĐ»Ń ĐžŃ ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșĐž ĐŸĐœ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń ŃлДЎŃŃŃĐžĐč ĐșĐŸĐŽ:
ĐżĐŸĐ»ŃŃĐžŃŃ {ĐŸĐș, N} -> N+1; {ĐŸŃОбĐșа, _} -> 0 ĐșĐŸĐœĐ”Ń Đ Đ”Đ·ŃĐ»ŃŃаŃĐŸĐŒ ŃĐČĐ»ŃĐ”ŃŃŃ ŃĐžŃĐ»ĐŸ, ĐŸĐżŃДЎДлŃĐ”ĐŒĐŸĐ” ĐżŃĐ”ĐŽĐ»ĐŸĐ¶Đ”ĐœĐžĐ”ĐŒ ŃĐŸĐżĐŸŃŃаĐČĐ»Đ”ĐœĐžŃ Ń ĐŸĐ±ŃазŃĐŸĐŒ. ĐŃлО Đ·ĐœĐ°ŃĐ”ĐœĐžĐ” пДŃĐ”ĐŒĐ”ĐœĐœĐŸĐč ĐœĐ” ŃŃДбŃĐ”ŃŃŃ ĐŽĐ»Ń ŃĐŸĐżĐŸŃŃаĐČĐ»Đ”ĐœĐžŃ Ń ĐŸĐ±ŃазŃĐŸĐŒ, ĐČ ĐșаŃĐ”ŃŃĐČĐ” ĐżĐŸĐŽŃŃĐ°ĐœĐŸĐČĐŸŃĐœĐŸĐłĐŸ Đ·ĐœĐ°Đșа ĐŒĐŸĐ¶ĐœĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ŃĐžĐŒĐČĐŸĐ» ĐżĐŸĐŽŃĐ”ŃĐșĐžĐČĐ°ĐœĐžŃ, ĐșаĐș ĐżĐŸĐșĐ°Đ·Đ°ĐœĐŸ ĐČŃŃĐ”.
ĐĐ”ŃДЎаŃа ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč ĐŒĐ”Đ¶ĐŽŃ ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒĐž ŃĐČĐ»ŃĐ”ŃŃŃ Đ°ŃĐžĐœŃ ŃĐŸĐœĐœĐŸĐč, Đž ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ, ĐżĐŸĐ»ŃŃĐ”ĐœĐœŃĐ” ĐżŃĐŸŃĐ”ŃŃĐŸĐŒ, ĐżĐŸĐŒĐ”ŃаŃŃŃŃ ĐČ ĐżĐŸŃŃĐŸĐČŃĐč ŃŃĐžĐș ĐżŃĐŸŃĐ”ŃŃа ĐČ ĐżĐŸŃŃĐŽĐșĐ” ĐżĐŸŃŃŃĐżĐ»Đ”ĐœĐžŃ. йДпДŃŃ ĐżŃĐ”ĐŽĐżĐŸĐ»ĐŸĐ¶ĐžĐŒ, ŃŃĐŸ ĐżŃĐžĐČĐ”ĐŽĐ”ĐœĐœĐŸĐ” receiveĐČŃŃĐ” ĐČŃŃĐ°Đ¶Đ”ĐœĐžĐ” ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐŸ: Đ”ŃлО пДŃĐČŃĐč ŃĐ»Đ”ĐŒĐ”ĐœŃ ĐČ ĐżĐŸŃŃĐŸĐČĐŸĐŒ ŃŃĐžĐșĐ” ŃаĐČĐ”Đœ {ok, N}, {error, Reason}бŃĐŽĐ”Ń ĐČĐŸĐ·ĐČŃаŃĐ”Đœ ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃŃŃĐžĐč ŃДзŃĐ»ŃŃаŃ. ĐŃлО пДŃĐČĐŸĐ” ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐČ ĐżĐŸŃŃĐŸĐČĐŸĐŒ ŃŃĐžĐșĐ” ĐœĐ” ĐČ ŃŃĐŸĐč ŃĐŸŃĐŒĐ”, ĐŸĐœĐŸ бŃĐŽĐ”Ń Ń ŃĐ°ĐœĐžŃŃŃŃ ĐČ ĐżĐŸŃŃĐŸĐČĐŸĐŒ ŃŃĐžĐșĐ”, а ĐČŃĐŸŃĐŸĐ” бŃĐŽĐ”Ń ĐŸĐ±ŃĐ°Đ±ĐŸŃĐ°ĐœĐŸ ŃаĐșĐžĐŒ жД ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ. ĐŃлО ĐœĐž ĐŸĐŽĐœĐŸ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐœĐ” ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃĐ”Ń, Đ±Đ»ĐŸĐș ĐżŃĐžĐ”ĐŒĐ° бŃĐŽĐ”Ń Đ¶ĐŽĐ°ŃŃ, ĐżĐŸĐșа ĐœĐ” бŃĐŽĐ”Ń ĐżĐŸĐ»ŃŃĐ”ĐœĐŸ ĐżĐŸĐŽŃ ĐŸĐŽŃŃДД ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ”.
ĐŃĐŸŃĐ”ŃŃŃ Đ·Đ°ĐČĐ”ŃŃаŃŃŃŃ ĐżĐŸ ĐŽĐČŃĐŒ ĐżŃĐžŃĐžĐœĐ°ĐŒ. ĐŃлО Đ±ĐŸĐ»ŃŃĐ” ĐœĐ”Ń ĐșĐŸĐŽĐ° ĐŽĐ»Ń ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐžŃ, ĐłĐŸĐČĐŸŃŃŃ, ŃŃĐŸ ĐŸĐœĐž заĐČĐ”ŃŃаŃŃŃŃ ĐżĐŸ ĐŸĐ±ŃŃĐœĐŸĐč ĐżŃĐžŃĐžĐœĐ” . ĐŃлО ĐżŃĐŸŃĐ”ŃŃ ĐŸĐ±ĐœĐ°ŃŃжОĐČĐ°Đ”Ń ĐŸŃОбĐșŃ ĐČĐŸ ĐČŃĐ”ĐŒŃ ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐžŃ, ŃŃĐžŃаДŃŃŃ, ŃŃĐŸ ĐŸĐœ заĐČĐ”ŃŃОлŃŃ ĐżĐŸ ĐœĐ”ĐœĐŸŃĐŒĐ°Đ»ŃĐœĐŸĐč ĐżŃĐžŃĐžĐœĐ” . ĐаĐČĐ”ŃŃаŃŃĐžĐč ĐżŃĐŸŃĐ”ŃŃ ĐœĐ” ĐżĐŸĐČлОŃĐ”Ń ĐœĐ° ĐŽŃŃгОД ĐżŃĐŸŃĐ”ŃŃŃ, Đ”ŃлО ĐŸĐœĐž ĐœĐ” ŃĐČŃĐ·Đ°ĐœŃ ĐŽŃŃĐł Ń ĐŽŃŃĐłĐŸĐŒ. ĐŃĐŸŃĐ”ŃŃŃ ĐŒĐŸĐłŃŃ ŃĐČŃĐ·ŃĐČаŃŃŃŃ ĐŽŃŃĐł Ń ĐŽŃŃĐłĐŸĐŒ, ĐČŃĐ·ŃĐČĐ°Ń ŃŃĐœĐșŃĐžŃ BIF link(Pid)ОлО ĐČŃĐ·ŃĐČĐ°Ń spawn_link(Module, Function, Arguments). ĐŃлО ĐżŃĐŸŃĐ”ŃŃ Đ·Đ°ĐČĐ”ŃŃаДŃŃŃ, ĐŸĐœ ĐŸŃĐżŃаĐČĐ»ŃĐ”Ń ŃĐžĐłĐœĐ°Đ» EXIT ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒ, ŃĐČŃĐ·Đ°ĐœĐœŃĐŒ Ń ĐœĐžĐŒ. ĐŃлО ĐżŃĐžŃĐžĐœĐ° заĐČĐ”ŃŃĐ”ĐœĐžŃ ĐœĐ”ĐœĐŸŃĐŒĐ°Đ»ŃĐœĐ°Ń, ĐżŃĐŸŃĐ”ŃŃ Đ·Đ°ĐČĐ”ŃŃаДŃŃŃ ŃĐ°ĐŒ, ŃаŃĐżŃĐŸŃŃŃĐ°ĐœŃŃ ŃĐžĐłĐœĐ°Đ» EXIT. ĐŃĐ·ŃĐČĐ°Ń ŃŃĐœĐșŃĐžŃ BIF process_flag(trap_exit, true), ĐżŃĐŸŃĐ”ŃŃŃ ĐŒĐŸĐłŃŃ ĐżĐŸĐ»ŃŃаŃŃ ŃĐžĐłĐœĐ°Đ»Ń EXIT ĐČ ĐČОЎД ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč Erlang ĐČ ŃĐČĐŸĐč ĐżĐŸŃŃĐŸĐČŃĐč ŃŃĐžĐș Đž ĐŸĐ±ŃабаŃŃĐČаŃŃ ĐžŃ ĐČĐŒĐ”ŃŃĐŸ заĐČĐ”ŃŃĐ”ĐœĐžŃ.
Riak ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń ŃĐžĐłĐœĐ°Đ»Ń EXIT ĐŽĐ»Ń ĐŒĐŸĐœĐžŃĐŸŃĐžĐœĐłĐ° ŃĐ°Đ±ĐŸŃĐŸŃĐżĐŸŃĐŸĐ±ĐœĐŸŃŃĐž ĐżŃĐŸŃĐ”ŃŃĐŸĐČ, ĐČŃĐżĐŸĐ»ĐœŃŃŃĐžŃ ĐœĐ”ĐșŃĐžŃĐžŃĐ”ŃĐșŃŃ ŃĐ°Đ±ĐŸŃŃ, ĐžĐœĐžŃООŃĐŸĐČĐ°ĐœĐœŃŃ ĐșĐŸĐœĐ”ŃĐœŃĐŒĐž аĐČŃĐŸĐŒĐ°ŃĐ°ĐŒĐž, ĐŸĐ±ŃабаŃŃĐČаŃŃĐžĐŒĐž запŃĐŸŃŃ. ĐĐŸĐłĐŽĐ° ŃŃĐž ĐżŃĐŸŃĐ”ŃŃŃ Đ·Đ°ĐČĐ”ŃŃаŃŃŃŃ ĐœĐ”ĐœĐŸŃĐŒĐ°Đ»ŃĐœĐŸ, ŃĐžĐłĐœĐ°Đ» EXIT ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń Đ»ĐžĐ±ĐŸ ĐžĐłĐœĐŸŃĐžŃĐŸĐČаŃŃ ĐŸŃОбĐșŃ, Đ»ĐžĐ±ĐŸ пДŃДзапŃŃŃĐžŃŃ ĐżŃĐŸŃĐ”ŃŃ.
15.2. ĐĄĐșДлДŃŃ ĐżŃĐŸŃĐ”ŃŃĐŸĐČ Đ Đ°ĐœĐ”Đ” ĐŒŃ ĐżŃДЎŃŃаĐČОлО ĐžĐŽĐ”Ń ĐŸ ŃĐŸĐŒ, ŃŃĐŸ ĐżŃĐŸŃĐ”ŃŃŃ ŃлДЎŃŃŃ ĐŸĐ±ŃĐ”ĐŒŃ ŃĐ°Đ±Đ»ĐŸĐœŃ ĐœĐ”Đ·Đ°ĐČĐžŃĐžĐŒĐŸ ĐŸŃ ŃДлО, ĐŽĐ»Ń ĐșĐŸŃĐŸŃĐŸĐč ĐŸĐœĐž ŃĐŸĐ·ĐŽĐ°ĐœŃ. ĐĐ»Ń ĐœĐ°Ńала ĐżŃĐŸŃĐ”ŃŃ ĐŽĐŸĐ»Đ¶Đ”Đœ бŃŃŃ Â«ĐżĐŸŃĐŸĐ¶ĐŽĐ”ĐœÂ» Đž, ĐżŃĐž ĐœĐ”ĐŸĐ±Ń ĐŸĐŽĐžĐŒĐŸŃŃĐž, заŃДгОŃŃŃĐžŃĐŸĐČĐ°Đœ Đ”ĐłĐŸ ĐżŃĐ”ĐČĐŽĐŸĐœĐžĐŒ. ĐĐ”ŃĐČŃĐŒ ĐŽĐ”ĐčŃŃĐČĐžĐ”ĐŒ ĐČĐœĐŸĐČŃ ŃĐŸĐ·ĐŽĐ°ĐœĐœĐŸĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа ŃĐČĐ»ŃĐ”ŃŃŃ ĐžĐœĐžŃОалОзаŃĐžŃ ĐŽĐ°ĐœĐœŃŃ ŃĐžĐșла ĐżŃĐŸŃĐ”ŃŃа. ĐŃĐž ĐŽĐ°ĐœĐœŃĐ” ŃаŃŃĐŸ ŃĐČĐ»ŃŃŃŃŃ ŃДзŃĐ»ŃŃаŃĐŸĐŒ аŃĐłŃĐŒĐ”ĐœŃĐŸĐČ, пДŃДЎаĐČĐ°Đ”ĐŒŃŃ ŃŃĐœĐșŃОО BIF spawn ĐČĐŸ ĐČŃĐ”ĐŒŃ ĐžĐœĐžŃОалОзаŃОО ĐżŃĐŸŃĐ”ŃŃа. ĐĐłĐŸ ĐŽĐ°ĐœĐœŃĐ” Ń ŃĐ°ĐœŃŃŃŃ ĐČ ĐżĐ”ŃĐ”ĐŒĐ”ĐœĐœĐŸĐč, ĐșĐŸŃĐŸŃĐ°Ń ŃŃĐžŃаДŃŃŃ ŃĐŸŃŃĐŸŃĐœĐžĐ”ĐŒ ĐżŃĐŸŃĐ”ŃŃа. ĐĄĐŸŃŃĐŸŃĐœĐžĐ”, ŃаŃŃĐŸ Ń ŃĐ°ĐœŃŃДДŃŃ ĐČ Đ·Đ°ĐżĐžŃĐž, пДŃДЎаДŃŃŃ ŃŃĐœĐșŃОО ĐżŃĐžĐ”ĐŒĐ°-ĐŸŃĐ”ĐœĐșĐž, запŃŃĐșаŃŃĐ”Đč ŃĐžĐșĐ», ĐșĐŸŃĐŸŃŃĐč ĐżŃĐžĐœĐžĐŒĐ°Đ”Ń ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ”, ĐŸĐ±ŃабаŃŃĐČĐ°Đ”Ń Đ”ĐłĐŸ, ĐŸĐ±ĐœĐŸĐČĐ»ŃĐ”Ń ŃĐŸŃŃĐŸŃĐœĐžĐ” Đž ĐČĐŸĐ·ĐČŃаŃĐ°Đ”Ń Đ”ĐłĐŸ ĐČ ĐșаŃĐ”ŃŃĐČĐ” аŃĐłŃĐŒĐ”ĐœŃа â Â«Ń ĐČĐŸŃŃĐŸĐČĐŸĐč ŃĐ”ĐșŃŃŃĐžĐČĐœŃĐč» ĐČŃĐ·ĐŸĐČ. ĐŃлО ĐŸĐŽĐœĐŸ Оз ĐŸĐ±ŃабаŃŃĐČĐ°Đ”ĐŒŃŃ ĐžĐŒ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč ŃĐČĐ»ŃĐ”ŃŃŃ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ”ĐŒ «ŃŃĐŸĐżÂ», ĐżŃĐŸŃĐ”ŃŃ ĐČŃĐżĐŸĐ»ĐœĐžŃ ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃŃŃŃŃ ĐŸŃĐžŃŃĐșŃ Đž заĐČĐ”ŃŃĐžŃŃŃ.
ĐŃĐŸ ĐżĐŸĐČŃĐŸŃŃŃŃаŃŃŃ ŃĐ”ĐŒĐ° ĐżŃĐŸŃĐ”ŃŃĐŸĐČ, ĐœĐ”Đ·Đ°ĐČĐžŃĐžĐŒĐŸ ĐŸŃ ĐżĐŸŃŃаĐČĐ»Đ”ĐœĐœĐŸĐč пДŃДЎ ĐœĐžĐŒĐž заЎаŃĐž. ĐĐŒĐ”Ń ŃŃĐŸ ĐČ ĐČОЎŃ, ЎаĐČаĐčŃĐ” ĐżĐŸŃĐŒĐŸŃŃĐžĐŒ ĐœĐ° ŃазлОŃĐžŃ ĐŒĐ”Đ¶ĐŽŃ ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒĐž, ĐșĐŸŃĐŸŃŃĐ” ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃŃŃ ŃŃĐŸĐŒŃ ŃĐ°Đ±Đ»ĐŸĐœŃ:
ĐŃĐłŃĐŒĐ”ĐœŃŃ, пДŃДЎаĐČĐ°Đ”ĐŒŃĐ” ŃŃĐœĐșŃОО BIF, spawnбŃĐŽŃŃ ĐŸŃлОŃаŃŃŃŃ ĐŸŃ ĐŸĐŽĐœĐŸĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа Đș ĐŽŃŃĐłĐŸĐŒŃ. ĐĐ°ĐŒ ĐœĐ”ĐŸĐ±Ń ĐŸĐŽĐžĐŒĐŸ ŃĐ”ŃĐžŃŃ, ŃлДЎŃĐ”Ń Đ»Đž ŃДгОŃŃŃĐžŃĐŸĐČаŃŃ ĐżŃĐŸŃĐ”ŃŃ ĐżĐŸĐŽ ĐżŃĐ”ĐČĐŽĐŸĐœĐžĐŒĐŸĐŒ, Đž Đ”ŃлО Ўа, ŃĐŸ ĐșаĐșĐŸĐč ĐżŃĐ”ĐČĐŽĐŸĐœĐžĐŒ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ. Đ ŃŃĐœĐșŃОО ĐžĐœĐžŃОалОзаŃОО ŃĐŸŃŃĐŸŃĐœĐžŃ ĐżŃĐŸŃĐ”ŃŃа ĐżŃДЎпŃĐžĐœĐžĐŒĐ°Đ”ĐŒŃĐ” ĐŽĐ”ĐčŃŃĐČĐžŃ Đ±ŃĐŽŃŃ ŃазлОŃаŃŃŃŃ ĐČ Đ·Đ°ĐČĐžŃĐžĐŒĐŸŃŃĐž ĐŸŃ Đ·Đ°ĐŽĐ°Ń, ĐșĐŸŃĐŸŃŃĐ” бŃĐŽĐ”Ń ĐČŃĐżĐŸĐ»ĐœŃŃŃ ĐżŃĐŸŃĐ”ŃŃ. ĐĄĐŸŃŃĐŸŃĐœĐžĐ” ŃĐžŃŃĐ”ĐŒŃ ĐČ ĐșĐ°Đ¶ĐŽĐŸĐŒ ŃĐ»ŃŃаД ĐżŃДЎŃŃаĐČĐ»Đ”ĐœĐŸ ĐŽĐ°ĐœĐœŃĐŒĐž ŃĐžĐșла, ĐŸĐŽĐœĐ°ĐșĐŸ ŃĐŸĐŽĐ”ŃĐ¶ĐžĐŒĐŸĐ” ĐŽĐ°ĐœĐœŃŃ Đ±ŃĐŽĐ”Ń ŃазлОŃаŃŃŃŃ ĐČ Đ·Đ°ĐČĐžŃĐžĐŒĐŸŃŃĐž ĐŸŃ ĐżŃĐŸŃĐ”ŃŃа. ĐŃĐž ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐžĐž ŃĐžĐșла ĐżĐŸĐ»ŃŃĐ”ĐœĐžŃ-ĐŸŃĐ”ĐœĐșĐž ĐżŃĐŸŃĐ”ŃŃŃ Đ±ŃĐŽŃŃ ĐżĐŸĐ»ŃŃаŃŃ ŃĐ°Đ·ĐœŃĐ” ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ Đž ĐŸĐ±ŃабаŃŃĐČаŃŃ ĐžŃ ĐżĐŸ-ŃĐ°Đ·ĐœĐŸĐŒŃ. ĐаĐșĐŸĐœĐ”Ń, ĐșĐŸĐłĐŽĐ° ĐżŃĐŸŃĐ”ŃŃ ĐČŃĐșĐ»ŃŃĐ”Đœ, ĐŸŃĐžŃŃĐșа бŃĐŽĐ”Ń ĐČаŃŃĐžŃĐŸĐČаŃŃŃŃ ĐŸŃ ĐŸĐŽĐœĐŸĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа Đș ĐŽŃŃĐłĐŸĐŒŃ. йаĐșĐžĐŒ ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ, ЎажД Đ”ŃлО ŃŃŃĐ”ŃŃĐČŃĐ”Ń ŃĐșĐ”Đ»Đ”Ń ŃĐŸĐŽĐŸĐČŃŃ ĐŽĐ”ĐčŃŃĐČĐžĐč, ŃŃĐž ĐŽĐ”ĐčŃŃĐČĐžŃ ĐŽĐŸĐżĐŸĐ»ĐœŃŃŃŃŃ ĐșĐŸĐœĐșŃĐ”ŃĐœŃĐŒĐž, ĐœĐ”ĐżĐŸŃŃДЎŃŃĐČĐ”ĐœĐœĐŸ ŃĐČŃĐ·Đ°ĐœĐœŃĐŒĐž Ń Đ·Đ°ĐŽĐ°ŃĐ°ĐŒĐž, ĐżĐŸŃŃаĐČĐ»Đ”ĐœĐœŃĐŒĐž пДŃДЎ ĐșажЎŃĐŒ ĐżŃĐŸŃĐ”ŃŃĐŸĐŒ. ĐŃĐżĐŸĐ»ŃĐ·ŃŃ ŃŃĐŸŃ ŃĐșĐ”Đ»Đ”Ń ĐČ ĐșаŃĐ”ŃŃĐČĐ” ŃĐ°Đ±Đ»ĐŸĐœĐ°, ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃŃŃ ĐŒĐŸĐłŃŃ ŃĐŸĐ·ĐŽĐ°ĐČаŃŃ ĐżŃĐŸŃĐ”ŃŃŃ Erlang, ĐșĐŸŃĐŸŃŃĐ” ĐŽĐ”ĐčŃŃĐČŃŃŃ ĐșаĐș ŃĐ”ŃĐČĐ”ŃŃ, ĐșĐŸĐœĐ”ŃĐœŃĐ” аĐČŃĐŸĐŒĐ°ŃŃ, ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșĐž ŃĐŸĐ±ŃŃĐžĐč Đž ŃŃпДŃĐČĐžĐ·ĐŸŃŃ. ĐĐŸ ĐČĐŒĐ”ŃŃĐŸ ŃĐŸĐłĐŸ, ŃŃĐŸĐ±Ń ĐșажЎŃĐč Ńаз пДŃĐ”ĐŸĐżŃДЎДлŃŃŃ ŃŃĐž ŃĐ°Đ±Đ»ĐŸĐœŃ, ĐŸĐœĐž бŃлО ŃазŃĐ°Đ±ĐŸŃĐ°ĐœŃ ĐșаĐș ĐŒĐŸĐŽŃлО Đž ĐœĐ°Đ·ĐČĐ°ĐœŃ Â«ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃĐŒĐžÂ». ĐĐœĐž ŃĐČĐ»ŃŃŃŃŃ ŃаŃŃŃŃ ĐżŃĐŸĐŒĐ”Đ¶ŃŃĐŸŃĐœĐŸĐč плаŃŃĐŸŃĐŒŃ OTP.
15.3. ĐĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” OTP: «ĐĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”Â» ĐŃĐœĐŸĐČĐœĐ°Ń ĐșĐŸĐŒĐ°ĐœĐŽĐ° ŃазŃĐ°Đ±ĐŸŃŃĐžĐșĐŸĐČ Riak ŃазбŃĐŸŃĐ°ĐœĐ° ĐżŃĐžĐŒĐ”ŃĐœĐŸ ĐżĐŸ ĐŽŃĐ¶ĐžĐœĐ” ĐłĐ”ĐŸĐłŃаŃĐžŃĐ”ŃĐșĐžŃ ŃĐ”ĐłĐžĐŸĐœĐŸĐČ. ĐДз ĐŸŃĐ”ĐœŃ ŃĐŸĐœĐșĐŸĐč ĐșĐŸĐŸŃĐŽĐžĐœĐ°ŃОО Đž ŃĐ°Đ±Đ»ĐŸĐœĐŸĐČ ĐŽĐ»Ń ŃĐ°Đ±ĐŸŃŃ ŃДзŃĐ»ŃŃĐ°Ń Đ±ŃĐŽĐ”Ń ŃĐŸŃŃĐŸŃŃŃ ĐžĐ· ŃазлОŃĐœŃŃ ŃДалОзаŃĐžĐč ĐșĐ»ĐžĐ”ĐœŃ/ŃĐ”ŃĐČĐ”Ń, ĐœĐ” ĐŸĐ±ŃабаŃŃĐČаŃŃĐžŃ ĐșŃаĐčĐœĐžĐ” ĐŸŃĐŸĐ±ŃĐ” ŃĐ»ŃŃаО Đž ŃĐČŃĐ·Đ°ĐœĐœŃĐ” Ń ĐœĐžĐŒĐž ĐŸŃОбĐșĐž ĐșĐŸĐœĐșŃŃĐ”ĐœŃОО. ĐĐ”ŃĐŸŃŃĐœĐŸ, ĐœĐ” бŃĐŽĐ”Ń Đ”ĐŽĐžĐœĐŸĐłĐŸ ŃĐżĐŸŃĐŸĐ±Đ° ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșĐž ĐžĐœŃĐžĐŽĐ”ĐœŃĐŸĐČ ĐœĐ° ĐșĐ»ĐžĐ”ĐœŃĐ” Đž ŃĐ”ŃĐČĐ”ŃĐ” ОлО ĐŸĐ±Đ”ŃпДŃĐ”ĐœĐžŃ ŃĐŸĐłĐŸ, ŃŃĐŸĐ±Ń ĐŸŃĐČĐ”Ń ĐœĐ° запŃĐŸŃ ĐŽĐ”ĐčŃŃĐČĐžŃДлŃĐœĐŸ бŃĐ» ĐŸŃĐČĐ”ŃĐŸĐŒ, а ĐœĐ” ĐżŃĐŸŃŃĐŸ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ”ĐŒ, ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃŃŃĐžĐŒ ĐČĐœŃŃŃĐ”ĐœĐœĐžĐŒ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃĐŒ ĐżŃĐŸŃĐŸĐșĐŸĐ»Đ°.
OTP â ŃŃĐŸ ĐœĐ°Đ±ĐŸŃ Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”Đș Erlang Đž ĐżŃĐžĐœŃĐžĐżĐŸĐČ ĐżŃĐŸĐ”ĐșŃĐžŃĐŸĐČĐ°ĐœĐžŃ, ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»ŃŃŃĐžĐč ĐłĐŸŃĐŸĐČŃĐ” Đș ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžŃ ĐžĐœŃŃŃŃĐŒĐ”ĐœŃŃ ĐŽĐ»Ń ŃазŃĐ°Đ±ĐŸŃĐșĐž ĐœĐ°ĐŽĐ”Đ¶ĐœŃŃ ŃĐžŃŃĐ”ĐŒ. ĐĐŸĐ»ŃŃĐžĐœŃŃĐČĐŸ ŃŃĐžŃ ŃĐ°Đ±Đ»ĐŸĐœĐŸĐČ Đž Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”Đș ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»ŃŃŃŃŃ ĐČ ŃĐŸŃĐŒĐ” Â«ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐč».
ĐĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” OTP ŃĐ”ŃĐ°Đ”Ń ŃŃĐž ĐżŃĐŸĐ±Đ»Đ”ĐŒŃ, ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»ŃŃ ĐŒĐŸĐŽŃлО, ŃДалОзŃŃŃОД ĐœĐ°ĐžĐ±ĐŸĐ»Đ”Đ” ŃаŃĐżŃĐŸŃŃŃĐ°ĐœĐ”ĐœĐœŃĐ” ŃĐ°Đ±Đ»ĐŸĐœŃ ĐżĐ°ŃĐ°Đ»Đ»Đ”Đ»ĐžĐ·ĐŒĐ°. ĐĐŸĐŽ ĐżŃĐžĐșŃŃŃĐžĐ”ĐŒ, бДз ĐČĐ”ĐŽĐŸĐŒĐ° ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃŃа, ĐŒĐŸĐŽŃлО ĐŸĐ±Đ”ŃпДŃĐžĐČаŃŃ ĐœĐ°ĐŽĐ”Đ¶ĐœŃŃ ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșŃ ĐŸŃĐžĐ±ĐŸĐș Đž ĐŸŃĐŸĐ±ŃŃ ŃĐ»ŃŃаДĐČ. Đ ŃДзŃĐ»ŃŃаŃĐ” ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” OTP ĐŸĐ±Đ”ŃпДŃĐžĐČĐ°Đ”Ń ĐœĐ°Đ±ĐŸŃ ŃŃĐ°ĐœĐŽĐ°ŃŃОзОŃĐŸĐČĐ°ĐœĐœŃŃ Đ±Đ»ĐŸĐșĐŸĐČ ĐŽĐ»Ń ĐżŃĐŸĐ”ĐșŃĐžŃĐŸĐČĐ°ĐœĐžŃ Đž ĐżĐŸŃŃŃĐŸĐ”ĐœĐžŃ ĐżŃĐŸĐŒŃŃĐ»Đ”ĐœĐœŃŃ ŃĐžŃŃĐ”ĐŒ ĐșаŃĐ”ŃŃĐČа.
15.3.1. ĐĐČĐ”ĐŽĐ”ĐœĐžĐ” ĐĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ OTP ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»ŃŃŃŃŃ ĐČ ĐČОЎД ĐŒĐŸĐŽŃлДĐč ĐČ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐž, stdlib ĐșĐŸŃĐŸŃĐŸĐ” ŃĐČĐ»ŃĐ”ŃŃŃ ŃаŃŃŃŃ ĐŽĐžŃŃŃОбŃŃĐžĐČа Erlang/OTP. ĐĐŸĐœĐșŃĐ”ŃĐœŃĐč ĐșĐŸĐŽ, ĐœĐ°ĐżĐžŃĐ°ĐœĐœŃĐč ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃŃĐŸĐŒ, ĐżĐŸĐŒĐ”ŃаДŃŃŃ ĐČ ĐŸŃЎДлŃĐœŃĐč ĐŒĐŸĐŽŃĐ»Ń Đž ĐČŃĐ·ŃĐČаДŃŃŃ Ń ĐżĐŸĐŒĐŸŃŃŃ ĐœĐ°Đ±ĐŸŃа ĐżŃĐ”ĐŽĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃŃ ŃŃĐœĐșŃĐžĐč ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ĐŽĐ»Ń ĐșĐ°Đ¶ĐŽĐŸĐłĐŸ Оз ĐČаŃĐžĐ°ĐœŃĐŸĐČ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ. ĐŃĐŸŃ Â«ĐŒĐŸĐŽŃĐ»Ń ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа» бŃĐŽĐ”Ń ŃĐŸĐŽĐ”ŃжаŃŃ ĐČĐ”ŃŃ ĐșĐŸĐœĐșŃĐ”ŃĐœŃĐč ĐșĐŸĐŽ, ĐœĐ”ĐŸĐ±Ń ĐŸĐŽĐžĐŒŃĐč ĐŽĐ»Ń ĐŽĐŸŃŃĐžĐ¶Đ”ĐœĐžŃ Đ¶Đ”Đ»Đ°Đ”ĐŒĐŸĐč ŃŃĐœĐșŃĐžĐŸĐœĐ°Đ»ŃĐœĐŸŃŃĐž.
ĐĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” OTP ĐČĐșĐ»ŃŃĐ°Đ”Ń ĐČ ŃĐ”Đ±Ń ŃĐ°Đ±ĐŸŃОД ĐżŃĐŸŃĐ”ŃŃŃ, ĐșĐŸŃĐŸŃŃĐ” ŃаĐșŃĐžŃĐ”ŃĐșĐž ĐČŃĐżĐŸĐ»ĐœŃŃŃ ĐČŃŃĐžŃĐ»Đ”ĐœĐžŃ, Đž ŃŃпДŃĐČĐžĐ·ĐŸŃŃ, ŃŃŃ Đ·Đ°ĐŽĐ°Ńа â ĐșĐŸĐœŃŃĐŸĐ»ĐžŃĐŸĐČаŃŃ ŃĐ°Đ±ĐŸŃĐœĐžĐșĐŸĐČ Đž ĐŽŃŃĐłĐžŃ ŃŃпДŃĐČĐžĐ·ĐŸŃĐŸĐČ. ĐĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” ŃĐ°Đ±ĐŸŃĐœĐžĐșĐŸĐČ, ŃаŃŃĐŸ ŃŃ Đ”ĐŒĐ°ŃĐžŃĐ”ŃĐșĐž ĐžĐ·ĐŸĐ±ŃĐ°Đ¶Đ°Đ”ĐŒĐŸĐ” ĐČ ĐČОЎД ĐșŃŃжĐșĐŸĐČ, ĐČĐșĐ»ŃŃĐ°Đ”Ń ĐČ ŃĐ”Đ±Ń ŃĐ”ŃĐČĐ”ŃŃ, ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșĐž ŃĐŸĐ±ŃŃĐžĐč Đž ĐșĐŸĐœĐ”ŃĐœŃĐ” аĐČŃĐŸĐŒĐ°ŃŃ. Đ ŃĐșĐŸĐČĐŸĐŽĐžŃДлО, ĐżŃДЎŃŃаĐČĐ»Đ”ĐœĐœŃĐ” ĐČ ĐČОЎД ĐżŃŃĐŒĐŸŃĐłĐŸĐ»ŃĐœĐžĐșĐŸĐČ, ĐșĐŸĐœŃŃĐŸĐ»ĐžŃŃŃŃ ŃĐČĐŸĐžŃ ĐŽĐ”ŃĐ”Đč, ĐșаĐș ŃĐ°Đ±ĐŸŃĐžŃ , ŃаĐș Đž ŃŃĐșĐŸĐČĐŸĐŽĐžŃДлДĐč, ŃĐŸĐ·ĐŽĐ°ĐČĐ°Ń ĐŽĐ”ŃĐ”ĐČĐŸ ĐœĐ°ĐŽĐ·ĐŸŃа.
[ĐĐ”ŃĐ”ĐČĐŸ ĐșĐŸĐœŃŃĐŸĐ»Ń OTP Riak] Đ ĐžŃŃĐœĐŸĐș 15.1: ĐĐ”ŃĐ”ĐČĐŸ ĐœĐ°ĐŽĐ·ĐŸŃа OTP Riak
ĐĐ”ŃĐ”ĐČŃŃ ĐșĐŸĐœŃŃĐŸĐ»Ń ŃĐłŃŃппОŃĐŸĐČĐ°ĐœŃ ĐČ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”, ĐœĐ°Đ·ŃĐČĐ°Đ”ĐŒĐŸĐ” ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ”ĐŒ. ĐŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ OTP â ŃŃĐŸ ĐœĐ” ŃĐŸĐ»ŃĐșĐŸ ŃŃĐœĐŽĐ°ĐŒĐ”ĐœŃалŃĐœŃĐ” Đ±Đ»ĐŸĐșĐž ŃĐžŃŃĐ”ĐŒ Erlang, ĐœĐŸ Đž ŃĐżĐŸŃĐŸĐ± ŃпаĐșĐŸĐČĐșĐž ĐżĐŸĐČŃĐŸŃĐœĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ĐŒŃŃ ĐșĐŸĐŒĐżĐŸĐœĐ”ĐœŃĐŸĐČ. ĐĄĐžŃŃĐ”ĐŒŃ ĐżŃĐŸĐŒŃŃĐ»Đ”ĐœĐœĐŸĐłĐŸ ŃŃĐŸĐČĐœŃ, ŃаĐșОД ĐșаĐș Riak, ŃĐŸŃŃĐŸŃŃ ĐžĐ· ĐœĐ°Đ±ĐŸŃа ŃĐ»Đ°Đ±ĐŸŃĐČŃĐ·Đ°ĐœĐœŃŃ Đž ĐżĐŸŃĐ”ĐœŃОалŃĐœĐŸ ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč. ĐĐ”ĐșĐŸŃĐŸŃŃĐ” Оз ŃŃĐžŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč ŃĐČĐ»ŃŃŃŃŃ ŃаŃŃŃŃ ŃŃĐ°ĐœĐŽĐ°ŃŃĐœĐŸĐłĐŸ ĐŽĐžŃŃŃОбŃŃĐžĐČа Erlang, а ĐŽŃŃгОД â ŃаŃŃŃĐŒĐž, ŃпДŃОалŃĐœĐŸ ŃДалОзŃŃŃĐžĐŒĐž ŃŃĐœĐșŃĐžĐŸĐœĐ°Đ»ŃĐœŃĐ” ĐČĐŸĐ·ĐŒĐŸĐ¶ĐœĐŸŃŃĐž Riak.
ĐŃĐžĐŒĐ”ŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč OTP ĐČĐșĐ»ŃŃаŃŃ Corba ORB ОлО Đ°ĐłĐ”ĐœŃ ĐżŃĐŸŃŃĐŸĐłĐŸ ĐżŃĐŸŃĐŸĐșĐŸĐ»Đ° ŃĐ”ŃĐ”ĐČĐŸĐłĐŸ ŃĐżŃаĐČĐ»Đ”ĐœĐžŃ (SNMP). ĐŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ” OTP â ŃŃĐŸ ĐżĐŸĐČŃĐŸŃĐœĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ĐŒŃĐč ĐșĐŸĐŒĐżĐŸĐœĐ”ĐœŃ, ĐșĐŸŃĐŸŃŃĐč ĐłŃŃппОŃŃĐ”Ń ĐŒĐŸĐŽŃлО Ń ŃŃпДŃĐČĐžĐ·ĐŸŃĐ°ĐŒĐž Đž ŃĐ°Đ±ĐŸŃĐžĐŒĐž ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒĐž. ĐĄ ŃŃĐŸĐłĐŸ ĐŒĐŸĐŒĐ”ĐœŃа, ĐșĐŸĐłĐŽĐ° бŃĐŽĐ”Ń ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃŃŃ ŃĐ”ŃĐŒĐžĐœ «пŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ”Â», ĐŸĐœ бŃĐŽĐ”Ń ĐŸĐ·ĐœĐ°ŃаŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ” OTP.
ĐĐŸĐŽŃлО ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ ŃĐŸĐŽĐ”ŃĐ¶Đ°Ń ĐČĐ”ŃŃ ĐŸĐ±ŃĐžĐč ĐșĐŸĐŽ ĐŽĐ»Ń ĐșĐ°Đ¶ĐŽĐŸĐłĐŸ ŃОпа ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ. Đ„ĐŸŃŃ ĐŒĐŸĐ¶ĐœĐŸ ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČаŃŃ ŃĐČĐŸĐč ŃĐŸĐ±ŃŃĐČĐ”ĐœĐœŃĐč ĐŒĐŸĐŽŃĐ»Ń ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ, ŃŃĐŸ ŃŃДбŃĐ”ŃŃŃ ĐŽĐ”Đ»Đ°ŃŃ ĐŸŃĐ”ĐœŃ ŃДЎĐșĐŸ, ĐżĐŸŃĐșĐŸĐ»ŃĐșŃ ŃĐ”, ĐșĐŸŃĐŸŃŃĐ” ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»ŃŃŃŃŃ ĐŽĐžŃŃŃОбŃŃĐžĐČĐŸĐŒ Erlang/OTP, бŃĐŽŃŃ ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČĐŸĐČаŃŃ Đ±ĐŸĐ»ŃŃĐžĐœŃŃĐČŃ ŃĐ°Đ±Đ»ĐŸĐœĐŸĐČ, ĐșĐŸŃĐŸŃŃĐ” ĐČŃ Đ±ŃĐŽĐ”ŃĐ” ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ĐČ ŃĐČĐŸĐ”ĐŒ ĐșĐŸĐŽĐ”. ĐбŃĐ°Ń ŃŃĐœĐșŃĐžĐŸĐœĐ°Đ»ŃĐœĐŸŃŃŃ, ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»ŃĐ”ĐŒĐ°Ń ĐČ ĐŒĐŸĐŽŃлД ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ, ĐČĐșĐ»ŃŃĐ°Đ”Ń ŃлДЎŃŃŃОД ĐŸĐżĐ”ŃаŃОО:
ŃĐŸĐ·ĐŽĐ°ĐœĐžĐ” Đž ĐżŃĐž ĐœĐ”ĐŸĐ±Ń ĐŸĐŽĐžĐŒĐŸŃŃĐž запОŃŃ ĐżŃĐŸŃĐ”ŃŃа; ĐŸŃĐżŃаĐČĐșа Đž ĐżĐŸĐ»ŃŃĐ”ĐœĐžĐ” ĐșĐ»ĐžĐ”ĐœŃŃĐșĐžŃ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč ĐżĐŸŃŃДЎŃŃĐČĐŸĐŒ ŃĐžĐœŃ ŃĐŸĐœĐœŃŃ ĐžĐ»Đž аŃĐžĐœŃ ŃĐŸĐœĐœŃŃ ĐČŃĐ·ĐŸĐČĐŸĐČ, ĐČĐșĐ»ŃŃĐ°Ń ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐžĐ” ĐČĐœŃŃŃĐ”ĐœĐœĐ”ĐłĐŸ ĐżŃĐŸŃĐŸĐșĐŸĐ»Đ° ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč; Ń ŃĐ°ĐœĐ”ĐœĐžĐ” ĐŽĐ°ĐœĐœŃŃ ŃĐžĐșла Đž ŃĐżŃаĐČĐ»Đ”ĐœĐžĐ” ŃĐžĐșĐ»ĐŸĐŒ ĐżŃĐŸŃĐ”ŃŃа; Đ ĐŸŃŃĐ°ĐœĐŸĐČĐșа ĐżŃĐŸŃĐ”ŃŃа. ĐĐ°ĐœĐœŃĐ” ŃĐžĐșла â ŃŃĐŸ пДŃĐ”ĐŒĐ”ĐœĐœĐ°Ń, ĐșĐŸŃĐŸŃĐ°Ń Đ±ŃĐŽĐ”Ń ŃĐŸĐŽĐ”ŃжаŃŃ ĐŽĐ°ĐœĐœŃĐ”, ĐșĐŸŃĐŸŃŃĐ” ĐżĐŸŃŃДбŃŃŃŃŃ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ ĐŒĐ”Đ¶ĐŽŃ ĐČŃĐ·ĐŸĐČĐ°ĐŒĐž. ĐĐŸŃлД ĐČŃĐ·ĐŸĐČа ĐČĐŸĐ·ĐČŃаŃаДŃŃŃ ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐœĐ°Ń ĐČĐ”ŃŃĐžŃ ĐŽĐ°ĐœĐœŃŃ . ĐŃĐž ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐœŃĐ” ĐŽĐ°ĐœĐœŃĐ”, ŃаŃŃĐŸ ĐœĐ°Đ·ŃĐČĐ°Đ”ĐŒŃĐ” ĐœĐŸĐČŃĐŒĐž ĐŽĐ°ĐœĐœŃĐŒĐž ĐČ ŃĐžĐșлД, бŃĐŽŃŃ ĐżĐ”ŃĐ”ĐŽĐ°ĐœŃ ĐČ ĐșаŃĐ”ŃŃĐČĐ” аŃĐłŃĐŒĐ”ĐœŃа ĐżŃĐž ŃлДЎŃŃŃĐ”ĐŒ ĐČŃĐ·ĐŸĐČĐ”. ĐĐ°ĐœĐœŃĐ” ĐČ ŃĐžĐșлД ŃаŃŃĐŸ ĐœĐ°Đ·ŃĐČаŃŃ ŃĐŸŃŃĐŸŃĐœĐžĐ”ĐŒ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ.
Đ€ŃĐœĐșŃĐžĐŸĐœĐ°Đ»ŃĐœĐŸŃŃŃ, ĐșĐŸŃĐŸŃĐ°Ń ĐŽĐŸĐ»Đ¶ĐœĐ° бŃŃŃ ĐČĐșĐ»ŃŃĐ”ĐœĐ° ĐČ ĐŒĐŸĐŽŃĐ»Ń ĐŸĐ±ŃĐ”ĐłĐŸ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ ŃĐ”ŃĐČĐ”ŃĐœĐŸĐłĐŸ ŃОпа ĐŽĐ»Ń ŃДалОзаŃОО ĐșĐŸĐœĐșŃĐ”ŃĐœĐŸĐłĐŸ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ, ĐČĐșĐ»ŃŃĐ°Đ”Ń ĐČ ŃДбŃ:
ĐžĐœĐžŃОалОзаŃĐžŃ ĐŽĐ°ĐœĐœŃŃ ŃĐžĐșла ĐżŃĐŸŃĐ”ŃŃа Đž, Đ”ŃлО ĐżŃĐŸŃĐ”ŃŃ Đ·Đ°ŃДгОŃŃŃĐžŃĐŸĐČĐ°Đœ, ĐžĐŒŃ ĐżŃĐŸŃĐ”ŃŃа. ĐșĐŸĐœĐșŃĐ”ŃĐœĐŸĐ” ŃĐżŃаĐČĐ»Đ”ĐœĐžĐ” ĐșĐ»ĐžĐ”ĐœŃŃĐșĐžĐŒĐž запŃĐŸŃĐ°ĐŒĐž Đž, Đ”ŃлО ŃĐžĐœŃ ŃĐŸĐœĐœĐŸ, ĐŸŃĐČĐ”Ń, ĐŸŃĐżŃаĐČĐ»ŃĐ”ĐŒŃĐč ĐŸĐ±ŃаŃĐœĐŸ ĐșĐ»ĐžĐ”ĐœŃŃ. ŃĐżŃаĐČĐ»Đ”ĐœĐžĐ” Đž ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐžĐ” ĐŽĐ°ĐœĐœŃŃ ĐČ ŃĐžĐșлД ĐżŃĐŸŃĐ”ŃŃа ĐŒĐ”Đ¶ĐŽŃ ŃазлОŃĐœŃĐŒĐž запŃĐŸŃĐ°ĐŒĐž. ĐŸŃĐžŃŃĐșа ĐŽĐ°ĐœĐœŃŃ ŃĐžĐșла пДŃДЎ заĐČĐ”ŃŃĐ”ĐœĐžĐ”ĐŒ ĐżŃĐŸŃĐ”ŃŃа. 15.3.2. ĐбŃОД ŃĐ”ŃĐČĐ”ŃŃ ĐбŃОД ŃĐ”ŃĐČĐ”ŃŃ, ŃДалОзŃŃŃОД ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” ĐșĐ»ĐžĐ”ĐœŃ/ŃĐ”ŃĐČĐ”Ń, ĐŸĐżŃДЎДлŃŃŃŃŃ ĐČ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐž, gen_serverĐșĐŸŃĐŸŃĐŸĐ” ŃĐČĐ»ŃĐ”ŃŃŃ ŃаŃŃŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ stdlib(ĐĄŃĐ°ĐœĐŽĐ°ŃŃĐœĐ°Ń Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”Đșа). ĐĐ»Ń ĐŸĐ±ŃŃŃĐœĐ”ĐœĐžŃ ŃĐœĐžĐČĐ”ŃŃалŃĐœŃŃ ŃĐ”ŃĐČĐ”ŃĐŸĐČ ĐŒŃ Đ±ŃĐŽĐ”ĐŒ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ĐŒĐŸĐŽŃĐ»Ń riak_core_node_watcher.erlĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ riak_core. ĐŃĐŸ ŃĐ”ŃĐČĐ”Ń, ĐșĐŸŃĐŸŃŃĐč ĐŸŃŃлДжОĐČĐ°Đ”Ń Đž ŃĐŸĐŸĐ±ŃĐ°Đ”Ń ĐŸ ĐŽĐŸŃŃŃĐżĐœĐŸŃŃĐž ĐżĐŸĐŽŃĐ”ŃĐČĐžŃĐŸĐČ Đž ŃĐ·Đ»ĐŸĐČ ĐČ ĐșлаŃŃĐ”ŃĐ” Riak. ĐĐ°ĐłĐŸĐ»ĐŸĐČĐșĐž Đž ĐŽĐžŃĐ”ĐșŃĐžĐČŃ ĐŒĐŸĐŽŃлДĐč ŃлДЎŃŃŃОД:
-ĐŒĐŸĐŽŃĐ»Ń(riak_core_node_watcher). -ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” (gen_server). %% API -export([start_link/0,service_up/2,service_down/1,node_up/0,node_down/0,services/0, Services/1,nodes/1,avsn/0]). %% ĐŸĐ±ŃаŃĐœŃŃ ĐČŃĐ·ĐŸĐČĐŸĐČ gen_server -export([init/1,handle_call/3,handle_cast/2,handle_info/2,terminate/2, code_change/3]).
-record(state, {status=up, Services=[], Peers=[], avsn=0, bcast_tref, bcast_mod={gen_server, abcast}}). ĐбŃĐžĐč ŃĐ”ŃĐČĐ”Ń ĐŒĐŸĐ¶ĐœĐŸ лДгĐșĐŸ ŃаŃĐżĐŸĐ·ĐœĐ°ŃŃ ĐżĐŸ ĐŽĐžŃĐ”ĐșŃĐžĐČĐ”. -behavior(gen_server). ĐŃа ĐŽĐžŃĐ”ĐșŃĐžĐČа ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ŃŃŃ ĐșĐŸĐŒĐżĐžĐ»ŃŃĐŸŃĐŸĐŒ ĐŽĐ»Ń ĐŸĐ±Đ”ŃпДŃĐ”ĐœĐžŃ ĐżŃаĐČОлŃĐœĐŸĐłĐŸ ŃĐșŃĐżĐŸŃŃа ĐČŃĐ”Ń ŃŃĐœĐșŃĐžĐč ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа. ĐапОŃŃ Â«state» бŃĐŽĐ”Ń ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃŃŃ ĐŽĐ»Ń ĐŽĐ°ĐœĐœŃŃ ŃĐžĐșла ŃĐ”ŃĐČĐ”Ńа.
15.3.3. ĐапŃŃĐș ŃĐ”ŃĐČĐ”Ńа Đ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐž gen_serverĐČĐŒĐ”ŃŃĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžŃ BIF spawnĐž ŃŃĐœĐșŃĐžĐč spawn_linkĐČŃ Đ±ŃĐŽĐ”ŃĐ” ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ŃŃĐœĐșŃОО gen_server:startĐž gen_server:start_link. ĐŃĐœĐŸĐČĐœĐŸĐ” ŃазлОŃОД ĐŒĐ”Đ¶ĐŽŃ spawnĐž startзаĐșĐ»ŃŃаДŃŃŃ ĐČ ŃĐžĐœŃ ŃĐŸĐœĐœĐŸĐŒ Ń Đ°ŃаĐșŃĐ”ŃĐ” ĐžŃ ĐČŃĐ·ĐŸĐČа. ĐŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžĐ” startĐČĐŒĐ”ŃŃĐŸ spawnĐŽĐ”Đ»Đ°Đ”Ń Đ·Đ°ĐżŃŃĐș ŃĐ°Đ±ĐŸŃĐ”ĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа Đ±ĐŸĐ»Đ”Đ” ĐŽĐ”ŃĐ”ŃĐŒĐžĐœĐžŃĐŸĐČĐ°ĐœĐœŃĐŒ Đž ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ĐžĐ·Đ±Đ”Đ¶Đ°ŃŃ ĐœĐ”ĐżŃДЎĐČĐžĐŽĐ”ĐœĐœŃŃ ŃŃĐ»ĐŸĐČĐžĐč ĐłĐŸĐœĐșĐž, ĐżĐŸŃĐșĐŸĐ»ŃĐșŃ ĐČŃĐ·ĐŸĐČ ĐœĐ” ĐČĐ”ŃĐœĐ”Ń PID ŃĐ°Đ±ĐŸŃĐ”ĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа ĐŽĐŸ ŃĐ”Ń ĐżĐŸŃ, ĐżĐŸĐșа ĐŸĐœ ĐœĐ” бŃĐŽĐ”Ń ĐžĐœĐžŃОалОзОŃĐŸĐČĐ°Đœ. ĐŃ ĐŒĐŸĐ¶Đ”ŃĐ” ĐČŃĐ·ĐČаŃŃ ŃŃŃ ŃŃĐœĐșŃĐžŃ, ĐžŃĐżĐŸĐ»ŃĐ·ŃŃ ĐŸĐŽĐœŃ ĐžĐ· ŃлДЎŃŃŃĐžŃ ŃĐžĐłĐœĐ°ŃŃŃ:
gen_server:start_link(ServerName, CallbackModule, Arguments, Options) gen_server:start_link(CallbackModule, Arguments, Options) ServerNameâ ŃŃĐŸ ĐșĐŸŃŃДж ĐČ ŃĐŸŃĐŒĐ” {local, Name}ОлО {global, Name}, заŃĐ”ĐŒ ŃĐșазŃĐČаДŃŃŃ, ŃŃĐŸ NameŃŃĐŸ ĐłĐ»ĐŸĐ±Đ°Đ»ŃĐœŃĐč ОлО Đ»ĐŸĐșалŃĐœŃĐč ĐżŃĐ”ĐČĐŽĐŸĐœĐžĐŒ ĐżŃĐŸŃĐ”ŃŃа, Đ”ŃлО ĐŸĐœ ĐŽĐŸĐ»Đ¶Đ”Đœ бŃŃŃ Đ·Đ°ŃДгОŃŃŃĐžŃĐŸĐČĐ°Đœ. ĐĐ»ĐŸĐ±Đ°Đ»ŃĐœŃĐ” ĐžĐŒĐ”ĐœĐ° ĐŸĐ±Đ”ŃпДŃĐžĐČаŃŃ ĐżŃĐŸĐ·ŃаŃĐœŃĐč ĐŽĐŸŃŃŃĐż Đș ŃĐ”ŃĐČĐ”ŃĐ°ĐŒ ĐČ ĐșлаŃŃĐ”ŃĐ” ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃŃ ŃĐ·Đ»ĐŸĐČ Erlang. ĐŃлО ĐČŃ ĐœĐ” Ń ĐŸŃĐžŃĐ” ŃДгОŃŃŃĐžŃĐŸĐČаŃŃ ĐżŃĐŸŃĐ”ŃŃ Đž ĐČĐŒĐ”ŃŃĐŸ ŃŃĐŸĐłĐŸ ŃŃŃлаДŃĐ”ŃŃ ĐœĐ° ĐœĐ”ĐłĐŸ, ĐžŃĐżĐŸĐ»ŃĐ·ŃŃ Đ”ĐłĐŸ PID, ĐČĐ°ĐŒ ŃлДЎŃĐ”Ń ĐŸĐżŃŃŃĐžŃŃ Đ°ŃĐłŃĐŒĐ”ĐœŃ match, ĐžŃĐżĐŸĐ»ŃĐ·ŃŃ ĐČĐŒĐ”ŃŃĐŸ ŃŃĐŸĐłĐŸ ŃŃĐœĐșŃĐžŃ start_link/3ОлО start/3. CallbackModuleâ ŃŃĐŸ ĐžĐŒŃ ĐŒĐŸĐŽŃĐ»Ń, ĐČ ĐșĐŸŃĐŸŃĐŸĐŒ ŃĐ°Đ·ĐŒĐ”ŃĐ”ĐœŃ ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃĐ” ŃŃĐœĐșŃОО ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа, ArgumentsŃĐČĐ»ŃĐ”ŃŃŃ ĐŽĐ”ĐčŃŃĐČĐžŃДлŃĐœŃĐŒ «ŃĐ”ŃĐŒĐžĐœĐŸĐŒÂ» Erlang, ĐșĐŸŃĐŸŃŃĐč пДŃДЎаДŃŃŃ ŃŃĐœĐșŃОО ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа init/1, а ŃаĐșжД OptionsŃĐČĐ»ŃĐ”ŃŃŃ ŃпОŃĐșĐŸĐŒ, ĐșĐŸŃĐŸŃŃĐč ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ĐČĐ°ĐŒ ŃĐșазаŃŃ ĐżĐ°ŃĐ°ĐŒĐ”ŃŃŃ ŃĐżŃаĐČĐ»Đ”ĐœĐžŃ ĐżĐ°ĐŒŃŃŃŃ, ŃаĐșОД ĐșаĐș fullsweep_afterĐž heapsize, а ŃаĐșжД ŃŃаŃŃĐžŃĐŸĐČĐșŃ Đž паŃĐ°ĐŒĐ”ŃŃŃ ĐŸŃлаЎĐșĐž.
Đ ĐœĐ°ŃĐ”ĐŒ ĐżŃĐžĐŒĐ”ŃĐ” ĐŒŃ ĐČŃĐ·ŃĐČĐ°Đ”ĐŒ start_link/4, ŃДгОŃŃŃĐžŃŃŃ ĐżŃĐŸŃĐ”ŃŃ Ń ŃĐ”ĐŒ жД ĐžĐŒĐ”ĐœĐ”ĐŒ, ŃŃĐŸ Đž ĐŒĐŸĐŽŃĐ»Ń ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа, Ń ĐżĐŸĐŒĐŸŃŃŃ ĐŒĐ°ĐșŃĐŸŃа ?MODULE. ĐŃĐŸŃ ĐŒĐ°ĐșŃĐŸŃ ŃŃĐ°ĐœŃлОŃŃĐ”ŃŃŃ ĐČ ĐžĐŒŃ ĐŒĐŸĐŽŃĐ»Ń ĐżŃДпŃĐŸŃĐ”ŃŃĐŸŃĐŸĐŒ ĐżŃĐž ĐșĐŸĐŒĐżĐžĐ»ŃŃОО ĐșĐŸĐŽĐ°. ĐŃДгЎа ĐżĐŸĐ»Đ”Đ·ĐœĐŸ ĐœĐ°Đ·ŃĐČаŃŃ ŃĐČĐŸĐ” ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” ĐżŃĐ”ĐČĐŽĐŸĐœĐžĐŒĐŸĐŒ, ŃĐŸĐČпаЎаŃŃĐžĐŒ Ń ĐžĐŒĐ”ĐœĐ”ĐŒ ĐŒĐŸĐŽŃĐ»Ń, ĐČ ĐșĐŸŃĐŸŃĐŸĐŒ ĐŸĐœĐŸ ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐŸ. ĐŃ ĐœĐ” пДŃĐ”ĐŽĐ°Đ”ĐŒ аŃĐłŃĐŒĐ”ĐœŃŃ, ĐżŃĐŸŃŃĐŸ ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»ŃŃ ĐżŃŃŃĐŸĐč ŃпОŃĐŸĐș. ХпОŃĐŸĐș ĐŸĐżŃĐžĐč ŃаĐșжД ĐżŃŃŃ:
start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). ĐŃĐ”ĐČĐžĐŽĐœĐ°Ń ŃĐ°Đ·ĐœĐžŃа ĐŒĐ”Đ¶ĐŽŃ ŃŃĐœĐșŃĐžŃĐŒĐž start_linkĐž startзаĐșĐ»ŃŃаДŃŃŃ ĐČ ŃĐŸĐŒ, ŃŃĐŸ start_linkĐżŃĐŸŃĐ”ŃŃ ŃĐČŃĐ·ŃĐČаДŃŃŃ Ń Đ”ĐłĐŸ ŃĐŸĐŽĐžŃĐ”Đ»Đ”ĐŒ, ŃаŃĐ” ĐČŃĐ”ĐłĐŸ Ń ŃŃпДŃĐČĐžĐ·ĐŸŃĐŸĐŒ, а start ŃŃĐŸ ĐœĐ” ŃаĐș. ĐŃĐŸ заŃĐ»ŃжОĐČĐ°Đ”Ń ŃĐșĐ°Đ·Đ°ĐœĐžŃ, ĐżĐŸŃĐșĐŸĐ»ŃĐșŃ ĐŸŃĐČĐ”ŃŃŃĐČĐ”ĐœĐœĐŸŃŃŃ Đ·Đ° ĐżŃĐžĐČŃĐ·ĐșŃ Đș ŃŃпДŃĐČĐžĐ·ĐŸŃŃ Đ»Đ”Đ¶ĐžŃ ĐœĐ° ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐž OTP. Đ€ŃĐœĐșŃОО startŃаŃŃĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃŃŃŃŃ ĐżŃĐž ŃĐ”ŃŃĐžŃĐŸĐČĐ°ĐœĐžĐž ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ ĐŸĐ±ĐŸĐ»ĐŸŃĐșĐž, ĐżĐŸŃŃĐŸĐŒŃ ĐŸŃОбĐșа ĐČĐČĐŸĐŽĐ°, ĐČŃĐ·ŃĐČаŃŃĐ°Ń ŃĐ±ĐŸĐč ĐżŃĐŸŃĐ”ŃŃа ĐŸĐ±ĐŸĐ»ĐŸŃĐșĐž, ĐœĐ” ĐżĐŸĐČлОŃĐ”Ń ĐœĐ° ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”. ĐŃĐ” ŃĐŸŃĐŒŃ ŃŃĐœĐșŃĐžĐč startĐž start_linkĐČĐŸĐ·ĐČŃаŃĐŸĐČ {ok, Pid}.
Đ€ŃĐœĐșŃОО startĐž start_linkŃĐŸĐ·ĐŽĐ°ĐŽŃŃ ĐœĐŸĐČŃĐč ĐżŃĐŸŃĐ”ŃŃ, ĐșĐŸŃĐŸŃŃĐč ĐČŃĐ·ĐŸĐČĐ”Ń ŃŃĐœĐșŃĐžŃ ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа init(Arguments)Ń ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»Đ”ĐœĐœŃĐŒĐž CallbackModuleпаŃĐ°ĐŒĐ”ŃŃĐ°ĐŒĐž Arguments. Đ€ŃĐœĐșŃĐžŃ initĐŽĐŸĐ»Đ¶ĐœĐ° ĐžĐœĐžŃОалОзОŃĐŸĐČаŃŃ LoopDataŃĐ”ŃĐČĐ”Ń Đž ĐŽĐŸĐ»Đ¶ĐœĐ° ĐČĐ”ŃĐœŃŃŃ ĐșĐŸŃŃДж ĐČ ŃĐŸŃĐŒĐ” {ok, LoopData}. LoopData ŃĐŸĐŽĐ”ŃĐ¶ĐžŃ ĐżĐ”ŃĐČŃĐč ŃĐșĐ·Đ”ĐŒĐżĐ»ŃŃ ĐŽĐ°ĐœĐœŃŃ ŃĐžĐșла, ĐșĐŸŃĐŸŃŃĐ” бŃĐŽŃŃ ĐżĐ”ŃДЎаĐČаŃŃŃŃ ĐŒĐ”Đ¶ĐŽŃ ŃŃĐœĐșŃĐžŃĐŒĐž ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа. ĐŃлО ĐČŃ Ń ĐŸŃĐžŃĐ” ŃĐŸŃ ŃĐ°ĐœĐžŃŃ ĐœĐ”ĐșĐŸŃĐŸŃŃĐ” аŃĐłŃĐŒĐ”ĐœŃŃ, ĐșĐŸŃĐŸŃŃĐ” ĐČŃ ĐżĐ”ŃДЎалО ŃŃĐœĐșŃОО init, ĐČŃ ĐŒĐŸĐ¶Đ”ŃĐ” ŃЎДлаŃŃ ŃŃĐŸ ĐČ ĐżĐ”ŃĐ”ĐŒĐ”ĐœĐœĐŸĐč LoopData. LoopDataĐČ ŃĐ”ŃĐČĐ”ŃĐ” ĐŒĐŸĐœĐžŃĐŸŃĐžĐœĐłĐ° ŃĐ·Đ»ĐŸĐČ Riak â ŃŃĐŸ ŃДзŃĐ»ŃŃĐ°Ń ĐČŃĐ·ĐŸĐČа ŃŃĐœĐșŃОО schedule_broadcast/1Ń Đ·Đ°ĐżĐžŃŃŃ ŃОпа, stateĐżĐŸĐ»Ń ĐșĐŸŃĐŸŃĐŸĐč ĐžĐŒĐ”ŃŃ Đ·ĐœĐ°ŃĐ”ĐœĐžŃ ĐżĐŸ ŃĐŒĐŸĐ»ŃĐ°ĐœĐžŃ:
init([]) ->
%% ХлДЎОŃĐ” за ŃĐŸĐ±ŃŃĐžŃĐŒĐž ĐČĐșĐ»ŃŃĐ”ĐœĐžŃ/ĐČŃĐșĐ»ŃŃĐ”ĐœĐžŃ Ńзла
net_kernel:monitor_nodes(true),
%% ĐаŃŃŃĐŸĐčĐșа ŃаблОŃŃ ETS ĐŽĐ»Ń ĐŸŃŃлДжОĐČĐ°ĐœĐžŃ ŃĐŸŃŃĐŸŃĐœĐžŃ Ńзла
ets:new(?MODULE, [protected,named_table]),
{ok, Schedule_broadcast (#ŃĐŸŃŃĐŸŃĐœĐžĐ”{})}.
Đ„ĐŸŃŃ ĐżŃĐŸŃĐ”ŃŃ-ŃŃпДŃĐČĐžĐ·ĐŸŃ ĐŒĐŸĐ¶Đ”Ń ĐČŃĐ·ĐČаŃŃ ŃŃĐœĐșŃĐžŃ start_link/4, ŃŃĐœĐșŃĐžŃ ĐČŃĐ·ŃĐČĐ°Đ”Ń ĐŽŃŃĐłĐŸĐč ĐżŃĐŸŃĐ”ŃŃ init/1 : ŃĐŸŃ, ĐșĐŸŃĐŸŃŃĐč ŃĐŸĐ»ŃĐșĐŸ ŃŃĐŸ бŃĐ» ŃĐŸĐ·ĐŽĐ°Đœ. ĐĐŸŃĐșĐŸĐ»ŃĐșŃ ŃДлŃŃ ŃŃĐŸĐłĐŸ ŃĐ”ŃĐČĐ”Ńа ŃĐČĐ»ŃĐ”ŃŃŃ ĐŸĐ±ĐœĐ°ŃŃĐ¶Đ”ĐœĐžĐ”, запОŃŃ Đž ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐŸ ĐŽĐŸŃŃŃĐżĐœĐŸŃŃĐž ĐżĐŸĐŽŃĐ”ŃĐČĐžŃĐŸĐČ Riak, ĐžĐœĐžŃОалОзаŃĐžŃ Đ·Đ°ĐżŃаŃĐžĐČĐ°Đ”Ń ŃŃĐ”ĐŽŃ ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐžŃ Erlang ŃĐČĐ”ĐŽĐŸĐŒĐ»ŃŃŃ Đ”Đ” ĐŸ ŃаĐșĐžŃ ŃĐŸĐ±ŃŃĐžŃŃ Đž ŃĐŸŃŃĐŸĐžŃ ĐžĐ· ŃаблОŃŃ ĐŽĐ»Ń Ń ŃĐ°ĐœĐ”ĐœĐžŃ ŃŃĐŸĐč ĐžĐœŃĐŸŃĐŒĐ°ŃОО. ĐŃĐŸ ĐœĐ”ĐŸĐ±Ń ĐŸĐŽĐžĐŒĐŸ ŃЎДлаŃŃ ĐżŃĐž ĐžĐœĐžŃОалОзаŃОО, ĐżĐŸŃĐșĐŸĐ»ŃĐșŃ ĐČŃĐ·ĐŸĐČŃ Đș ŃĐ”ŃĐČĐ”ŃŃ Đ·Đ°ĐČĐ”ŃŃĐžŃŃŃ ĐœĐ”ŃЎаŃĐœĐŸ, Đ”ŃлО ŃŃа ŃŃŃŃĐșŃŃŃа Đ”ŃĐ” ĐœĐ” ŃŃŃĐ”ŃŃĐČŃĐ”Ń. ĐДлаĐčŃĐ” ŃĐŸĐ»ŃĐșĐŸ ŃĐŸ, ŃŃĐŸ ĐœĐ”ĐŸĐ±Ń ĐŸĐŽĐžĐŒĐŸ, Đž ĐŒĐžĐœĐžĐŒĐžĐ·ĐžŃŃĐčŃĐ” ĐŸĐżĐ”ŃаŃОО ĐČ ĐČаŃĐ”Đč ŃŃĐœĐșŃОО init, ĐżĐŸŃĐșĐŸĐ»ŃĐșŃ ĐČŃĐ·ĐŸĐČ initĐČŃĐżĐŸĐ»ĐœŃĐ”ŃŃŃ ŃĐžĐœŃ ŃĐŸĐœĐœĐŸ, ŃŃĐŸ ĐżŃĐ”ĐŽĐŸŃĐČŃаŃĐ°Đ”Ń Đ·Đ°ĐżŃŃĐș ĐČŃĐ”Ń ĐŽŃŃĐłĐžŃ ĐżŃĐŸŃĐ”ŃŃĐŸĐČ ĐŽĐŸ ŃĐ”Ń ĐżĐŸŃ, ĐżĐŸĐșа ŃŃĐœĐșŃĐžŃ ĐœĐ” ĐČĐ”ŃĐœĐ”Ń ŃĐČĐŸĐč ŃДзŃĐ»ŃŃаŃ.
15.3.4. ĐĐ”ŃДЎаŃа ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč ĐŃлО ĐČŃ Ń ĐŸŃĐžŃĐ” ĐŸŃĐżŃаĐČĐžŃŃ ŃĐžĐœŃ ŃĐŸĐœĐœĐŸĐ” ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐœĐ° ŃĐČĐŸĐč ŃĐ”ŃĐČĐ”Ń, ĐČŃ Đ±ŃĐŽĐ”ŃĐ” ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ŃŃĐœĐșŃĐžŃ gen_server:call/2. ĐŃĐžĐœŃ ŃĐŸĐœĐœŃĐ” ĐČŃĐ·ĐŸĐČŃ ĐČŃĐżĐŸĐ»ĐœŃŃŃŃŃ Ń ĐżĐŸĐŒĐŸŃŃŃ ŃŃĐœĐșŃОО gen_server:cast/2. ĐаĐČаĐčŃĐ” ĐČĐŸĐ·ŃĐŒĐ”ĐŒ ĐŽĐČĐ” ŃŃĐœĐșŃОО Оз Service API Riak; ĐŸŃŃалŃĐœŃŃ ŃаŃŃŃ ĐșĐŸĐŽĐ° ĐŒŃ ĐżŃĐ”ĐŽĐŸŃŃаĐČĐžĐŒ ĐżĐŸĐ·Đ¶Đ”. ĐĐœĐž ĐČŃĐ·ŃĐČаŃŃŃŃ ĐșĐ»ĐžĐ”ĐœŃŃĐșĐžĐŒĐž ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒĐž Đž ĐżŃĐžĐČĐŸĐŽŃŃ Đș ĐŸŃĐżŃаĐČĐșĐ” ŃĐžĐœŃ ŃĐŸĐœĐœĐŸĐłĐŸ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ ŃĐ”ŃĐČĐ”ŃĐœĐŸĐŒŃ ĐżŃĐŸŃĐ”ŃŃŃ, заŃДгОŃŃŃĐžŃĐŸĐČĐ°ĐœĐœĐŸĐŒŃ Ń ŃĐ”ĐŒ жД ĐžĐŒĐ”ĐœĐ”ĐŒ, ŃŃĐŸ Đž ĐŒĐŸĐŽŃĐ»Ń. ĐбŃаŃĐžŃĐ” ĐČĐœĐžĐŒĐ°ĐœĐžĐ”, ŃŃĐŸ ĐżŃĐŸĐČĐ”ŃĐșа ĐŽĐ°ĐœĐœŃŃ , ĐŸŃĐżŃаĐČĐ»ŃĐ”ĐŒŃŃ ĐœĐ° ŃĐ”ŃĐČĐ”Ń, ĐŽĐŸĐ»Đ¶ĐœĐ° ĐČŃĐżĐŸĐ»ĐœŃŃŃŃŃ ĐœĐ° ŃŃĐŸŃĐŸĐœĐ” ĐșĐ»ĐžĐ”ĐœŃа. ĐŃлО ĐșĐ»ĐžĐ”ĐœŃ ĐŸŃĐżŃаĐČĐžŃ ĐœĐ”ĐČĐ”ŃĐœŃŃ ĐžĐœŃĐŸŃĐŒĐ°ŃĐžŃ, ŃĐ”ŃĐČĐ”Ń ĐŸŃĐșĐ»ŃŃĐžŃŃŃ.
service_up(Id, Pid) -> gen_server:call(?MODULE, {service_up, Id, Pid}).
service_down(Id) -> gen_server:call(?MODULE, {service_down, Id}). ĐаĐș ŃĐŸĐ»ŃĐșĐŸ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ ĐżĐŸĐ»ŃŃĐ”ĐœŃ, ĐżŃĐŸŃĐ”ŃŃ gen_serverĐČŃĐ·ŃĐČĐ°Đ”Ń ŃŃĐœĐșŃĐžŃ ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа, handle_call/3ĐŸĐ±ŃабаŃŃĐČаŃŃŃŃ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ ĐČ ŃĐŸĐŒ жД ĐżĐŸŃŃĐŽĐșĐ”, ĐČ ĐșĐŸŃĐŸŃĐŸĐŒ ĐŸĐœĐž бŃлО ĐŸŃĐżŃаĐČĐ»Đ”ĐœŃ:
handle_call({service_up, Id, Pid}, _From, State) -> %% ĐĐ±ĐœĐŸĐČĐžŃŃ ĐœĐ°Đ±ĐŸŃ Đ°ĐșŃĐžĐČĐœŃŃ ŃĐ”ŃĐČĐžŃĐŸĐČ Đ»ĐŸĐșалŃĐœĐŸ Services = ordsets:add_element(Id, State#state.services), S2 = State#state { Services = Services } ,
%% УЎалОŃĐ” ĐČŃĐ” ŃŃŃĐ”ŃŃĐČŃŃŃОД mrefs ĐŽĐ»Ń ŃŃĐŸĐč ŃĐ»ŃжбŃ
delete_service_mref(Id),
%% ĐаŃŃŃĐŸĐčŃĐ” ĐŒĐŸĐœĐžŃĐŸŃ ĐŽĐ»Ń Pid, ââĐżŃДЎŃŃаĐČĐ»ŃŃŃĐ”ĐłĐŸ ŃŃŃ ŃĐ»ŃжбŃ
Mref = erlang:monitor(process, Pid),
erlang:put(Mref, Id),
erlang:put( Id, Mref),
%% ĐĐ±ĐœĐŸĐČĐžŃĐ” ĐœĐ°ŃŃ Đ»ĐŸĐșалŃĐœŃŃ ŃаблОŃŃ ETS Đž ŃŃĐ°ĐœŃлОŃŃĐčŃĐ”
S3 = local_update(S2),
{reply, ok, update_avsn(S3)};
handle_call({service_down, Id}, _From, State) -> %% ĐĐ±ĐœĐŸĐČĐžŃŃ ĐœĐ°Đ±ĐŸŃ Đ°ĐșŃĐžĐČĐœŃŃ ŃĐ”ŃĐČĐžŃĐŸĐČ Đ»ĐŸĐșалŃĐœĐŸ Services = ordsets:del_element(Id, State#state.services), S2 = State#state { Services = Services },
% % УЎалОŃŃ ĐČŃĐ” ŃŃŃĐ”ŃŃĐČŃŃŃОД mrefs ĐŽĐ»Ń ŃŃĐŸĐč ŃĐ»ŃжбŃ
delete_service_mref(Id),
%% ĐĐ±ĐœĐŸĐČĐžŃŃ Đ»ĐŸĐșалŃĐœŃŃ ŃаблОŃŃ ETS Đž ŃŃĐ°ĐœŃлОŃĐŸĐČаŃŃ
S3 = local_update(S2),
{reply, ok, update_avsn(S3)};
ĐбŃаŃĐžŃĐ” ĐČĐœĐžĐŒĐ°ĐœĐžĐ” ĐœĐ° ĐČĐŸĐ·ĐČŃаŃĐ°Đ”ĐŒĐŸĐ” Đ·ĐœĐ°ŃĐ”ĐœĐžĐ” ŃŃĐœĐșŃОО ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа. ĐĐŸŃŃДж ŃĐŸĐŽĐ”ŃĐ¶ĐžŃ ŃĐżŃаĐČĐ»ŃŃŃĐžĐč аŃĐŸĐŒ reply, ŃĐŸĐŸĐ±ŃаŃŃĐžĐč ŃĐœĐžĐČĐ”ŃŃалŃĐœĐŸĐŒŃ ĐșĐŸĐŽŃ, ŃŃĐŸ gen_serverĐČŃĐŸŃĐŸĐč ŃĐ»Đ”ĐŒĐ”ĐœŃ ĐșĐŸŃŃДжа (ĐșĐŸŃĐŸŃŃĐč ĐČ ĐŸĐ±ĐŸĐžŃ ŃĐ»ŃŃаŃŃ ŃĐČĐ»ŃĐ”ŃŃŃ Đ°ŃĐŸĐŒĐŸĐŒ ok) ŃĐČĐ»ŃĐ”ŃŃŃ ĐŸŃĐČĐ”ŃĐŸĐŒ, ĐČĐŸĐ·ĐČŃаŃĐ°Đ”ĐŒŃĐŒ ĐșĐ»ĐžĐ”ĐœŃŃ. ĐąŃĐ”ŃĐžĐč ŃĐ»Đ”ĐŒĐ”ĐœŃ ĐșĐŸŃŃДжа â new State, ĐșĐŸŃĐŸŃŃĐč ĐČ ĐœĐŸĐČĐŸĐč ĐžŃĐ”ŃаŃОО ŃĐ”ŃĐČĐ”Ńа пДŃДЎаДŃŃŃ ĐČ ĐșаŃĐ”ŃŃĐČĐ” ŃŃĐ”ŃŃĐ”ĐłĐŸ аŃĐłŃĐŒĐ”ĐœŃа ŃŃĐœĐșŃОО handle_call/3; ĐČ ĐŸĐ±ĐŸĐžŃ ŃĐ»ŃŃаŃŃ ŃĐŸŃŃĐŸŃĐœĐžĐ” ĐŸĐ±ĐœĐŸĐČĐ»ŃĐ”ŃŃŃ, ŃŃĐŸĐ±Ń ĐŸŃŃазОŃŃ ĐœĐŸĐČŃĐč ĐœĐ°Đ±ĐŸŃ ĐŽĐŸŃŃŃĐżĐœŃŃ ŃŃĐ»ŃĐł. ĐŃĐłŃĐŒĐ”ĐœŃ _From ĐżŃДЎŃŃаĐČĐ»ŃĐ”Ń ŃĐŸĐ±ĐŸĐč ĐșĐŸŃŃДж, ŃĐŸĐŽĐ”ŃжаŃĐžĐč ŃĐœĐžĐșалŃĐœŃŃ ŃŃŃĐ»ĐșŃ ĐœĐ° ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” Đž PID ĐșĐ»ĐžĐ”ĐœŃŃĐșĐŸĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа. ĐĐ”ŃŃ ĐșĐŸŃŃДж ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ŃŃŃ ĐČ Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”ŃĐœŃŃ ŃŃĐœĐșŃĐžŃŃ , ĐșĐŸŃĐŸŃŃĐ” ĐŒŃ ĐœĐ” бŃĐŽĐ”ĐŒ ĐŸĐ±ŃŃжЎаŃŃ ĐČ ŃŃĐŸĐč глаĐČĐ”. Đ Đ±ĐŸĐ»ŃŃĐžĐœŃŃĐČĐ” ŃĐ»ŃŃаДĐČ ĐČĐ°ĐŒ ŃŃĐŸ ĐœĐ” ĐżĐŸĐœĐ°ĐŽĐŸĐ±ĐžŃŃŃ.
ĐĐŸĐŽŃĐ»Ń gen_serverŃĐŸĐŽĐ”ŃĐ¶ĐžŃ ŃĐŸĐ±ŃŃĐČĐ”ĐœĐœŃĐ” ĐŒĐ”Ń Đ°ĐœĐžĐ·ĐŒŃ Đž ĐŸĐłŃĐ°Đ¶ĐŽĐ”ĐœĐžŃ, ĐșĐŸŃĐŸŃŃĐ” ĐżŃĐŸŃ ĐŸĐŽŃŃ ĐżĐŸĐŽ ĐżĐŸĐČĐ”ŃŃ ĐœĐŸŃŃŃŃ. ĐŃлО ĐČĐ°Ń ĐșĐ»ĐžĐ”ĐœŃ ĐŸŃĐżŃаĐČĐ»ŃĐ”Ń ŃĐžĐœŃ ŃĐŸĐœĐœĐŸĐ” ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐœĐ° ĐČĐ°Ń ŃĐ”ŃĐČĐ”Ń, а ĐČŃ ĐœĐ” ĐżĐŸĐ»ŃŃаДŃĐ” ĐŸŃĐČĐ”Ńа ĐČ ŃĐ”ŃĐ”ĐœĐžĐ” ĐżŃŃĐž ŃĐ”ĐșŃĐœĐŽ, ĐżŃĐŸŃĐ”ŃŃ ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐžŃ ŃŃĐœĐșŃОО call/2заĐČĐ”ŃŃаДŃŃŃ. ĐŃ ĐŒĐŸĐ¶Đ”ŃĐ” пДŃĐ”ĐŸĐżŃДЎДлОŃŃ ŃŃĐŸ, ĐžŃĐżĐŸĐ»ŃĐ·ŃŃ gen_server:call(Name, Message, Timeout)Đ·ĐœĐ°ŃĐ”ĐœĐžĐ” TimeoutĐČ ĐŒĐžĐ»Đ»ĐžŃĐ”ĐșŃĐœĐŽĐ°Ń ĐžĐ»Đž аŃĐŸĐŒ infinity.
ĐĐ”ŃĐČĐŸĐœĐ°ŃалŃĐœĐŸ ĐŒĐ”Ń Đ°ĐœĐžĐ·ĐŒ ŃаĐčĐŒ-аŃŃа бŃĐ» ĐČĐČĐ”ĐŽĐ”Đœ ĐŽĐ»Ń Đ·Đ°ŃĐžŃŃ ĐŸŃ ĐČĐ·Đ°ĐžĐŒĐŸĐ±Đ»ĐŸĐșĐžŃĐŸĐČĐŸĐș, гаŃĐ°ĐœŃĐžŃŃŃ, ŃŃĐŸ ŃĐ”ŃĐČĐ”ŃŃ, ĐșĐŸŃĐŸŃŃĐ” ŃĐ»ŃŃаĐčĐœĐŸ Đ·ĐČĐŸĐœŃŃ ĐŽŃŃĐł ĐŽŃŃĐłŃ, ĐżĐŸ ŃĐŒĐŸĐ»ŃĐ°ĐœĐžŃ Đ·Đ°ĐČĐ”ŃŃаŃŃŃŃ ĐżĐŸŃлД ŃаĐčĐŒ-аŃŃа. ĐаŃĐ”ĐŒ ĐŸŃŃлДжОĐČаДŃŃŃ ĐŸŃŃĐ”Ń ĐŸ ŃĐ±ĐŸĐ”, ŃŃĐŸ ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ĐŸŃлаЎОŃŃ Đž ĐžŃĐżŃаĐČĐžŃŃ ŃŃŃ ĐŸŃОбĐșŃ. ĐĐŸĐ»ŃŃĐžĐœŃŃĐČĐŸ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč бŃĐŽŃŃ ĐœĐŸŃĐŒĐ°Đ»ŃĐœĐŸ ŃĐ°Đ±ĐŸŃаŃŃ Ń ĐżŃŃĐžŃĐ”ĐșŃĐœĐŽĐœŃĐŒ ŃаĐčĐŒĐ°ŃŃĐŸĐŒ, ĐœĐŸ ĐżŃĐž ĐŸŃĐ”ĐœŃ Đ±ĐŸĐ»ŃŃĐžŃ ĐœĐ°ĐłŃŃĐ·ĐșĐ°Ń ĐČĐ°ĐŒ ĐŒĐŸĐ¶Đ”Ń ĐżĐŸŃŃĐ”Đ±ĐŸĐČаŃŃŃŃ Đ±ĐŸĐ»Đ”Đ” ŃĐŸĐœĐșĐ°Ń ĐœĐ°ŃŃŃĐŸĐčĐșа ŃŃĐŸĐłĐŸ Đ·ĐœĐ°ŃĐ”ĐœĐžŃ Đž, ĐČĐŸĐ·ĐŒĐŸĐ¶ĐœĐŸ, ЎажД Đ”ĐłĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžĐ” infinity; ŃŃĐŸŃ ĐČŃĐ±ĐŸŃ Đ·Đ°ĐČĐžŃĐžŃ ĐŸŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ. ĐĐ”ŃŃ ĐșŃĐžŃĐžŃĐ”ŃĐșĐžĐč ĐșĐŸĐŽ ĐČ Erlang/OTP ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń infinity. Đ ĐșĐŸĐŽĐ” Riak, ĐČ Đ·Đ°ĐČĐžŃĐžĐŒĐŸŃŃĐž ĐŸŃ ĐŒĐ”ŃŃĐŸĐżĐŸĐ»ĐŸĐ¶Đ”ĐœĐžŃ, ĐŽĐ»Ń ŃаĐčĐŒĐ°ŃŃа ĐžŃĐżĐŸĐ»ŃĐ·ŃŃŃŃŃ ŃĐ°Đ·ĐœŃĐ” Đ·ĐœĐ°ŃĐ”ĐœĐžŃ: infinityŃаŃŃĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ŃŃŃ ĐŒĐ”Đ¶ĐŽŃ ŃĐČŃĐ·Đ°ĐœĐœŃĐŒĐž ĐČĐœŃŃŃĐ”ĐœĐœĐžĐŒĐž ĐșĐŸĐŒĐżĐŸĐœĐ”ĐœŃĐ°ĐŒĐž, а Đ·ĐœĐ°ŃĐ”ĐœĐžĐ” Timeout, Đ·Đ°ĐŽĐ°ĐœĐœĐŸĐ” ĐżĐŸĐ»ŃĐ·ĐŸĐČаŃДлŃŃĐșĐžĐŒ паŃĐ°ĐŒĐ”ŃŃĐŸĐŒ, ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ŃŃŃ ĐČ ŃĐ”Ń ŃĐ»ŃŃаŃŃ , ĐșĐŸĐłĐŽĐ° ĐșĐ»ĐžĐ”ĐœŃŃĐșĐŸĐ” ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ”, ĐČĐ·Đ°ĐžĐŒĐŸĐŽĐ”ĐčŃŃĐČŃŃŃДД Ń Riak, ŃĐșĐ°Đ·Đ°Đ»ĐŸ, ŃŃĐŸ ĐŸĐżĐ”ŃаŃĐžŃ ĐžĐŒĐ”Đ”Ń ŃаĐčĐŒ-аŃŃ.
ĐŃĐž ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžĐž ŃŃĐœĐșŃОО gen_server:call/2ĐŽŃŃгОД ĐŒĐ”ŃŃ Đ·Đ°ŃĐžŃŃ ĐŸĐ±ŃабаŃŃĐČаŃŃ ŃĐ»ŃŃаĐč, ĐșĐŸĐłĐŽĐ° ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐŸŃĐżŃаĐČĐ»ŃĐ”ŃŃŃ ĐœĐ° ĐœĐ”ŃŃŃĐ”ŃŃĐČŃŃŃĐžĐč ŃĐ”ŃĐČĐ”Ń, Đž ŃĐ»ŃŃаĐč, ĐșĐŸĐłĐŽĐ° ŃĐ”ŃĐČĐ”Ń ĐČŃŃ ĐŸĐŽĐžŃ ĐžĐ· ŃŃŃĐŸŃ ĐżĐ”ŃДЎ ĐŸŃĐżŃаĐČĐșĐŸĐč ĐŸĐ±ŃаŃĐœĐŸ ŃĐČĐŸĐ”ĐłĐŸ ĐŸŃĐČĐ”Ńа. Đ ĐŸĐ±ĐŸĐžŃ ŃĐ»ŃŃаŃŃ ĐČŃĐ·ŃĐČаŃŃĐžĐč ĐżŃĐŸŃĐ”ŃŃ ĐŸŃŃĐ°ĐœĐŸĐČĐžŃŃŃ. Р«ŃĐžŃŃĐŸĐŒÂ» ĐŃĐ»Đ°ĐœĐłĐ” ĐŸŃĐżŃаĐČĐșа ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ, ĐșĐŸŃĐŸŃĐŸĐ” ĐœĐžĐșĐŸĐłĐŽĐ° ĐœĐ” ĐŸĐ±ŃабаŃŃĐČаДŃŃŃ (ŃĐŸĐżĐŸŃŃаĐČĐ»Đ”ĐœĐžĐ” Ń ĐŸĐ±ŃазŃĐŸĐŒ) ĐČ ĐżŃĐ”ĐŽĐ»ĐŸĐ¶Đ”ĐœĐžĐž ĐżŃĐžĐ”ĐŒĐ°, ŃĐČĐ»ŃĐ”ŃŃŃ ĐŸŃОбĐșĐŸĐč, ĐșĐŸŃĐŸŃĐ°Ń ĐŒĐŸĐ¶Đ”Ń ĐČŃĐ·ĐČаŃŃ ŃŃĐ”ŃĐșŃ ĐżĐ°ĐŒŃŃĐž. ЧŃĐŸĐ±Ń ĐżŃĐ”ĐŸĐŽĐŸĐ»Đ”ŃŃ ŃŃŃ ĐżŃĐŸĐ±Đ»Đ”ĐŒŃ, Riak ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń ĐŽĐČĐ” ŃĐ°Đ·ĐœŃĐ” ŃŃŃаŃДгОО, ĐșĐ°Đ¶ĐŽĐ°Ń ĐžĐ· ĐșĐŸŃĐŸŃŃŃ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń Â«ĐŸĐ±ŃĐ”ĐŒĐœŃД» ĐżŃĐ”ĐŽĐ»ĐŸĐ¶Đ”ĐœĐžŃ ŃĐŸĐżĐŸŃŃаĐČĐ»Đ”ĐœĐžŃ. Đ ĐŒĐ”ŃŃĐ°Ń , гЎД ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐŒĐŸĐ¶Đ”Ń Đ±ŃŃŃ ĐŸŃĐżŃаĐČĐ»Đ”ĐœĐŸ ĐżĐŸĐ»ŃĐ·ĐŸĐČаŃĐ”Đ»Đ”ĐŒ, ĐœĐ”ŃаŃĐżĐŸĐ·ĐœĐ°ĐœĐœĐŸĐ” ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐŒĐŸĐ¶Đ”Ń Đ±ŃŃŃ ĐœĐ”Đ·Đ°ĐŒĐ”ŃĐœĐŸ забŃŃĐŸ. ĐŃлО ŃаĐșĐŸĐ” ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐŒĐŸĐ¶Đ”Ń ĐżŃĐžĐčŃĐž ŃĐŸĐ»ŃĐșĐŸ ĐŸŃ ĐČĐœŃŃŃĐ”ĐœĐœĐžŃ ĐșĐŸĐŒĐżĐŸĐœĐ”ĐœŃĐŸĐČ Riak, ŃŃĐŸŃ ŃĐ»ŃŃаĐč ŃŃĐžŃаДŃŃŃ ĐŸŃОбĐșĐŸĐč, ĐșĐŸŃĐŸŃĐ°Ń Đ·Đ°ŃĐ”ĐŒ ĐČŃĐ·ŃĐČĐ°Đ”Ń ĐČĐœŃŃŃĐ”ĐœĐœĐžĐč ĐŸŃŃĐ”Ń ĐŸ ŃĐ±ĐŸĐ”, ĐżŃДЎŃĐżŃДжЎаŃŃĐžĐč ĐŸĐ± ĐŸŃОбĐșĐ”, Đž пДŃДзагŃŃĐ·ĐșŃ ŃĐ°Đ±ĐŸŃĐ”ĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа, ĐșĐŸŃĐŸŃŃĐč Đ”ĐłĐŸ ĐżĐŸĐ»ŃŃОл.
ĐĐ”ŃДЎаŃа аŃĐžĐœŃ ŃĐŸĐœĐœŃŃ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč ŃĐ°Đ±ĐŸŃĐ°Đ”Ń ŃаĐșĐžĐŒ жД ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ. ĐĄĐŸĐŸĐ±ŃĐ”ĐœĐžŃ ĐŸŃĐżŃаĐČĐ»ŃŃŃŃŃ Đ°ŃĐžĐœŃ ŃĐŸĐœĐœĐŸ ĐœĐ° ĐŸĐ±ŃĐžĐč ŃĐ”ŃĐČĐ”Ń Đž ĐŸĐ±ŃабаŃŃĐČаŃŃŃŃ ŃŃĐœĐșŃОДĐč ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа handle_cast/2. Đ€ŃĐœĐșŃĐžŃ ĐŽĐŸĐ»Đ¶ĐœĐ° ĐČĐŸĐ·ĐČŃаŃаŃŃ ĐșĐŸŃŃДж ĐČОЎа {reply, NewState}. ĐŃĐžĐœŃ ŃĐŸĐœĐœŃĐ” ĐČŃĐ·ĐŸĐČŃ ĐžŃĐżĐŸĐ»ŃĐ·ŃŃŃŃŃ, ĐșĐŸĐłĐŽĐ° ĐŸŃĐČĐ”Ń ŃĐ”ŃĐČĐ”Ńа ĐœĐ” ŃŃДбŃĐ”ŃŃŃ Đž ŃŃŃĐ”ŃŃĐČŃĐ”Ń ĐœĐ”Đ±ĐŸĐ»ŃŃĐŸĐč ŃĐžŃĐș ŃĐŸĐ·ĐŽĐ°ĐœĐžŃ Đ±ĐŸĐ»ŃŃĐ”ĐłĐŸ ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČа ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč, ŃĐ”ĐŒ ŃĐ”ŃĐČĐ”Ń ĐŒĐŸĐ¶Đ”Ń ĐŸĐ±ŃĐ°Đ±ĐŸŃаŃŃ. Đ ŃĐ”Ń ŃĐ»ŃŃаŃŃ , ĐșĐŸĐłĐŽĐ° ĐŸŃĐČĐ”Ń ĐœĐ” ĐŸĐ±ŃзаŃĐ”Đ»Đ”Đœ, ĐœĐŸ ĐŒŃ Ń ĐŸŃĐžĐŒ ĐŽĐŸĐ¶ĐŽĐ°ŃŃŃŃ ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșĐž ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ, ĐżŃДжЎД ŃĐ”ĐŒ ĐżĐŸĐČŃĐŸŃĐœĐŸ пДŃДЎаĐČаŃŃ ĐœĐŸĐČŃĐč запŃĐŸŃ, ĐŒŃ Đ±ŃĐŽĐ”ĐŒ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ŃŃĐœĐșŃĐžŃ gen_server:call/2, ĐșĐŸŃĐŸŃĐ°Ń ĐČĐŸĐ·ĐČŃаŃĐ°Đ”Ń Đ°ŃĐŸĐŒ okĐŸĐ±ŃаŃĐœĐŸ. ĐŃДЎŃŃаĐČŃŃĐ” ŃДбД ĐżŃĐŸŃĐ”ŃŃ, ĐșĐŸŃĐŸŃŃĐč ĐłĐ”ĐœĐ”ŃĐžŃŃĐ”Ń Đ·Đ°ĐżĐžŃĐž Đ±Đ°Đ·Ń ĐŽĐ°ĐœĐœŃŃ Ń Đ±ĐŸĐ»ŃŃĐ”Đč ŃĐșĐŸŃĐŸŃŃŃŃ, ŃĐ”ĐŒ ĐŒĐŸĐ¶Đ”Ń ĐżĐŸŃŃДблŃŃŃ Riak. ĐŃĐżĐŸĐ»ŃĐ·ŃŃ Đ°ŃĐžĐœŃ ŃĐŸĐœĐœŃĐ” ĐČŃĐ·ĐŸĐČŃ, ĐŒŃ ŃĐžŃĐșŃĐ”ĐŒ Đ·Đ°ĐżĐŸĐ»ĐœĐžŃŃ ĐżĐŸŃŃĐŸĐČŃĐč ŃŃĐžĐș ĐżŃĐŸŃĐ”ŃŃа Đž, ŃĐ»Đ”ĐŽĐŸĐČаŃДлŃĐœĐŸ, ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ĐČŃŃ ĐżĐ°ĐŒŃŃŃ Ńзла Erlang. ĐĐ»Ń ŃДгŃлОŃĐŸĐČĐ°ĐœĐžŃ ĐœĐ°ĐłŃŃĐ·ĐșĐž Riak ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń ŃĐČĐŸĐčŃŃĐČа ŃĐ”ŃОалОзаŃОО ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč ŃĐžĐœŃ ŃĐŸĐœĐœŃŃ ĐČŃĐ·ĐŸĐČĐŸĐČ gen_server, ĐșĐŸŃĐŸŃŃĐ” ĐŸĐ±ŃабаŃŃĐČаŃŃ ŃлДЎŃŃŃĐžĐč запŃĐŸŃ ŃĐŸĐ»ŃĐșĐŸ ĐżĐŸŃлД ĐżĐŸĐ»ĐœĐŸĐč ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșĐž ĐżŃДЎŃĐŽŃŃĐ”ĐłĐŸ. ĐŃĐŸŃ ĐżĐŸĐŽŃ ĐŸĐŽ ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ĐžĐ·Đ±Đ”Đ¶Đ°ŃŃ ĐŽĐŸĐ±Đ°ĐČĐ»Đ”ĐœĐžŃ ĐșĐŸĐŽĐ° ŃĐżŃаĐČĐ»Đ”ĐœĐžŃ ĐżĐ”ŃДгŃŃĐ·ĐșĐŸĐč: ĐżĐŸĐŒĐžĐŒĐŸ ĐŸĐ±Đ”ŃпДŃĐ”ĐœĐžŃ ĐżĐ°ŃĐ°Đ»Đ»Đ”Đ»ĐžĐ·ĐŒĐ°, ĐżŃĐŸŃĐ”ŃŃŃ gen_serverĐŒĐŸĐłŃŃ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃŃŃ ĐŽĐ»Ń ĐČĐČĐ”ĐŽĐ”ĐœĐžŃ ŃĐŸŃĐ”Đș ŃĐ”ŃОалОзаŃОО.
15.3.5. ĐŃĐșĐ»ŃŃĐ”ĐœĐžĐ” ŃĐ”ŃĐČĐ”Ńа ĐаĐș ĐŸŃŃĐ°ĐœĐŸĐČĐžŃŃ ŃĐ”ŃĐČĐ”Ń? Đ ŃŃĐœĐșŃĐžŃŃ ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа handle_call/3Đž handle_cast/2ĐČĐŒĐ”ŃŃĐŸ ĐČĐŸĐ·ĐČŃаŃа {reply, Reply, NewState}ОлО {noreply, NewState}ĐŒĐŸĐ¶ĐœĐŸ ĐČĐ”ŃĐœŃŃŃ {stop, Reason, Reply, NewState}ОлО ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČĐ”ĐœĐœĐŸ {stop, Reason, NewState}. ЧŃĐŸ-ŃĐŸ ĐŽĐŸĐ»Đ¶ĐœĐŸ ĐČŃĐ·ĐČаŃŃ ŃŃĐŸ ĐČĐŸĐ·ĐČŃаŃĐ°Đ”ĐŒĐŸĐ” Đ·ĐœĐ°ŃĐ”ĐœĐžĐ”, ŃаŃŃĐŸ ŃŃĐŸ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐŸ заĐČĐ”ŃŃĐ”ĐœĐžĐž ŃĐ°Đ±ĐŸŃŃ, ĐŸŃĐżŃаĐČĐ»Đ”ĐœĐœĐŸĐ” ĐœĐ° ŃĐ”ŃĐČĐ”Ń. ĐаĐș ŃĐŸĐ»ŃĐșĐŸ ĐșĐŸŃŃДж ĐŸŃŃĐ°ĐœĐŸĐČĐșĐž, ŃĐŸĐŽĐ”ŃжаŃĐžĐč ReasonĐž ĐżĐŸĐ»ŃŃĐ”Đœ State, ĐŸĐ±ŃĐžĐč ĐșĐŸĐŽ ĐČŃĐżĐŸĐ»ĐœŃĐ”Ń ŃŃĐœĐșŃĐžŃ ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа terminate(Reason, State).
ĐŃа ŃŃĐœĐșŃĐžŃ terminateâ Đ»ŃŃŃДД ĐŒĐ”ŃŃĐŸ ĐŽĐ»Ń ĐČŃŃаĐČĐșĐž ĐșĐŸĐŽĐ° ĐŸŃĐžŃŃĐșĐž ŃĐ”ŃĐČĐ”Ńа State Đž Đ»ŃбŃŃ ĐŽŃŃĐłĐžŃ ĐżĐŸŃŃĐŸŃĐœĐœŃŃ ĐŽĐ°ĐœĐœŃŃ , ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ĐŒŃŃ ŃĐžŃŃĐ”ĐŒĐŸĐč. Đ ĐœĐ°ŃĐ”ĐŒ ĐżŃĐžĐŒĐ”ŃĐ” ĐŒŃ ĐŸŃĐżŃаĐČĐ»ŃĐ”ĐŒ ŃĐžĐœĐ°Đ»ŃĐœĐŸĐ” ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐœĐ°ŃĐžĐŒ ŃĐ·Đ»Đ°ĐŒ, ŃŃĐŸĐ±Ń ĐŸĐœĐž Đ·ĐœĐ°Đ»Đž, ŃŃĐŸ ŃŃĐŸŃ ĐŒĐŸĐœĐžŃĐŸŃ Ńзла ŃДпДŃŃ ĐŸŃŃĐ°ĐœĐŸĐČĐ»Đ”Đœ. Đ ŃŃĐŸĐŒ ĐżŃĐžĐŒĐ”ŃĐ” пДŃĐ”ĐŒĐ”ĐœĐœĐ°Ń StateŃĐŸĐŽĐ”ŃĐ¶ĐžŃ Đ·Đ°ĐżĐžŃŃ Ń ĐżĐŸĐ»ŃĐŒĐž statusĐž peers :
заĐČĐ”ŃŃĐ”ĐœĐžŃ(_Reason, State) -> %% ĐĄĐŸĐŸĐ±ŃĐžŃĐ” ĐœĐ°ŃĐžĐŒ ŃĐ·Đ»Đ°ĐŒ, ŃŃĐŸ ĐŒŃ ĐŸŃĐșĐ»ŃŃĐ°Đ”ĐŒ ŃĐžŃĐŸĐșĐŸĐČĐ”ŃаŃДлŃĐœŃŃ ŃаŃŃŃĐ»ĐșŃ(State#state.peers, State#state {status = down }). ĐŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžĐ” ŃŃĐœĐșŃĐžĐč ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ ĐČ ĐșаŃĐ”ŃŃĐČĐ” Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”ŃĐœŃŃ ŃŃĐœĐșŃĐžĐč Đž ĐČŃĐ·ĐŸĐČ ĐžŃ ĐžĐ· ĐŽŃŃĐłĐžŃ ĐŒĐ”ŃŃ ĐżŃĐŸĐłŃĐ°ĐŒĐŒŃ â ĐŸŃĐ”ĐœŃ ĐżĐ»ĐŸŃ Đ°Ń ĐżŃаĐșŃĐžĐșа. ĐапŃĐžĐŒĐ”Ń, ĐœĐžĐșĐŸĐłĐŽĐ° ĐœĐ” ŃлДЎŃĐ”Ń ĐČŃĐ·ŃĐČаŃŃ riak_core_node_watcher:init(Args)Оз ĐŽŃŃĐłĐŸĐłĐŸ ĐŒĐŸĐŽŃĐ»Ń, ŃŃĐŸĐ±Ń ĐżĐŸĐ»ŃŃĐžŃŃ ĐžŃŃ ĐŸĐŽĐœĐŸĐ” ŃĐŸŃŃĐŸŃĐœĐžĐ” ĐŽĐ°ĐœĐœŃŃ ŃĐžĐșла. ĐŃĐŸ ĐœĐ”ĐŸĐ±Ń ĐŸĐŽĐžĐŒĐŸ ŃЎДлаŃŃ ĐżĐŸŃŃДЎŃŃĐČĐŸĐŒ ŃĐžĐœŃ ŃĐŸĐœĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ŃĐ”ŃĐČĐ”Ńа. ĐŃĐ·ĐŸĐČŃ ŃŃĐœĐșŃĐžĐč ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ĐŽĐŸĐ»Đ¶ĐœŃ ĐžŃŃ ĐŸĐŽĐžŃŃ ŃĐŸĐ»ŃĐșĐŸ Оз ĐŒĐŸĐŽŃлДĐč Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”ĐșĐž ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ, ĐČŃĐ·ĐŸĐČŃ, ĐČĐŸĐ·ĐœĐžĐșаŃŃОД ĐČ ŃДзŃĐ»ŃŃаŃĐ” ŃĐŸĐ±ŃŃĐžŃ ĐČ ŃĐžŃŃĐ”ĐŒĐ”, Đž ĐœĐžĐșĐŸĐłĐŽĐ° ĐœĐ”ĐżĐŸŃŃДЎŃŃĐČĐ”ĐœĐœĐŸ ĐŸŃ ĐżĐŸĐ»ŃĐ·ĐŸĐČаŃДлŃ.
15.4. ĐŃŃĐłĐŸĐ” Â«ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” ŃĐ°Đ±ĐŸŃĐœĐžĐșĐŸĐČ» ĐĐŸĐ»ŃŃĐŸĐ” ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČĐŸ ĐŽŃŃĐłĐžŃ Â«ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐč ŃĐ°Đ±ĐŸŃĐœĐžĐșĐŸĐČ» ĐŒĐŸĐ¶Đ”Ń Đ±ŃŃŃ ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐŸ Đž ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐŸ ĐœĐ° ĐŸŃĐœĐŸĐČĐ” ŃĐ”Ń Đ¶Đ” ОЎДĐč.
15.4.1. ĐĐŸĐœĐ”ŃĐœŃĐ” аĐČŃĐŸĐŒĐ°ŃŃ ĐĐŸĐœĐ”ŃĐœŃĐ” аĐČŃĐŸĐŒĐ°ŃŃ (FSM), ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐœŃĐ” ĐČ ĐŒĐŸĐŽŃлД ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ gen_fsm, ŃĐČĐ»ŃŃŃŃŃ ĐČĐ°Đ¶ĐœĐ”ĐčŃĐžĐŒ ĐșĐŸĐŒĐżĐŸĐœĐ”ĐœŃĐŸĐŒ ĐżŃĐž ŃДалОзаŃОО ŃŃĐ”ĐșĐŸĐČ ĐżŃĐŸŃĐŸĐșĐŸĐ»ĐŸĐČ ĐČ ŃДлДĐșĐŸĐŒĐŒŃĐœĐžĐșаŃĐžĐŸĐœĐœŃŃ ŃĐžŃŃĐ”ĐŒĐ°Ń (ĐŸĐ±Đ»Đ°ŃŃŃ, ĐŽĐ»Ń ĐșĐŸŃĐŸŃĐŸĐč бŃĐ» ĐžĐ·ĐŸĐ±ŃĐ”ŃĐ”Đœ Erlang). ĐĄĐŸŃŃĐŸŃĐœĐžŃ ĐŸĐżŃДЎДлŃŃŃŃŃ ĐșаĐș ŃŃĐœĐșŃОО ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа, ĐœĐ°Đ·ĐČĐ°ĐœĐœŃĐ” ĐČ ŃĐ”ŃŃŃ ŃĐŸŃŃĐŸŃĐœĐžŃ Đž ĐČĐŸĐ·ĐČŃаŃаŃŃОД ĐșĐŸŃŃДж, ŃĐŸĐŽĐ”ŃжаŃĐžĐč ŃлДЎŃŃŃОД StateĐž ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐœŃĐ” ĐŽĐ°ĐœĐœŃĐ” ŃĐžĐșла. ĐŃ ĐŒĐŸĐ¶Đ”ŃĐ” ĐŸŃĐżŃаĐČĐ»ŃŃŃ ŃĐŸĐ±ŃŃĐžŃ ĐČ ŃŃĐž ŃĐŸŃŃĐŸŃĐœĐžŃ ŃĐžĐœŃ ŃĐŸĐœĐœĐŸ ОлО аŃĐžĐœŃ ŃĐŸĐœĐœĐŸ. ĐĐŸĐŽŃĐ»Ń ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ĐșĐŸĐœĐ”ŃĐœĐŸĐłĐŸ аĐČŃĐŸĐŒĐ°Ńа ŃаĐșжД ĐŽĐŸĐ»Đ¶Đ”Đœ ŃĐșŃĐżĐŸŃŃĐžŃĐŸĐČаŃŃ ŃŃĐ°ĐœĐŽĐ°ŃŃĐœŃĐ” ŃŃĐœĐșŃОО ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа, а ĐžĐŒĐ”ĐœĐœĐŸ init, terminateĐž handle_info.
ĐŃĐ”ĐČĐžĐŽĐœĐŸ, ŃŃĐŸ ĐșĐŸĐœĐ”ŃĐœŃĐ” аĐČŃĐŸĐŒĐ°ŃŃ ĐœĐ” ŃĐČĐ»ŃŃŃŃŃ ŃпДŃĐžŃĐžŃĐœŃĐŒĐž ĐŽĐ»Ń ŃДлДĐșĐŸĐŒĐŒŃĐœĐžĐșаŃĐžĐč. Đ Riak ĐŸĐœĐž ĐžŃĐżĐŸĐ»ŃĐ·ŃŃŃŃŃ ĐČ ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșĐ°Ń Đ·Đ°ĐżŃĐŸŃĐŸĐČ. ĐĐŸĐłĐŽĐ° ĐșĐ»ĐžĐ”ĐœŃ ĐŸŃĐżŃаĐČĐ»ŃĐ”Ń Đ·Đ°ĐżŃĐŸŃ ŃОпа get, putОлО delete, ĐżŃĐŸŃĐ”ŃŃ, ŃĐ»ŃŃаŃŃĐžĐč ŃŃĐŸŃ Đ·Đ°ĐżŃĐŸŃ, ŃĐŸĐ·ĐŽĐ°ŃŃ ĐœĐŸĐČŃĐč ĐżŃĐŸŃĐ”ŃŃ, ŃДалОзŃŃŃĐžĐč gen_fsmŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃŃŃДД ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”. ĐапŃĐžĐŒĐ”Ń, riak_kv_get_fsmĐŸŃĐČĐ”ŃĐ°Đ”Ń Đ·Đ° ĐŸĐ±ŃĐ°Đ±ĐŸŃĐșŃ Đ·Đ°ĐżŃĐŸŃа get, ĐżĐŸĐ»ŃŃĐ”ĐœĐžĐ” ĐŽĐ°ĐœĐœŃŃ Đž ĐČĐŸĐ·ĐČŃĐ°Ń ĐžŃ ĐșĐ»ĐžĐ”ĐœŃŃĐșĐŸĐŒŃ ĐżŃĐŸŃĐ”ŃŃŃ. ĐŃĐŸŃĐ”ŃŃ FSM ĐżŃĐŸŃ ĐŸĐŽĐžŃ ŃĐ”ŃДз ŃĐ°Đ·ĐœŃĐ” ŃĐŸŃŃĐŸŃĐœĐžŃ ĐČ Đ·Đ°ĐČĐžŃĐžĐŒĐŸŃŃĐž ĐŸŃ ŃĐŸĐłĐŸ, ĐŸĐżŃДЎДлŃĐ”Ń Đ»Đž ĐŸĐœ, Ń ĐșаĐșĐžŃ ŃĐ·Đ»ĐŸĐČ Đ·Đ°ĐżŃаŃĐžĐČаŃŃ ĐŽĐ°ĐœĐœŃĐ”, ĐŸŃĐżŃаĐČĐ»ŃĐ”Ń Đ»Đž ĐŸĐœ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃ ŃŃĐžĐŒ ŃĐ·Đ»Đ°ĐŒ Đž ĐżĐŸĐ»ŃŃĐ°Đ”Ń Đ»Đž ĐŸĐœ ĐŽĐ°ĐœĐœŃĐ” ĐČ ĐŸŃĐČĐ”Ń.
15.4.2. ĐĐ”ĐœĐ”ĐŽĐ¶Đ”ŃŃ ĐŒĐ”ŃĐŸĐżŃĐžŃŃĐžĐč ĐбŃĐ°Đ±ĐŸŃŃĐžĐșĐž ŃĐŸĐ±ŃŃĐžĐč â ŃŃĐŸ Đ”ŃĐ” ĐŸĐŽĐœĐŸ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”, ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐœĐŸĐ” ĐČ ĐŒĐŸĐŽŃлД gen_event. ĐĐŽĐ”Ń ŃĐŸŃŃĐŸĐžŃ ĐČ ŃĐŸĐŒ, ŃŃĐŸĐ±Ń ŃĐŸĐ·ĐŽĐ°ŃŃ ŃĐ”ĐœŃŃалŃĐœŃŃ ŃĐŸŃĐșŃ, ĐżŃĐžĐœĐžĐŒĐ°ŃŃŃŃ ŃĐŸĐ±ŃŃĐžŃ ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœĐŸĐłĐŸ ŃОпа. ĐĄĐŸĐ±ŃŃĐžŃ ĐŒĐŸĐłŃŃ ĐŸŃĐżŃаĐČĐ»ŃŃŃŃŃ ŃĐžĐœŃ ŃĐŸĐœĐœĐŸ ОлО аŃĐžĐœŃ ŃĐŸĐœĐœĐŸ, Đž ĐżŃĐž ĐžŃ ĐżĐŸĐ»ŃŃĐ”ĐœĐžĐž ĐżŃĐžĐŒĐ”ĐœŃĐ”ŃŃŃ Đ·Đ°ŃĐ°ĐœĐ”Đ” ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃĐč ĐœĐ°Đ±ĐŸŃ ĐŽĐ”ĐčŃŃĐČĐžĐč. ĐŃĐž ĐżĐŸĐ»ŃŃĐ”ĐœĐžĐž ŃĐŸĐ±ŃŃĐžŃ ĐŒŃ ĐŒĐŸĐ¶Đ”ĐŒ, ĐœĐ°ĐżŃĐžĐŒĐ”Ń, ĐŸŃŃлДЎОŃŃ Đ”ĐłĐŸ ĐČ ŃаĐčлД, ĐŸŃĐżŃаĐČĐžŃŃ ŃĐžĐłĐœĐ°Đ» ŃŃĐ”ĐČĐŸĐłĐž ĐČ ĐČОЎД SMS ОлО ĐŸĐ±ŃĐ”ĐŽĐžĐœĐžŃŃ Đ”ĐłĐŸ ĐČ ŃŃаŃĐžŃŃĐžĐșŃ. ĐĐ°Đ¶ĐŽĐŸĐ” Оз ŃŃĐžŃ ĐŽĐ”ĐčŃŃĐČĐžĐč ĐŸĐżŃДЎДлŃĐ”ŃŃŃ ĐČ ĐŸŃЎДлŃĐœĐŸĐŒ ĐŒĐŸĐŽŃлД ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ŃĐŸ ŃĐČĐŸĐžĐŒĐž ŃĐŸĐ±ŃŃĐČĐ”ĐœĐœŃĐŒĐž ĐŽĐ°ĐœĐœŃĐŒĐž ŃĐžĐșла, ŃĐŸŃ ŃĐ°ĐœŃĐ”ĐŒŃĐŒĐž ĐŒĐ”Đ¶ĐŽŃ ĐČŃĐ·ĐŸĐČĐ°ĐŒĐž. ĐбŃĐ°Đ±ĐŸŃŃĐžĐșĐž ĐŒĐŸĐ¶ĐœĐŸ ĐŽĐŸĐ±Đ°ĐČĐ»ŃŃŃ, ŃЎалŃŃŃ ĐžĐ»Đž ĐŸĐ±ĐœĐŸĐČĐ»ŃŃŃ ĐŽĐ»Ń ĐșĐ°Đ¶ĐŽĐŸĐłĐŸ ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșа ŃĐŸĐ±ŃŃĐžĐč. ĐŃаĐș, ĐœĐ° ĐżŃаĐșŃĐžĐșĐ” ĐŽĐ»Ń ĐșĐ°Đ¶ĐŽĐŸĐłĐŸ ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșа ŃĐŸĐ±ŃŃĐžĐč ĐŒĐŸĐ¶Đ”Ń Đ±ŃŃŃ ĐœĐ”ŃĐșĐŸĐ»ŃĐșĐŸ ĐŒĐŸĐŽŃлДĐč ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа, Đž ĐČ ŃĐ°Đ·ĐœŃŃ ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșĐ°Ń ĐŒĐŸĐłŃŃ ŃŃŃĐ”ŃŃĐČĐŸĐČаŃŃ ŃĐ°Đ·ĐœŃĐ” ŃĐșĐ·Đ”ĐŒĐżĐ»ŃŃŃ ŃŃĐžŃ ĐŒĐŸĐŽŃлДĐč. Đ ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșĐ°ĐŒ ĐŸŃĐœĐŸŃŃŃŃŃ ĐżŃĐŸŃĐ”ŃŃŃ, ĐżĐŸĐ»ŃŃаŃŃОД ŃĐžĐłĐœĐ°Đ»Ń ŃŃĐ”ĐČĐŸĐłĐž, ĐŸŃŃлДжОĐČĐ°Đ”ĐŒŃĐ” ĐŽĐ°ĐœĐœŃĐ” ĐČ ŃДалŃĐœĐŸĐŒ ĐČŃĐ”ĐŒĐ”ĐœĐž, ŃĐŸĐ±ŃŃĐžŃ, ŃĐČŃĐ·Đ°ĐœĐœŃĐ” Ń ŃĐŸĐ±ŃŃĐžŃĐŒĐž, ОлО ĐżŃĐŸŃŃŃĐ” жŃŃĐœĐ°Đ»Ń.
Đ Riak ĐŸĐŽĐœĐŸ Оз ĐżŃĐžĐŒĐ”ĐœĐ”ĐœĐžĐč ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ gen_event â ŃĐżŃаĐČĐ»Đ”ĐœĐžĐ” ĐżĐŸĐŽĐżĐžŃĐșĐ°ĐŒĐž ĐœĐ° «ĐșĐŸĐ»ŃŃĐ”ĐČŃĐ” ŃĐŸĐ±ŃŃОѻ, Ń. Đ”. ĐžĐ·ĐŒĐ”ĐœĐ”ĐœĐžŃ ŃĐ»Đ”ĐœŃŃĐČа ĐČ ŃĐ·Đ»Đ°Ń ĐžĐ»Đž ĐœĐ°Đ·ĐœĐ°ŃĐ”ĐœĐžŃ ŃĐ°Đ·ĐŽĐ”Đ»ĐŸĐČ ĐČ ĐșлаŃŃĐ”ŃĐ” Riak. ĐŃĐŸŃĐ”ŃŃŃ ĐœĐ° ŃзлД Riak ĐŒĐŸĐłŃŃ Đ·Đ°ŃДгОŃŃŃĐžŃĐŸĐČаŃŃ ŃŃĐœĐșŃĐžŃ ĐČ ŃĐșĐ·Đ”ĐŒĐżĐ»ŃŃĐ” riak_core_ring_events, ĐșĐŸŃĐŸŃĐ°Ń ŃДалОзŃĐ”Ń ĐŽĐ°ĐœĐœĐŸĐ” ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” gen_event. ĐĐŸĐłĐŽĐ° ŃĐ”ĐœŃŃалŃĐœŃĐč ĐżŃĐŸŃĐ”ŃŃ, ŃĐżŃаĐČĐ»ŃŃŃĐžĐč ĐșĐŸĐ»ŃŃĐŸĐŒ ŃŃĐŸĐłĐŸ Ńзла, ĐžĐ·ĐŒĐ”ĐœŃĐ”Ń Đ·Đ°ĐżĐžŃŃ ĐŸ ŃĐ»Đ”ĐœŃŃĐČĐ” ĐŽĐ»Ń ĐČŃĐ”ĐłĐŸ ĐșлаŃŃĐ”Ńа, ĐŸĐœ запŃŃĐșĐ°Đ”Ń ŃĐŸĐ±ŃŃОД, ĐșĐŸŃĐŸŃĐŸĐ” заŃŃаĐČĐ»ŃĐ”Ń ĐșажЎŃĐč ĐŒĐŸĐŽŃĐ»Ń ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ĐČŃĐ·ŃĐČаŃŃ Đ·Đ°ŃДгОŃŃŃĐžŃĐŸĐČĐ°ĐœĐœŃŃ ŃŃĐœĐșŃĐžŃ. йаĐșĐžĐŒ ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ, ŃазлОŃĐœŃĐŒ ŃаŃŃŃĐŒ Riak бŃĐŽĐ”Ń ĐżŃĐŸŃĐ” ŃДагОŃĐŸĐČаŃŃ ĐœĐ° ĐžĐ·ĐŒĐ”ĐœĐ”ĐœĐžŃ ĐČ Đ»ŃĐ±ĐŸĐč Оз ŃĐ”ĐœŃŃалŃĐœŃŃ ŃŃŃŃĐșŃŃŃ ĐŽĐ°ĐœĐœŃŃ Riak, ĐœĐ” ŃŃĐ»ĐŸĐ¶ĐœŃŃ ŃĐ”ĐœŃŃалŃĐœŃĐč ĐŒĐ”ĐœĐ”ĐŽĐ¶Đ”Ń ŃŃĐŸĐč ŃŃŃŃĐșŃŃŃŃ ĐŽĐ°ĐœĐœŃŃ .
ĐĐ°ĐžĐ±ĐŸĐ»Đ”Đ” ŃаŃĐżŃĐŸŃŃŃĐ°ĐœĐ”ĐœĐœŃĐ” ĐŒĐŸĐŽĐ”Đ»Đž ĐșĐŸĐœĐșŃŃĐ”ĐœŃОО Đž ĐŸĐ±ŃĐ”ĐœĐžŃ ŃĐżŃаĐČĐ»ŃŃŃŃŃ ĐŸĐŽĐœĐžĐŒ Оз ŃŃĐ”Ń ĐŸŃĐœĐŸĐČĐœŃŃ ŃĐžĐżĐŸĐČ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ, ĐșĐŸŃĐŸŃŃĐ” ĐŒŃ ŃĐŸĐ»ŃĐșĐŸ ŃŃĐŸ ĐżŃДЎŃŃаĐČОлО: gen_server, gen_fsmĐž gen_event. ĐĐŽĐœĐ°ĐșĐŸ ĐČ Đ±ĐŸĐ»ŃŃĐžŃ ŃĐžŃŃĐ”ĐŒĐ°Ń ŃĐŸ ĐČŃĐ”ĐŒĐ”ĐœĐ”ĐŒ ĐŒĐŸĐłŃŃ ĐČĐŸĐ·ĐœĐžĐșĐœŃŃŃ ŃĐ°Đ±Đ»ĐŸĐœŃ, ŃпДŃĐžŃĐžŃĐœŃĐ” ĐŽĐ»Ń ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ, Đž ĐżĐŸŃŃĐ”Đ±ĐŸĐČаŃŃ ŃĐŸĐ·ĐŽĐ°ĐœĐžŃ ĐœĐŸĐČĐŸĐłĐŸ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ. Riak ĐČĐșĐ»ŃŃĐ°Đ”Ń ŃаĐșĐŸĐ” ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”, riak_core_vnodeĐșĐŸŃĐŸŃĐŸĐ” ŃĐŸŃĐŒĐ°Đ»ĐžĐ·ŃĐ”Ń ŃĐżĐŸŃĐŸĐ± ŃДалОзаŃОО ĐČĐžŃŃŃалŃĐœĐŸĐłĐŸ Ńзла. ĐĐžŃŃŃалŃĐœŃĐ” ŃĐ·Đ»Ń â ŃŃĐŸ ĐŸŃĐœĐŸĐČĐœĐ°Ń Đ°Đ±ŃŃŃаĐșŃĐžŃ Ń ŃĐ°ĐœĐžĐ»ĐžŃа ĐČ Riak, ĐżŃĐ”ĐŽĐŸŃŃаĐČĐ»ŃŃŃĐ°Ń Đ”ĐŽĐžĐœŃĐč ĐžĐœŃĐ”ŃŃĐ”ĐčŃ ĐŸŃ Ń ŃĐ°ĐœĐžĐ»ĐžŃа «ĐșĐ»ŃŃ-Đ·ĐœĐ°ŃĐ”ĐœĐžĐ”Â» Đș ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃŃŃĐžĐŒ аĐČŃĐŸĐŒĐ°ŃĐ°ĐŒ. ĐĐœŃĐ”ŃŃĐ”ĐčŃ ĐŒĐŸĐŽŃĐ»Ń ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ĐŸĐżŃДЎДлŃĐ”ŃŃŃ Ń ĐżĐŸĐŒĐŸŃŃŃ ŃŃĐœĐșŃОО behavior_info/1ŃлДЎŃŃŃĐžĐŒ ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ:
Behavior_info(ĐŸĐ±ŃаŃĐœŃĐ” ĐČŃĐ·ĐŸĐČŃ) -> [{init,1}, {handle_command,3}, {handoff_starting,2}, {handoff_cancelled,1}, {handoff_finished,2}, {handle_handoff_command,3}, {handle_handoff_data,2}, { encode_handoff_item,2}, {is_empty,1}, {terminate,2}, {delete,1}]; Đ ŃŃĐŸĐŒ ĐżŃĐžĐŒĐ”ŃĐ” ĐżĐŸĐșĐ°Đ·Đ°ĐœĐ° behavior_info/1ŃŃĐœĐșŃĐžŃ riak_core_vnode. ХпОŃĐŸĐș ĐșĐŸŃŃДжДĐč {CallbackFunction, Arity} ĐŸĐżŃДЎДлŃĐ”Ń ĐșĐŸĐœŃŃаĐșŃ, ĐșĐŸŃĐŸŃŃĐč ĐŽĐŸĐ»Đ¶Đ”Đœ ŃĐŸĐ±Đ»ŃЎаŃŃ ĐŒĐŸĐŽŃĐ»Ń ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа. ĐĐŸĐœĐșŃĐ”ŃĐœŃĐ” ŃДалОзаŃОО ĐČĐžŃŃŃалŃĐœŃŃ ŃĐ·Đ»ĐŸĐČ ĐŽĐŸĐ»Đ¶ĐœŃ ŃĐșŃĐżĐŸŃŃĐžŃĐŸĐČаŃŃ ŃŃĐž ŃŃĐœĐșŃОО, ĐžĐœĐ°ŃĐ” ĐșĐŸĐŒĐżĐžĐ»ŃŃĐŸŃ ĐČŃЎаŃŃ ĐżŃДЎŃĐżŃĐ”Đ¶ĐŽĐ”ĐœĐžĐ”. Đ Đ”Đ°Đ»ĐžĐ·ĐŸĐČаŃŃ ŃĐŸĐ±ŃŃĐČĐ”ĐœĐœĐŸĐ” ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” OTP ĐŸŃĐœĐŸŃĐžŃДлŃĐœĐŸ ĐżŃĐŸŃŃĐŸ. ĐĐŸĐŒĐžĐŒĐŸ ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐžŃ ĐČаŃĐžŃ ŃŃĐœĐșŃĐžĐč ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа, ĐžŃĐżĐŸĐ»ŃĐ·ŃŃ ĐŒĐŸĐŽŃлО proc_libĐž sys ĐŒĐŸĐŽŃлО, ĐČŃ ĐŽĐŸĐ»Đ¶ĐœŃ Đ·Đ°ĐżŃŃĐșаŃŃ ĐžŃ Ń ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃĐŒĐž ŃŃĐœĐșŃĐžŃĐŒĐž, ŃĐżŃаĐČĐ»ŃŃŃ ŃĐžŃŃĐ”ĐŒĐœŃĐŒĐž ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃĐŒĐž Đž ĐŸŃŃлДжОĐČаŃŃ ŃĐŸĐŽĐžŃДлŃŃĐșĐžĐč ĐżŃĐŸŃĐ”ŃŃ ĐœĐ° ŃĐ»ŃŃаĐč, Đ”ŃлО ĐŸĐœ заĐČĐ”ŃŃĐžŃŃŃ.
15.5. Đ ŃĐșĐŸĐČĐŸĐŽĐžŃДлО ĐаЎаŃа ŃŃпДŃĐČĐžĐ·ĐŸŃа ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ â ŃлДЎОŃŃ Đ·Đ° ŃĐČĐŸĐžĐŒĐž ĐŽĐŸŃĐ”ŃĐœĐžĐŒĐž ĐżŃĐŸŃĐ”ŃŃĐ°ĐŒĐž Đž ĐżĐŸ заŃĐ°ĐœĐ”Đ” ĐœĐ°ŃŃŃĐŸĐ”ĐœĐœŃĐŒ ĐżŃаĐČĐžĐ»Đ°ĐŒ ĐČŃĐżĐŸĐ»ĐœŃŃŃ ĐœĐ”ĐŸĐ±Ń ĐŸĐŽĐžĐŒŃĐ” ĐŽĐ”ĐčŃŃĐČĐžŃ ĐżŃĐž ĐžŃ Đ·Đ°ĐČĐ”ŃŃĐ”ĐœĐžĐž. ĐĐ”ŃĐž ĐŒĐŸĐłŃŃ Đ±ŃŃŃ ĐșаĐș ĐŽŃŃĐłĐžĐŒĐž ŃŃĐșĐŸĐČĐŸĐŽĐžŃДлŃĐŒĐž, ŃаĐș Đž ŃĐ°Đ±ĐŸŃĐœĐžĐșĐ°ĐŒĐž ĐżŃĐŸŃĐ”ŃŃа. ĐŃĐŸ ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ĐșĐŸĐŽŃ Riak ŃĐŸŃŃĐ”ĐŽĐŸŃĐŸŃĐžŃŃŃŃ ĐœĐ° ĐżŃаĐČОлŃĐœĐŸĐŒ ŃĐ»ŃŃаД, ŃŃĐŸ ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ŃŃпДŃĐČĐžĐ·ĐŸŃŃ ĐŸĐ±ŃабаŃŃĐČаŃŃ ĐŸŃОбĐșĐž ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐœĐŸĐłĐŸ ĐŸĐ±Đ”ŃпДŃĐ”ĐœĐžŃ, ĐżĐŸĐČŃĐ”Đ¶ĐŽĐ”ĐœĐœŃĐ” ĐŽĐ°ĐœĐœŃĐ” ОлО ŃĐžŃŃĐ”ĐŒĐœŃĐ” ĐŸŃОбĐșĐž Đ”ĐŽĐžĐœĐŸĐŸĐ±ŃĐ°Đ·ĐœĐŸ ĐČĐŸ ĐČŃĐ”Đč ŃĐžŃŃĐ”ĐŒĐ”. Đ ĐŒĐžŃĐ” Erlang ŃŃĐŸŃ ĐœĐ”Đ·Đ°ŃĐžŃĐ”ĐœĐœŃĐč ĐżĐŸĐŽŃ ĐŸĐŽ Đș ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃĐŸĐČĐ°ĐœĐžŃ ŃаŃŃĐŸ ĐœĐ°Đ·ŃĐČаŃŃ ŃŃŃаŃДгОДĐč «пŃŃŃŃ ĐżŃĐŸĐžĐ·ĐŸĐčĐŽĐ”Ń ŃĐ±ĐŸĐč». ĐĐŸŃĐ”ŃĐœĐžĐ” ĐżŃĐŸŃĐ”ŃŃŃ, ŃĐŸŃŃаĐČĐ»ŃŃŃОД ĐŽĐ”ŃĐ”ĐČĐŸ ĐșĐŸĐœŃŃĐŸĐ»Ń, ĐŒĐŸĐłŃŃ ĐČĐșĐ»ŃŃаŃŃ ĐșаĐș ŃŃпДŃĐČĐžĐ·ĐŸŃŃ, ŃаĐș Đž ŃĐ°Đ±ĐŸŃОД ĐżŃĐŸŃĐ”ŃŃŃ. Đ Đ°Đ±ĐŸŃОД ĐżŃĐŸŃĐ”ŃŃŃ â ŃŃĐŸ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” OTP, ĐČĐșĐ»ŃŃĐ°Ń gen_fsm, gen_serverĐž gen_event. ĐĐŸĐŒĐ°ĐœĐŽĐ° РОаĐșа, ĐșĐŸŃĐŸŃĐŸĐč ĐœĐ” ĐœŃĐ¶ĐœĐŸ Đ·Đ°ĐœĐžĐŒĐ°ŃŃŃŃ ĐŒĐ°ŃĐłĐžĐœĐ°Đ»ŃĐœŃĐŒĐž ĐŽĐ”Đ»Đ°ĐŒĐž, ĐŒĐŸĐ¶Đ”Ń ŃĐ°Đ±ĐŸŃаŃŃ Ń ĐŒĐ”ĐœŃŃĐ”Đč Đ±Đ°Đ·ĐŸĐč ĐșĐŸĐŽĐ°. ĐŃŃ Đ±Đ°Đ·Ń ĐșĐŸĐŽĐ° Đ±Đ»Đ°ĐłĐŸĐŽĐ°ŃŃ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžŃ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐč ĐżŃĐŸŃĐ” ĐżĐŸĐœŃŃŃ, ĐżĐŸŃĐșĐŸĐ»ŃĐșŃ ĐŸĐœĐ° ĐžĐŒĐ”Đ”Ń ĐŽĐ”Đ»ĐŸ ŃĐŸĐ»ŃĐșĐŸ Ń ĐșĐŸĐœĐșŃĐ”ŃĐœŃĐŒ ĐșĐŸĐŽĐŸĐŒ. Riak ĐžĐŒĐ”Đ”Ń ŃŃпДŃĐČĐžĐ·ĐŸŃ ĐČŃŃĐŸĐșĐŸĐłĐŸ ŃŃĐŸĐČĐœŃ, ĐșаĐș Đž ĐČ Đ±ĐŸĐ»ŃŃĐžĐœŃŃĐČĐ” ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč Erlang, а ŃаĐșжД ŃŃпДŃĐČĐžĐ·ĐŸŃŃ Đ±ĐŸĐ»Đ”Đ” ĐœĐžĐ·ĐșĐŸĐłĐŸ ŃŃĐŸĐČĐœŃ ĐŽĐ»Ń ŃĐżŃаĐČĐ»Đ”ĐœĐžŃ ĐłŃŃĐżĐżĐ°ĐŒĐž ĐżŃĐŸŃĐ”ŃŃĐŸĐČ ĐżĐŸ ŃŃĐœĐșŃĐžĐŸĐœĐ°Đ»ŃĐœĐŸŃŃĐž, ŃаĐșОД ĐșаĐș ĐČĐžŃŃŃалŃĐœŃĐ” ŃĐ·Đ»Ń Riak, ĐżŃĐŸŃĐ»ŃŃĐžĐČаŃДлО ŃĐŸĐșĐ”ŃĐŸĐČ TCP Đž ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșĐž запŃĐŸŃĐŸĐČ-ĐŸŃĐČĐ”ŃĐŸĐČ.
15.5.1. Đ€ŃĐœĐșŃОО ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ŃŃпДŃĐČĐžĐ·ĐŸŃа ЧŃĐŸĐ±Ń ĐżŃĐŸĐŽĐ”ĐŒĐŸĐœŃŃŃĐžŃĐŸĐČаŃŃ, ĐșаĐș ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČĐ°Đœ ŃŃпДŃĐČĐžĐ·ĐŸŃ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ, ĐŒŃ ĐČĐŸŃĐżĐŸĐ»ŃĐ·ŃĐ”ĐŒŃŃ ĐŒĐŸĐŽŃĐ»Đ”ĐŒ riak_core_sup.erl. ĐŃĐŸŃ ĐŸŃĐœĐŸĐČĐœĐŸĐč ŃŃпДŃĐČĐžĐ·ĐŸŃ ŃĐČĐ»ŃĐ”ŃŃŃ ŃŃпДŃĐČĐžĐ·ĐŸŃĐŸĐŒ ŃĐ°ĐŒĐŸĐłĐŸ ĐČŃŃĐŸĐșĐŸĐłĐŸ ŃŃĐŸĐČĐœŃ ĐŸŃĐœĐŸĐČĐœĐŸĐłĐŸ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ Riak. ĐĐœ запŃŃĐșĐ°Đ”Ń ŃŃаŃĐžŃĐ”ŃĐșĐžĐč ĐœĐ°Đ±ĐŸŃ ŃĐ°Đ±ĐŸŃĐžŃ Đž ŃŃпДŃĐČĐžĐ·ĐŸŃĐŸĐČ, а ŃаĐșжД ĐŽĐžĐœĐ°ĐŒĐžŃĐ”ŃĐșĐŸĐ” ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČĐŸ ŃĐ°Đ±ĐŸŃĐžŃ , ŃĐżŃаĐČĐ»ŃŃŃĐžŃ ŃĐŸĐ”ĐŽĐžĐœĐ”ĐœĐžŃĐŒĐž HTTP Đž HTTPS RESTful API Ńзла, ŃĐžŃĐ»ĐŸ, ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœĐŸĐ” ĐČ ŃаĐčĐ»Đ°Ń ĐșĐŸĐœŃОгŃŃаŃОО, ŃпДŃĐžŃĐžŃĐœŃŃ ĐŽĐ»Ń ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ Ńзла. ĐĐŸĐŽĐŸĐ±ĐœĐŸ gen_servers, ĐČŃĐ” ĐŒĐŸĐŽŃлО ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ŃŃпДŃĐČĐžĐ·ĐŸŃа ĐŽĐŸĐ»Đ¶ĐœŃ ĐČĐșĐ»ŃŃаŃŃ ĐŽĐžŃĐ”ĐșŃĐžĐČŃ -behavior(supervisor).. ĐĐœĐž запŃŃĐșаŃŃŃŃ Ń ĐżĐŸĐŒĐŸŃŃŃ ŃŃĐœĐșŃĐžĐč startОлО start_linkĐżŃĐžĐœĐžĐŒĐ°ŃŃ ĐČ ĐșаŃĐ”ŃŃĐČĐ” ĐœĐ”ĐŸĐ±ŃзаŃДлŃĐœŃŃ Đ°ŃĐłŃĐŒĐ”ĐœŃĐŸĐČ ServerName, the CallBackModuleĐž a Argument, ĐșĐŸŃĐŸŃŃĐ” бŃĐŽŃŃ ĐżĐ”ŃĐ”ĐŽĐ°ĐœŃ ĐČ ŃŃĐœĐșŃĐžŃ ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа init/1.
ĐĐ»ŃĐŽŃ ĐœĐ° пДŃĐČŃĐ” ŃŃŃĐŸĐșĐž ĐșĐŸĐŽĐ° ĐŒĐŸĐŽŃĐ»Ń riak_core_sup.erl, ĐżĐŸĐŒĐžĐŒĐŸ ĐŽĐžŃĐ”ĐșŃĐžĐČŃ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ Đž ĐŒĐ°ĐșŃĐŸŃа, ĐșĐŸŃĐŸŃŃĐč ĐŒŃ ĐŸĐżĐžŃĐ”ĐŒ ĐżĐŸĐ·Đ¶Đ”, ĐŒŃ ĐŒĐŸĐ¶Đ”ĐŒ ŃĐČОЎДŃŃ ŃŃĐœĐșŃĐžŃ start_link/3:
-ĐŒĐŸĐŽŃĐ»Ń(riak_core_sup). -ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ” (ŃŃĐșĐŸĐČĐŸĐŽĐžŃДлŃ). %% API -export([start_link/0]). %% ĐбŃаŃĐœŃĐ” ĐČŃĐ·ĐŸĐČŃ ŃŃпДŃĐČĐžĐ·ĐŸŃа -export([init/1]). -define(CHILD(I, Type), {I, {I, start_link, []}, ĐżĐŸŃŃĐŸŃĐœĐœŃĐč, 5000, йОп, [I]}). start_link() -> ŃŃпДŃĐČĐžĐ·ĐŸŃ:start_link({local, ?MODULE}, ?MODULE, []). ĐапŃŃĐș ŃŃпДŃĐČĐžĐ·ĐŸŃа ĐČŃĐ·ĐŸĐČĐ”Ń ŃĐŸĐ·ĐŽĐ°ĐœĐžĐ” (Â«ĐżĐŸŃĐŸĐ¶ĐŽĐ”ĐœĐžĐ”Â») ĐœĐŸĐČĐŸĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа Đž ĐČŃĐ·ĐŸĐČ ŃŃĐœĐșŃОО ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа init/1ĐŒĐŸĐŽŃĐ»Ń ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа riak_core_sup.erl. ĐŃĐŸ ServerNameĐșĐŸŃŃДж ĐČ ŃĐŸŃĐŒĐ” {local, Name}ОлО {global, Name}, гЎД Nameâ заŃДгОŃŃŃĐžŃĐŸĐČĐ°ĐœĐœĐŸĐ” ĐžĐŒŃ ŃŃпДŃĐČĐžĐ·ĐŸŃа. Đ ĐœĐ°ŃĐ”ĐŒ ĐżŃĐžĐŒĐ”ŃĐ” Đž заŃДгОŃŃŃĐžŃĐŸĐČĐ°ĐœĐœĐŸĐ” ĐžĐŒŃ, Đž ĐŒĐŸĐŽŃĐ»Ń â ŃŃĐŸ аŃĐŸĐŒ riak_core_sup, ĐČĐ·ŃŃŃĐč Оз ĐŒĐ°ĐșŃĐŸŃа ?MODULE. ĐŃ ĐżĐ”ŃĐ”ĐŽĐ°Đ”ĐŒ ĐżŃŃŃĐŸĐč ŃпОŃĐŸĐș ĐČ ĐșаŃĐ”ŃŃĐČĐ” аŃĐłŃĐŒĐ”ĐœŃа init/1, ĐșĐŸŃĐŸŃŃĐč бŃĐŽĐ”Ń ŃаŃŃĐŒĐ°ŃŃĐžĐČаŃŃŃŃ ĐșаĐș ĐœŃлДĐČĐŸĐ” Đ·ĐœĐ°ŃĐ”ĐœĐžĐ”. ĐŃа ŃŃĐœĐșŃĐžŃ initŃĐČĐ»ŃĐ”ŃŃŃ Đ”ĐŽĐžĐœŃŃĐČĐ”ĐœĐœĐŸĐč ŃŃĐœĐșŃОДĐč ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ŃŃпДŃĐČĐžĐ·ĐŸŃа. ĐĐœ ĐŽĐŸĐ»Đ¶Đ”Đœ ĐČĐ”ŃĐœŃŃŃ ĐșĐŸŃŃДж ĐČ ŃĐŸŃĐŒĐ°ŃĐ”:
{ĐŸĐș, {SupervisorSpecification, ChildSpecificationList}} гЎД SupervisorSpecificationâ ĐșĐŸŃŃДж Оз ŃŃĐ”Ń ŃĐ»Đ”ĐŒĐ”ĐœŃĐŸĐČ {RestartStrategy, AllowedRestarts, MaxSeconds}, ŃĐŸĐŽĐ”ŃжаŃĐžĐč ĐžĐœŃĐŸŃĐŒĐ°ŃĐžŃ ĐŸ ŃĐŸĐŒ, ĐșаĐș ĐŸĐ±ŃабаŃŃĐČаŃŃ ŃĐ±ĐŸĐž Đž пДŃДзапŃŃĐșĐž ĐżŃĐŸŃĐ”ŃŃĐŸĐČ. RestartStrategyâ ŃŃĐŸ ĐŸĐŽĐžĐœ Оз ŃŃĐ”Ń ĐżĐ°ŃĐ°ĐŒĐ”ŃŃĐŸĐČ ĐșĐŸĐœŃОгŃŃаŃОО, ŃĐșазŃĐČаŃŃĐžĐč, ĐșаĐș ĐżĐŸĐČлОŃŃŃ ĐœĐ° «ŃĐŸĐŽŃŃĐČĐ”ĐœĐœŃД» ĐżŃĐŸŃĐ”ŃŃŃ ĐČ ŃĐ»ŃŃаД ĐœĐ”ŃŃаŃĐœĐŸĐłĐŸ заĐČĐ”ŃŃĐ”ĐœĐžŃ ŃĐ°Đ±ĐŸŃŃ:
one_for_one: ĐœĐž ĐŸĐŽĐžĐœ Оз ĐŽŃŃĐłĐžŃ ĐżŃĐŸŃĐ”ŃŃĐŸĐČ ĐČ ĐŽĐ”ŃĐ”ĐČĐ” ĐœĐ°ĐŽĐ·ĐŸŃа ĐœĐ” заŃŃагОĐČаДŃŃŃ. rest_for_one: ĐŃĐŸŃĐ”ŃŃŃ, запŃŃĐ”ĐœĐœŃĐ” ĐżĐŸŃлД заĐČĐ”ŃŃĐ”ĐœĐžŃ ĐżŃĐŸŃĐ”ŃŃа, ĐŸŃŃĐ°ĐœĐ°ĐČлОĐČаŃŃŃŃ Đž пДŃДзапŃŃĐșаŃŃŃŃ. one_for_all: ĐŃĐ” ĐżŃĐŸŃĐ”ŃŃŃ ĐŸŃŃĐ°ĐœĐŸĐČĐ»Đ”ĐœŃ Đž пДŃДзапŃŃĐ”ĐœŃ. AllowedRestartsŃĐșазŃĐČаДŃ, ŃĐșĐŸĐ»ŃĐșĐŸ Ńаз ĐŽĐŸŃĐ”ŃĐœĐžĐ” ŃĐ»Đ”ĐŒĐ”ĐœŃŃ ŃŃпДŃĐČĐžĐ·ĐŸŃа ĐŒĐŸĐłŃŃ Đ·Đ°ĐČĐ”ŃŃĐžŃŃ ŃĐ°Đ±ĐŸŃŃ ĐČ ĐžĐœŃĐ”ŃĐČалД, MaxSeconds ĐżŃДжЎД ŃĐ”ĐŒ ŃŃпДŃĐČĐžĐ·ĐŸŃ Đ·Đ°ĐČĐ”ŃŃĐžŃ ŃĐ”Đ±Ń (Đž Đ”ĐłĐŸ ĐŽĐŸŃĐ”ŃĐœĐžĐ” ŃĐ»Đ”ĐŒĐ”ĐœŃŃ). ĐĐŸĐłĐŽĐ° ĐżŃĐŸŃĐ”ŃŃ Đ·Đ°ĐČĐ”ŃŃаДŃŃŃ, ĐŸĐœ ĐŸŃĐżŃаĐČĐ»ŃĐ”Ń ŃĐžĐłĐœĐ°Đ» EXIT ŃĐČĐŸĐ”ĐŒŃ ŃŃпДŃĐČĐžĐ·ĐŸŃŃ, ĐșĐŸŃĐŸŃŃĐč, ĐČ Đ·Đ°ĐČĐžŃĐžĐŒĐŸŃŃĐž ĐŸŃ ŃŃŃаŃДгОО пДŃДзапŃŃĐșа, ŃĐŸĐŸŃĐČĐ”ŃŃŃĐČŃŃŃĐžĐŒ ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ ĐŸĐ±ŃабаŃŃĐČĐ°Đ”Ń Đ·Đ°ĐČĐ”ŃŃĐ”ĐœĐžĐ” ŃĐ°Đ±ĐŸŃŃ. ĐĄŃпДŃĐČĐžĐ·ĐŸŃ Đ·Đ°ĐČĐ”ŃŃĐ°Đ”Ń ŃĐ°Đ±ĐŸŃŃ ĐżĐŸŃлД ĐŽĐŸŃŃĐžĐ¶Đ”ĐœĐžŃ ĐŒĐ°ĐșŃĐžĐŒĐ°Đ»ŃĐœĐŸ ŃазŃĐ”ŃĐ”ĐœĐœĐŸĐłĐŸ ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČа пДŃДзапŃŃĐșĐŸĐČ Đž гаŃĐ°ĐœŃĐžŃŃĐ”Ń, ŃŃĐŸ ŃĐžĐșлОŃĐ”ŃĐșОД пДŃДзапŃŃĐșĐž Đž ĐŽŃŃгОД ĐżŃĐŸĐ±Đ»Đ”ĐŒŃ, ĐœĐ” ŃĐ”ŃĐ”ĐœĐœŃĐ” ĐœĐ° Đ”ĐłĐŸ ŃŃĐŸĐČĐœĐ”, ĐżĐŸĐ·Đ¶Đ” пДŃĐ”ĐčĐŽŃŃ ĐœĐ° ŃлДЎŃŃŃĐžĐč ŃŃĐŸĐČĐ”ĐœŃ. ĐĄĐșĐŸŃДД ĐČŃĐ”ĐłĐŸ, ĐżŃĐŸĐ±Đ»Đ”ĐŒĐ° ĐČ ĐżŃĐŸŃĐ”ŃŃĐ” ĐČ ĐŽŃŃĐłĐŸĐŒ ĐżĐŸĐŽĐŽĐ”ŃĐ”ĐČĐ”, ŃŃĐŸ ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ŃŃпДŃĐČĐžĐ·ĐŸŃŃ Đ±ĐŸĐ»Đ”Đ” ĐČŃŃĐŸĐșĐŸĐłĐŸ ŃŃĐŸĐČĐœŃ Đ·Đ°ĐșŃŃŃŃ ĐșĐŸĐœŃŃĐŸĐ»ĐžŃŃŃŃДД ĐżĐŸĐŽĐŽĐ”ŃĐ”ĐČĐŸ Đž пДŃДЎДлаŃŃ Đ”ĐłĐŸ.
ĐĐ»ŃĐŽŃ ĐœĐ° ĐżĐŸŃĐ»Đ”ĐŽĐœŃŃ ŃŃŃĐŸĐșŃ ŃŃĐœĐșŃОО ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа init/1ĐŒĐŸĐŽŃĐ»Ń riak_core_sup.erl, ĐŒŃ ĐŒĐŸĐ¶Đ”ĐŒ Đ·Đ°ĐŒĐ”ŃĐžŃŃ, ŃŃĐŸ ŃŃĐŸŃ ĐșĐŸĐœĐșŃĐ”ŃĐœŃĐč ĐŒĐŸĐœĐžŃĐŸŃ ĐžĐŒĐ”Đ”Ń ŃŃŃаŃĐ”ĐłĐžŃ Â«ĐŸĐŽĐžĐœ Đș ĐŸĐŽĐœĐŸĐŒŃ», ŃŃĐŸ ĐŸĐ·ĐœĐ°ŃаДŃ, ŃŃĐŸ ĐżŃĐŸŃĐ”ŃŃŃ ĐœĐ”Đ·Đ°ĐČĐžŃĐžĐŒŃ ĐŽŃŃĐł ĐŸŃ ĐŽŃŃга. ĐĄŃпДŃĐČĐžĐ·ĐŸŃ ĐŽĐŸĐżŃŃŃĐžŃ ĐŒĐ°ĐșŃĐžĐŒŃĐŒ ĐŽĐ”ŃŃŃŃ ĐżĐ”ŃДзапŃŃĐșĐŸĐČ, ŃŃĐŸĐ±Ń ĐżĐ”ŃДзапŃŃŃĐžŃŃ ŃДбŃ.
ChildSpecificationListŃĐșазŃĐČаДŃ, ĐșаĐșĐžŃ ĐŽĐŸŃĐ”ŃĐœĐžŃ ŃĐ»Đ”ĐŒĐ”ĐœŃĐŸĐČ ŃŃпДŃĐČĐžĐ·ĐŸŃ ĐŽĐŸĐ»Đ¶Đ”Đœ запŃŃĐșаŃŃ Đž ĐŸŃŃлДжОĐČаŃŃ, а ŃаĐșжД ĐžĐœŃĐŸŃĐŒĐ°ŃĐžŃ ĐŸ ŃĐŸĐŒ, ĐșаĐș Đ”ĐłĐŸ ĐŸŃŃĐ°ĐœĐŸĐČĐžŃŃ Đž пДŃДзапŃŃŃĐžŃŃ. ĐĐœ ĐżŃДЎŃŃаĐČĐ»Đ”Đœ ŃпОŃĐșĐŸĐŒ ĐșĐŸŃŃДжДĐč ĐČ ŃлДЎŃŃŃĐ”ĐŒ ĐČОЎД:
{Id, {ĐĐŸĐŽŃĐ»Ń, Đ€ŃĐœĐșŃĐžŃ, ĐŃĐłŃĐŒĐ”ĐœŃŃ}, ĐĐ”ŃДзапŃŃĐș, ĐаĐČĐ”ŃŃĐ”ĐœĐžĐ” ŃĐ°Đ±ĐŸŃŃ, йОп, ХпОŃĐŸĐș ĐŒĐŸĐŽŃлДĐč} Idâ ŃĐœĐžĐșалŃĐœŃĐč ĐžĐŽĐ”ĐœŃĐžŃĐžĐșаŃĐŸŃ ĐŽĐ°ĐœĐœĐŸĐłĐŸ ŃŃпДŃĐČĐžĐ·ĐŸŃа. ĐĐŸŃŃДж Module, FunctionĐž ArgumentsĐżŃДЎŃŃаĐČĐ»ŃĐ”Ń ŃĐŸĐ±ĐŸĐč ŃĐșŃĐżĐŸŃŃĐžŃĐŸĐČĐ°ĐœĐœŃŃ ŃŃĐœĐșŃĐžŃ, ĐșĐŸŃĐŸŃĐ°Ń Đ·Đ°ĐżŃŃĐșĐ°Đ”Ń ĐČŃĐ·ĐŸĐČ start_linkŃŃĐœĐșŃОО ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ, ĐșĐŸŃĐŸŃĐ°Ń ĐČĐŸĐ·ĐČŃаŃĐ°Đ”Ń ĐșĐŸŃŃДж ĐČ ŃĐŸŃĐŒĐ” {ok, Pid}. ĐĄŃŃаŃĐ”ĐłĐžŃ RestartĐŸĐżĐžŃŃĐČаДŃ, ŃŃĐŸ ĐŽĐŸĐ»Đ¶ĐœĐŸ ĐżŃĐŸĐžĐ·ĐŸĐčŃĐž ĐČ Đ·Đ°ĐČĐžŃĐžĐŒĐŸŃŃĐž ĐŸŃ ŃОпа ĐŸŃŃĐ°ĐœĐŸĐČĐșĐž ĐżŃĐŸŃĐ”ŃŃа, ĐșĐŸŃĐŸŃŃĐč ĐŒĐŸĐ¶Đ”Ń Đ±ŃŃŃ:
ĐżŃĐŸŃĐ”ŃŃŃ transient, ĐșĐŸŃĐŸŃŃĐ” ĐœĐžĐșĐŸĐłĐŽĐ° ĐœĐ” пДŃДзапŃŃĐșаŃŃŃŃ; ĐżŃĐŸŃĐ”ŃŃŃ temporary, ĐșĐŸŃĐŸŃŃĐ” пДŃДзапŃŃĐșаŃŃŃŃ ŃĐŸĐ»ŃĐșĐŸ ĐČ ŃĐ»ŃŃаД аĐČаŃĐžĐčĐœĐŸĐłĐŸ заĐČĐ”ŃŃĐ”ĐœĐžŃ ŃĐ°Đ±ĐŸŃŃ; Đ ĐżŃĐŸŃĐ”ŃŃŃ permanent, ĐșĐŸŃĐŸŃŃĐ” ĐČŃДгЎа пДŃДзапŃŃĐșаŃŃŃŃ ĐœĐ”Đ·Đ°ĐČĐžŃĐžĐŒĐŸ ĐŸŃ ŃĐŸĐłĐŸ, ŃĐČĐ»ŃĐ”ŃŃŃ Đ»Đž ĐżŃĐžŃĐžĐœĐ° ĐžŃ ĐŸŃŃĐ°ĐœĐŸĐČĐșĐž ĐœĐŸŃĐŒĐ°Đ»ŃĐœĐŸĐč ОлО ĐœĐ”ĐœĐŸŃĐŒĐ°Đ»ŃĐœĐŸĐč. Shutdownâ Đ·ĐœĐ°ŃĐ”ĐœĐžĐ” ĐČ ĐŒĐžĐ»Đ»ĐžŃĐ”ĐșŃĐœĐŽĐ°Ń , ŃĐșазŃĐČаŃŃДД ĐČŃĐ”ĐŒŃ, ĐżĐŸ ĐžŃŃĐ”ŃĐ”ĐœĐžĐž ĐșĐŸŃĐŸŃĐŸĐłĐŸ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ ŃазŃĐ”ŃĐ”ĐœĐŸ ĐČŃĐżĐŸĐ»ĐœŃŃŃ ŃŃĐœĐșŃĐžŃ, terminateĐ”ŃлО ĐŸĐœĐŸ ĐŸŃŃĐ°ĐœĐ°ĐČлОĐČаДŃŃŃ ĐžĐ·-за пДŃДзапŃŃĐșа ОлО заĐČĐ”ŃŃĐ”ĐœĐžŃ ŃĐ°Đ±ĐŸŃŃ. ĐŃĐŸĐŒ infinityŃаĐșжД ĐŒĐŸĐ¶ĐœĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ, ĐœĐŸ ĐŽĐ»Ń ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ, ĐŸŃлОŃĐœĐŸĐłĐŸ ĐŸŃ ŃŃпДŃĐČĐžĐ·ĐŸŃĐŸĐČ, ŃŃĐŸ ĐœĐ°ŃŃĐŸŃŃДлŃĐœĐŸ ĐœĐ” ŃĐ”ĐșĐŸĐŒĐ”ĐœĐŽŃĐ”ŃŃŃ. TypeŃĐČĐ»ŃĐ”ŃŃŃ Đ»ĐžĐ±ĐŸ аŃĐŸĐŒĐŸĐŒ workerĐČ ĐŸŃĐœĐŸŃĐ”ĐœĐžĐž ŃĐœĐžĐČĐ”ŃŃалŃĐœŃŃ ŃĐ”ŃĐČĐ”ŃĐŸĐČ, ĐŸĐ±ŃĐ°Đ±ĐŸŃŃĐžĐșĐŸĐČ ŃĐŸĐ±ŃŃĐžĐč Đž ĐșĐŸĐœĐ”ŃĐœŃŃ Đ°ĐČŃĐŸĐŒĐ°ŃĐŸĐČ, Đ»ĐžĐ±ĐŸ аŃĐŸĐŒĐŸĐŒ supervisor. ĐĄĐČŃĐ·Đ°ĐœĐœŃĐ” ŃĐŸ ModuleListŃпОŃĐșĐŸĐŒ ĐŒĐŸĐŽŃлДĐč, ŃДалОзŃŃŃĐžŃ ŃŃĐŸ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”, ĐŸĐœĐž ĐžŃĐżĐŸĐ»ŃĐ·ŃŃŃŃŃ ĐŽĐ»Ń ŃĐżŃаĐČĐ»Đ”ĐœĐžŃ Đž ĐżŃĐžĐŸŃŃĐ°ĐœĐŸĐČĐșĐž ĐżŃĐŸŃĐ”ŃŃĐŸĐČ ĐČĐŸ ĐČŃĐ”ĐŒŃ ĐżŃĐŸŃДЎŃŃ ĐłĐŸŃŃŃĐ”ĐłĐŸ ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐžŃ ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐœĐŸĐłĐŸ ĐŸĐ±Đ”ŃпДŃĐ”ĐœĐžŃ. ĐąĐŸĐ»ŃĐșĐŸ ŃŃŃĐ”ŃŃĐČŃŃŃОД ОлО ŃĐ”Đ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐœŃĐ” ĐżĐŸĐ»ŃĐ·ĐŸĐČаŃĐ”Đ»Đ”ĐŒ ĐČаŃĐžĐ°ĐœŃŃ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ ĐŒĐŸĐłŃŃ Đ±ŃŃŃ ŃаŃŃŃŃ ŃŃĐŸĐłĐŸ ŃпОŃĐșа Đž, ŃĐ»Đ”ĐŽĐŸĐČаŃДлŃĐœĐŸ, ĐČĐșĐ»ŃŃĐ”ĐœŃ ĐČ ĐŽĐ”ŃĐ”ĐČĐŸ ĐșĐŸĐœŃŃĐŸĐ»Ń.
Đ ĐœĐ°ŃŃĐŸŃŃĐ”ĐŒŃ ĐŒĐŸĐŒĐ”ĐœŃŃ ĐŒŃ ĐŽĐŸĐ»Đ¶ĐœŃ Đ±ŃŃŃ ĐČ ŃĐŸŃŃĐŸŃĐœĐžĐž ĐŸĐżĐžŃаŃŃ ŃŃŃаŃĐ”ĐłĐžŃ ĐżĐ”ŃДзагŃŃĐ·ĐșĐž, ĐŸĐżŃДЎДлŃŃŃŃŃ ĐŒĐ”Đ¶ĐżŃĐŸŃĐ”ŃŃĐœŃĐ” заĐČĐžŃĐžĐŒĐŸŃŃĐž, ĐżĐŸŃĐŸĐłĐž ŃŃŃĐŸĐčŃĐžĐČĐŸŃŃĐž Đș ŃĐ±ĐŸŃĐŒ Đž ĐżŃĐŸŃДЎŃŃŃ ŃŃĐșалаŃОО ĐœĐ° ĐŸŃĐœĐŸĐČĐ” ĐŸĐ±ŃĐ”Đč аŃŃ ĐžŃĐ”ĐșŃŃŃŃ. ĐŃ ŃаĐșжД ĐŽĐŸĐ»Đ¶ĐœŃ ŃĐŒĐ”ŃŃ ĐżĐŸĐœĐžĐŒĐ°ŃŃ, ŃŃĐŸ ĐżŃĐŸĐžŃŃ ĐŸĐŽĐžŃ ĐČ init/1ĐżŃĐžĐŒĐ”ŃĐ” ŃŃĐœĐșŃОО ĐŒĐŸĐŽŃĐ»Ń riak_core_sup.erl. ĐĐ»Ń ĐœĐ°Ńала ЎаĐČаĐčŃĐ” ОзŃŃĐžĐŒ ĐŒĐ°ĐșŃĐŸŃ CHILD. ĐĐœ ŃĐŸĐ·ĐŽĐ°Đ”Ń ŃпДŃĐžŃĐžĐșаŃĐžŃ ĐŽĐ»Ń ĐŸĐŽĐœĐŸĐłĐŸ ĐŽĐŸŃĐ”ŃĐœĐ”ĐłĐŸ ĐżŃĐŸŃĐ”ŃŃа, ĐžŃĐżĐŸĐ»ŃĐ·ŃŃ ĐžĐŒŃ ĐŒĐŸĐŽŃĐ»Ń ĐŸĐ±ŃаŃĐœĐŸĐłĐŸ ĐČŃĐ·ĐŸĐČа ĐșаĐș Id, ĐŽĐ”Đ»Đ°Ń Đ”ĐłĐŸ ĐżĐŸŃŃĐŸŃĐœĐœŃĐŒ Đž ĐŸĐżŃДЎДлŃŃ 5-ŃĐ”ĐșŃĐœĐŽĐœĐŸĐ” ĐČŃĐ”ĐŒŃ Đ·Đ°ĐČĐ”ŃŃĐ”ĐœĐžŃ. ĐĐŸŃĐŸĐșĐž ĐŒĐŸĐłŃŃ Đ±ŃŃŃ ŃĐ°Đ±ĐŸŃĐžĐŒĐž ОлО ŃŃпДŃĐČаĐčĐ·Đ”ŃĐ°ĐŒĐž. ĐаĐČаĐčŃĐ” ĐżĐŸŃĐŒĐŸŃŃĐžĐŒ ĐœĐ° ĐżŃĐžĐŒĐ”Ń Đž ĐżĐŸŃĐŒĐŸŃŃĐžĐŒ, ŃŃĐŸ ĐŒŃ ĐŒĐŸĐ¶Đ”ĐŒ Оз ĐœĐ”ĐłĐŸ ОзĐČлДŃŃ:
-define(CHILD(I, Type), {I, {I, start_link, []}, ĐżĐŸŃŃĐŸŃĐœĐœŃĐč, 5000, йОп, [I]}).
init([]) -> RiakWebs = ŃпОŃĐșĐž ŃДгОŃŃŃĐŸĐČ: Flatten(riak_core_web:bindings(http), riak_core_web:bindings(https)) of [] -> %% ĐżŃĐŸĐČĐ”ŃĐșа ŃŃаŃŃŃ ĐœĐ°ŃŃŃĐŸĐ”Đș, Đ”ŃлО app.config %% ĐœĐ” бŃĐ» ĐŸĐ±ĐœĐŸĐČĐ»Đ”Đœ riak_core_web:old_binding(); ĐŃĐžĐČŃĐ·Đșа -> ĐĐŸĐœĐ”Ń ĐżŃĐžĐČŃĐ·ĐșĐž ,
Children =
[?CHILD(riak_core_vnode_sup, ŃŃпДŃĐČĐžĐ·ĐŸŃ),
?CHILD(riak_core_handoff_manager, ŃĐ°Đ±ĐŸŃĐžĐč),
?CHILD(riak_core_handoff_listener, ŃĐ°Đ±ĐŸŃĐžĐč),
?CHILD(riak_core_ring_events, ŃĐ°Đ±ĐŸŃĐžĐč),
?CHILD(riak_core_ring_manager, ŃĐ°Đ±ĐŸŃĐžĐč), ?CHILD(riak_core_ring_manager, ŃĐ°Đ±ĐŸŃĐžĐč),
? CHILD(riak_core_node_watcher_events, ŃĐ°Đ±ĐŸŃĐžĐč),
?CHILD(riak_core_node_watcher, ŃĐ°Đ±ĐŸŃĐžĐč),
?CHILD(riak_core_gossip, ŃĐ°Đ±ĐŸŃĐžĐč) |
RiakWebs
],
{ok, {{one_for_one, 10, 10}, ĐĐ”ŃĐž}}.
ĐĐŸĐ»ŃŃĐžĐœŃŃĐČĐŸ Оз ChildrenзапŃŃĐ”ĐœĐœŃŃ ŃŃĐžĐŒ ŃŃпДŃĐČĐžĐ·ĐŸŃĐŸĐŒ ŃŃаŃĐžŃĐ”ŃĐșĐž ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃŃ ŃĐ°Đ±ĐŸŃĐžŃ (ОлО, ĐČ ŃĐ»ŃŃаД Ń vnode_supŃŃпДŃĐČĐžĐ·ĐŸŃĐŸĐŒ). ĐŃĐșĐ»ŃŃĐ”ĐœĐžĐ”ĐŒ ŃĐČĐ»ŃĐ”ŃŃŃ ŃаŃŃŃ RiakWebs, ĐŸĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐžĐ” ĐșĐŸŃĐŸŃĐŸĐč ŃĐČĐ»ŃĐ”ŃŃŃ ĐŽĐžĐœĐ°ĐŒĐžŃĐ”ŃĐșĐžĐŒ Đž заĐČĐžŃĐžŃ ĐŸŃ HTTP-ŃаŃŃĐž ŃаĐčла ĐșĐŸĐœŃОгŃŃаŃОО Riak.
Đа ĐžŃĐșĐ»ŃŃĐ”ĐœĐžĐ”ĐŒ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”ŃĐœĐŸĐłĐŸ ŃОпа, ĐČŃĐ” ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ OTP, ĐČĐșĐ»ŃŃĐ°Ń ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ Riak, бŃĐŽŃŃ ĐžĐŒĐ”ŃŃ ŃĐŸĐ±ŃŃĐČĐ”ĐœĐœĐŸĐ” ĐŽĐ”ŃĐ”ĐČĐŸ ĐșĐŸĐœŃŃĐŸĐ»Ń. Đ Riak ĐČ ŃзлД Erlang ĐČŃĐżĐŸĐ»ĐœŃŃŃŃŃ ĐœĐ”ŃĐșĐŸĐ»ŃĐșĐŸ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč ĐČŃŃĐŸĐșĐŸĐłĐŸ ŃŃĐŸĐČĐœŃ, ĐœĐ°ĐżŃĐžĐŒĐ”Ń, riak_coreĐŽĐ»Ń Đ°Đ»ĐłĐŸŃĐžŃĐŒĐŸĐČ ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃŃ ŃĐžŃŃĐ”ĐŒ riak_kvĐŽĐ»Ń ŃĐ”ĐŒĐ°ĐœŃĐžĐșĐž Ń ŃĐ°ĐœĐ”ĐœĐžŃ ĐșĐ»ŃŃĐ”Đč/Đ·ĐœĐ°ŃĐ”ĐœĐžĐč, webmachineĐŽĐ»Ń HTTP Đž ĐŒĐœĐŸĐłĐžŃ ĐŽŃŃĐłĐžŃ . ĐОжД ĐŒŃ ĐČОЎДлО ŃаŃŃĐžŃĐ”ĐœĐœĐŸĐ” ĐŽĐ”ŃĐ”ĐČĐŸ, riak_coreĐżŃДЎŃŃаĐČĐ»ŃŃŃДД ĐŒĐœĐŸĐłĐŸŃŃĐŸĐČĐœĐ”ĐČŃĐč ĐœĐ°ĐŽĐ·ĐŸŃ, ĐșĐŸŃĐŸŃŃĐŒ ŃĐżŃаĐČĐ»ŃĐ”Ń Riak. ĐĐŽĐœĐžĐŒ Оз ĐŸŃĐœĐŸĐČĐœŃŃ ĐżŃĐ”ĐžĐŒŃŃĐ”ŃŃĐČ ŃŃĐŸĐč ŃŃŃŃĐșŃŃŃŃ ŃĐČĐ»ŃĐ”ŃŃŃ ŃĐŸ, ŃŃĐŸ ŃĐ°Đ±ĐŸŃа ĐżĐŸĐŽŃĐžŃŃĐ”ĐŒŃ ĐŒĐŸĐ¶Đ”Ń Đ±ŃŃŃ ĐżŃĐ”ŃĐČĐ°ĐœĐ° (Оз-за ĐŸŃОбĐșĐž, ĐżŃĐŸĐ±Đ»Đ”ĐŒŃ ĐŸĐșŃŃжаŃŃĐ”Đč ŃŃĐ”ĐŽŃ ĐžĐ»Đž ĐżŃĐ”ĐŽĐœĐ°ĐŒĐ”ŃĐ”ĐœĐœĐŸĐłĐŸ ĐŽĐ”ĐčŃŃĐČĐžŃ), а заŃĐ”ĐŒ пДŃĐČĐŸĐœĐ°ŃалŃĐœĐŸ бŃĐŽĐ”Ń ĐŸŃŃĐ°ĐœĐŸĐČĐ»Đ”ĐœĐŸ ŃĐŸĐ»ŃĐșĐŸ ŃŃĐŸ ĐżĐŸĐŽĐŽĐ”ŃĐ”ĐČĐŸ.
ĐĄŃпДŃĐČĐžĐ·ĐŸŃ ĐżĐ”ŃДзапŃŃŃĐžŃ ĐœĐ”ĐŸĐ±Ń ĐŸĐŽĐžĐŒŃĐ” ĐżŃĐŸŃĐ”ŃŃŃ, Đž ĐČŃŃ ŃĐžŃŃĐ”ĐŒĐ° ĐœĐ” бŃĐŽĐ”Ń Đ·Đ°ŃŃĐŸĐœŃŃа. Đа ĐżŃаĐșŃĐžĐșĐ” ĐŒŃ ĐŸĐ±ĐœĐ°ŃŃжОлО, ŃŃĐŸ ŃŃа ĐŸĐżĐ”ŃаŃĐžŃ ĐșĐŸŃŃĐ”ĐșŃĐœĐ° ĐŽĐ»Ń Riak. ĐĐŸĐ»ŃĐ·ĐŸĐČаŃĐ”Đ»Ń ĐŒĐŸĐ¶Đ”Ń ĐżŃОЎŃĐŒĐ°ŃŃ, ĐșаĐș ĐČŃĐșĐ»ŃŃĐžŃŃ ĐČĐžŃŃŃалŃĐœŃĐč ŃзДл, ĐœĐŸ ŃŃпДŃĐČĐžĐ·ĐŸŃ ĐżĐ”ŃДзапŃŃŃĐžŃ Đ”ĐłĐŸ riak_core_vnode_sup. ĐŃлО ĐŸĐœĐž ŃŃпДŃĐœĐŸ ĐżŃĐ”ŃĐČŃŃ ĐżĐŸŃĐ»Đ”ĐŽĐœĐ”Đ”, ŃŃпДŃĐČĐžĐ·ĐŸŃ riak_core пДŃДзапŃŃŃĐžŃ Đ”ĐłĐŸ, пДŃДЎаĐČ ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐŸĐ± ĐŸŃĐșĐ»ŃŃĐ”ĐœĐžĐž ŃŃпДŃĐČĐžĐ·ĐŸŃŃ Đ±ĐŸĐ»Đ”Đ” ĐČŃŃĐŸĐșĐŸĐłĐŸ ŃŃĐŸĐČĐœŃ. ĐŃĐŸŃ ĐŒĐ”Ń Đ°ĐœĐžĐ·ĐŒ ĐžĐ·ĐŸĐ»ŃŃОО Đž ĐČĐŸŃŃŃĐ°ĐœĐŸĐČĐ»Đ”ĐœĐžŃ ĐžĐœŃĐžĐŽĐ”ĐœŃĐŸĐČ ĐżĐŸĐ·ĐČĐŸĐ»ŃĐ”Ń ŃазŃĐ°Đ±ĐŸŃŃĐžĐșĐ°ĐŒ Riak (Đž Erlang) ĐŽĐŸĐČĐŸĐ»ŃĐœĐŸ ĐżŃĐŸŃŃĐŸ ŃĐŸĐ·ĐŽĐ°ĐČаŃŃ ĐŸŃĐșĐ°Đ·ĐŸŃŃŃĐŸĐčŃĐžĐČŃĐ” ŃĐžŃŃĐ”ĐŒŃ.
ĐŠĐ”ĐœĐœĐŸŃŃŃ ŃŃĐŸĐč ĐŒĐŸĐŽĐ”Đ»Đž ĐŒĐŸĐœĐžŃĐŸŃĐžĐœĐłĐ° бŃла ĐżŃĐŸĐŽĐ”ĐŒĐŸĐœŃŃŃĐžŃĐŸĐČĐ°ĐœĐ°, ĐșĐŸĐłĐŽĐ° ĐżŃĐŸĐŒŃŃĐ»Đ”ĐœĐœŃĐč ĐżĐŸĐ»ŃĐ·ĐŸĐČаŃĐ”Đ»Ń ŃĐŸĐ·ĐŽĐ°Đ» ŃĐșŃŃŃĐ”ĐŒĐ°Đ»ŃĐœŃŃ ŃŃДЎŃ, ŃŃĐŸĐ±Ń ĐŸĐżŃДЎДлОŃŃ, гЎД ĐżŃĐŸĐžĐ·ĐŸĐčĐŽĐ”Ń ŃĐ±ĐŸĐč ĐœĐ”ŃĐșĐŸĐ»ŃĐșĐžŃ ŃĐžŃŃĐ”ĐŒ баз ĐŽĐ°ĐœĐœŃŃ . ĐŃа ŃŃДЎа ĐżĐŸŃĐŸĐ¶ĐŽĐ°Đ»Đ° ĐłĐžĐłĐ°ĐœŃŃĐșОД пОĐșĐž ĐœĐ°ĐłŃŃĐ·ĐșĐž Đž ŃŃĐ»ĐŸĐČĐžŃ, Đ±Đ»Đ°ĐłĐŸĐżŃĐžŃŃĐœŃĐ” ĐŽĐ»Ń ĐžĐœŃĐžĐŽĐ”ĐœŃĐŸĐČ. ĐĐœĐž бŃлО ŃбОŃŃ Ń ŃĐŸĐ»ĐșŃ, ĐŸĐ±ĐœĐ°ŃŃжОĐČ, ŃŃĐŸ РОаĐș ĐżŃĐŸŃŃĐŸ ĐœĐ” ĐŸŃŃĐ°ĐœĐŸĐČĐžŃŃŃ ĐŽĐ°Đ¶Đ” ĐČ ŃĐ°ĐŒŃŃ Ń ŃĐŽŃĐžŃ ŃŃĐ»ĐŸĐČĐžŃŃ . ĐąĐŸŃĐœĐ”Đ”, ĐșĐŸĐœĐ”ŃĐœĐŸ, ĐŸĐœĐž ĐŒĐŸĐłĐ»Đž ĐżŃĐ”ŃŃĐČаŃŃ ĐżŃĐŸŃĐ”ŃŃŃ ĐžĐ»Đž ĐżĐŸĐŽŃĐžŃŃĐ”ĐŒŃ ĐżĐŸ ĐŸŃЎДлŃĐœĐŸŃŃĐž Đž ŃĐ°Đ·ĐœŃĐŒĐž ŃĐżĐŸŃĐŸĐ±Đ°ĐŒĐž, ĐœĐŸ ŃŃпДŃĐČаĐčĐ·Đ”ŃŃ ĐŸŃĐžŃалО Đž пДŃДзапŃŃĐșалО ĐČŃĐ” ĐœĐ”ĐŸĐ±Ń ĐŸĐŽĐžĐŒĐŸĐ” ĐŽĐ»Ń ĐČĐŸŃŃŃĐ°ĐœĐŸĐČĐ»Đ”ĐœĐžŃ ĐČŃĐ”Đč ŃĐžŃŃĐ”ĐŒŃ ĐČ ŃĐ°Đ±ĐŸŃĐ”ĐŒ ŃĐŸŃŃĐŸŃĐœĐžĐž.
15.5.2. ĐŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ ĐĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”, applicationĐșĐŸŃĐŸŃĐŸĐ” ĐŒŃ ĐżŃДЎŃŃаĐČОлО ŃĐ°ĐœĐ”Đ”, ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ŃŃŃ ĐŽĐ»Ń ŃпаĐșĐŸĐČĐșĐž ĐŒĐŸĐŽŃлДĐč ОлО ŃĐ”ŃŃŃŃĐŸĐČ Erlang ĐČ ĐżĐŸĐČŃĐŸŃĐœĐŸ ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”ĐŒŃĐ” ĐșĐŸĐŒĐżĐŸĐœĐ”ĐœŃŃ. Đ OTP Đ”ŃŃŃ ĐŽĐČа ŃОпа ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč. ĐĐ°ĐžĐ±ĐŸĐ»Đ”Đ” ŃаŃĐżŃĐŸŃŃŃĐ°ĐœĐ”ĐœĐœĐ°Ń ŃĐŸŃĐŒĐ°, ĐœĐ°Đ·ŃĐČĐ°Đ”ĐŒĐ°Ń ĐŸĐ±ŃŃĐœŃĐŒĐž ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃĐŒĐž, запŃŃĐșĐ°Đ”Ń ŃĐżŃаĐČĐ»ŃŃŃДД ĐŽĐ”ŃĐ”ĐČĐŸ Đž ĐČŃĐ” ĐœĐ”ĐŸĐ±Ń ĐŸĐŽĐžĐŒŃĐ” ŃŃаŃĐžŃĐ”ŃĐșОД ŃĐ°Đ±ĐŸŃОД ĐżŃĐŸŃĐ”ŃŃŃ. «ĐĐžĐ±Đ»ĐžĐŸŃĐ”ŃĐœŃД» ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ, ŃаĐșОД ĐșаĐș «ХŃĐ°ĐœĐŽĐ°ŃŃĐœĐ°Ń Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”Đșа», ĐžĐœŃДгŃĐžŃĐŸĐČĐ°ĐœĐœŃĐ” ĐČ ĐŽĐžŃŃŃОбŃŃĐžĐČ Erlang, ŃĐŸĐŽĐ”ŃĐ¶Đ°Ń Â«Đ±ĐžĐ±Đ»ĐžĐŸŃĐ”ŃĐœŃД» ĐŒĐŸĐŽŃлО, ĐœĐŸ ĐœĐ” запŃŃĐșаŃŃ ĐŽĐ”ŃĐ”ĐČĐŸ ŃĐżŃаĐČĐ»Đ”ĐœĐžŃ. ĐŃĐŸ ĐœĐ” ĐŸĐ·ĐœĐ°ŃаДŃ, ŃŃĐŸ ĐșĐŸĐŽ ĐœĐ” ŃĐŸĐŽĐ”ŃĐ¶ĐžŃ ĐżŃĐŸŃĐ”ŃŃĐŸĐČ ĐžĐ»Đž ĐŽĐ”ŃĐ”ĐČŃĐ”ĐČ ŃŃпДŃĐČОзОО. ĐŃĐŸ ĐČŃĐ”ĐłĐŸ лОŃŃ ĐŸĐ·ĐœĐ°ŃаДŃ, ŃŃĐŸ ĐŸĐœĐž бŃĐŽŃŃ Đ·Đ°ĐżŃŃĐ”ĐœŃ ĐșаĐș ŃаŃŃŃ ĐŽĐ”ŃĐ”ĐČа, ĐżŃĐžĐœĐ°ĐŽĐ»Đ”Đ¶Đ°ŃĐ”ĐłĐŸ ĐŽŃŃĐłĐŸĐŒŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ.
ĐĄĐžŃŃĐ”ĐŒĐ° Erlang бŃĐŽĐ”Ń ŃĐŸŃŃĐŸŃŃŃ ĐžĐ· ĐœĐ°Đ±ĐŸŃа ŃĐ»Đ°Đ±ĐŸ ŃĐČŃĐ·Đ°ĐœĐœŃŃ ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč. ĐĐ”ĐșĐŸŃĐŸŃŃĐ” Оз ĐœĐžŃ ĐœĐ°ĐżĐžŃĐ°ĐœŃ ŃазŃĐ°Đ±ĐŸŃŃĐžĐșĐ°ĐŒĐž, ĐŽŃŃгОД ĐŽĐŸŃŃŃĐżĐœŃ Ń ĐŸŃĐșŃŃŃŃĐŒ ĐžŃŃ ĐŸĐŽĐœŃĐŒ ĐșĐŸĐŽĐŸĐŒ, а ŃŃĐ”ŃŃĐž ŃĐČĐ»ŃŃŃŃŃ ĐœĐ”ĐŸŃŃĐ”ĐŒĐ»Đ”ĐŒĐŸĐč ŃаŃŃŃŃ ĐŽĐžŃŃŃОбŃŃĐžĐČа Erlang/OTP. ĐĄĐžŃŃĐ”ĐŒĐ° ĐČŃĐ”ĐŒĐ”ĐœĐž ĐČŃĐżĐŸĐ»ĐœĐ”ĐœĐžŃ Erlang Đž ДД ĐžĐœŃŃŃŃĐŒĐ”ĐœŃŃ ĐŸĐŽĐžĐœĐ°ĐșĐŸĐČĐŸ ĐŸĐ±ŃабаŃŃĐČаŃŃ ĐČŃĐ” ĐżŃĐžĐ»ĐŸĐ¶Đ”ĐœĐžŃ, ĐœĐ”Đ·Đ°ĐČĐžŃĐžĐŒĐŸ ĐŸŃ ŃĐŸĐłĐŸ, ŃĐČĐ»ŃŃŃŃŃ Đ»Đž ĐŸĐœĐž ŃаŃŃŃŃ ĐŽĐžŃŃŃОбŃŃĐžĐČа Erlang ОлО ĐœĐ”Ń.
15.6. РДплОĐșаŃĐžŃ Đž ŃĐČŃĐ·Ń ĐČ Riak Riak бŃĐ» ŃазŃĐ°Đ±ĐŸŃĐ°Đœ ĐŽĐ»Ń ĐŸĐ±Đ”ŃпДŃĐ”ĐœĐžŃ ĐžŃĐșĐ»ŃŃĐžŃДлŃĐœĐŸĐč ĐœĐ°ĐŽĐ”Đ¶ĐœĐŸŃŃĐž Đž ĐŽĐŸŃŃŃĐżĐœĐŸŃŃĐž ĐČ Đ±ĐŸĐ»ŃŃĐžŃ ĐŒĐ°ŃŃŃĐ°Đ±Đ°Ń Đž бŃĐ» ĐČĐŽĐŸŃ ĐœĐŸĐČĐ»Đ”Đœ ŃĐžŃŃĐ”ĐŒĐŸĐč Ń ŃĐ°ĐœĐ”ĐœĐžŃ ĐŽĐ°ĐœĐœŃŃ Dynamo ĐŸŃ Amazon [ DHJ+07 ]. ĐŃŃ ĐžŃĐ”ĐșŃŃŃŃ Dynamo Đž Riak ŃĐŸŃĐ”ŃаŃŃ ĐČ ŃДбД аŃпДĐșŃŃ ĐșаĐș ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃŃ Ń Đ”Ń-ŃĐ°Đ±Đ»ĐžŃ (DHT), ŃаĐș Đž ŃŃаЎОŃĐžĐŸĐœĐœŃŃ Đ±Đ°Đ· ĐŽĐ°ĐœĐœŃŃ . ĐĐČа ĐșĐ»ŃŃĐ”ĐČŃŃ ĐŒĐ”ŃĐŸĐŽĐ°, ĐșĐŸŃĐŸŃŃĐ” ĐžŃĐżĐŸĐ»ŃĐ·ŃŃŃ Riak Đž Dynamo, â ŃŃĐŸ ĐżĐŸŃĐ»Đ”ĐŽĐŸĐČаŃДлŃĐœĐŸĐ” Ń Đ”ŃĐžŃĐŸĐČĐ°ĐœĐžĐ” ĐŽĐ»Ń ŃĐ°Đ·ĐŒĐ”ŃĐ”ĐœĐžŃ ŃДплОĐș Đž ĐżŃĐŸŃĐŸĐșĐŸĐ» ŃплДŃĐ”Đœ ĐŽĐ»Ń ĐŸĐ±ĐŒĐ”ĐœĐ° ĐŸĐ±ŃĐžĐŒ ŃĐŸŃŃĐŸŃĐœĐžĐ”ĐŒ.
ĐĄĐŸĐłĐ»Đ°ŃĐŸĐČĐ°ĐœĐœĐŸĐ” Ń Đ”ŃĐžŃĐŸĐČĐ°ĐœĐžĐ” ŃŃДбŃĐ”Ń, ŃŃĐŸĐ±Ń ĐČŃĐ” ŃĐ·Đ»Ń ĐČ ŃĐžŃŃĐ”ĐŒĐ” Đ·ĐœĐ°Đ»Đž ĐŽŃŃĐł ĐŸ ĐŽŃŃгД Đž Đ·ĐœĐ°Đ»Đž, ĐșаĐșĐžĐŒĐž ŃĐ°Đ·ĐŽĐ”Đ»Đ°ĐŒĐž ĐČĐ»Đ°ĐŽĐ”Đ”Ń ĐșажЎŃĐč ŃзДл. ĐŃĐž ĐŽĐ°ĐœĐœŃĐ” ĐŸ ĐœĐ°Đ·ĐœĐ°ŃĐ”ĐœĐžĐž ĐŒĐŸĐ¶ĐœĐŸ Ń ŃĐ°ĐœĐžŃŃ ĐČ ŃаĐčлД ĐșĐŸĐœŃОгŃŃаŃОО Ń ŃĐ”ĐœŃŃĐ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐœŃĐŒ ŃĐżŃаĐČĐ»Đ”ĐœĐžĐ”ĐŒ, ĐœĐŸ ĐČ Đ±ĐŸĐ»ŃŃĐžŃ ĐșĐŸĐœŃОгŃŃаŃĐžŃŃ ŃŃĐŸ ŃŃĐ°ĐœĐŸĐČĐžŃŃŃ ŃŃДзĐČŃŃаĐčĐœĐŸ ŃĐ»ĐŸĐ¶ĐœĐŸ. ĐŃŃĐłĐŸĐč алŃŃĐ”ŃĐœĐ°ŃĐžĐČĐŸĐč ŃĐČĐ»ŃĐ”ŃŃŃ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžĐ” ŃĐ”ĐœŃŃалŃĐœĐŸĐłĐŸ ŃĐ”ŃĐČĐ”Ńа ĐșĐŸĐœŃОгŃŃаŃОО, ĐœĐŸ ŃŃĐŸ ŃĐŸĐ·ĐŽĐ°Đ”Ń Đ”ĐŽĐžĐœŃŃ ŃĐŸŃĐșŃ ĐŸŃĐșаза ĐČ ŃĐžŃŃĐ”ĐŒĐ”. ĐĐŒĐ”ŃŃĐŸ ŃŃĐŸĐłĐŸ Riak ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń ĐżŃĐŸŃĐŸĐșĐŸĐ» ŃплДŃĐ”Đœ ĐŽĐ»Ń ŃаŃĐżŃĐŸŃŃŃĐ°ĐœĐ”ĐœĐžŃ ĐŽĐ°ĐœĐœŃŃ ĐŸ ŃĐ»Đ”ĐœŃŃĐČĐ” ĐČ ĐșлаŃŃĐ”ŃĐ” Đž ĐČлаЎДлŃŃĐ” ŃĐ°Đ·ĐŽĐ”Đ»ĐŸĐČ ĐżĐŸ ĐČŃĐ”Đč ŃĐžŃŃĐ”ĐŒĐ”.
ĐŃĐŸŃĐŸĐșĐŸĐ»Ń ŃплДŃĐ”Đœ, ŃаĐșжД ĐœĐ°Đ·ŃĐČĐ°Đ”ĐŒŃĐ” ŃĐżĐžĐŽĐ”ĐŒĐžŃĐ”ŃĐșĐžĐŒĐž ĐżŃĐŸŃĐŸĐșĐŸĐ»Đ°ĐŒĐž, ŃĐ°Đ±ĐŸŃаŃŃ ĐžĐŒĐ”ĐœĐœĐŸ ŃаĐș, ĐșаĐș Đ·ĐČŃŃаŃ. ĐĐŸĐłĐŽĐ° ŃзДл ĐČ ŃĐžŃŃĐ”ĐŒĐ” Đ¶Đ”Đ»Đ°Đ”Ń ĐžĐ·ĐŒĐ”ĐœĐžŃŃ ŃаŃŃŃ ĐŸĐ±ŃĐžŃ ĐŽĐ°ĐœĐœŃŃ , ĐŸĐœ ĐČĐœĐŸŃĐžŃ ĐžĐ·ĐŒĐ”ĐœĐ”ĐœĐžŃ ĐČ ŃĐČĐŸŃ Đ»ĐŸĐșалŃĐœŃŃ ĐșĐŸĐżĐžŃ ĐŽĐ°ĐœĐœŃŃ Đž пДŃĐ”ĐŽĐ°Đ”Ń ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐœŃĐ” ĐŽĐ°ĐœĐœŃĐ” ŃĐ»ŃŃаĐčĐœĐŸĐŒŃ ŃĐ·Đ»Ń. ĐĐŸĐ»ŃŃĐžĐČ ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐžĐ”, ŃзДл ĐŸĐ±ŃĐ”ĐŽĐžĐœŃĐ”Ń ĐżĐŸĐ»ŃŃĐ”ĐœĐœŃĐ” ĐžĐ·ĐŒĐ”ĐœĐ”ĐœĐžŃ ŃĐŸ ŃĐČĐŸĐžĐŒ Đ»ĐŸĐșалŃĐœŃĐŒ ŃĐŸŃŃĐŸŃĐœĐžĐ”ĐŒ Đž ŃĐœĐŸĐČа пДŃĐ”ĐŽĐ°Đ”Ń ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐ” ĐŽŃŃĐłĐŸĐŒŃ ŃĐ»ŃŃаĐčĐœĐŸĐŒŃ ŃĐ·Đ»Ń.
ĐŃĐž запŃŃĐșĐ” ĐșлаŃŃĐ”Ńа Riak ĐČŃĐ” ŃĐ·Đ»Ń ĐŽĐŸĐ»Đ¶ĐœŃ Đ±ŃŃŃ ĐœĐ°ŃŃŃĐŸĐ”ĐœŃ Ń ĐŸĐŽĐžĐœĐ°ĐșĐŸĐČŃĐŒ ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČĐŸĐŒ ŃĐ°Đ·ĐŽĐ”Đ»ĐŸĐČ. ĐаŃĐ”ĐŒ ĐșĐŸĐ»ŃŃĐŸ ŃĐŸĐłĐ»Đ°ŃĐŸĐČĐ°ĐœĐœĐŸĐłĐŸ Ń Đ”ŃĐžŃĐŸĐČĐ°ĐœĐžŃ ĐŽĐ”Đ»ĐžŃŃŃ ĐœĐ° ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČĐŸ ŃĐ°Đ·ĐŽĐ”Đ»ĐŸĐČ, Đž ĐșажЎŃĐč ĐžĐœŃĐ”ŃĐČал ŃĐŸŃ ŃĐ°ĐœŃĐ”ŃŃŃ Đ»ĐŸĐșалŃĐœĐŸ ĐșаĐș {HashRange, Owner}паŃа. ĐĐ”ŃĐČŃĐč ŃзДл ĐșлаŃŃĐ”Ńа ĐżŃĐŸŃŃĐŸ заŃĐČĐ»ŃĐ”Ń ĐżŃаĐČа ĐœĐ° ĐČŃĐ” ŃазЎДлŃ. ĐĐŸĐłĐŽĐ° ĐœĐŸĐČŃĐč ŃзДл ĐżŃĐžŃĐŸĐ”ĐŽĐžĐœŃĐ”ŃŃŃ Đș ĐșлаŃŃĐ”ŃŃ, ĐŸĐœ ĐŸĐ±ŃаŃаДŃŃŃ Đș ŃŃŃĐ”ŃŃĐČŃŃŃĐ”ĐŒŃ ŃĐ·Đ»Ń Đ·Đ° ŃпОŃĐșĐŸĐŒ {HashRange, Owner} ĐŸĐŽĐœĐŸŃĐ°ĐœĐłĐŸĐČŃŃ ŃĐ·Đ»ĐŸĐČ. ĐаŃĐ”ĐŒ ĐŸĐœ запŃаŃĐžĐČĐ°Đ”Ń ĐżĐ°ŃŃ (ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČĐŸ ŃĐ°Đ·ĐŽĐ”Đ»ĐŸĐČ)/(ĐșĐŸĐ»ĐžŃĐ”ŃŃĐČĐŸ ŃĐ·Đ»ĐŸĐČ), ĐŸĐ±ĐœĐŸĐČĐ»ŃŃ ŃĐČĐŸĐ” Đ»ĐŸĐșалŃĐœĐŸĐ” ŃĐŸŃŃĐŸŃĐœĐžĐ”, ŃŃĐŸĐ±Ń ĐŸŃŃазОŃŃ ĐœĐŸĐČĐŸĐ” ĐČĐ»Đ°ĐŽĐ”ĐœĐžĐ”. ĐĐ±ĐœĐŸĐČĐ»Đ”ĐœĐœĐ°Ń ĐžĐœŃĐŸŃĐŒĐ°ŃĐžŃ ĐŸ ĐČлаЎДлŃŃĐ” заŃĐ”ĐŒ пДŃДЎаДŃŃŃ ĐŸĐŽĐœĐŸŃĐ°ĐœĐłĐŸĐČĐŸĐŒŃ ŃĐ·Đ»Ń. ĐŃĐŸ ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐœĐŸĐ” ŃĐŸŃŃĐŸŃĐœĐžĐ” заŃĐ”ĐŒ ŃаŃĐżŃĐŸŃŃŃĐ°ĐœĐžĐ»ĐŸŃŃ ĐżĐŸ ĐČŃĐ”ĐŒŃ ĐșлаŃŃĐ”ŃŃ Ń ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžĐ”ĐŒ ĐŸĐżĐžŃĐ°ĐœĐœĐŸĐłĐŸ ĐČŃŃĐ” Đ°Đ»ĐłĐŸŃĐžŃĐŒĐ°.
ĐŃĐżĐŸĐ»ŃĐ·ŃŃ ĐżŃĐŸŃĐŸĐșĐŸĐ» ŃплДŃĐ”Đœ, Riak ĐžĐ·Đ±Đ”ĐłĐ°Đ”Ń ŃĐŸĐ·ĐŽĐ°ĐœĐžŃ Đ”ĐŽĐžĐœĐŸĐč ŃĐŸŃĐșĐž ĐŸŃĐșаза ĐČ ĐČОЎД ŃĐ”ĐœŃŃĐ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐœĐŸĐłĐŸ ŃĐ”ŃĐČĐ”Ńа ĐșĐŸĐœŃОгŃŃаŃОО, ĐŸŃĐČĐŸĐ±ĐŸĐ¶ĐŽĐ°Ń ŃĐžŃŃĐ”ĐŒĐœŃŃ ĐŸĐżĐ”ŃаŃĐŸŃĐŸĐČ ĐŸŃ ĐœĐ”ĐŸĐ±Ń ĐŸĐŽĐžĐŒĐŸŃŃĐž ĐżĐŸĐŽĐŽĐ”ŃжОĐČаŃŃ ĐșŃĐžŃĐžŃĐ”ŃĐșОД ĐŽĐ°ĐœĐœŃĐ” ĐșĐŸĐœŃОгŃŃаŃОО ĐșлаŃŃĐ”Ńа. ĐŃĐ±ĐŸĐč ŃзДл ĐŒĐŸĐ¶Đ”Ń Đ·Đ°ŃĐ”ĐŒ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČаŃŃ ĐżĐŸĐ»ŃŃĐ”ĐœĐœŃĐ” ĐŽĐ°ĐœĐœŃĐ” ĐŸ ĐœĐ°Đ·ĐœĐ°ŃĐ”ĐœĐžĐž ŃĐ°Đ·ĐŽĐ”Đ»ĐŸĐČ ĐČ ŃĐžŃŃĐ”ĐŒĐ” ĐŽĐ»Ń ĐŒĐ°ŃŃŃŃŃОзаŃОО запŃĐŸŃĐŸĐČ. ĐŃĐž ŃĐŸĐČĐŒĐ”ŃŃĐœĐŸĐŒ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžĐž ĐżŃĐŸŃĐŸĐșĐŸĐ» Gossip Đž ĐżĐŸŃĐ»Đ”ĐŽĐŸĐČаŃДлŃĐœĐŸĐ” Ń Đ”ŃĐžŃĐŸĐČĐ°ĐœĐžĐ” ĐżĐŸĐ·ĐČĐŸĐ»ŃŃŃ Riak ŃŃĐœĐșŃĐžĐŸĐœĐžŃĐŸĐČаŃŃ ĐșаĐș ĐŽĐ”ĐčŃŃĐČĐžŃДлŃĐœĐŸ ĐŽĐ”ŃĐ”ĐœŃŃĐ°Đ»ĐžĐ·ĐŸĐČĐ°ĐœĐœĐ°Ń ŃĐžŃŃĐ”ĐŒĐ°, ŃŃĐŸ ĐžĐŒĐ”Đ”Ń ĐČĐ°Đ¶ĐœŃĐ” ĐżĐŸŃлДЎŃŃĐČĐžŃ ĐŽĐ»Ń ŃазĐČĐ”ŃŃŃĐČĐ°ĐœĐžŃ Đž ŃĐșŃплŃаŃаŃОО ĐșŃŃĐżĐœĐŸĐŒĐ°ŃŃŃĐ°Đ±ĐœŃŃ ŃĐžŃŃĐ”ĐŒ.
15.7. ĐŃĐČĐŸĐŽŃ Đž ОзĐČлДŃĐ”ĐœĐœŃĐ” ŃŃĐŸĐșĐž ĐĐŸĐ»ŃŃĐžĐœŃŃĐČĐŸ ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃŃĐŸĐČ ŃŃĐžŃаŃŃ, ŃŃĐŸ ĐŒĐ”ĐœŃŃОД Đž ĐżŃĐŸŃŃŃĐ” Đ±Đ°Đ·Ń ĐșĐŸĐŽĐ° ĐœĐ” ŃĐŸĐ»ŃĐșĐŸ лДгŃĐ” ĐżĐŸĐŽĐŽĐ”ŃжОĐČаŃŃ, ĐœĐŸ Đž ŃаŃŃĐŸ ŃĐŸĐŽĐ”ŃĐ¶Đ°Ń ĐŒĐ”ĐœŃŃĐ” ĐŸŃĐžĐ±ĐŸĐș. ĐŃĐżĐŸĐ»ŃĐ·ŃŃ Đ±Đ°Đ·ĐŸĐČŃĐ” ĐżŃĐžĐŒĐžŃĐžĐČŃ ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐžŃ Erlang ĐŽĐ»Ń ŃĐČŃĐ·Đž ĐČ ĐșлаŃŃĐ”ŃĐ”, Riak ĐŒĐŸĐ¶Đ”Ń ĐœĐ°ŃаŃŃ Ń ŃŃĐœĐŽĐ°ĐŒĐ”ĐœŃалŃĐœĐŸ ĐœĐ°ĐŽĐ”Đ¶ĐœĐŸĐłĐŸ ŃŃĐŸĐČĐœŃ Đ°ŃĐžĐœŃ ŃĐŸĐœĐœĐŸĐłĐŸ ĐŸĐ±ĐŒĐ”ĐœĐ° ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃĐŒĐž Đž ĐżĐŸŃŃŃĐŸĐžŃŃ ŃĐČĐŸĐž ŃĐŸĐ±ŃŃĐČĐ”ĐœĐœŃĐ” ĐżŃĐŸŃĐŸĐșĐŸĐ»Ń, ĐœĐ” бДŃĐżĐŸĐșĐŸŃŃŃ ĐŸĐ± ŃŃĐŸĐč Đ±Đ°Đ·ĐŸĐČĐŸĐč ŃДалОзаŃОО. ĐĐŸ ĐŒĐ”ŃĐ” ŃĐŸĐłĐŸ, ĐșаĐș Riak ŃŃĐ°ĐœĐŸĐČОлŃŃ Đ·ŃĐ”Đ»ĐŸĐč ŃĐžŃŃĐ”ĐŒĐŸĐč, ĐœĐ”ĐșĐŸŃĐŸŃŃĐ” аŃпДĐșŃŃ Đ”Đ” ŃĐ”ŃĐ”ĐČĐŸĐłĐŸ ĐČĐ·Đ°ĐžĐŒĐŸĐŽĐ”ĐčŃŃĐČĐžŃ ĐŸŃĐŸŃлО ĐŸŃ ĐžŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžŃ ĐČŃŃŃĐŸĐ”ĐœĐœĐŸĐłĐŸ ĐŽĐžŃŃŃОбŃŃĐžĐČа Erlang (Đș ĐżŃŃĐŒĐŸĐŒŃ ĐŒĐ°ĐœĐžĐżŃлОŃĐŸĐČĐ°ĐœĐžŃ TCP-ŃĐŸĐșĐ”ŃĐ°ĐŒĐž), ĐČ ŃĐŸ ĐČŃĐ”ĐŒŃ ĐșаĐș ĐŽŃŃгОД ĐŸŃŃаĐČалОŃŃ Ń ĐŸŃĐŸŃĐŸ ĐżĐŸĐŽŃ ĐŸĐŽŃŃĐžĐŒĐž ĐŽĐ»Ń ĐČĐșĐ»ŃŃĐ”ĐœĐœŃŃ ĐżŃĐžĐŒĐžŃĐžĐČĐŸĐČ. ĐаŃаĐČ Ń ĐČŃŃŃĐŸĐ”ĐœĐœĐŸĐč пДŃДЎаŃĐž ŃĐŸĐŸĐ±ŃĐ”ĐœĐžĐč Erlang ĐŽĐ»Ń ĐČŃĐ”ĐłĐŸ, ĐșĐŸĐŒĐ°ĐœĐŽĐ° Riak ŃĐŒĐŸĐłĐ»Đ° ĐŸŃĐ”ĐœŃ Đ±ŃŃŃŃĐŸ ĐżĐŸŃŃŃĐŸĐžŃŃ ĐČŃŃ ŃĐžŃŃĐ”ĐŒŃ. ĐŃĐž ĐżŃĐžĐŒĐžŃĐžĐČŃ ĐŽĐŸŃŃаŃĐŸŃĐœĐŸ ŃĐžŃŃŃ Đž ĐżĐŸĐœŃŃĐœŃ, ŃŃĐŸĐ±Ń ĐżĐŸŃĐŸĐŒ бŃĐ»ĐŸ лДгĐșĐŸ Đ·Đ°ĐŒĐ”ĐœĐžŃŃ ŃĐ” ĐœĐ”ĐŒĐœĐŸĐłĐžĐ” ĐŒĐ”ŃŃа, гЎД ĐŸĐœĐž ĐŸĐșазалОŃŃ ĐœĐ” Đ»ŃŃŃĐžĐŒ ĐŸĐ±ŃĐ°Đ·ĐŸĐŒ ĐżĐŸĐŽŃ ĐŸĐŽŃŃĐžĐŒĐž ĐŽĐ»Ń ĐżŃĐŸĐžĐ·ĐČĐŸĐŽŃŃĐČа.
ĐŃĐŸĐŒĐ” ŃĐŸĐłĐŸ, Đ±Đ»Đ°ĐłĐŸĐŽĐ°ŃŃ Ń Đ°ŃаĐșŃĐ”ŃŃ ĐŸĐ±ĐŒĐ”ĐœĐ° ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃĐŒĐž Erlang Đž лДгĐșĐŸĐŒŃ ŃĐŽŃŃ ĐČĐžŃŃŃалŃĐœĐŸĐč ĐŒĐ°ŃĐžĐœŃ Erlang ĐżĐŸĐ»ŃĐ·ĐŸĐČаŃĐ”Đ»Ń ĐŒĐŸĐ¶Đ”Ń Ń Đ»Đ”ĐłĐșĐŸŃŃŃŃ Đ·Đ°ĐżŃŃĐșаŃŃ 12 ŃĐ·Đ»ĐŸĐČ ĐœĐ° 1 ĐŒĐ°ŃĐžĐœĐ” ОлО 12 ŃĐ·Đ»ĐŸĐČ ĐœĐ° 12 ĐŒĐ°ŃĐžĐœĐ°Ń . ĐŃĐŸ Đ·ĐœĐ°ŃĐžŃДлŃĐœĐŸ ŃĐżŃĐŸŃĐ°Đ”Ń ŃазŃĐ°Đ±ĐŸŃĐșŃ Đž ŃĐ”ŃŃĐžŃĐŸĐČĐ°ĐœĐžĐ” ĐżĐŸ ŃŃаĐČĐœĐ”ĐœĐžŃ Ń Đ±ĐŸĐ»Đ”Đ” ŃŃжДлŃĐŒĐž ĐŒĐ”Ń Đ°ĐœĐžĐ·ĐŒĐ°ĐŒĐž ĐŸĐ±ĐŒĐ”ĐœĐ° ŃĐŸĐŸĐ±ŃĐ”ĐœĐžŃĐŒĐž Đž ĐșлаŃŃĐ”ŃОзаŃОО. ĐŃĐŸ бŃĐ»ĐŸ ĐŸŃĐŸĐ±Đ”ĐœĐœĐŸ ŃĐ”ĐœĐœĐŸ Оз-за ŃŃĐœĐŽĐ°ĐŒĐ”ĐœŃалŃĐœĐŸ ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœĐŸĐč ĐżŃĐžŃĐŸĐŽŃ Riak. ĐŃŃĐŸŃĐžŃĐ”ŃĐșĐž ŃĐ»ĐŸĐ¶ĐžĐ»ĐŸŃŃ ŃаĐș, ŃŃĐŸ Đ±ĐŸĐ»ŃŃĐžĐœŃŃĐČĐŸ ŃаŃĐżŃĐ”ĐŽĐ”Đ»Đ”ĐœĐœŃŃ ŃĐžŃŃĐ”ĐŒ ĐŸŃĐ”ĐœŃ ŃĐ»ĐŸĐ¶ĐœĐŸ ŃĐ°Đ±ĐŸŃаŃŃ ĐČ Â«ŃĐ”Đ¶ĐžĐŒĐ” ŃазŃĐ°Đ±ĐŸŃĐșО» ĐœĐ° ĐŸĐŽĐœĐŸĐŒ ĐœĐŸŃŃбŃĐșĐ” ŃазŃĐ°Đ±ĐŸŃŃĐžĐșа. Đ ŃДзŃĐ»ŃŃаŃĐ” ŃазŃĐ°Đ±ĐŸŃŃĐžĐșĐ°ĐŒ ŃаŃŃĐŸ ĐżŃĐžŃ ĐŸĐŽĐžŃŃŃ ŃĐ”ŃŃĐžŃĐŸĐČаŃŃ ŃĐČĐŸĐč ĐșĐŸĐŽ ĐČ ŃŃДЎД, ĐșĐŸŃĐŸŃĐ°Ń ŃĐČĐ»ŃĐ”ŃŃŃ ĐżĐŸĐŽĐŒĐœĐŸĐ¶Đ”ŃŃĐČĐŸĐŒ ĐžŃ ĐżĐŸĐ»ĐœĐŸĐč ŃĐžŃŃĐ”ĐŒŃ, Ń ŃĐŸĐČĐ”ŃŃĐ”ĐœĐœĐŸ ĐŽŃŃĐłĐžĐŒ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”ĐŒ. ĐĐŸŃĐșĐŸĐ»ŃĐșŃ ĐŒĐœĐŸĐłĐŸŃĐ·Đ»ĐŸĐČĐŸĐč ĐșлаŃŃĐ”Ń Riak ĐŒĐŸĐ¶ĐœĐŸ лДгĐșĐŸ запŃŃŃĐžŃŃ ĐœĐ° ĐŸĐŽĐœĐŸĐŒ ĐœĐŸŃŃбŃĐșĐ” бДз ŃŃĐ”Đ·ĐŒĐ”ŃĐœĐŸĐłĐŸ ĐżĐŸŃŃĐ”Đ±Đ»Đ”ĐœĐžŃ ŃĐ”ŃŃŃŃĐŸĐČ ĐžĐ»Đž ŃĐ»ĐŸĐ¶ĐœĐŸĐč ĐœĐ°ŃŃŃĐŸĐčĐșĐž, ĐČ ĐżŃĐŸŃĐ”ŃŃĐ” ŃазŃĐ°Đ±ĐŸŃĐșĐž ĐŒĐŸĐ¶ĐœĐŸ лДгŃĐ” ŃĐŸĐ·ĐŽĐ°ĐČаŃŃ ĐșĐŸĐŽ, ĐłĐŸŃĐŸĐČŃĐč Đș ŃазĐČĐ”ŃŃŃĐČĐ°ĐœĐžŃ ĐČ ŃĐ°Đ±ĐŸŃĐ”Đč ŃŃДЎД.
ĐŃĐżĐŸĐ»ŃĐ·ĐŸĐČĐ°ĐœĐžĐ” ŃŃпДŃĐČĐžĐ·ĐŸŃĐŸĐČ Erlang/OTP ĐŽĐ”Đ»Đ°Đ”Ń Riak ĐłĐŸŃĐ°Đ·ĐŽĐŸ Đ±ĐŸĐ»Đ”Đ” ŃŃŃĐŸĐčŃĐžĐČŃĐŒ Đș ŃĐ±ĐŸŃĐŒ ĐżĐŸĐŽĐșĐŸĐŒĐżĐŸĐœĐ”ĐœŃĐŸĐČ. РОаĐș ĐžĐŽĐ”Ń ĐŽĐ°Đ»ŃŃĐ”; ĐĐŽĐŸŃ ĐœĐŸĐČĐ»Đ”ĐœĐœŃĐč ŃаĐșĐžĐŒ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžĐ”ĐŒ, ĐșлаŃŃĐ”Ń Riak ŃаĐșжД ĐŒĐŸĐ¶Đ”Ń Đ»Đ”ĐłĐșĐŸ ĐżŃĐŸĐŽĐŸĐ»Đ¶Đ°ŃŃ ŃŃĐœĐșŃĐžĐŸĐœĐžŃĐŸĐČаŃŃ, ЎажД ĐșĐŸĐłĐŽĐ° ŃДлŃĐ” ŃĐ·Đ»Ń ĐČŃŃ ĐŸĐŽŃŃ ĐžĐ· ŃŃŃĐŸŃ Đž ĐžŃŃДзаŃŃ ĐžĐ· ŃĐžŃŃĐ”ĐŒŃ. ĐŃĐŸ ĐŒĐŸĐ¶Đ”Ń ĐżŃĐžĐČĐ”ŃŃĐž Đș ĐżĐŸŃĐŸĐč ŃĐŽĐžĐČĐžŃДлŃĐœĐŸĐŒŃ ŃŃĐŸĐČĐœŃ ŃŃŃĐŸĐčŃĐžĐČĐŸŃŃĐž. ĐĐŽĐœĐžĐŒ Оз ĐżŃĐžĐŒĐ”ŃĐŸĐČ ŃŃĐŸĐłĐŸ бŃĐ» ŃĐ»ŃŃаĐč, ĐșĐŸĐłĐŽĐ° ĐșŃŃĐżĐœĐŸĐ” ĐżŃДЎпŃĐžŃŃОД ĐżŃĐŸĐČĐŸĐŽĐžĐ»ĐŸ ŃŃŃĐ”ŃŃ-ŃĐ”ŃŃĐžŃĐŸĐČĐ°ĐœĐžĐ” ŃазлОŃĐœŃŃ Đ±Đ°Đ· ĐŽĐ°ĐœĐœŃŃ Đž ĐœĐ°ĐŒĐ”ŃĐ”ĐœĐœĐŸ ĐČŃĐČĐŸĐŽĐžĐ»ĐŸ ĐžŃ ĐžĐ· ŃŃŃĐŸŃ, ŃŃĐŸĐ±Ń ĐœĐ°Đ±Đ»ŃЎаŃŃ Đ·Đ° ĐžŃ ĐłŃĐ°ĐœĐžŃĐœŃĐŒĐž ŃŃĐ»ĐŸĐČĐžŃĐŒĐž. ĐĐŸĐłĐŽĐ° ĐŸĐœĐž ĐŽĐŸĐ±ŃалОŃŃ ĐŽĐŸ РОаĐșа, ĐŸĐœĐž ŃаŃŃĐ”ŃŃлОŃŃ. ĐажЎŃĐč Ńаз, ĐșĐŸĐłĐŽĐ° ĐŸĐœĐž ĐœĐ°Ń ĐŸĐŽĐžĐ»Đž ŃĐżĐŸŃĐŸĐ± (ĐżĐŸŃŃДЎŃŃĐČĐŸĐŒ ĐŒĐ°ĐœĐžĐżŃĐ»ŃŃĐžĐč ĐœĐ° ŃŃĐŸĐČĐœĐ” ĐĐĄ, ĐżĐ»ĐŸŃ ĐŸĐłĐŸ IPC Đž Ń. ĐŽ.) ĐżŃĐžĐČĐ”ŃŃĐž Đș ŃĐ±ĐŸŃ ĐżĐŸĐŽŃĐžŃŃĐ”ĐŒŃ Riak, ĐŸĐœĐž ĐœĐ°Đ±Đ»ŃЎалО ĐŸŃĐ”ĐœŃ ĐșŃаŃĐșĐŸĐČŃĐ”ĐŒĐ”ĐœĐœĐŸĐ” ĐżĐ°ĐŽĐ”ĐœĐžĐ” ĐżŃĐŸĐžĐ·ĐČĐŸĐŽĐžŃДлŃĐœĐŸŃŃĐž, а заŃĐ”ĐŒ ŃĐžŃŃĐ”ĐŒĐ° ĐČĐŸĐ·ĐČŃаŃалаŃŃ Đș ĐœĐŸŃĐŒĐ°Đ»ŃĐœĐŸĐŒŃ ĐżĐŸĐČĐ”ĐŽĐ”ĐœĐžŃ. ĐŃĐŸ ĐżŃŃĐŒĐŸĐč ŃДзŃĐ»ŃŃĐ°Ń ĐżŃĐŸĐŽŃĐŒĐ°ĐœĐœĐŸĐłĐŸ ĐżĐŸĐŽŃ ĐŸĐŽĐ° «пŃŃŃŃ ŃŃŃ ĐœĐ”Ń». РОаĐș аĐșĐșŃŃаŃĐœĐŸ пДŃДзапŃŃĐșал ĐșажЎŃŃ ĐžĐ· ŃŃĐžŃ ĐżĐŸĐŽŃĐžŃŃĐ”ĐŒ ĐżĐŸ ŃŃĐ”Đ±ĐŸĐČĐ°ĐœĐžŃ, Đž ĐČŃŃ ŃĐžŃŃĐ”ĐŒĐ° ĐżŃĐŸŃŃĐŸ ĐżŃĐŸĐŽĐŸĐ»Đ¶Đ°Đ»Đ° ŃŃĐœĐșŃĐžĐŸĐœĐžŃĐŸĐČаŃŃ. ĐŃĐŸŃ ĐŸĐżŃŃ ĐżĐŸĐșазŃĐČĐ°Đ”Ń ĐžĐŒĐ”ĐœĐœĐŸ ŃŃ ŃŃŃĐŸĐčŃĐžĐČĐŸŃŃŃ, ĐșĐŸŃĐŸŃŃŃ ĐŸĐ±Đ”ŃпДŃĐžĐČĐ°Đ”Ń ĐżĐŸĐŽŃ ĐŸĐŽ Erlang/OTP Đș ŃĐŸĐ·ĐŽĐ°ĐœĐžŃ ĐżŃĐŸĐłŃĐ°ĐŒĐŒ.
15.7.1. ĐĐ»Đ°ĐłĐŸĐŽĐ°ŃĐœĐŸŃŃĐž ĐŃа глаĐČа ĐŸŃĐœĐŸĐČĐ°ĐœĐ° ĐœĐ° ĐșĐŸĐœŃпДĐșŃĐ°Ń Đ»Đ”ĐșŃĐžĐč Đ€ŃĐ°ĐœŃĐ”ŃĐșĐŸ ЧДзаŃĐžĐœĐž Đž ХаĐčĐŒĐŸĐœĐ° ĐąĐŸĐŒĐżŃĐŸĐœĐ° 2009 ĐłĐŸĐŽĐ°, ĐżŃĐŸŃĐžŃĐ°ĐœĐœŃŃ ĐČ ĐŠĐ”ĐœŃŃалŃĐœĐŸ-ĐĐČŃĐŸĐżĐ”ĐčŃĐșĐŸĐč ŃĐșĐŸĐ»Đ” ŃŃĐœĐșŃĐžĐŸĐœĐ°Đ»ŃĐœĐŸĐłĐŸ ĐżŃĐŸĐłŃĐ°ĐŒĐŒĐžŃĐŸĐČĐ°ĐœĐžŃ, ĐżŃĐŸŃ ĐŸĐŽĐžĐČŃĐ”Đč ĐČ ĐŃЎапДŃŃĐ” Đž ĐĐŸĐŒĐŸŃĐœĐŸ. ĐĐŸĐ»ŃŃĐŸĐč ĐČĐșлаЎ ĐČĐœĐ”Ń ĐĄĐ°ĐčĐŒĐŸĐœ ĐąĐŸĐŒĐżŃĐŸĐœ Оз ĐĐ”ĐœŃŃĐșĐŸĐłĐŸ ŃĐœĐžĐČĐ”ŃŃĐžŃĐ”Ńа ĐČ ĐĐ”ĐœŃĐ”ŃбДŃĐž, ĐДлОĐșĐŸĐ±ŃĐžŃĐ°ĐœĐžŃ. ĐŃĐŸĐ±Đ°Ń Đ±Đ»Đ°ĐłĐŸĐŽĐ°ŃĐœĐŸŃŃŃ ĐČŃŃажаДŃŃŃ ĐČŃĐ”ĐŒ ŃĐ”ŃĐ”ĐœĐ·Đ”ĐœŃĐ°ĐŒ, ĐșĐŸŃĐŸŃŃĐ” ĐœĐ° ŃĐ°Đ·ĐœŃŃ ŃŃĐ°ĐżĐ°Ń ĐœĐ°ĐżĐžŃĐ°ĐœĐžŃ ŃŃĐŸĐč глаĐČŃ ĐżŃĐ”ĐŽĐŸŃŃаĐČОлО ŃĐ”ĐœĐœŃĐ” ĐŸŃĐ·ŃĐČŃ.