เจ•เจฒเฉ‹เจธเจŸเจฐ โ†’ เจธเจงเจพเจฐเจจ OTP เจ•เจฒเฉฑเจธเจŸเจฐ เจชเฉเจฐเจฌเฉฐเจงเจจ

เจฒเจ—เจญเจ— เจนเจฐ เจธเจซเจฒ เจ•เจพเจฐเฉ‹เจฌเจพเจฐเฉ€ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจœเจฒเจฆเฉ€ เจœเจพเจ‚ เจฌเจพเจ…เจฆ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจชเฉœเจพเจ… เจตเจฟเฉฑเจš เจฆเจพเจ–เจฒ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ เจœเจฟเฉฑเจฅเฉ‡ เจนเจฐเฉ€เจœเฉฑเจŸเจฒ เจธเจ•เฉ‡เจฒเจฟเฉฐเจ— เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจฎเจพเจฎเจฒเจฟเจ†เจ‚ เจตเจฟเฉฑเจš, เจคเฉเจธเฉ€เจ‚ เจฌเจธ เจ‡เฉฑเจ• เจจเจตเฉ€เจ‚ เจ‰เจฆเจพเจนเจฐเจฃ เจธเจผเฉเจฐเฉ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจฒเฉ‹เจก เจ”เจธเจค เจ˜เจŸเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจชเจฐ เจ‡เฉฑเจฅเฉ‡ เจ˜เฉฑเจŸ เจฎเจพเจฎเฉ‚เจฒเฉ€ เจ•เฉ‡เจธ เจตเฉ€ เจนเจจ เจœเจฟเฉฑเจฅเฉ‡ เจธเจพเจจเฉ‚เฉฐ เจ‡เจน เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ เจ•เจฟ เจตเฉฑเจ–-เจตเฉฑเจ– เจจเฉ‹เจก เจ‡เฉฑเจ• เจฆเฉ‚เจœเฉ‡ เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจฆเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจงเจฟเจ†เจจ เจจเจพเจฒ เจ•เฉฐเจฎ เจฆเฉ‡ เจฌเฉ‹เจ เจจเฉ‚เฉฐ เจตเฉฐเจกเจฆเฉ‡ เจนเจจเฅค

เจ•เจฒเฉ‹เจธเจŸเจฐ โ†’ เจธเจงเจพเจฐเจจ OTP เจ•เจฒเฉฑเจธเจŸเจฐ เจชเฉเจฐเจฌเฉฐเจงเจจ

เจ‡เจน เจ‡เจธ เจฒเจˆ เจ–เฉเจธเจผเจ•เจฟเจธเจฎเจค เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจฌเจพเจนเจฐ เจฌเจฆเจฒ เจฆเจฟเฉฑเจคเจพ เจ—เจฒเจค, เจœเจฟเจธเจจเฉ‚เฉฐ เจ…เจธเฉ€เจ‚ เจ‡เจธเจฆเฉ‡ เจธเฉเจนเจพเจตเจฃเฉ‡ เจธเฉฐเจŸเฉˆเจ•เจธ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ‡ เจ†เจฒเฉ‡ เจฆเฉเจ†เจฒเฉ‡ เจนเจพเจˆเจช เจฒเจˆ เจšเฉเจฃเจฟเจ† เจนเฉˆ, เจ‡เฉฑเจ• เจซเจธเจŸ-เจ•เจฒเจพเจธ เจนเฉˆ เจตเจฟเจคเจฐเจฟเจค เจธเจฟเจธเจŸเจฎเจพเจ‚ เจฒเจˆ เจธเจฎเจฐเจฅเจจ. เจธเจฟเจงเจพเจ‚เจค เจตเจฟเฉฑเจš, เจ‡เจน เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจฎเจพเจฎเฉ‚เจฒเฉ€ เจœเจพเจชเจฆเจพ เจนเฉˆ:

เจตเฉฑเจ–-เจตเฉฑเจ– เจจเฉ‹เจกเจพเจ‚ 'เจคเฉ‡ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ-เจจเจพเจฒ เจฒเจฟเฉฐเจ•เจพเจ‚ เจ…เจคเฉ‡ เจฎเจพเจจเฉ€เจŸเจฐเจพเจ‚ เจฆเฉ‡ เจตเจฟเจšเจ•เจพเจฐ เจธเฉเจจเฉ‡เจนเจพ เจชเจพเจธ เจ•เจฐเจจเจพ, เจชเจพเจฐเจฆเจฐเจธเจผเฉ€ เจนเฉˆ [โ€ฆ]

