เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ•เบฑเบ™เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปเบˆเบเบขเบฒเบ. เบงเบดเบ—เบตเบเบฒเบ™เบ—เปเบฒเบญเบดเบ”

เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ•เบฑเบ™เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปเบˆเบเบขเบฒเบ. เบงเบดเบ—เบตเบเบฒเบ™เบ—เปเบฒเบญเบดเบ”

เปƒเบ™เบ—เบตเปˆเบชเบธเบ” เบšเบปเบ”เบ„เบงเบฒเบก เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบเบงเบ”เป€เบšเบดเปˆเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบดเบ”เบชเบฐเบ”เบตเบ‚เบญเบ‡เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ reactive. เบกเบฑเบ™เป€เบ–เบดเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป„เบซเบฅเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™, เบงเบดเบ—เบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบšเบปเบš Erlang / Elixir เบ—เบตเปˆเบกเบตเบ›เบฐเบ•เบดเบเบดเบฅเบดเบเบฒเปเบฅเบฐเบฎเบนเบšเปเบšเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ™เบžเบงเบเบกเบฑเบ™:

  • เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ•เบญเบšโ€‹เบชเบฐโ€‹เบซเบ™เบญเบ‡โ€‹
  • เบเบฒเบ™โ€‹เบ•เบญเบšโ€‹เบชเบฐโ€‹เบซเบ™เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เปโ€‹
  • เบ•เบญเบšโ€‹เบเบฑเบšโ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹
  • เป€เบœเบตเบเปเบœเปˆ-เบชเบฐเปเบฑเบเปƒเบŠเป‰
  • Inverted Publish-subscribe
  • เบเบฒเบ™เปเบˆเบเบขเบฒเบเปœเป‰เบฒเบงเบฝเบ

SOA, MSA เปเบฅเบฐเบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก

SOA, MSA เปเบกเปˆเบ™เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบฅเบฐเบšเบปเบšเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบชเบฐเบซเบ™เบญเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ.

เบ‚เป‰เบญเบเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เป€เบชเบตเบกเบ™เบตเป‰เบซเบผเบทเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบฅเบฐเบšเบปเบšเบ™เบฑเป‰เบ™. เบ‚เป‰เบญเบเปเบกเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปเบฅเบฐเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เปเบฅเบฐเบ—เบธเบฅเบฐเบเบดเบ”เบชเบฐเป€เบžเบฒเบฐ. เบชเบดเปˆเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบกเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบทเบญเบ, เบกเบฑเบ™เบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเบ•เบฑเบ™เบ”เป‰เบงเบเบชเบฒเบเบ•เบฒเบ‚เบญเบ‡ Unix-way: เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบซเบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”, เบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบซเบ™เปˆเบงเบเบ‡เบฒเบ™. เบงเบดเบ—เบตเบเบฒเบ™ API เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบเบฑเบšเบซเบ™เปˆเบงเบเบ‡เบฒเบ™.

เบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเปเบกเปˆเบ™, เบ•เบฒเบกเบŠเบทเปˆเปเบ™เบฐเบ™เปเบฒ, เบ™เบฒเบเบซเบ™เป‰เบฒเบ‚เปเป‰เบ„เบงเบฒเบก. เบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบกเบฑเบ™เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบฎเบฑเบšเปเบฅเบฐเบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก. เบกเบฑเบ™เบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™, เบเบฒเบ™เบชเป‰เบฒเบ‡เบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบ—เบตเปˆเบกเบตเป€เบซเบ”เบœเบปเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเปƒเบ™เบฅเบฐเบšเบปเบš, เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เปเบฅเบฐเบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ„เบงเบฒเบกเบœเบดเบ”เปƒเบ™เบฅเบฐเบ”เบฑเบšเบฅเบฐเบšเบปเบš.
เบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒเบšเปเปˆเป„เบ”เป‰เบžเบฐเบเบฒเบเบฒเบกเปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบเบฑเบšเบซเบผเบทเบ›เปˆเบฝเบ™เปเบ—เบ™ rabbitmq. เบ„เบธเบ™โ€‹เบ™เบฐโ€‹เบชเบปเบกโ€‹เบšเบฑเบ”โ€‹เบ•เบปเป‰เบ™โ€‹เบ•เปโ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹:

  • เบเบฒเบ™เปเบœเปˆเบเบฐเบˆเบฒเบ.
    เบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เบขเบนเปˆเปƒเบ™เบ—เบธเบเบเบธเปˆเบกเบ‚เบญเบ‡เบเบธเปˆเบก, เปƒเบเป‰เบ—เบตเปˆเบชเบธเบ”เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบเบฑเบšเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™.
  • เบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ.
    เบชเบธเบกเปƒเบชเปˆเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบฅเบฐเบซเบฑเบ” boilerplate เปเบฅเบฐเบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰.
  • เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ”เบตเบเบงเปˆเบฒ.
    เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบžเบฐเบเบฒเบเบฒเบกเป€เบฎเบฑเบ”เป€เบฅเบทเป‰เบกเบ„เบทเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ rabbitmq, เปเบ•เปˆเป€เบ™เบฑเป‰เบ™เปƒเบชเปˆเบžเบฝเบ‡เปเบ•เปˆเบŠเบฑเป‰เบ™เบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเปเบฅเบฐเบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡, เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบซเบกเบฒเบฐเบเบฑเบš OTP เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ.
  • เบขเบทเบ”เบขเบธเปˆเบ™.
    เปเบ•เปˆเบฅเบฐเบšเปเบฅเบดเบเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบงเบกเบ•เบปเบงเปเบšเบšเปเบฅเบเบ›เปˆเบฝเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบ.
  • เบ„เบงเบฒเบกเบขเบทเบ”เบขเบธเปˆเบ™เป‚เบ”เบเบเบฒเบ™เบญเบญเบเปเบšเบš.
  • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบ.
    เบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฐเป€เบฅเบตเบ™เป€เบ•เบตเบšเป‚เบ•เบ”เป‰เบงเบเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™. เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบเบฒเบ™เป‚เบซเบผเบ”เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเป‰เบฒเบเบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™.