เจ…เจญเจฟเจ†เจธ เจตเจฟเฉฑเจš, เจธเจญ เจ•เฉเจ เจฅเฉ‹เฉœเจพ เจนเฉ‹เจฐ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจนเฉˆ. เจตเฉฐเจกเจฟเจ† เจ—เจฟเจ† เจ—เจฒเจค เจ‰เจฆเฉ‹เจ‚ เจตเจฟเจ•เจธเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€ เจœเจฆเฉ‹เจ‚ "เจ•เฉฐเจŸเฉ‡เจจเจฐ" เจฆเจพ เจ…เจฐเจฅ เจธเจผเจฟเจชเจฟเฉฐเจ— เจฒเจˆ เจ‡เฉฑเจ• เจตเฉฑเจกเจพ เจฒเฉ‹เจนเฉ‡ เจฆเจพ เจกเฉฑเจฌเจพ เจนเฉเฉฐเจฆเจพ เจธเฉ€, เจ…เจคเฉ‡ "เจกเฉŒเจ•เจฐ" เจธเจฟเจฐเจซเจผ เจฒเฉŒเจ‚เจ—เจธเจผเฉ‹เจฐเจฎเฉˆเจจ เจฆเจพ เจธเจฎเจพเจจเจพเจฐเจฅเฉ€ เจธเฉ€เฅค IN IP4 เจ‡เฉฑเจฅเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจ–เจพเจฒเฉ€ เจชเจคเฉ‡ เจธเจจ, เจจเฉˆเจŸเจตเจฐเจ• เจฌเฉเจฐเฉ‡เจ• เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เฉ‡เจฌเจฒ เจฆเฉเจ†เจฐเจพ เจšเฉ‚เจนเจฟเจ†เจ‚ เจฆเฉ‡ เจšเจฌเจพเจ‰เจฃ เจ•เจพเจฐเจจ เจนเฉเฉฐเจฆเฉ‡ เจธเจจ, เจ…เจคเฉ‡ เจ‰เจคเจชเจพเจฆเจจ เจชเฉเจฐเจฃเจพเจฒเฉ€ เจฆเจพ เจ”เจธเจค เจ…เจชเจŸเจพเจˆเจฎ เจฆเจนเจพเจ•เจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจฎเจพเจชเจฟเจ† เจœเจพเจ‚เจฆเจพ เจธเฉ€เฅค

เจนเฉเจฃ เจ…เจธเฉ€เจ‚ เจธเจพเจฐเฉ‡ เจ…เจตเจฟเจธเจผเจตเจพเจธเจผเจฏเฉ‹เจ— เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจตเฉˆ-เจจเจฟเจฐเจญเจฐ, เจชเฉˆเจ• เจ•เฉ€เจคเฉ‡, เจ…เจคเฉ‡ เจตเฉฐเจกเฉ‡ เจนเฉ‹เจ เจนเจพเจ‚ เจ—เจฒเจค เจ‡เฉฑเจ• เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฟเฉฑเจš เจœเจฟเฉฑเจฅเฉ‡ เจ—เจคเฉ€เจธเจผเฉ€เจฒ IP เจเจกเจฐเฉˆเฉฑเจธ เจฎเจนเจพเจจ เจฌเฉ‡เจคเจฐเจคเฉ€เจฌเจคเจพ เจฆเฉ‡ เจธเจฟเจงเจพเจ‚เจค 'เจคเฉ‡ เจฆเจฟเฉฑเจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ, เจ…เจคเฉ‡ เจจเฉ‹เจก เจธเจผเจกเจฟเจŠเจฒเจฐ เจฆเฉ€ เจ–เฉฑเจฌเฉ€ เจ…เฉฑเจกเฉ€ เจฆเฉ€ เจงเฉเจจ 'เจคเฉ‡ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡ เจธเจ•เจฆเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจ…เจฒเฉ‹เจช เจนเฉ‹ เจธเจ•เจฆเฉ‡ เจนเจจเฅค เจตเฉฐเจกเฉ‡ เจนเฉ‹เจ เจนเจฐเฉ‡เจ• เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจตเจฟเฉฑเจš เจฌเฉ‹เจ‡เจฒเจฐเจชเจฒเฉ‡เจŸ เจ•เฉ‹เจก เจฆเฉ‡ เจขเฉ‡เจฐเจพเจ‚ เจคเฉ‹เจ‚ เจฌเจšเจฃ เจฒเจˆ เจ—เจฒเจค, เจตเจฟเจฐเฉ‹เจงเฉ€ เจฎเจพเจนเฉŒเจฒ เจฆเจพ เจฎเฉเจ•เจพเจฌเจฒเจพ เจ•เจฐเจจ เจฒเจˆ, เจฎเจฆเจฆ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ.

เจŸเจฟเฉฑเจชเจฃเฉ€: เจฎเฉˆเจจเฉ‚เฉฐ เจชเจคเจพ เจนเฉˆ เจ•เจฟ เจ‰เฉฑเจฅเฉ‡ เจนเฉˆ libcluster. เจ‡เจน เจธเฉฑเจšเจฎเฉเฉฑเจš เจฌเจนเฉเจค เจตเจงเฉ€เจ† เจนเฉˆ, เจ‡เจธ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจนเจœเจผเจพเจฐ เจคเฉ‹เจ‚ เจตเฉฑเจง เจคเจพเจฐเฉ‡ เจนเจจ, เจฒเฉ‡เจ–เจ• เจญเจพเจˆเจšเจพเจฐเฉ‡ เจตเจฟเฉฑเจš เจฎเจธเจผเจนเฉ‚เจฐ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจน เจธเจญ เจ•เฉเจเฅค เจœเฉ‡เจ•เจฐ เจ•เจฒเฉฑเจธเจŸเจฐ เจฌเจฃเจพเจ‰เจฃ เจ…เจคเฉ‡ เจ‡เจธ เจจเฉ‚เฉฐ เจ•เจพเจ‡เจฎ เจฐเฉฑเจ–เจฃ เจฒเจˆ เจ‡เจธ เจชเฉˆเจ•เฉ‡เจœ เจฆเฉเจ†เจฐเจพ เจชเฉ‡เจธเจผ เจ•เฉ€เจคเฉ‡ เจ—เจ เจคเจฐเฉ€เจ•เฉ‡ เจคเฉเจนเจพเจกเฉ‡ เจฒเจˆ เจ•เจพเจซเจผเฉ€ เจนเจจ, เจคเจพเจ‚ เจฎเฉˆเจ‚ เจคเฉเจนเจพเจกเฉ‡ เจฒเจˆ เจ–เฉเจธเจผ เจนเจพเจ‚เฅค เจฌเจฆเจ•เจฟเจธเจฎเจคเฉ€ เจจเจพเจฒ, เจฎเฉˆเจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจฌเจนเฉเจค เจ•เฉเจ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจฎเฉˆเจ‚ เจธเฉˆเฉฑเจŸเจ…เฉฑเจช เจจเฉ‚เฉฐ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจจเจฟเจฏเฉฐเจคเจฐเจฟเจค เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ•เจฒเฉฑเจธเจŸเจฐ เจชเฉเจจเจฐเจ—เจ เจจ เจฆเฉ‡ เจฅเฉ€เจเจŸเจฐ เจตเจฟเฉฑเจš เจฌเจพเจนเจฐเฉ€ เจฆเจฐเจธเจผเจ• เจจเจนเฉ€เจ‚ เจฌเจฃเจจเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ‚เฅค

เจฒเฉ‹เฉœ

เจฎเฉˆเจจเฉ‚เฉฐ เจจเจฟเฉฑเจœเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจฆเฉ€ เจฒเฉ‹เฉœ เจธเฉ€ เจœเฉ‹ เจ•เจฒเฉฑเจธเจŸเจฐ เจฆเฉ‡ เจชเฉเจฐเจฌเฉฐเจงเจจ เจจเฉ‚เฉฐ เจธเฉฐเจญเจพเจฒ เจฒเจตเฉ‡เจ—เฉ€ เจ…เจคเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ€เจ†เจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจนเฉ‹เจฃเจ—เฉ€เจ†เจ‚:

  • เจจเฉ‹เจกเจพเจ‚ เจฆเฉ€ เจนเจพเจฐเจก-เจ•เฉ‹เจกเจฟเจก เจธเฉ‚เจšเฉ€ เจ…เจคเฉ‡ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจ—เจคเฉ€เจธเจผเฉ€เจฒ เจ–เฉ‹เจœ เจฆเฉ‹เจตเจพเจ‚ เจจเจพเจฒ เจชเจพเจฐเจฆเจฐเจธเจผเฉ€ เจ•เฉฐเจฎ เจ—เจฒเจค;
  • เจนเจฐ เจŸเฉŒเจชเฉ‹เจฒเฉ‹เจœเฉ€ เจคเจฌเจฆเฉ€เจฒเฉ€ เจฒเจˆ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจ•เจพเจฐเจœเจธเจผเฉ€เจฒ เจ•เจพเจฒเจฌเฉˆเจ• (เจ‰เฉฑเจฅเฉ‡ เจจเฉ‹เจก, เจ‡เฉฑเจฅเฉ‡ เจจเฉ‹เจก, เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจ…เจธเจฅเจฟเจฐเจคเจพ, เจธเจชเจฒเจฟเจŸเจธ);
  • เจฒเฉฐเจฌเฉ‡ เจ…เจคเฉ‡ เจ›เฉ‹เจŸเฉ‡ เจจเจพเจฎเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจ•เจฒเฉฑเจธเจŸเจฐ เจจเฉ‚เฉฐ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจฒเจˆ เจชเจพเจฐเจฆเจฐเจธเจผเฉ€ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ :nonode@nohost;
  • เจกเฉŒเจ•เจฐ เจธเจชเฉ‹เจฐเจŸ เจฌเจพเจ•เจธ เจฆเฉ‡ เจฌเจพเจนเจฐ, เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเจพ เจ•เฉ‹เจก เจฒเจฟเจ–เจฃ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚เฅค

เจฌเจพเจ…เจฆ เจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจœเจฆเฉ‹เจ‚ เจฎเฉˆเจ‚ เจธเจฅเจพเจจเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ :nonode@nohost, เจœเจพเจ‚ เจตเจฐเจค เจ•เฉ‡ เจ‡เฉฑเจ• เจจเจ•เจฒเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจตเฉฐเจกเฉ‡ เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฟเฉฑเจš test_cluster_task, เจฎเฉˆเจ‚ เจฌเฉฑเจธ เจšเจฒเจพเจ‰เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ‚ docker-compose up --scale my_app=3 เจ…เจคเฉ‡ เจฆเฉ‡เจ–เฉ‹ เจ•เจฟ เจ‡เจน เจฌเจฟเจจเจพเจ‚ เจ•เจฟเจธเฉ‡ เจ•เฉ‹เจก เจฌเจฆเจฒเจพเจต เจฆเฉ‡ เจกเฉŒเจ•เจฐ เจตเจฟเฉฑเจš เจคเจฟเฉฐเจจ เจฎเฉŒเจ•เจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจšเจฒเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ. เจฎเฉˆเจ‚ เจจเจฟเจฐเจญเจฐ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจตเฉ€ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ‚ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ mnesia - เจœเจฆเฉ‹เจ‚ เจŸเฉŒเจชเฉŒเจฒเฉ‹เจœเฉ€ เจฌเจฆเจฒเจฆเฉ€ เจนเฉˆ, เจชเจฐเจฆเฉ‡ เจฆเฉ‡ เจชเจฟเฉฑเจ›เฉ‡ เจ‰เจน เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจ•เจฟเจธเฉ‡ เจตเจพเจงเฉ‚ เจ•เจฟเฉฑเจ• เจฆเฉ‡ เจ•เจฒเฉฑเจธเจŸเจฐ เจฒเจพเจˆเจต เจจเฉ‚เฉฐ เจฆเฉเจฌเจพเจฐเจพ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจจเฅค

เจ•เจฒเฉ€เจธเจŸเจฐ เจ‡เฉฑเจ• เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจฌเจฃเจจ เจฆเจพ เจ‡เจฐเจพเจฆเจพ เจจเจนเฉ€เจ‚ เจธเฉ€ เจœเฉ‹ เจ‡เฉฑเจ• เจ•เจฒเฉฑเจธเจŸเจฐ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฒเฉˆ เจ•เฉ‡ เจ•เฉŒเจซเฉ€ เจฌเจฃเจพเจ‰เจฃ เจคเฉฑเจ• เจนเจฐ เจšเฉ€เจœเจผ เจฆเฉ‡ เจธเจฎเจฐเฉฑเจฅ เจนเฉ‹เจตเฉ‡เฅค เจ‡เจน เจ‡เฉฑเจ• เจšเจพเจ‚เจฆเฉ€ เจฆเฉ€ เจ—เฉ‹เจฒเฉ€ เจจเจนเฉ€เจ‚ เจนเฉˆ เจœเจฟเจธเจฆเจพ เจ‰เจฆเฉ‡เจธเจผ เจธเจพเจฐเฉ‡ เจธเฉฐเจญเจพเจตเฉ€ เจฎเจพเจฎเจฒเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจ•เจตเจฐ เจ•เจฐเจจเจพ เจนเฉˆ, เจœเจพเจ‚ เจ‡เจธ เจ…เจฐเจฅ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ…เจ•เจพเจฆเจฎเจฟเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจธเฉฐเจชเฉ‚เจฐเจจ เจนเฉฑเจฒ เจนเฉ‹เจฃเจพ เจนเฉˆ เจ•เจฟ เจธเจฟเจงเจพเจ‚เจคเจ•เจพเจฐ CS เจ‡เจธ เจฎเจฟเจ†เจฆ เจตเจฟเฉฑเจš เจชเจพเจ“. เจ‡เจน เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจ‡เฉฑเจ• เจฌเจนเฉเจค เจนเฉ€ เจธเจชเจธเจผเจŸ เจ‰เจฆเฉ‡เจธเจผ เจฆเฉ€ เจชเฉ‚เจฐเจคเฉ€ เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจนเฉˆ, เจชเจฐ เจ‡เจธเจฆเจพ เจ•เฉฐเจฎ เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจ‡เจน เจŸเฉ€เจšเจพ เจธเจฅเจพเจจเจ• เจตเจฟเจ•เจพเจธ เจตเจพเจคเจพเจตเจฐเจฃ เจ…เจคเฉ‡ เจตเจฟเจฐเฉ‹เจงเฉ€ เจ•เฉฐเจŸเฉ‡เจจเจฐเจพเจ‚ เจจเจพเจฒ เจญเจฐเฉ‡ เจตเฉฐเจกเฉ‡ เจฒเจšเจ•เฉ€เจฒเฉ‡ เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฟเจšเจ•เจพเจฐ เจชเฉ‚เจฐเฉ€ เจชเจพเจฐเจฆเจฐเจธเจผเจคเจพ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจเจพ เจนเฉ‹เจตเฉ‡เจ—เจพเฅค