เบ‚เปเป‰เบชเบฑเบ‡เป€เบเบ”. เปƒเบ™เบ‚เปเป‰เบเปเบฒเบ™เบปเบ”เบ‚เบญเบ‡เบญเบปเบ‡เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบฅเบฐเบซเบฑเบ”, เป‚เบ„เบ‡เบเบฒเบ™ meta เปเบกเปˆเบ™เป€เบซเบกเบฒเบฐเบชเบปเบกเบ”เบตเบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบš Erlang / Elixir เบชเบฐเบฅเบฑเบšเบชเบฑเบšเบŠเป‰เบญเบ™. เบฅเบฐเบซเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบซเบ™เบถเปˆเบ‡ repository - เป‚เบ„เบ‡เบเบฒเบ™ umbrella . เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, microservices เปเบกเปˆเบ™เบขเบนเปˆเป‚เบ”เบ”เบ”เปˆเบฝเบงเบชเบนเบ‡เบชเบธเบ”เปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเบซเบ™เปˆเบงเบเบ‡เบฒเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เบ”เป‰เบงเบเบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰, เบกเบฑเบ™เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบฎเบฑเบเบชเบฒ API เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ—เบฑเบ‡เบซเบกเบปเบ”, เบกเบฑเบ™เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡, เบกเบฑเบ™เบชเบฐเบ”เบงเบเปƒเบ™เบเบฒเบ™เบ‚เบฝเบ™เบซเบ™เปˆเบงเบเปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡.

เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ•เบดเบ”เบ•เปเปˆเบžเบปเบงเบžเบฑเบ™เป‚เบ”เบเบเบปเบ‡เบซเบผเบทเบœเปˆเบฒเบ™เบ™เบฒเบเบซเบ™เป‰เบฒ. เบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก, เปเบ•เปˆเบฅเบฐเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบกเบตเบซเบผเบฒเบเป„เบฅเบเบฐเบŠเบตเบงเบดเบ”:

  • เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™.
    เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰, เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปเบฅเบฐเบ„เบงเบฒเบกเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เป„เบ”เป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบฅเบฐเป€เบ›เบตเบ”เบ•เบปเบง.
  • เบเบฒเบ™เบชเป‰เบฒเบ‡เบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™.
    เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™เบ„เบปเบ‡เบ—เบตเปˆเบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡ node, เบซเบผเบทเบชเป‰เบฒเบ‡เบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง.
  • เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™.
    เป€เบžเบทเปˆเบญเปƒเบซเป‰เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบฎเบฑเบšเปƒเบŠเป‰เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป, เบกเบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบขเบนเปˆเปƒเบ™เบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™.
  • เป€เบฎเบฑเบ”เบงเบฝเบเบ›เบปเบเบเบฐเบ•เบด.
    เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบงเบฝเบเบ‡เบฒเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”.
  • เบ›เบดเบ”โ€‹เป€เบ„เบทเปˆเบญเบ‡.
    เบกเบต 2 เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ›เบดเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰: เบ›เบปเบเบเบฐเบ•เบดเปเบฅเบฐเบชเบธเบเป€เบชเบตเบ™. เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ›เบปเบเบเบฐเบ•เบด, เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ–เบทเบเบ•เบฑเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบˆเบฒเบเบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™เปเบฅเบฐเบขเบธเบ”. เปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบชเบธเบเป€เบชเบตเบ™, เบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ scripts เบฅเบปเป‰เบกเป€เบซเบฅเบง.

เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบชเบฑเบšเบชเบปเบ™, เปเบ•เปˆเบฅเบฐเบซเบฑเบ”เบšเปเปˆเปเบกเปˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบซเบ™เป‰เบฒเบขเป‰เบฒเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบกเบตเบ„เปเบฒเบ„เบดเบ”เป€เบซเบฑเบ™เบˆเบฐเบ–เบทเบเปƒเบซเป‰เบขเบนเปˆเปƒเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ‚เบญเบ‡เปเบกเปˆเปเบšเบšเบ•เปเปˆเบกเบฒเป€เบฅเบฑเบเบ™เป‰เบญเบ.

เบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™

เบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™เปเบกเปˆเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบžเบฒเบเปƒเบ™เปเบกเปˆเปเบšเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก. เปƒเบ™เบ—เบธเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰, เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ›เบฐเบ•เบดเบชเปเบฒเบžเบฑเบ™เบœเปˆเบฒเบ™เบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™, เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก.

เบฎเบนเบšเปเบšเบšเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เบ‚เปเป‰เบ„เบงเบฒเบก (MEPs)

เปƒเบ™เบ—เบปเปˆเบงเป‚เบฅเบ, เบฎเบนเบšเปเบšเบšเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เบชเบฒเบกเบฒเบ”เปเบšเปˆเบ‡เบญเบญเบเป€เบ›เบฑเบ™เบชเบญเบ‡เบ—เบฒเบ‡เปเบฅเบฐเบซเบ™เบถเปˆเบ‡เบ—เบฒเบ‡. เบญเบฐเบ”เบตเบ”เบซเบกเบฒเบเป€เบ–เบดเบ‡เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ•เปเปˆเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒ, เบชเบธเบ”เบ—เป‰เบฒเบเบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”. เบ•เบปเบงเบขเปˆเบฒเบ‡เบ„เบฅเบฒเบชเบชเบดเบเบ‚เบญเบ‡เบฎเบนเบšเปเบšเบšเบชเบญเบ‡เบ—เบฒเบ‡เปƒเบ™เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบฅเบนเบเบ„เป‰เบฒ - เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบกเปˆเบ™เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡. เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบขเบนเปˆเปƒเบ™เปเบกเปˆเปเบšเบšเปเบฅเบฐเบเบฒเบ™เบ”เบฑเบ”เปเบ›เบ‡เบ‚เบญเบ‡เบกเบฑเบ™.

เบ„เปเบฒเบ•เบญเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบซเบผเบท RPC

RPC เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบˆเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบญเบทเปˆเบ™. เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ node เบ”เบฝเบงเบเบฑเบ™เบซเบผเบทเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบ—เบฐเบงเบตเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เปเบœเบ™เบงเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบฅเบฐเบซเบงเปˆเบฒเบ‡เบฅเบนเบเบ„เป‰เบฒเปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก.

เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ•เบฑเบ™เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปเบˆเบเบขเบฒเบ. เบงเบดเบ—เบตเบเบฒเบ™เบ—เปเบฒเบญเบดเบ”

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเปเบกเปˆเบ™ asynchronous เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™, เบชเปเบฒเบฅเบฑเบšเบฅเบนเบเบ„เป‰เบฒ, เบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เปเบšเปˆเบ‡เบญเบญเบเป€เบ›เบฑเบ™ 2 เป„เบฅเบเบฐ:

  1. เบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป

    messaging:request(Exchange, ResponseMatchingTag, RequestDefinition, HandlerProcess).

    เบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™ - เบŠเบทเปˆเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบ‚เบญเบ‡เบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™
    ResponseMatchingTag - เบ›เป‰เบฒเบเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เป€เบžเบทเปˆเบญเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡. เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบเบฒเบ™เบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบซเบผเบฒเบเบญเบฑเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เบ‚เบญเบ‡เบœเบนเป‰เบŠเบปเบกเปƒเบŠเป‰เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.
    เบ„เปเบฒโ€‹เบ™เบดโ€‹เบเบฒเบกโ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹ - เบ‚เปโ€‹เบฎเปˆเบฒเบ‡โ€‹เบเบฒเบโ€‹
    เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™ - PID เบ‚เบญเบ‡เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™. เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ™เบตเป‰เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ.

  2. เบเบณเบฅเบฑเบ‡เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡

    handle_info(#'$msg'{exchange = EXCHANGE, tag = ResponseMatchingTag,message = ResponsePayload}, State)

    เบเบฒเบ™เบ•เบญเบšเบชเบฐ เปœเบญเบ‡ Payload - เป€เบŠเบตเบšเป€เบงเบตเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡.

เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบเบฑเบ‡เบ›เบฐเบเบญเบšเบ”เป‰เบงเบ 2 เป„เบฅเบเบฐ:

  1. เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™
  2. เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบš

เปƒเบซเป‰เป€เบฎเบปเบฒเบชเบฐเปเบ”เบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เปเบกเปˆเปเบšเบšเบ™เบตเป‰เบ”เป‰เบงเบเบฅเบฐเบซเบฑเบ”. เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเปƒเบŠเป‰เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ”เบฝเบง.

เบฅเบฐเบซเบฑเบ”เป€เบŠเบตเบšเป€เบงเบต

เปƒเบซเป‰เบเปเบฒเบ™เบปเบ” API เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เปƒเบ™ api.hrl:

%% =====================================================
%%  entities
%% =====================================================
-record(time, {
  unixtime :: non_neg_integer(),
  datetime :: binary()
}).

-record(time_error, {
  code :: non_neg_integer(),
  error :: term()
}).

%% =====================================================
%%  methods
%% =====================================================
-record(time_req, {
  opts :: term()
}).
-record(time_resp, {
  result :: #time{} | #time_error{}
}).

เปƒเบซเป‰เบเปเบฒเบ™เบปเบ”เบ•เบปเบงเบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เปƒเบ™ time_controller.erl

%% ะ’ ะฟั€ะธะผะตั€ะต ะฟะพะบะฐะทะฐะฝ ั‚ะพะปัŒะบะพ ะทะฝะฐั‡ะธะผั‹ะน ะบะพะด. ะ’ัั‚ะฐะฒะธะฒ ะตะณะพ ะฒ ัˆะฐะฑะปะพะฝ gen_server ะผะพะถะฝะพ ะฟะพะปัƒั‡ะธั‚ัŒ ั€ะฐะฑะพั‡ะธะน ัะตั€ะฒะธั.

%% ะธะฝะธั†ะธะฐะปะธะทะฐั†ะธั gen_server
init(Args) ->
  %% ะฟะพะดะบะปัŽั‡ะตะฝะธะต ะบ ั‚ะพั‡ะบะต ะพะฑะผะตะฝะฐ
  messaging:monitor_exchange(req_resp, ?EXCHANGE, default, self())
  {ok, #{}}.

%% ะพะฑั€ะฐะฑะพั‚ะบะฐ ัะพะฑั‹ั‚ะธั ะฟะพั‚ะตั€ะธ ัะฒัะทะธ ั ั‚ะพั‡ะบะพะน ะพะฑะผะตะฝะฐ. ะญั‚ะพ ะถะต ัะพะฑั‹ั‚ะธะต ะฟั€ะธั…ะพะดะธั‚, ะตัะปะธ ั‚ะพั‡ะบะฐ ะพะฑะผะตะฝะฐ ะตั‰ะต ะฝะต ะทะฐะฟัƒัั‚ะธะปะฐััŒ.
handle_info(#exchange_die{exchange = ?EXCHANGE}, State) ->
  erlang:send(self(), monitor_exchange),
  {noreply, State};

%% ะพะฑั€ะฐะฑะพั‚ะบะฐ API
handle_info(#time_req{opts = _Opts}, State) ->
  messaging:response_once(Client, #time_resp{
result = #time{ unixtime = time_utils:unixtime(now()), datetime = time_utils:iso8601_fmt(now())}
  });
  {noreply, State};

%% ะทะฐะฒะตั€ัˆะตะฝะธะต ั€ะฐะฑะพั‚ั‹ gen_server
terminate(_Reason, _State) ->
  messaging:demonitor_exchange(req_resp, ?EXCHANGE, default, self()),
  ok.

เบฅเบฐเบซเบฑเบ”เบฅเบนเบเบ„เป‰เบฒ

เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป„เบ›เบซเบฒเบšเปเบฅเบดเบเบฒเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป‚เบ—เบซเบฒ API เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเป„เบ”เป‰เบ—เบธเบเบšเปˆเบญเบ™เปƒเบ™เบฅเบนเบเบ„เป‰เบฒ:

case messaging:request(?EXCHANGE, tag, #time_req{opts = #{}}, self()) of
    ok -> ok;
    _ -> %% repeat or fail logic
end

เปƒเบ™เบฅเบฐเบšเบปเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบ, เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบชเบฒเบกเบฒเบ”เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบฒเบเปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบฎเป‰เบญเบ‡เบ‚เป, เบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบญเบฒเบ”เบˆเบฐเบšเปเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบซเบผเบทเบœเบนเป‰เบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบˆเบฐเบšเปเปˆเบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เบ•เบฒเบกเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบ•เบญเบšเป‚เบ•เป‰เบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเปเบฅเบฐเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบฅเบปเป‰เบกเป€เบซเบฅเบง.
เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบชเบปเปˆเบ‡เบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”, เบฅเบนเบเบ„เป‰เบฒเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบซเบผเบทเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบˆเบฒเบเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™.
เปƒเบซเป‰เบˆเบฑเบ”เบเบฒเบ™เบ—เบฑเบ‡เบชเบญเบ‡เบเปเบฅเบฐเบ™เบตเปƒเบ™ handle_info:

handle_info(#'$msg'{exchange = ?EXCHANGE, tag = tag, message = #time_resp{result = #time{unixtime = Utime}}}, State) ->
  ?debugVal(Utime),
  {noreply, State};

handle_info(#'$msg'{exchange = ?EXCHANGE, tag = tag, message = #time_resp{result = #time_error{code = ErrorCode}}}, State) ->
  ?debugVal({error, ErrorCode}),
  {noreply, State};

เบเบฒเบ™โ€‹เบ•เบญเบšโ€‹เบชเบฐโ€‹เบซเบ™เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เปโ€‹

เบกเบฑเบ™เบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ. เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ™เบตเป‰. เบ–เป‰เบฒเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ•เปเปˆเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเปƒเบŠเป‰เป€เบงเบฅเบฒเป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบซเบผเบฒเบ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฒเบ™เปเบเบเบกเบฑเบ™เบญเบญเบเป€เบ›เบฑเบ™เบžเบฒเบเบชเปˆเบงเบ™เปเบกเปˆเบ™เบšเบฑเบ‡เบ„เบฑเบš.

เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ•เบฑเบ™เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปเบˆเบเบขเบฒเบ. เบงเบดเบ—เบตเบเบฒเบ™เบ—เปเบฒเบญเบดเบ”

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ‚เปเบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบšเบฒเบ‡เบญเบฑเบ™เบ‚เบญเบ‡เบเปเบฅเบฐเบ™เบตเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง:

  • เบญเบปเบ‡เบ›เบฐเบเบญเบšเปเบฅเบเบ›เปˆเบฝเบ™เบ‚เปเป‰เบกเบนเบ™เบ–เบฒเบ™เบชเบญเบ‡, เป€เบŠเบฑเปˆเบ™เป„เบŸเบฅเปŒ. เบเบฒเบ™เปเบเบเบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡เบญเบญเบเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบ™เป‰เบญเบเป†เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบขเปˆเบฒเบ‡เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฑเบšเป„เบŸเบฅเปŒเบ—เบธเบเบ‚เบฐเปœเบฒเบ” เปเบฅเบฐ เบซเบผเบตเบเบฅเปˆเบฝเบ‡เบ„เบงเบฒเบกเบˆเบณเบ—เบตเปˆเบฅเบปเป‰เบ™เป€เบซเบผเบทเบญ.
  • เบฅเบฒเบเบŠเบทเปˆ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฅเบทเบญเบเบšเบฑเบ™เบ—เบถเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเป‚เบญเบ™เบžเบงเบเบกเบฑเบ™เป„เบ›เบซเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบญเบทเปˆเบ™.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป‚เบ—เบซเบฒเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰ locomotive. เปƒเบ™เบเปเบฅเบฐเบ™เบตเปƒเบ”เบเปเปˆเบ•เบฒเบก, 1024 เบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡ 1 MB เปเบกเปˆเบ™เบ”เบตเบเปˆเบงเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเบ”เบฝเบงเบ‚เบญเบ‡ 1 GB.

เปƒเบ™เบเบธเปˆเบก Erlang, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก - เบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เป‚เบซเบผเบ”เปƒเบ™เบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™เปเบฅเบฐเป€เบ„เบทเบญเบ‚เปˆเบฒเบ, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบเบฒเบ™เบ•เบญเบšเป‚เบ•เป‰เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบœเบนเป‰เบฎเบฑเบšเบ—เบฑเบ™เบ—เบต, เบ‚เป‰เบฒเบกเบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™.

เบ•เบญเบšโ€‹เบเบฑเบšโ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹

เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ”เบฑเบ”เปเบเป‰เบ—เบตเปˆเบซเบฒเบเบฒเบเบซเบผเบฒเบเบ‚เบญเบ‡เบฎเบนเบšเปเบšเบš RPC เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเป‚เบ•เป‰เบ•เบญเบš.

เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ•เบฑเบ™เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปเบˆเบเบขเบฒเบ. เบงเบดเบ—เบตเบเบฒเบ™เบ—เปเบฒเบญเบดเบ”

Publish-subscribe (เบ•เบปเป‰เบ™เป„เบกเป‰เบเบฒเบ™เปเบˆเบเบขเบฒเบเบ‚เปเป‰เบกเบนเบ™)

เบฅเบฐเบšเบปเบšเบ—เบตเปˆเบ‚เบฑเบšเป€เบ„เบทเปˆเบญเบ™เป€เบซเบ”เบเบฒเบ™เบชเบปเปˆเบ‡เบžเบงเบเบกเบฑเบ™เปƒเบซเป‰เบเบฑเบšเบœเบนเป‰เบšเปเบฅเบดเป‚เบžเบเบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเบ‚เปเป‰เบกเบนเบ™เบเบฝเบกเบžเป‰เบญเบก. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบฅเบฐเบšเบปเบšเปเบกเปˆเบ™เบกเบฑเบเบˆเบฐเป€เบ›เบฑเบ™เบ•เบปเบงเปเบšเบšเบŠเบธเบเบเบนเป‰เบซเบผเบฒเบเบเปˆเบงเบฒเปเบšเบšเบ”เบถเบ‡เบซเบผเบทเปเบšเบšเบชเปเบฒเบซเบผเบงเบ”. เบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบชเบนเบ™เป€เบชเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เป‚เบ”เบเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เปเบฅเบฐเบฅเปเบ–เป‰เบฒเบ‚เปเป‰เบกเบนเบ™.
เบ•เบปเบงเป€เบฅเบเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปเบˆเบเบขเบฒเบเบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบซเป‰เบเบฑเบšเบœเบนเป‰เบšเปเบฅเบดเป‚เบžเบเบ—เบตเปˆเบˆเบญเบ‡เบซเบปเบงเบ‚เปเป‰เบชเบฐเป€เบžเบฒเบฐ.

เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ•เบฑเบ™เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปเบˆเบเบขเบฒเบ. เบงเบดเบ—เบตเบเบฒเบ™เบ—เปเบฒเบญเบดเบ”

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ„เบฅเบฒเบชเบชเบดเบเบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบฎเบนเบšเปเบšเบšเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เปเบˆเบเบขเบฒเบเบ‚เบญเบ‡เบฅเบฑเบ”: เป‚เบฅเบเป€เบเบกเปƒเบ™เป€เบเบกเบ„เบญเบกเบžเบดเบงเป€เบ•เบต, เบ‚เปเป‰เบกเบนเบ™เบ•เบฐเบซเบผเบฒเบ”เปƒเบ™เบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™, เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เปƒเบ™เบ‚เปเป‰เบกเบนเบ™.

เบกเบฒเป€เบšเบดเปˆเบ‡เบฅเบฐเบซเบฑเบ”เบœเบนเป‰เบˆเบญเบ‡:

init(_Args) ->
  %% ะฟะพะดะฟะธัั‹ะฒะฐะตะผัั ะฝะฐ ะพะฑะผะตะฝะฝะธะบ, ะบะปัŽั‡ = key
  messaging:subscribe(?SUBSCRIPTION, key, tag, self()),
  {ok, #{}}.

handle_info(#exchange_die{exchange = ?SUBSCRIPTION}, State) ->
  %% ะตัะปะธ ั‚ะพั‡ะบะฐ ะพะฑะผะตะฝะฐ ะฝะตะดะพัั‚ัƒะฟะฝะฐ, ั‚ะพ ะฟั‹ั‚ะฐะตะผัั ะฟะตั€ะตะฟะพะดะบะปัŽั‡ะธั‚ัŒัั
  messaging:subscribe(?SUBSCRIPTION, key, tag, self()),
  {noreply, State};

%% ะพะฑั€ะฐะฑะฐั‚ั‹ะฒะฐะตะผ ะฟั€ะธัˆะตะดัˆะธะต ัะพะพะฑั‰ะตะฝะธั
handle_info(#'$msg'{exchange = ?SUBSCRIPTION, message = Msg}, State) ->
  ?debugVal(Msg),
  {noreply, State};

%% ะฟั€ะธ ะพัั‚ะฐะฝะพะฒะบะต ะฟะพั‚ั€ะตะฑะธั‚ะตะปั - ะพั‚ะบะปัŽั‡ะฐะตะผัั ะพั‚ ั‚ะพั‡ะบะธ ะพะฑะผะตะฝะฐ
terminate(_Reason, _State) ->
  messaging:unsubscribe(?SUBSCRIPTION, key, tag, self()),
  ok.

เปเบซเบผเปˆเบ‡เบชเบฒเบกเบฒเบ”เป‚เบ—เบซเบฒเบŸเบฑเบ‡เบŠเบฑเบ™เป€เบžเบทเปˆเบญเป€เบœเบตเบเปเบœเปˆเบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบตเปˆเบชเบฐเบ”เบงเบ:

messaging:publish_message(Exchange, Key, Message).

เบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™ - เบŠเบทเปˆโ€‹เบ‚เบญเบ‡โ€‹เบˆเบธเบ”โ€‹เปเบฅเบโ€‹เบ›เปˆเบฝเบ™โ€‹,
เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ - เบเบฐเปเบˆเบเบณเบ™เบปเบ”เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡
เบ‚เปเป‰เบ„เบงเบฒเบก - เป‚เบซเบผเบ”

Inverted Publish-subscribe

เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ•เบฑเบ™เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปเบˆเบเบขเบฒเบ. เบงเบดเบ—เบตเบเบฒเบ™เบ—เปเบฒเบญเบดเบ”

เป‚เบ”เบเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบ pub-sub, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบชเบฐเบ”เบงเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบฑเบ”เป„เบกเป‰. เบŠเบธเบ”เบ‚เบญเบ‡เปเบซเบผเปˆเบ‡เปเบฅเบฐเบœเบนเป‰เบšเปเบฅเบดเป‚เบžเบเบชเบฒเบกเบฒเบ”เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบกเบปเบ”. เบ•เบปเบงเป€เบฅเบเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบกเบตเบœเบนเป‰เบšเปเบฅเบดเป‚เบžเบเบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบซเบผเบฒเบเปเบซเบผเปˆเบ‡.

เบฎเบนเบšเปเบšเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเปœเป‰เบฒเบงเบฝเบ

เป€เบเบทเบญเบšเบ—เบธเบเป†เป‚เบ„เบ‡เบเบฒเบ™เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ—เบตเปˆเป€เบฅเบทเปˆเบญเบ™เป„เบ›, เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เบชเป‰เบฒเบ‡เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™, เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™, เปเบฅเบฐเบเบฒเบ™เบ”เบถเบ‡เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบฅเบฐเบšเบปเบšเบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบก. เบญเบฑเบ”เบ•เบฒเบเบฒเบ™เบœเปˆเบฒเบ™เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบงเบฝเบเบ‡เบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เป„เบ”เป‰เบ‡เปˆเบฒเบเป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบกเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™. เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบเบฑเบ‡เบ„เบปเบ‡เบขเบนเปˆเบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบ›เบฐเบเบญเบšเป€เบ›เบฑเบ™เบเบธเปˆเบกเบ‚เบญเบ‡เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเปเบฅเบฐเปเบˆเบเบขเบฒเบเบงเบฝเบเบ‡เบฒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบžเบงเบเบกเบฑเบ™เปƒเบซเป‰เป€เบ—เบปเปˆเบฒเบ—เบฝเบกเบเบฑเบ™.

เบ‚เปเปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡ 3 handlers. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบขเบนเปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบเบฒเบ™เปเบˆเบเบขเบฒเบเบงเบฝเบเบ‡เบฒเบ™, เบ„เปเบฒเบ–เบฒเบกเบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบเบธเบ•เบดเบ—เปเบฒเบ‚เบญเบ‡เบเบฒเบ™เปเบˆเบเบขเบฒเบเปเบฅเบฐเบเบฒเบ™เบฅเบปเป‰เบ™เบ‚เบญเบ‡เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เป€เบเบตเบ”เบ‚เบทเป‰เบ™. เบเบฒเบ™เปเบˆเบเบขเบฒเบเปเบšเบšเบฎเบญเบšเบงเบฝเบ™เบˆเบฐเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบ•เปเปˆเบ„เบงเบฒเบกเบเบธเบ•เบดเบ—เปเบฒ, เปเบฅเบฐเป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™ overflow เบ‚เบญเบ‡ handlers, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปเบ™เบฐเบ™เปเบฒเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”. prefetch_limit. เปƒเบ™เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบŠเบปเปˆเบงเบ„เบฒเบง prefetch_limit เบˆเบฐเบ›เป‰เบญเบ‡เบเบฑเบ™เบšเปเปˆเปƒเบซเป‰เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบ„เบปเบ™เบซเบ™เบถเปˆเบ‡เป„เบ”เป‰เบฎเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”.

เบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฑเบ”เบเบฒเบ™เบ„เบดเบง เปเบฅเบฐเบšเบนเบฅเบดเบกเบฐเบชเบดเบ”เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™. เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเป„เบ”เป‰เบฎเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เป€เบกเบทเปˆเบญเบžเบงเบเป€เบ‚เบปเบฒเบกเบฒเบฎเบญเบ”. เบงเบฝเบเบ‡เบฒเบ™เบชเบฒเบกเบฒเบ”เบชเปเบฒเป€เบฅเบฑเบ”เบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบซเบผเบทเบฅเบปเป‰เบกเป€เบซเบฅเบง:

  • messaging:ack(Tack) - เป€เบญเบตเป‰เบ™เบงเปˆเบฒเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเป„เบ”เป‰เบ–เบทเบเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”
  • messaging:nack(Tack) - เป€เบญเบตเป‰เบ™โ€‹เบงเปˆเบฒโ€‹เปƒเบ™โ€‹เบชเบฐโ€‹เบ–เบฒโ€‹เบ™เบฐโ€‹เบเบฒเบ™โ€‹เบชเบธเบโ€‹เป€เบชเบตเบ™โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹. เป€เบกเบทเปˆเบญเบงเบฝเบเบ‡เบฒเบ™เบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™, เบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฐเบชเบปเปˆเบ‡เบ•เปเปˆเป„เบ›เบซเบฒเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบญเบทเปˆเบ™.

เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ•เบฑเบ™เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปเบˆเบเบขเบฒเบ. เบงเบดเบ—เบตเบเบฒเบ™เบ—เปเบฒเบญเบดเบ”

เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบงเบ—เบตเปˆเบŠเบฑเบšเบŠเป‰เบญเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเบฒเบกเบซเบ™เป‰เบฒเบงเบฝเบ: เป‚เบ›เป€เบŠเบ”เป€เบŠเบต 1, เบซเบผเบฑเบ‡เบˆเบฒเบเป„เบ”เป‰เบฎเบฑเบšเบซเบ™เป‰เบฒเบงเบฝเบ, crashed เป‚เบ”เบเบšเปเปˆเบกเบตเป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเบฅเบฒเบเบ‡เบฒเบ™เบซเบเบฑเบ‡เบเบฑเบšเบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™เบˆเบฐเป‚เบญเบ™เบซเบ™เป‰เบฒเบงเบฝเบเป„เบ›เบซเบฒเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบญเบทเปˆเบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบซเบกเบปเบ”เป€เบงเบฅเบฒ ack เป„เบ”เป‰เบซเบกเบปเบ”เบญเบฒเบเบธ. เบ”เป‰เบงเบเป€เบซเบ”เบœเบปเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™ 3 เป„เบ”เป‰เบ›เบฐเบ–เบดเป‰เบกเบงเบฝเบเบ‡เบฒเบ™เปเบฅเบฐเบชเบปเปˆเบ‡ nack; เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบงเบฝเบเบ‡เบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป„เบ”เป‰เบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒเบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบญเบทเปˆเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบชเปเบฒเป€เบฅเบฑเบ”เบกเบฑเบ™.

เบšเบปเบ”เบชเบฐเบซเบผเบธเบšเป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบเบงเบกเป€เบญเบปเบฒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปƒเบ™ Erlang / Elixir.

เป‚เบ”เบเบเบฒเบ™เบฅเบงเบกเป€เบญเบปเบฒเบฎเบนเบšเปเบšเบšเบžเบทเป‰เบ™เบ–เบฒเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡ paradigms เบชเบฐเบฅเบฑเบšเบชเบฑเบšเบŠเป‰เบญเบ™เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™.

เปƒเบ™เบžเบฒเบเบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡เบŠเบธเบ”, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบšเบดเปˆเบ‡เบšเบฑเบ™เบซเบฒเบ—เบปเปˆเบงเป„เบ›เบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡, เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เปเบฅเบฐเบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡, เปเบฅเบฐเบเบฑเบ‡เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบžเบฒเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เปเบฅเบฐเบ„เบงเบฒเบกเบ—เบปเบ™เบ—เบฒเบ™เบ•เปเปˆเบ„เบงเบฒเบกเบœเบดเบ”เบ‚เบญเบ‡เบฅเบฐเบšเบปเบš.

เบชเบดเป‰เบ™เบชเบธเบ”เบžเบฒเบเบ—เบตเบชเบญเบ‡.

เบเบฒเบ™โ€‹เบ–เปˆเบฒเบโ€‹เบฎเบนเบš Marius Christensen
เบฎเบนเบšเบ›เบฐเบเบญเบšเบ—เบตเปˆเบเบฐเบเบฝเบกเป‚เบ”เบเปƒเบŠเป‰ websequencediagrams.com

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™