เจชเจนเฉเฉฐเจš เจšเฉเจฃเฉ€ เจนเฉˆ

เจ•เจฒเฉ€เจธเจŸเจฐ เจ‡เฉฑเจ• เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจตเจœเฉ‹เจ‚ เจšเจฒเจพเจ‰เจฃ เจฆเจพ เจ‡เจฐเจพเจฆเจพ เจนเฉˆ, เจนเจพเจฒเจพเจ‚เจ•เจฟ เจ‰เฉฑเจจเจค เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจธเจฟเฉฑเจงเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจšเจฒเจพ เจ•เฉ‡ เจ•เจฒเฉฑเจธเจŸเจฐ เจฆเฉ€ เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจ…เจคเฉ‡ เจฐเฉฑเจ–-เจฐเจ–เจพเจ… เจฆเฉ‡ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจจเฅค Cloister.Manager เจŸเจพเจฐเจ—เจฟเจŸ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ‡ เจธเฉเจชเจฐเจตเจพเจˆเจœเจผเจฐ เจŸเฉเจฐเฉ€ เจตเจฟเฉฑเจšเฅค

เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจตเจœเฉ‹เจ‚ เจšเจฒเจพเจ‡เจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจ‡เจธ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเจฆเฉ€ เจนเฉˆ config, เจœเจฟเจธ เจคเฉ‹เจ‚ เจ‡เจน เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจฎเฉ‚เจฒ เจฎเฉเฉฑเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจฆเจพ เจนเฉˆ:

config :cloister,
  otp_app: :my_app,
  sentry: :"cloister.local", # or ~w|n1@foo n2@bar|a
  consensus: 3,              # number of nodes to consider
                             #    the cluster is up
  listener: MyApp.Listener   # listener to be called when
                             #    the ring has changed

เจ‰เจชเจฐเฉ‹เจ•เจค เจฎเจพเจชเจฆเฉฐเจกเจพเจ‚ เจฆเจพ เจธเจผเจพเจฌเจฆเจฟเจ• เจ…เจฐเจฅ เจนเฉˆ: เจ•เจฒเฉ€เจธเจŸเจฐ OTP เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเจˆ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ :my_app, เจตเจฐเจคเจฆเจพ เจนเฉˆ Erlang เจธเฉ‡เจตเจพ เจ–เฉ‹เจœ เจจเฉ‹เจกเจพเจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจ เจฒเจˆ, เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจคเจฟเฉฐเจจ, เจ…เจคเฉ‡ MyApp.Listener เจฎเฉ‹เจกเฉ€เจŠเจฒ (เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพ @behaviour Cloister.Listener) เจจเฉ‚เฉฐ เจŸเฉŒเจชเฉŒเจฒเฉ‹เจœเฉ€ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจฌเจพเจฐเฉ‡ เจธเฉ‚เจšเจจเจพเจตเจพเจ‚ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค เจธเฉฐเจชเฉ‚เจฐเจจ เจธเฉฐเจฐเจšเจจเจพ เจฆเจพ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจตเฉ‡เจฐเจตเจพ เจตเจฟเฉฑเจš เจชเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ.

เจ‡เจธ เจธเฉฐเจฐเจšเจจเจพ เจฆเฉ‡ เจจเจพเจฒ, เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจ•เจฒเฉ€เจธเจŸเจฐ เจนเฉ‹ เจœเจพเจตเฉ‡เจ—เจพ เจชเฉœเจพเจตเจพเจ‚ เจตเจฟเฉฑเจš เจฒเจพเจ‚เจš เจ•เจฐเฉ‹, เจฎเฉเฉฑเจ– เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจตเจฟเฉฑเจš เจฆเฉ‡เจฐเฉ€ เจœเจฆเฉ‹เจ‚ เจคเฉฑเจ• เจธเจนเจฟเจฎเจคเฉ€ เจจเจนเฉ€เจ‚ เจชเจนเฉเฉฐเจš เจœเจพเจ‚เจฆเฉ€ (เจคเจฟเฉฐเจจ เจจเฉ‹เจก เจœเฉเฉœเฉ‡ เจนเฉ‹เจ เจนเจจ เจ…เจคเฉ‡ เจœเฉเฉœเฉ‡ เจนเฉ‹เจ เจนเจจ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ‰เจชเจฐเฉ‹เจ•เจค เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจšเฅค) เจ‡เจน เจฎเฉเฉฑเจ– เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจ‡เจน เจฎเฉฐเจจเจฃ เจฆเจพ เจฎเฉŒเจ•เจพ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจœเจฆเฉ‹เจ‚ เจ‡เจน เจธเจผเฉเจฐเฉ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจ•เจฒเฉฑเจธเจŸเจฐ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ‰เจชเจฒเจฌเจง เจนเฉˆเฅค เจœเจฆเฉ‹เจ‚ เจตเฉ€ เจŸเฉŒเจชเฉŒเจฒเฉ‹เจœเฉ€ เจฌเจฆเจฒเจฆเฉ€ เจนเฉˆ (เจ‰เจจเฉเจนเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจนเฉ‹เจฃเจ—เฉ‡, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจจเฉ‹เจก เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจธเจฎเจ•เจพเจฒเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจผเฉเจฐเฉ‚ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเฉ‡), เจนเฉˆเจ‚เจกเจฒเจฐ เจจเฉ‚เฉฐ เจฌเฉเจฒเจพเจ‡เจ† เจœเจพเจตเฉ‡เจ—เจพ MyApp.Listener.on_state_change/2. เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจธเจฎเจพเจ‚ เจœเจฆเฉ‹เจ‚ เจธเจพเจจเฉ‚เฉฐ เจ•เฉ‹เจˆ เจธเจŸเฉ‡เจŸเจธ เจธเฉเจจเฉ‡เจนเจพ เจฎเจฟเจฒเจฆเจพ เจนเฉˆ เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจ•เฉ‹เจˆ เจ•เจพเจฐเจตเจพเจˆ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ %Cloister.Monitor{status: :up}, เจœเจฟเจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ: "เจนเฉˆเจฒเฉ‹, เจ•เจฒเฉฑเจธเจŸเจฐ เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เจพ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค"

เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจฎเจพเจฎเจฒเจฟเจ†เจ‚ เจตเจฟเฉฑเจš, เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ consensus: 3 เจ…เจจเฉเจ•เฉ‚เจฒ เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจญเจพเจตเฉ‡เจ‚ เจ…เจธเฉ€เจ‚ เจนเฉ‹เจฐ เจจเฉ‹เจกเจพเจ‚ เจฆเฉ‡ เจœเฉเฉœเจจ เจฆเฉ€ เจ‰เจฎเฉ€เจฆ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ•เจพเจฒเจฌเฉˆเจ• เจฒเฉฐเจ˜ เจœเจพเจตเฉ‡เจ—เจพ status: :rehashing โ†’ status: :up เจ•เจฟเจธเฉ‡ เจตเฉ€ เจจเจตเฉ‡เจ‚ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚ เจนเจŸเจพเจ เจ—เจ เจจเฉ‹เจก 'เจคเฉ‡.

เจตเจฟเจ•เจพเจธ เจฎเฉ‹เจก เจตเจฟเฉฑเจš เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจฟเจฐเจซเจผ เจธเฉˆเฉฑเจŸ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ consensus: 1 ะธ เจ•เจฒเฉ€เจธเจŸเจฐ เจœเจฆเฉ‹เจ‚ เจ‰เจน เจฆเฉ‡เจ–เจฆเจพ เจนเฉˆ เจคเจพเจ‚ เจ–เฉเจธเจผเฉ€ เจจเจพเจฒ เจ•เจฒเฉฑเจธเจŸเจฐ เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจฆเฉ€ เจ‰เจกเฉ€เจ• เจจเฉ‚เฉฐ เจ›เฉฑเจก เจฆเฉ‡เจตเฉ‡เจ—เจพ :nonode@nohost, เจœเจพเจ‚ :node@host, เจœเจพเจ‚ :[email protected] - เจ‡เจธ เจ—เฉฑเจฒ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจจเฉ‹เจก เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจธเฉฐเจฐเจšเจฟเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€ (:none | :shortnames | :longnames).

เจตเฉฐเจกเจฟเจ† เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจชเฉเจฐเจฌเฉฐเจงเจจ

เจกเจฟเจธเจŸเฉเจฐเฉ€เจฌเจฟเจŠเจŸเจก เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจตเฉˆเจ•เจฟเจŠเจฎ เจตเจฟเฉฑเจš เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจตเฉฐเจกเฉ€เจ†เจ‚ เจจเจฟเจฐเจญเจฐเจคเจพเจตเจพเจ‚ เจธเจผเจพเจฎเจฒ เจนเฉเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ mnesia. เจธเจพเจกเฉ‡ เจฒเจˆ เจ‰เจธเฉ‡ เจ•เจพเจฒเจฌเฉˆเจ• เจคเฉ‹เจ‚ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจฎเฉเฉœ เจธเฉฐเจฐเจšเจจเจพ เจจเฉ‚เฉฐ เจธเฉฐเจญเจพเจฒเจฃเจพ เจ†เจธเจพเจจ เจนเฉˆ on_state_change/2. เจ‡เฉฑเจฅเฉ‡, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจฎเฉเฉœ-เจธเฉฐเจฐเจšเจจเจพ เจ•เจฐเจจ เจฆเฉ‡ เจคเจฐเฉ€เจ•เฉ‡ เจฆเจพ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจตเฉ‡เจฐเจตเจพ เจนเฉˆ mnesia เจตเจฟเฉฑเจš เจ‰เฉฑเจกเจฃ 'เจคเฉ‡ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจ•เจฒเฉ€เจธเจŸเจฐ.

เจตเจฐเจคเจฃ เจฆเจพ เจฎเฉเฉฑเจ– เจซเจพเจ‡เจฆเจพ เจ•เจฒเฉ€เจธเจŸเจฐ เจ‡เจน เจนเฉˆ เจ•เจฟ เจ‡เจน เจŸเฉŒเจชเฉŒเจฒเฉ‹เจœเฉ€ เจคเจฌเจฆเฉ€เจฒเฉ€ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ•เจฒเฉฑเจธเจŸเจฐ เจจเฉ‚เฉฐ เจฆเฉเจฌเจพเจฐเจพ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจธเจพเจฐเฉ‡ เจœเจผเจฐเฉ‚เจฐเฉ€ เจ“เจชเจฐเฉ‡เจธเจผเจจ เจ•เจฐเจฆเจพ เจนเฉˆ เจนเฉเฉฑเจก เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚. เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจชเจนเจฟเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจนเฉ€ เจคเจฟเจ†เจฐ เจตเฉฐเจกเฉ‡ เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฟเฉฑเจš เจšเฉฑเจฒเจฆเฉ€ เจนเฉˆ, เจธเจพเจฐเฉ‡ เจจเฉ‹เจก เจœเฉเฉœเฉ‡ เจนเฉ‹เจ เจนเจจ, เจญเจพเจตเฉ‡เจ‚ เจ…เจธเฉ€เจ‚ IP เจชเจคเฉ‡ เจ…เจคเฉ‡ เจ‡เจธเจฒเจˆ เจจเฉ‹เจก เจฆเฉ‡ เจจเจพเจฎ เจชเจนเจฟเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจœเจพเจฃเจฆเฉ‡ เจนเจพเจ‚, เจœเจพเจ‚ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ—เจคเฉ€เจธเจผเฉ€เจฒ เจคเฉŒเจฐ 'เจคเฉ‡ เจจเจฟเจฐเจงเจพเจฐเจค/เจฌเจฆเจฒเจฟเจ† เจ—เจฟเจ† เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ เจฌเจฟเจฒเจ•เฉเจฒ เจ•เฉ‹เจˆ เจตเจฟเจธเจผเฉ‡เจธเจผ เจกเฉŒเจ•เจฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจกเจฟเจตเฉˆเจฒเจชเจฐ เจฆเฉ‡ เจฆเฉเจฐเจฟเจธเจผเจŸเฉ€เจ•เฉ‹เจฃ เจคเฉ‹เจ‚, เจ‡เฉฑเจ• เจตเจฟเจคเจฐเจฟเจค เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฟเฉฑเจš เจšเฉฑเจฒเจฃ เจœเจพเจ‚ เจ‡เฉฑเจ• เจธเจฅเจพเจจเจ• เจตเจฟเฉฑเจš เจšเฉฑเจฒเจฃ เจตเจฟเฉฑเจš เจ•เฉ‹เจˆ เจ…เฉฐเจคเจฐ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค :nonode@nohost. เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจนเฉ‹เจฐ เจชเฉœเฉเจน เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ.

เจนเจพเจฒเจพเจ‚เจ•เจฟ เจŸเฉŒเจชเฉŒเจฒเฉ‹เจœเฉ€ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจฆเจพ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจชเฉเจฐเจฌเฉฐเจงเจจ เจ‡เฉฑเจ• เจ•เจธเจŸเจฎ เจฒเจพเจ—เฉ‚เจ•เจฐเจจ เจฆเฉเจ†เจฐเจพ เจธเฉฐเจญเจต เจนเฉˆ MyApp.Listener, เจ‡เฉฑเจฅเฉ‡ เจนเจฎเฉ‡เจธเจผเจพ เจ•เจฟเจจเจพเจฐเฉ‡ เจฆเฉ‡ เจ•เฉ‡เจธ เจนเฉ‹ เจธเจ•เจฆเฉ‡ เจนเจจ เจœเจฟเฉฑเจฅเฉ‡ เจ‡เจน เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจธเฉ€เจฎเจพเจตเจพเจ‚ เจ…เจคเฉ‡ เจธเฉฐเจฐเจšเจจเจพ เจชเฉฑเจ–เจชเจพเจค เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเฉ‡ เจ…เจงเจพเจฐ เจธเจพเจฌเจค เจนเฉเฉฐเจฆเฉ‡ เจนเจจเฅค เจ‡เจน เจ เฉ€เจ• เจนเฉˆ, เจฌเฉฑเจธ เจ‰เจชเจฐเฉ‹เจ•เจค เจจเฉ‚เฉฐ เจฒเจ“ libcluster, เจœเฉ‹ เจ•เจฟ เจตเจงเฉ‡เจฐเฉ‡ เจ†เจฎ-เจ‰เจฆเฉ‡เจธเจผ เจนเฉˆ, เจœเจพเจ‚ เจ‡เฉฑเจฅเฉ‹เจ‚ เจคเฉฑเจ• เจ•เจฟ เจนเฉ‡เจ เจฒเฉ‡-เจชเฉฑเจงเจฐ เจฆเฉ‡ เจ•เจฒเฉฑเจธเจŸเจฐ เจจเฉ‚เฉฐ เจ†เจชเจฃเฉ‡ เจ†เจช เจธเฉฐเจญเจพเจฒเฉ‹เฅค เจ‡เจธ เจ•เฉ‹เจก เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจฆเจพ เจŸเฉ€เจšเจพ เจนเจฐ เจธเฉฐเจญเจต เจฆเฉเจฐเจฟเจธเจผ เจจเฉ‚เฉฐ เจ•เจตเจฐ เจ•เจฐเจจเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจชเจฐ เจฌเฉ‡เจฒเฉ‹เฉœเฉ‡ เจฆเจฐเจฆ เจ…เจคเฉ‡ เจฌเฉ‹เจเจฒ เจ•เจพเจชเฉ€-เจชเฉ‡เจธเจŸ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจธเจญ เจคเฉ‹เจ‚ เจ†เจฎ เจฆเฉเจฐเจฟเจธเจผ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ เจนเฉˆเฅค

เจจเฉ‹เจŸ: เจ…เจธเจฒ เจตเจฟเฉฑเจš เจ‡เจธ เจฌเจฟเฉฐเจฆเฉ‚ 'เจคเฉ‡ เจตเจพเจ•เฉฐเจธเจผ เจธเฉ€ "เจนเฉˆเจชเฉ€ เจ•เจฒเฉฑเจธเจŸเจฐเจฟเฉฐเจ—!", เจ…เจคเฉ‡ เจฏเจพเจ‚เจกเฉ‡เจ•เจธ, เจœเจฟเจธเจฆเจพ เจฎเฉˆเจ‚ เจ…เจจเฉเจตเจพเจฆ เจ•เจฐเจฆเจพ เจนเจพเจ‚ (เจฎเฉˆเจจเฉ‚เฉฐ เจ†เจชเจฃเฉ‡ เจ†เจช เจกเจฟเจ•เจธเจผเจจเจฐเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจจเจนเฉ€เจ‚ เจœเจพเจฃเจพ เจชเฉˆเจ‚เจฆเจพ), เจจเฉ‡ เจฎเฉˆเจจเฉ‚เฉฐ "เจนเฉˆเจชเฉ€ เจ•เจฒเฉฑเจธเจŸเจฐเจฟเฉฐเจ—!" เจตเจฟเจ•เจฒเจช เจฆเฉ€ เจชเฉ‡เจธเจผเจ•เจธเจผ เจ•เฉ€เจคเฉ€เฅค เจ‡เฉฑเจ• เจฌเจฟเจนเจคเจฐ เจ…เจจเฉเจตเจพเจฆ เจฆเฉ€ เจ•เจฒเจชเจจเจพ เจ•เจฐเจจเจพ เจธเจผเจพเจ‡เจฆ เจ…เจธเฉฐเจญเจต เจนเฉˆ, เจ–เจพเจธ เจ•เจฐเจ•เฉ‡ เจฎเฉŒเจœเฉ‚เจฆเจพ เจญเฉ‚-เจฐเจพเจœเจจเฉ€เจคเจฟเจ• เจธเจฅเจฟเจคเฉ€ เจฆเฉ‡ เจฎเฉฑเจฆเฉ‡เจจเจœเจผเจฐเฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