เชตเชฟเชคเชฐเชฟเชค เชธเชฟเชธเซเชŸเชฎเชจเซเช‚ เชธเช‚เช•เชฒเชจ เช•เชฐเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเซเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ

เช† เชชเซ‹เชธเซเชŸเชฎเชพเช‚ เช…เชฎเซ‡ เชตเชฟเชคเชฐเชฟเชค เชธเชฟเชธเซเชŸเชฎเชจเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเชพเชฅเซ‡ เชตเซเชฏเชตเชนเชพเชฐ เช•เชฐเชตเชพเชจเซ€ เชเช• เชฐเชธเชชเซเชฐเชฆ เชฐเซ€เชค เชถเซ‡เชฐ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช.
เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเซ€เชงเซเช‚ เชœ เชธเซเช•เซ‡เชฒเชพ เชญเชพเชทเชพเชฎเชพเช‚ เชธเซเชฐเช•เซเชทเชฟเชค เชฐเซ€เชคเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชฅเชพเชฏ เช›เซ‡. เชเช• เช‰เชฆเชพเชนเชฐเชฃ เช…เชฎเชฒเซ€เช•เชฐเชฃ เชตเชฟเช—เชคเซ‹เชฎเชพเช‚ เชตเชฐเซเชฃเชตเซ‡เชฒ เช›เซ‡. เชธเชฎเช—เซเชฐ เชตเชฟเช•เชพเชธ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชชเชฐ เชชเซเชฐเชญเชพเชต เชธเชนเชฟเชค เชชเซเชฐเชธเซเชคเชพเชตเชจเชพ เชตเชฟเชตเชฟเชง เชชเชพเชธเชพเช“เชจเซ€ เชšเชฐเซเชšเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡.

เชตเชฟเชคเชฐเชฟเชค เชธเชฟเชธเซเชŸเชฎเชจเซเช‚ เชธเช‚เช•เชฒเชจ เช•เชฐเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเซเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ

(เชฐเชถเชฟเชฏเชจ)

เชชเชฐเชฟเชšเชฏ

เชฎเชœเชฌเซ‚เชค เชตเชฟเชคเชฐเชฟเชค เชธเชฟเชธเซเชŸเชฎเซ‹ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฎ เชจเซ‹เชกเซเชธ เชชเชฐ เชฏเซ‹เช—เซเชฏ เช…เชจเซ‡ เชธเซเชธเช‚เช—เชค เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เชเช• เชฒเชพเช•เซเชทเชฃเชฟเช• เช‰เช•เซ‡เชฒ เช เช›เซ‡ เช•เซ‡ เชŸเซ‡เช•เซเชทเซเชšเซเชฏเซเช…เชฒ เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ เชตเชฐเซเชฃเชจ (เชŸเซ‡เชฐเชพเชซเซ‹เชฐเซเชฎ, เชเชจเซเชธเชฟเชฌเชฒ เช…เชฅเชตเชพ เช•เช‚เชˆเช• เชเช•เชธเชฐเช–เซเช‚) เช…เชจเซ‡ เช†เชชเชฎเซ‡เชณเซ‡ เชœเชจเชฐเซ‡เชŸ เชฅเชฏเซ‡เชฒ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเชˆเชฒเซ‹ (เช˜เชฃเซ€เชตเชพเชฐ โ€” เชฆเชฐเซ‡เช• เชจเซ‹เชก/เชฐเซ‹เชฒ เชฎเชพเชŸเซ‡ เชธเชฎเชฐเซเชชเชฟเชค) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹. เช…เชฎเซ‡ เชฆเชฐเซ‡เช• เช•เซ‹เชฎเซเชฏเซเชจเชฟเช•เซ‡เชŸเชฟเช‚เช— เชจเซ‹เชกเซเชธ เชชเชฐ เชธเชฎเชพเชจ เชธเช‚เชธเซเช•เชฐเชฃเซ‹เชจเชพ เชธเชฎเชพเชจ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช (เช…เชจเซเชฏเชฅเชพ เช…เชฎเซ‡ เช…เชธเช‚เช—เชคเชคเชพ เชธเชฎเชธเซเชฏเชพเช“เชจเซ‹ เช…เชจเซเชญเชต เช•เชฐเซ€เชถเซเช‚). JVM เชตเชฟเชถเซเชตเชฎเชพเช‚ เช†เชจเซ‹ เช…เชฐเซเชฅ เช เช›เซ‡ เช•เซ‡ เช“เช›เชพเชฎเชพเช‚ เช“เช›เซ€ เชฎเซ‡เชธเซ‡เชœเชฟเช‚เช— เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เชคเชฎเชพเชฎ เช•เซ‹เชฎเซเชฏเซเชจเชฟเช•เซ‡เชŸเชฟเช‚เช— เชจเซ‹เชกเซเชธ เชชเชฐ เชธเชฎเชพเชจ เชธเช‚เชธเซเช•เชฐเชฃเชจเซ€ เชนเซ‹เชตเซ€ เชœเซ‹เชˆเช.

เชธเชฟเชธเซเชŸเชฎเชจเชพ เชชเชฐเซ€เช•เซเชทเชฃ เชตเชฟเชถเซ‡ เชถเซเช‚? เช…เชฒเชฌเชคเซเชค, เชธเช‚เช•เชฒเชจ เช•เชธเซ‹เชŸเซ€เช“ เชชเชฐ เช†เชตเชคเชพ เชชเชนเซ‡เชฒเชพ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชคเชฎเชพเชฎ เช˜เชŸเช•เซ‹ เชฎเชพเชŸเซ‡ เชเช•เชฎ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชนเซ‹เชตเชพ เชœเซ‹เชˆเช. เชฐเชจเชŸเชพเช‡เชฎ เชชเชฐ เชชเชฐเซ€เช•เซเชทเชฃ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‡ เชเช•เซเชธเซเชŸเซเชฐเชพเชชเซ‹เชฒเซ‡เชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เชธเช•เซเชทเชฎ เชฅเชตเชพ เชฎเชพเชŸเซ‡, เช†เชชเชฃเซ‡ เช–เชพเชคเชฐเซ€ เช•เชฐเชตเซ€ เชœเซ‹เชˆเช เช•เซ‡ เชฌเชงเซ€ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เช“เชจเซ€ เช†เชตเซƒเชคเซเชคเชฟเช“ เชฐเชจเชŸเชพเช‡เชฎ เช…เชจเซ‡ เชชเชฐเซ€เช•เซเชทเชฃ เชตเชพเชคเชพเชตเชฐเชฃ เชฌเช‚เชจเซ‡เชฎเชพเช‚ เชธเชฎเชพเชจ เชฐเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡.

เชธเช‚เช•เชฒเชจ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชšเชฒเชพเชตเชคเซ€ เชตเช–เชคเซ‡, เชฌเชงเชพ เชจเซ‹เชกเซเชธ เชชเชฐ เชธเชฎเชพเชจ เชตเชฐเซเช—เชชเชพเชฅ เชฐเชพเช–เชตเชพเชจเซเช‚ เช˜เชฃเซ€เชตเชพเชฐ เช–เซ‚เชฌ เชธเชฐเชณ เชนเซ‹เชฏ เช›เซ‡. เช†เชชเชฃเซ‡ เชฎเชพเชคเซเชฐ เช เชธเซเชจเชฟเชถเซเชšเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เช•เซ‡ เชœเชฎเชพเชตเชŸ เชชเชฐ เชธเชฎเชพเชจ เชตเชฐเซเช—เชชเชพเชฅเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡. (เชตเชฟเชตเชฟเชง เชจเซ‹เชกเซเชธ เชชเชฐ เชตเชฟเชตเชฟเชง เชตเชฐเซเช—เชชเชพเชฅเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชถเช•เซเชฏ เช›เซ‡, เชชเชฐเช‚เชคเซ เช† เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซเช‚ เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟเชคเซเชต เช•เชฐเชตเซเช‚ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เชœเชฎเชพเชตเชตเซเช‚ เชตเชงเซ เชฎเซเชถเซเช•เซ‡เชฒ เช›เซ‡.) เชคเซ‡เชฅเซ€ เชตเชธเซเชคเซเช“ เชธเชฐเชณ เชฐเชพเช–เชตเชพ เชฎเชพเชŸเซ‡ เช†เชชเชฃเซ‡ เชฌเชงเชพ เชจเซ‹เชกเซเชธ เชชเชฐ เชธเชฎเชพเชจ เชตเชฐเซเช—เชชเชพเชฅเชจเซ‡ เชœ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเชˆเชถเซเช‚.

เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เชธเชพเชฅเซ‡ เชฎเชณเซ€เชจเซ‡ เชตเชฟเช•เชธเชฟเชค เชฅเชพเชฏ เช›เซ‡. เช…เชฎเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชตเชฟเชตเชฟเชง เช“เชณเช–เชตเชพ เชฎเชพเชŸเซ‡ เช†เชตเซƒเชคเซเชคเชฟเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช
เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เช‰เชคเซเช•เซเชฐเชพเช‚เชคเชฟเชจเชพ เชคเชฌเช•เซเช•เชพ. เชตเชฐเซเชเชจ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ เชนเซ‡เช เชณ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช†เชตเชฐเซ€ เชฒเซ‡เชตเชพเชจเซเช‚ เช…เชจเซ‡ เช•เซ‡เชŸเชฒเชพเช• เชฒเซ‡เชฌเชฒเซเชธ เชธเชพเชฅเซ‡ เชตเชฟเชตเชฟเชง เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเซ‹เชจเซ‡ เช“เชณเช–เชตเชพ เชฎเชพเชŸเซ‡ เชคเซ‡ เชตเชพเชœเชฌเซ€ เชฒเชพเช—เซ‡ เช›เซ‡. เชœเซ‹ เช‰เชคเซเชชเชพเชฆเชจเชฎเชพเช‚ เชฎเชพเชคเซเชฐ เชเช• เชœ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชนเซ‹เชฏ, เชคเซ‹ เช…เชฎเซ‡ เช“เชณเช–เช•เชฐเซเชคเชพ เชคเชฐเซ€เช•เซ‡ เชธเชฟเช‚เช—เชฒ เชตเชฐเซเชเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช. เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เช†เชชเชฃเซ€ เชชเชพเชธเซ‡ เชฌเชนเซเชตเชฟเชง เช‰เชคเซเชชเชพเชฆเชจ เชตเชพเชคเชพเชตเชฐเชฃ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. เช…เชจเซ‡ เชฆเชฐเซ‡เช• เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชฎเชพเชŸเซ‡ เช†เชชเชฃเชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ€ เช…เชฒเช— เชถเชพเช–เชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเซ€ เชถเช•เซ‡ เช›เซ‡. เชคเซ‡เชฅเซ€ เชตเชฟเชตเชฟเชง เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเซ‹เชจเซ‡ เช…เชจเชจเซเชฏ เชฐเซ€เชคเซ‡ เช“เชณเช–เชตเชพ เชฎเชพเชŸเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเซ‹เชจเซ‡ เชถเชพเช–เชพ เช…เชจเซ‡ เชธเช‚เชธเซเช•เชฐเชฃ เชธเชพเชฅเซ‡ เชฒเซ‡เชฌเชฒ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชฆเชฐเซ‡เช• เชฌเซเชฐเชพเชจเซเชš เชฒเซ‡เชฌเชฒ เช…เชจเซ‡ เชตเชฐเซเชเชจ เชฆเชฐเซ‡เช• เชจเซ‹เชก เชชเชฐ เชตเชฟเชคเชฐเชฟเชค เชจเซ‹เชกเซเชธ, เชชเซ‹เชฐเซเชŸเซเชธ, เชเช•เซเชธเชŸเชฐเซเชจเชฒ เชฐเชฟเชธเซ‹เชฐเซเชธเชฟเชธ, เช•เซเชฒเชพเชธเชชเชพเชฅ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เชตเชฐเซเชเชจเชจเชพ เชเช• เชœ เชธเช‚เชฏเซ‹เชœเชจเชจเซ‡ เช…เชจเซเชฐเซ‚เชช เช›เซ‡. เช…เชนเซ€เช‚ เช†เชชเชฃเซ‡ เชซเช•เซเชค เชเช• เชœ เชถเชพเช–เชพเชจเซ‡ เช†เชตเชฐเซ€ เชฒเชˆเชถเซเช‚ เช…เชจเซ‡ เช…เชจเซเชฏ เช•เชฒเชพเช•เซƒเชคเชฟเช“เชจเซ€ เชœเซ‡เชฎ เชœ เชคเซเชฐเชฃ เช˜เชŸเช• เชฆเชถเชพเช‚เชถ เชธเช‚เชธเซเช•เชฐเชฃ (1.2.3) เชฆเซเชตเชพเชฐเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเซ‹เชจเซ‡ เช“เชณเช–เซ€เชถเซเช‚.

เช†เชงเซเชจเชฟเช• เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเชˆเชฒเซ‹ เชนเชตเซ‡ เชฎเซ‡เชจเซเชฏเซเช…เชฒเซ€ เชธเช‚เชถเซ‹เชงเชฟเชค เชฅเชคเซ€ เชจเชฅเซ€. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช†เชชเชฃเซ‡ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ€เช เช›เซ€เช
เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชซเชพเชˆเชฒเซ‹ เชœเชฎเชพเชตเชŸ เชธเชฎเชฏเซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เช•เซเชฏเชพเชฐเซ‡เชฏ เชธเซเชชเชฐเซเชถ เช•เชฐเชถเซ‹ เชจเชนเซ€เช‚ เชชเช›เซ€ เชคเซ‡เชฅเซ€ เช•เซ‹เชˆ เชชเซ‚เช›เซ€ เชถเช•เซ‡ เช›เซ‡ เช•เซ‡ เชถเชพ เชฎเชพเชŸเซ‡ เช†เชชเชฃเซ‡ เชนเชœเซ€ เชชเชฃ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเซ‹ เชฎเชพเชŸเซ‡ เชŸเซ‡เช•เซเชธเซเชŸ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช? เชธเช‚เช•เชฒเชจ เชเช•เชฎเชจเซ€ เช…เช‚เชฆเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฎเซ‚เช•เชตเชพเชจเซ‹ เช…เชจเซ‡ เช•เชฎเซเชชเชพเช‡เชฒ-เชŸเชพเช‡เชฎ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฎเชพเชจเซเชฏเชคเชพเชฅเซ€ เชฒเชพเชญ เชฎเซ‡เชณเชตเชตเชพเชจเซ‹ เชเช• เชธเช•เซเชทเชฎ เชตเชฟเช•เชฒเซเชช เช›เซ‡.

เช† เชชเซ‹เชธเซเชŸเชฎเชพเช‚ เช†เชชเชฃเซ‡ เชธเช‚เช•เชฒเชฟเชค เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸเชฎเชพเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฐเชพเช–เชตเชพเชจเชพ เชตเชฟเชšเชพเชฐเชจเซ€ เชคเชชเชพเชธ เช•เชฐเซ€เชถเซเช‚.

เช•เชฎเซเชชเชพเช‡เชฒเซ‡เชฌเชฒ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ

เช† เชตเชฟเชญเชพเช—เชฎเชพเช‚ เช†เชชเชฃเซ‡ เชธเซเชŸเซ‡เชŸเชฟเช• เช•เชจเซเชซเชฟเช—เชฐเซ‡เชถเชจเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชจเซ€ เชšเชฐเซเชšเชพ เช•เชฐเซ€เชถเซเช‚. เชฌเซ‡ เชธเชฐเชณ เชธเซ‡เชตเชพเช“ - เช‡เช•เซ‹ เชธเซ‡เชตเชพ เช…เชจเซ‡ เช‡เช•เซ‹ เชธเซ‡เชตเชพเชจเชพ เช•เซเชฒเชพเชฏเชจเซเชŸเชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช…เชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชฐเชนเซ€ เช›เซ‡. เชชเช›เซ€ เชฌเช‚เชจเซ‡ เชธเซ‡เชตเชพเช“ เชธเชพเชฅเซ‡เชจเซ€ เชฌเซ‡ เช…เชฒเช—-เช…เชฒเช— เชตเชฟเชคเชฐเชฟเชค เชชเซเชฐเชฃเชพเชฒเซ€เช“ เชคเซเชตเชฐเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชเช• เชธเชฟเช‚เช—เชฒ เชจเซ‹เชก เช•เชจเซเชซเชฟเช—เชฐเซ‡เชถเชจ เชฎเชพเชŸเซ‡ เช›เซ‡ เช…เชจเซ‡ เชฌเซ€เชœเซเช‚ เชฌเซ‡ เชจเซ‹เชก เช•เชจเซเชซเชฟเช—เชฐเซ‡เชถเชจ เชฎเชพเชŸเซ‡ เช›เซ‡.

เชเช• เชฒเชพเช•เซเชทเชฃเชฟเช• เชตเชฟเชคเชฐเชฟเชค เชธเชฟเชธเซเชŸเชฎเชฎเชพเช‚ เชฅเซ‹เชกเชพ เช—เชพเช‚เช เซ‹ เชนเซ‹เชฏ เช›เซ‡. เช—เชพเช‚เช เซ‹เชจเซ‡ เช…เชฎเซเช• เชชเซเชฐเช•เชพเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช“เชณเช–เซ€ เชถเช•เชพเชฏ เช›เซ‡:

sealed trait NodeId
case object Backend extends NodeId
case object Frontend extends NodeId

เช…เชฅเชตเชพ เชฎเชพเชคเซเชฐ

case class NodeId(hostName: String)

เช…เชฅเชตเชพ เชคเซ‹

object Singleton
type NodeId = Singleton.type

เช† เชจเซ‹เชกเซเชธ เชตเชฟเชตเชฟเชง เชญเซ‚เชฎเชฟเช•เชพเช“ เช•เชฐเซ‡ เช›เซ‡, เช•เซ‡เชŸเชฒเซ€เช• เชธเซ‡เชตเชพเช“ เชšเชฒเชพเชตเซ‡ เช›เซ‡ เช…เชจเซ‡ TCP/HTTP เช•เชจเซ‡เช•เซเชถเชจเซเชธ เชฆเซเชตเชพเชฐเชพ เช…เชจเซเชฏ เชจเซ‹เชกเซเชธ เชธเชพเชฅเซ‡ เชตเชพเชคเชšเซ€เชค เช•เชฐเชตเชพเชฎเชพเช‚ เชธเช•เซเชทเชฎ เชนเซ‹เชตเชพ เชœเซ‹เชˆเช.

TCP เช•เชจเซ‡เช•เซเชถเชจ เชฎเชพเชŸเซ‡ เช“เช›เชพเชฎเชพเช‚ เช“เช›เซ‹ เชชเซ‹เชฐเซเชŸ เชจเช‚เชฌเชฐ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เช…เชฎเซ‡ เช เชชเชฃ เชธเซเชจเชฟเชถเซเชšเชฟเชค เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช เช•เซ‡ เช•เซเชฒเชพเชฏเช‚เชŸ เช…เชจเซ‡ เชธเชฐเซเชตเชฐ เชธเชฎเชพเชจ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ เชชเชฐ เชตเชพเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ‡. เชจเซ‹เชกเซเชธ เชตเชšเซเชšเซ‡ เช•เชจเซ‡เช•เซเชถเชจเชจเซเช‚ เชฎเซ‹เชกเซ‡เชฒ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชšเชพเชฒเซ‹ เชจเซ€เชšเซ‡เชจเซ‹ เชตเชฐเซเช— เชœเชพเชนเซ‡เชฐ เช•เชฐเซ€เช:

case class TcpEndPoint[Protocol](node: NodeId, port: Port[Protocol])

เชœเซเชฏเชพเช‚ Port เชฎเชพเชคเซเชฐ เชเช• เช›เซ‡ Int เชฎเชพเชจเซเชฏ เชถเซเชฐเซ‡เชฃเซ€เชฎเชพเช‚:

type PortNumber = Refined[Int, Closed[_0, W.`65535`.T]]

เชถเซเชฆเซเชง เชชเซเชฐเช•เชพเชฐเซ‹

เชœเซเช“ เชถเซเชฆเซเชง เชชเซเชธเซเชคเช•เชพเชฒเชฏ. เชŸเซ‚เช‚เช•เชฎเชพเช‚, เชคเซ‡ เช…เชจเซเชฏ เชชเซเชฐเช•เชพเชฐเซ‹เชฎเชพเช‚ เช•เชฎเซเชชเชพเช‡เชฒ เชธเชฎเชฏ เชฎเชฐเซเชฏเชพเชฆเชพเช“เชจเซ‡ เช‰เชฎเซ‡เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เช† เชฌเชพเชฌเชคเซ‡ Int เชซเช•เซเชค 16-เชฌเซ€เชŸ เชฎเซ‚เชฒเซเชฏเซ‹ เชฐเชพเช–เชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช›เซ‡ เชœเซ‡ เชชเซ‹เชฐเซเชŸ เชจเช‚เชฌเชฐเชจเซเช‚ เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟเชคเซเชต เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เช† เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช…เชญเชฟเช—เชฎ เชฎเชพเชŸเซ‡ เช† เชชเซเชธเซเชคเช•เชพเชฒเชฏเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เช•เซ‹เชˆ เช†เชตเชถเซเชฏเช•เชคเชพ เชจเชฅเซ€. เชคเซ‡ เชฎเชพเชคเซเชฐ เช–เซ‚เชฌ เชœ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เชซเชฟเชŸ เชฒเชพเช—เซ‡ เช›เซ‡.

HTTP (REST) โ€‹โ€‹เชฎเชพเชŸเซ‡ เช…เชฎเชจเซ‡ เชธเซ‡เชตเชพเชจเชพ เชชเชพเชฅเชจเซ€ เชชเชฃ เชœเชฐเซ‚เชฐ เชชเชกเซ€ เชถเช•เซ‡ เช›เซ‡:

type UrlPathPrefix = Refined[String, MatchesRegex[W.`"[a-zA-Z_0-9/]*"`.T]]
case class PortWithPrefix[Protocol](portNumber: PortNumber, pathPrefix: UrlPathPrefix)

เชซเซ‡เชจเซเชŸเชฎ เชชเซเชฐเช•เชพเชฐ

เชธเช‚เช•เชฒเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒเชจเซ‡ เช“เชณเช–เชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เชชเซเชฐเช•เชพเชฐ เชฆเชฒเซ€เชฒเชจเซ€ เช˜เซ‹เชทเชฃเชพ เช•เชฐเชตเชพเชจเซ€ เชธเซเช•เซ‡เชฒเชพ เชธเซเชตเชฟเชงเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช Protocol เชœเซ‡เชจเซ‹ เชตเชฐเซเช—เชฎเชพเช‚ เช‰เชชเชฏเซ‹เช— เชฅเชคเซ‹ เชจเชฅเซ€. เชคเซ‡ เช•เชนเซ‡เชตเชพเชคเชพ เช›เซ‡ เชซเซ‡เชจเซเชŸเชฎ เชชเซเชฐเช•เชพเชฐ. เชฐเชจเชŸเชพเช‡เชฎ เชตเช–เชคเซ‡ เช†เชชเชฃเชจเซ‡ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ เช“เชณเช–เช•เชฐเซเชคเชพเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชจเซ€ เชญเชพเช—เซเชฏเซ‡ เชœ เชœเชฐเซ‚เชฐ เชชเชกเซ‡ เช›เซ‡, เชคเซ‡เชฅเซ€ เชœ เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชคเชพ เชจเชฅเซ€. เชธเช‚เช•เชฒเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ เช† เชซเซ‡เชจเซเชŸเชฎ เชชเซเชฐเช•เชพเชฐ เชตเชงเชพเชฐเชพเชจเซ€ เชธเชฒเชพเชฎเชคเซ€ เช†เชชเซ‡ เช›เซ‡. เช…เชฎเซ‡ เช–เซ‹เชŸเชพ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ เชธเชพเชฅเซ‡ เชชเซ‹เชฐเซเชŸ เชชเชธเชพเชฐ เช•เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€.

เชธเซŒเชฅเซ€ เชตเชงเซ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒเซเชธเชฎเชพเช‚เชจเซ‹ เชเช• REST API เชœเซ‡เชธเชจ เชธเซ€เชฐเซ€เชฏเชฒเชพเช‡เชเซ‡เชถเชจ เชธเชพเชฅเซ‡ เช›เซ‡:

sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]

เชœเซเชฏเชพเช‚ RequestMessage เชธเช‚เชฆเซ‡เชถเชพเช“เชจเซ‹ เช†เชงเชพเชฐ เชชเซเชฐเช•เชพเชฐ เช›เซ‡ เชœเซ‡ เช•เซเชฒเชพเชฏเช‚เชŸ เชธเชฐเซเชตเชฐเชจเซ‡ เชฎเซ‹เช•เชฒเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ ResponseMessage เชธเชฐเซเชตเชฐ เชคเชฐเชซเชฅเซ€ เชชเซเชฐเชคเชฟเชญเชพเชต เชธเช‚เชฆเซ‡เชถ เช›เซ‡. เช…เชฒเชฌเชคเซเชค, เช…เชฎเซ‡ เช…เชจเซเชฏ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ เชตเชฐเซเชฃเชจเซ‹ เชฌเชจเชพเชตเซ€ เชถเช•เซ€เช เช›เซ€เช เชœเซ‡ เช‡เชšเซเช›เชฟเชค เชšเซ‹เช•เชธเชพเช‡ เชธเชพเชฅเซ‡ เชธเช‚เชšเชพเชฐ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ‡ เช›เซ‡.

เช† เชชเซ‹เชธเซเชŸเชจเชพ เชนเซ‡เชคเซเช“ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒเชจเชพ เชธเชฐเชณ เชธเช‚เชธเซเช•เชฐเชฃเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚:

sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]

เช† เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ เชตเชฟเชจเช‚เชคเซ€ เชธเช‚เชฆเซ‡เชถ url เชธเชพเชฅเซ‡ เชœเซ‹เชกเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชชเซเชฐเชคเชฟเชญเชพเชต เชธเช‚เชฆเซ‡เชถ เชธเชพเชฆเชพ เชถเชฌเซเชฆเชฎเชพเชณเชพ เชคเชฐเซ€เช•เซ‡ เชชเชฐเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เชธเซ‡เชตเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซเช‚ เชตเชฐเซเชฃเชจ เชธเซ‡เชตเชพเชจเชพ เชจเชพเชฎ, เชฌเช‚เชฆเชฐเซ‹เชจเซ‹ เชธเช‚เช—เซเชฐเชน เช…เชจเซ‡ เช•เซ‡เชŸเชฒเซ€เช• เชจเชฟเชฐเซเชญเชฐเชคเชพ เชฆเซเชตเชพเชฐเชพ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชธเซเช•เซ‡เชฒเชพเชฎเชพเช‚ เช† เชฌเชงเชพ เช˜เชŸเช•เซ‹เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฐเชœเซ‚ เช•เชฐเชตเชพ เชคเซ‡เชจเซ€ เช•เซ‡เชŸเชฒเซ€เช• เชธเช‚เชญเชตเชฟเชค เชฐเซ€เชคเซ‹ เช›เซ‡ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, HList, เชฌเซ€เชœเช—เชฃเชฟเชค เชกเซ‡เชŸเชพ เชชเซเชฐเช•เชพเชฐเซ‹). เช† เชชเซ‹เชธเซเชŸเชจเชพ เชนเซ‡เชคเซเช“ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เช•เซ‡เช• เชชเซ‡เชŸเชฐเซเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ เช…เชจเซ‡ เชธเช‚เชฏเซเช•เซเชค เชŸเซเช•เชกเชพเช“ (เชฎเซ‹เชกเซเชฏเซเชฒเซเชธ) เชจเซ‡ เชฒเช•เซเชทเชฃเซ‹ เชคเชฐเซ€เช•เซ‡ เชฐเชœเซ‚ เช•เชฐเซ€เชถเซเช‚. (เช† เชธเช‚เช•เชฒเชจ เช•เชฐเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช…เชญเชฟเช—เชฎ เชฎเชพเชŸเซ‡ เช•เซ‡เช• เชชเซ‡เชŸเชฐเซเชจเชจเซ€ เช†เชตเชถเซเชฏเช•เชคเชพ เชจเชฅเซ€. เชคเซ‡ เชตเชฟเชšเชพเชฐเชจเซเช‚ เชฎเชพเชคเซเชฐ เชเช• เชธเช‚เชญเชตเชฟเชค เช…เชฎเชฒเซ€เช•เชฐเชฃ เช›เซ‡.)

เช…เชจเซเชฏ เช—เชพเช‚เช เซ‹เชจเชพ เช…เช‚เชคเชฟเชฎ เชฌเชฟเช‚เชฆเซเช“ เชคเชฐเซ€เช•เซ‡ เช•เซ‡เช• เชชเซ‡เชŸเชฐเซเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชจเชฟเชฐเซเชญเชฐเชคเชพเชจเซ‡ เชฐเชœเซ‚ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡:

  type EchoProtocol[A] = SimpleHttpGetRest[A, A]

  trait EchoConfig[A] extends ServiceConfig {
    def portNumber: PortNumber = 8081
    def echoPort: PortWithPrefix[EchoProtocol[A]] = PortWithPrefix[EchoProtocol[A]](portNumber, "echo")
    def echoService: HttpSimpleGetEndPoint[NodeId, EchoProtocol[A]] = providedSimpleService(echoPort)
  }

เช‡เช•เซ‹ เชธเซ‡เชตเชพเชจเซ‡ เชฎเชพเชคเซเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เชชเซ‹เชฐเซเชŸเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช…เชจเซ‡ เช…เชฎเซ‡ เชœเชพเชนเซ‡เชฐ เช•เชฐเซ€เช เช›เซ€เช เช•เซ‡ เช† เชชเซ‹เชฐเซเชŸ เช‡เช•เซ‹ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒเชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเซ‡ เช›เซ‡. เชจเซ‹เช‚เชง เช•เชฐเซ‹ เช•เซ‡ เช…เชฎเชพเชฐเซ‡ เช† เช•เซเชทเชฃเซ‡ เช•เซ‹เชˆ เชšเซ‹เช•เซเช•เชธ เชชเซ‹เชฐเซเชŸเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ เชฒเช•เซเชทเชฃ เช…เชฎเซ‚เชฐเซเชค เชชเชฆเซเชงเชคเชฟเช“ เช˜เซ‹เชทเชฃเชพเช“เชจเซ‡ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชœเซ‹ เช†เชชเชฃเซ‡ เช…เชฎเซ‚เชฐเซเชค เชชเชฆเซเชงเชคเชฟเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช, เชคเซ‹ เช•เชฎเซเชชเชพเชˆเชฒเชฐเชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚ เช…เชฎเชฒเซ€เช•เชฐเชฃเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡. เช…เชนเซ€เช‚ เช…เชฎเซ‡ เช…เชฎเชฒเซ€เช•เชฐเชฃ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซเชฏเซเช‚ เช›เซ‡ (8081) เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชกเชฟเชซเซ‹เชฒเซเชŸ เชฎเซ‚เชฒเซเชฏ เชคเชฐเซ€เช•เซ‡ เชฅเชถเซ‡ เชœเซ‹ เช†เชชเชฃเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‹เช‚เช•เซเชฐเชฟเชŸ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เช›เซ‹เชกเซ€ เชฆเชˆเช.

เช…เชฎเซ‡ เช‡เช•เซ‹ เชธเชฐเซเชตเชฟเชธ เช•เซเชฒเชพเชฏเช‚เชŸเชจเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เชจเชฟเชฐเซเชญเชฐเชคเชพ เชœเชพเชนเซ‡เชฐ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช:

  trait EchoClientConfig[A] {
    def testMessage: String = "test"
    def pollInterval: FiniteDuration
    def echoServiceDependency: HttpSimpleGetEndPoint[_, EchoProtocol[A]]
  }

เช…เชตเชฒเช‚เชฌเชจ เชธเชฎเชพเชจ เชชเซเชฐเช•เชพเชฐ เชงเชฐเชพเชตเซ‡ เช›เซ‡ echoService. เช–เชพเชธ เช•เชฐเซ€เชจเซ‡, เชคเซ‡ เชธเชฎเชพเชจ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒเชจเซ€ เชฎเชพเช‚เช— เช•เชฐเซ‡ เช›เซ‡. เช†เชฅเซ€, เช†เชชเชฃเซ‡ เช–เชพเชคเชฐเซ€ เชฐเชพเช–เซ€ เชถเช•เซ€เช เช•เซ‡ เชœเซ‹ เช†เชชเชฃเซ‡ เช† เชฌเซ‡ เชจเชฟเชฐเซเชญเชฐเชคเชพเชจเซ‡ เชœเซ‹เชกเซ€เช เชคเซ‹ เชคเซ‡ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเชถเซ‡.

เชธเซ‡เชตเชพเช“ เช…เชฎเชฒเซ€เช•เชฐเชฃ

เชธเซ‡เชตเชพเชจเซ‡ เชถเชฐเซ‚ เช•เชฐเชตเชพ เช…เชจเซ‡ เช†เช•เชฐเซเชทเช• เชฐเซ€เชคเซ‡ เชฌเช‚เชง เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เชพเชฐเซเชฏเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. (เชธเซ‡เชตเชพเชจเซ‡ เชฌเช‚เชง เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เชชเชฐเซ€เช•เซเชทเชฃ เชฎเชพเชŸเซ‡ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡.) เชซเชฐเซ€เชฅเซ€ เช†เชชเซ‡เชฒ เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชฎเชพเชŸเซ‡ เช†เชตเชพ เชซเช‚เช•เซเชถเชจเชจเซ‡ เชธเซเชชเชทเซเชŸ เช•เชฐเชตเชพเชจเชพ เชฅเซ‹เชกเชพ เชตเชฟเช•เชฒเซเชชเซ‹ เช›เซ‡ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช…เชฎเซ‡ เชชเซเชฐเช•เชพเชฐ เชตเชฐเซเช—เซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช). เช† เชชเซ‹เชธเซเชŸ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เชซเชฐเซ€เชฅเซ€ เช•เซ‡เช• เชชเซ‡เชŸเชฐเซเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚. เช…เชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเซ‡เชตเชพเชจเซเช‚ เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟเชคเซเชต เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช cats.Resource เชœเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เช•เซŒเช‚เชธ เช…เชจเซ‡ เชธเช‚เชธเชพเชงเชจ เชชเซเชฐเช•เชพเชถเชจ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡. เชธเช‚เชธเชพเชงเชจ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡ เช†เชชเชฃเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช…เชจเซ‡ เช•เซ‡เชŸเชฒเชพเช• เชฐเชจเชŸเชพเช‡เชฎ เชธเช‚เชฆเชฐเซเชญ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพ เชœเซ‹เชˆเช. เชคเซ‡เชฅเซ€ เชธเซ‡เชตเชพ เชถเชฐเซ‚ เช•เชฐเชตเชพเชจเซเช‚ เช•เชพเชฐเซเชฏ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฆเซ‡เช–เชพเชˆ เชถเช•เซ‡ เช›เซ‡:

  type ResourceReader[F[_], Config, A] = Reader[Config, Resource[F, A]]

  trait ServiceImpl[F[_]] {
    type Config
    def resource(
      implicit
      resolver: AddressResolver[F],
      timer: Timer[F],
      contextShift: ContextShift[F],
      ec: ExecutionContext,
      applicative: Applicative[F]
    ): ResourceReader[F, Config, Unit]
  }

เชœเซเชฏเชพเช‚

  • Config โ€” เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‹ เชชเซเชฐเช•เชพเชฐ เช•เซ‡ เชœเซ‡ เช† เชธเชฐเซเชตเชฟเชธ เชธเซเชŸเชพเชฐเซเชŸเชฐ เชฆเซเชตเชพเชฐเชพ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡
  • AddressResolver โ€” เชฐเชจเชŸเชพเช‡เชฎ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เช•เซ‡ เชœเซ‡ เช…เชจเซเชฏ เชจเซ‹เชกเซเชธเชจเชพ เชตเชพเชธเซเชคเชตเชฟเช• เชธเชฐเชจเชพเชฎเชพเช‚ เชฎเซ‡เชณเชตเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เชงเชฐเชพเชตเซ‡ เช›เซ‡ (เชตเชฟเช—เชคเซ‹ เชฎเชพเชŸเซ‡ เชตเชพเช‚เชšเชคเชพ เชฐเชนเซ‹).

เช…เชจเซเชฏ เชชเซเชฐเช•เชพเชฐเซ‹เชฎเชพเช‚เชฅเซ€ เช†เชตเซ‡ เช›เซ‡ cats:

  • F[_] - เช…เชธเชฐ เชชเซเชฐเช•เชพเชฐ (เชธเซŒเชฅเซ€ เชธเชฐเชณ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ F[A] เชจเซเชฏเชพเชฏเซ€ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ () => A. เช† เชชเซ‹เชธเซเชŸเชฎเชพเช‚ เช…เชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ cats.IO.)
  • Reader[A,B] โ€” เช เชซเช‚เช•เซเชถเชจ เชฎเชพเชŸเซ‡ เชตเชงเซ เช•เซ‡ เช“เช›เซเช‚ เชธเชฎเชพเชจเชพเชฐเซเชฅเซ€ เช›เซ‡ A => B
  • cats.Resource - เชนเชธเซเชคเช—เชค เช•เชฐเชตเชพเชจเซ€ เช…เชจเซ‡ เช›เซ‹เชกเชตเชพเชจเซ€ เชฐเซ€เชคเซ‹ เช›เซ‡
  • Timer - เชŠเช‚เช˜ / เชธเชฎเชฏ เชฎเชพเชชเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡
  • ContextShift - เชจเชพ เชเชจเชพเชฒเซ‹เช— ExecutionContext
  • Applicative - เช…เชธเชฐเชฎเชพเช‚ เชซเช‚เช•เซเชถเชจเซเชธเชจเซเช‚ เชฐเซ‡เชชเชฐ (เชฒเช—เชญเช— เชเช• เชฎเซ‹เชจเชพเชก) (เช†เชชเชฃเซ‡ เช†เช–เชฐเซ‡ เชคเซ‡เชจเซ‡ เช…เชจเซเชฏ เช•เช‚เชˆเช• เชธเชพเชฅเซ‡ เชฌเชฆเชฒเซ€ เชถเช•เซ€เช เช›เซ€เช)

เช† เชˆเชจเซเชŸเชฐเชซเซ‡เชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช…เชฎเซ‡ เช•เซ‡เชŸเชฒเซ€เช• เชธเซ‡เชตเชพเช“เชจเซ‹ เช…เชฎเชฒ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช. เชฆเชพเช–เชฒเชพ เชคเชฐเซ€เช•เซ‡, เชเชตเซ€ เชธเซ‡เชตเชพ เชœเซ‡ เช•เช‚เชˆ เช•เชฐเชคเซ€ เชจเชฅเซ€:

  trait ZeroServiceImpl[F[_]] extends ServiceImpl[F] {
    type Config <: Any
    def resource(...): ResourceReader[F, Config, Unit] =
      Reader(_ => Resource.pure[F, Unit](()))
  }

(เชœเซเช“ เชธเซเชคเซเชฐเซ‹เชค เช•เซ‹เชก เช…เชจเซเชฏ เชธเซ‡เชตเชพเช“เชจเชพ เช…เชฎเชฒเซ€เช•เชฐเชฃ เชฎเชพเชŸเซ‡ - เช‡เช•เซ‹ เชธเซ‡เชตเชพ,
เช‡เช•เซ‹ เช•เซเชฒเชพเชฏเชจเซเชŸ เช…เชจเซ‡ เช†เชœเซ€เชตเชจ เชจเชฟเชฏเช‚เชคเซเชฐเช•เซ‹.)

เชจเซ‹เชก เช เชเช• เช‘เชฌเซเชœเซ‡เช•เซเชŸ เช›เซ‡ เชœเซ‡ เช•เซ‡เชŸเชฒเซ€เช• เชธเซ‡เชตเชพเช“ เชšเชฒเชพเชตเซ‡ เช›เซ‡ (เชธเช‚เชธเชพเชงเชจเซ‹เชจเซ€ เชธเชพเช‚เช•เชณ เชถเชฐเซ‚ เช•เชฐเชตเซ€ เช เช•เซ‡เช• เชชเซ‡เชŸเชฐเซเชจ เชฆเซเชตเชพเชฐเชพ เชธเช•เซเชทเชฎ เช›เซ‡):

object SingleNodeImpl extends ZeroServiceImpl[IO]
  with EchoServiceService
  with EchoClientService
  with FiniteDurationLifecycleServiceImpl
{
  type Config = EchoConfig[String] with EchoClientConfig[String] with FiniteDurationLifecycleConfig
}

เชจเซ‹เช‚เชง เช•เชฐเซ‹ เช•เซ‡ เชจเซ‹เชกเชฎเชพเช‚ เช†เชชเชฃเซ‡ เชšเซ‹เช•เซเช•เชธ เชชเซเชฐเช•เชพเชฐเชจเซเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเซเชชเชทเซเชŸ เช•เชฐเซ€เช เช›เซ€เช เชœเซ‡ เช† เชจเซ‹เชก เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เช•เชฎเซเชชเชพเชˆเชฒเชฐ เช…เชฎเชจเซ‡ เช…เชชเซ‚เชฐเชคเชพ เชชเซเชฐเช•เชพเชฐ เชธเชพเชฅเซ‡ เช‘เชฌเซเชœเซ‡เช•เซเชŸ (เช•เซ‡เช•) เชฌเชจเชพเชตเชตเชพ เชฆเซ‡เชถเซ‡ เชจเชนเซ€เช‚, เช•เชพเชฐเชฃ เช•เซ‡ เชฆเชฐเซ‡เช• เชธเซ‡เชตเชพ เชตเชฟเชถเซ‡เชทเชคเชพ เชชเชฐ เช…เชตเชฐเซ‹เชง เชœเชพเชนเซ‡เชฐ เช•เชฐเซ‡ เช›เซ‡. Config เชชเซเชฐเช•เชพเชฐ เชคเซ‡เชฎเชœ เช…เชฎเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ เชจเซ‹เชก เชถเชฐเซ‚ เช•เชฐเซ€ เชถเช•เซ€เชถเซเช‚ เชจเชนเซ€เช‚.

เชจเซ‹เชก เชเชกเซเชฐเซ‡เชธ เชฐเชฟเชเซ‹เชฒเซเชฏเซเชถเชจ

เช•เชจเซ‡เช•เซเชถเชจ เชธเซเชฅเชพเชชเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเชจเซ‡ เชฆเชฐเซ‡เช• เชจเซ‹เชก เชฎเชพเชŸเซ‡ เชตเชพเชธเซเชคเชตเชฟเช• เชนเซ‹เชธเซเชŸ เชธเชฐเชจเชพเชฎเชพเช‚เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชคเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเชพ เช…เชจเซเชฏ เชญเชพเช—เซ‹ เช•เชฐเชคเชพเช‚ เชชเชพเช›เชณเชฅเซ€ เชœเชพเชฃเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชคเซ‡เชฅเซ€, เช…เชฎเชจเซ‡ เชจเซ‹เชก เช†เชˆเชกเซ€ เช…เชจเซ‡ เชคเซ‡เชจเชพ เชตเชพเชธเซเชคเชตเชฟเช• เชธเชฐเชจเชพเชฎเชพเช‚ เชตเชšเซเชšเซ‡ เชฎเซ‡เชชเชฟเช‚เช— เชธเชชเซเชฒเชพเชฏ เช•เชฐเชตเชพเชจเซ€ เชฐเซ€เชคเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช† เชฎเซ‡เชชเชฟเช‚เช— เชเช• เช•เชพเชฐเซเชฏ เช›เซ‡:

case class NodeAddress[NodeId](host: Uri.Host)
trait AddressResolver[F[_]] {
  def resolve[NodeId](nodeId: NodeId): F[NodeAddress[NodeId]]
}

เช†เชตเชพ เช•เชพเชฐเซเชฏเชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชจเซ€ เช•เซ‡เชŸเชฒเซ€เช• เชธเช‚เชญเชตเชฟเชค เชฐเซ€เชคเซ‹ เช›เซ‡.

  1. เชœเซ‹ เช†เชชเชฃเซ‡ เชœเชฎเชพเชตเชŸ เชชเชนเซ‡เชฒเชพ เชตเชพเชธเซเชคเชตเชฟเช• เชธเชฐเชจเชพเชฎเชพเช‚ เชœเชพเชฃเชคเชพ เชนเซ‹เชˆเช, เชจเซ‹เชก เชนเซ‹เชธเซเชŸ เช‡เชจเซเชธเซเชŸเซ‡เชจเซเชŸเซ‡เชถเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ, เชคเซ‹ เชชเช›เซ€ เช…เชฎเซ‡ เชตเชพเชธเซเชคเชตเชฟเช• เชธเชฐเชจเชพเชฎเชพเช‚ เชธเชพเชฅเซ‡ เชธเซเช•เซ‡เชฒเชพ เช•เซ‹เชก เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช เช…เชจเซ‡ เชชเช›เซ€ เชฌเชฟเชฒเซเชก เชšเชฒเชพเชตเซ€ เชถเช•เซ€เช เช›เซ€เช (เชœเซ‡ เช•เชฎเซเชชเชพเชˆเชฒ เชธเชฎเชฏ เชคเชชเชพเชธ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชชเช›เซ€ เชเช•เซ€เช•เชฐเชฃ เชชเชฐเซ€เช•เซเชทเชฃ เชธเซเชฏเซเชŸ เชšเชฒเชพเชตเซ‡ เช›เซ‡). เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช…เชฎเชพเชฐเซเช‚ เชฎเซ‡เชชเชฟเช‚เช— เช•เชพเชฐเซเชฏ เชธเซเชฅเชฟเชฐ เชฐเซ€เชคเซ‡ เชœเชพเชฃเซ€เชคเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช•เช‚เชˆเช• เชฎเชพเชŸเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡ เชœเซ‡เชฎ เช•เซ‡ a Map[NodeId, NodeAddress].
  2. เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เช†เชชเชฃเซ‡ เชตเชพเชธเซเชคเชตเชฟเช• เชธเชฐเชจเชพเชฎเชพเช‚ เชซเช•เซเชค เชชเช›เซ€เชจเชพ เชฌเชฟเช‚เชฆเซเช เชฎเซ‡เชณเชตเซ€เช เช›เซ€เช เชœเซเชฏเชพเชฐเซ‡ เชจเซ‹เชก เช–เชฐเซ‡เช–เชฐ เชถเชฐเซ‚ เชฅเชพเชฏ เช›เซ‡, เช…เชฅเชตเชพ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชจเซ‹เชกเซเชธเชจเชพ เชธเชฐเชจเชพเชฎเชพเช‚ เชจเชฅเซ€ เช•เซ‡ เชœเซ‡ เชนเชœเซ€ เชถเชฐเซ‚ เชฅเชฏเชพ เชจเชฅเซ€. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชเช• เชถเซ‹เชง เชธเซ‡เชตเชพ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เชœเซ‡ เช…เชจเซเชฏ เชคเชฎเชพเชฎ เชจเซ‹เชกเซเชธ เชชเชนเซ‡เชฒเชพเช‚ เชถเชฐเซ‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชฆเชฐเซ‡เช• เชจเซ‹เชก เชคเซ‡ เชธเซ‡เชตเชพเชฎเชพเช‚ เชคเซ‡เชจเชพ เชธเชฐเชจเชพเชฎเชพเชจเซ€ เชœเชพเชนเซ‡เชฐเชพเชค เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เชจเชฟเชฐเซเชญเชฐเชคเชพ เชฎเชพเชŸเซ‡ เชธเชฌเซเชธเซเช•เซเชฐเชพเช‡เชฌ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡.
  3. เชœเซ‹ เช†เชชเชฃเซ‡ เชธเซเชงเชพเชฐเซ€ เชถเช•เซ€เช /etc/hosts, เช…เชฎเซ‡ เชชเซ‚เชฐเซเชตเชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เชฏเชœเชฎเชพเชจ เชจเชพเชฎเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช (เชœเซ‡เชฎ เช•เซ‡ my-project-main-node เช…เชจเซ‡ echo-backend) เช…เชจเซ‡ เชฎเชพเชคเซเชฐ เชœเชฎเชพเชตเชŸ เชธเชฎเชฏเซ‡ เช† เชจเชพเชฎเชจเซ‡ ip เชธเชฐเชจเชพเชฎเชพ เชธเชพเชฅเซ‡ เชธเชพเช‚เช•เชณเซ‹.

เช† เชชเซ‹เชธเซเชŸเชฎเชพเช‚ เช…เชฎเซ‡ เช† เช•เซ‡เชธเซ‹เชจเซ‡ เชตเชงเซ เชตเชฟเช—เชคเซ‹เชฎเชพเช‚ เช†เชตเชฐเซ€ เชฒเซ‡เชคเชพ เชจเชฅเซ€. เชนเช•เซ€เช•เชคเชฎเชพเช‚ เช…เชฎเชพเชฐเชพ เชฐเชฎเช•เชกเชพเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚ เชคเชฎเชพเชฎ เช—เชพเช‚เช เซ‹ เชธเชฎเชพเชจ IP เชธเชฐเชจเชพเชฎเซเช‚ เชงเชฐเชพเชตเชถเซ‡ - 127.0.0.1.

เช† เชชเซ‹เชธเซเชŸเชฎเชพเช‚ เช…เชฎเซ‡ เชฌเซ‡ เชตเชฟเชคเชฐเชฟเชค เชธเชฟเชธเซเชŸเชฎ เชฒเซ‡เช†เช‰เชŸเชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเชˆเชถเซเช‚:

  1. เชธเชฟเช‚เช—เชฒ เชจเซ‹เชก เชฒเซ‡เช†เช‰เชŸ, เชœเซเชฏเชพเช‚ เชคเชฎเชพเชฎ เชธเซ‡เชตเชพเช“ เชธเชฟเช‚เช—เชฒ เชจเซ‹เชก เชชเชฐ เชฎเซ‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.
  2. เชฌเซ‡ เชจเซ‹เชก เชฒเซ‡เช†เช‰เชŸ, เชœเซเชฏเชพเช‚ เชธเซ‡เชตเชพ เช…เชจเซ‡ เช•เซเชฒเชพเชฏเช‚เชŸ เช…เชฒเช—-เช…เชฒเช— เชจเซ‹เชก เชชเชฐ เชนเซ‹เชฏ เช›เซ‡.

เช เชฎเชพเชŸเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชเช• เชจเซ‹เชก เชฒเซ‡เช†เช‰เชŸ เชจเซ€เชšเซ‡ เชฎเซเชœเชฌ เช›เซ‡:

เชธเชฟเช‚เช—เชฒ เชจเซ‹เชก เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ

object SingleNodeConfig extends EchoConfig[String] 
  with EchoClientConfig[String] with FiniteDurationLifecycleConfig
{
  case object Singleton // identifier of the single node 
  // configuration of server
  type NodeId = Singleton.type
  def nodeId = Singleton

  /** Type safe service port specification. */
  override def portNumber: PortNumber = 8088

  // configuration of client

  /** We'll use the service provided by the same host. */
  def echoServiceDependency = echoService

  override def testMessage: UrlPathElement = "hello"

  def pollInterval: FiniteDuration = 1.second

  // lifecycle controller configuration
  def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 requests, not 9.
}

เช…เชนเซ€เช‚ เช†เชชเชฃเซ‡ เชเช• เชœ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฌเชจเชพเชตเซ€เช เช›เซ€เช เชœเซ‡ เชธเชฐเซเชตเชฐ เช…เชจเซ‡ เช•เซเชฒเชพเชฏเช‚เชŸ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฌเช‚เชจเซ‡เชจเซ‡ เชตเชฟเชธเซเชคเซƒเชค เช•เชฐเซ‡ เช›เซ‡. เช…เชฎเซ‡ เชœเซ€เชตเชจเชšเช•เซเชฐ เชจเชฟเชฏเช‚เชคเซเชฐเช•เชจเซ‡ เชชเชฃ เช—เซ‹เช เชตเซ€เช เช›เซ€เช เชœเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชชเช›เซ€ เช•เซเชฒเชพเชฏเช‚เชŸ เช…เชจเซ‡ เชธเชฐเซเชตเชฐเชจเซ‡ เชธเชฎเชพเชชเซเชค เช•เชฐเชถเซ‡ lifetime เช…เช‚เชคเชฐเชพเชฒ เชชเชธเชพเชฐ เชฅเชพเชฏ เช›เซ‡.

เชธเซ‡เชตเชพ เช…เชฎเชฒเซ€เช•เชฐเชฃ เช…เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเซ‹เชจเซ‹ เชธเชฎเชพเชจ เชธเชฎเซ‚เชน เชฌเซ‡ เช…เชฒเช—-เช…เชฒเช— เชจเซ‹เชกเซเชธ เชธเชพเชฅเซ‡ เชธเชฟเชธเซเชŸเชฎเชจเซเช‚ เชฒเซ‡เช†เช‰เชŸ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชตเชพเชชเชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เช†เชชเชฃเซ‡ เชซเช•เซเชค เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชฌเซ‡ เช…เชฒเช— เชจเซ‹เชก เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเซ‹ เชฏเซ‹เช—เซเชฏ เชธเซ‡เชตเชพเช“ เชธเชพเชฅเซ‡:

เชฌเซ‡ เชจเซ‹เชกเซเชธ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ

  object NodeServerConfig extends EchoConfig[String] with SigTermLifecycleConfig
  {
    type NodeId = NodeIdImpl

    def nodeId = NodeServer

    override def portNumber: PortNumber = 8080
  }

  object NodeClientConfig extends EchoClientConfig[String] with FiniteDurationLifecycleConfig
  {
    // NB! dependency specification
    def echoServiceDependency = NodeServerConfig.echoService

    def pollInterval: FiniteDuration = 1.second

    def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 request, not 9.

    def testMessage: String = "dolly"
  }

เชœเซเช“ เช•เซ‡ เช†เชชเชฃเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชจเชฟเชฐเซเชญเชฐเชคเชพเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ€เช เช›เซ€เช. เช…เชฎเซ‡ เชตเชฐเซเชคเชฎเชพเชจ เชจเซ‹เชกเชจเซ€ เชจเชฟเชฐเซเชญเชฐเชคเชพ เชคเชฐเซ€เช•เซ‡ เช…เชจเซเชฏ เชจเซ‹เชกเชจเซ€ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡เชฒเซ€ เชธเซ‡เชตเชพเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ€เช เช›เซ€เช. เชจเชฟเชฐเซเชญเชฐเชคเชพเชจเซ‹ เชชเซเชฐเช•เชพเชฐ เชšเช•เชพเชธเชพเชฏเซ‡เชฒ เช›เซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡เชฎเชพเช‚ เชซเซ‡เชจเซเชŸเชฎ เชชเซเชฐเช•เชพเชฐ เช›เซ‡ เชœเซ‡ เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡. เช…เชจเซ‡ เชฐเชจเชŸเชพเชˆเชฎ เชชเชฐ เช†เชชเชฃเซ€ เชชเชพเชธเซ‡ เชธเชพเชšเซ‹ เชจเซ‹เชก เช†เชˆเชกเซ€ เชนเชถเซ‡. เช† เชธเซ‚เชšเชฟเชค เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช…เชญเชฟเช—เชฎเชจเชพ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชชเชพเชธเชพเช“เชฎเชพเช‚เชจเซเช‚ เชเช• เช›เซ‡. เชคเซ‡ เช…เชฎเชจเซ‡ เชซเช•เซเชค เชเช• เชœ เชตเชพเชฐ เชชเซ‹เชฐเซเชŸ เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เช–เชพเชคเชฐเซ€ เช•เชฐเซ‹ เช•เซ‡ เช…เชฎเซ‡ เชธเชพเชšเชพ เชชเซ‹เชฐเซเชŸเชจเซ‹ เชธเช‚เชฆเชฐเซเชญ เช†เชชเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช.

เชฌเซ‡ เชจเซ‹เชกเซเชธ เช…เชฎเชฒเซ€เช•เชฐเชฃ

เช† เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เชฌเชฐเชพเชฌเชฐ เชธเชฎเชพเชจ เชธเซ‡เชตเชพเช“ เช…เชฎเชฒเซ€เช•เชฐเชฃเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช. เชฌเชฟเชฒเช•เซเชฒ เชซเซ‡เชฐเชซเชพเชฐ เชจเชฅเซ€. เชœเซ‹ เช•เซ‡, เช…เชฎเซ‡ เชฌเซ‡ เช…เชฒเช—-เช…เชฒเช— เชจเซ‹เชก เช…เชฎเชฒเซ€เช•เชฐเชฃเซ‹ เชฌเชจเชพเชตเซ€เช เช›เซ€เช เชœเซ‡เชฎเชพเช‚ เชตเชฟเชตเชฟเชง เชธเซ‡เชตเชพเช“เชจเซ‹ เชธเชฎเซ‚เชน เชนเซ‹เชฏ เช›เซ‡:

  object TwoJvmNodeServerImpl extends ZeroServiceImpl[IO] with EchoServiceService with SigIntLifecycleServiceImpl {
    type Config = EchoConfig[String] with SigTermLifecycleConfig
  }

  object TwoJvmNodeClientImpl extends ZeroServiceImpl[IO] with EchoClientService with FiniteDurationLifecycleServiceImpl {
    type Config = EchoClientConfig[String] with FiniteDurationLifecycleConfig
  }

เชชเซเชฐเชฅเชฎ เชจเซ‹เชก เชธเชฐเซเชตเชฐเชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชซเช•เซเชค เชธเชฐเซเชตเชฐ เชธเชพเช‡เชก เชฐเซ‚เชชเชฐเซ‡เช–เชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชฌเซ€เชœเซ‹ เชจเซ‹เชก เช•เซเชฒเชพเชฏเช‚เชŸเชจเซ‡ เชฒเชพเช—เซ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเชจเชพ เชฌเซ€เชœเชพ เชญเชพเช—เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชฌเช‚เชจเซ‡ เชจเซ‹เชกเชจเซ‡ เช…เชฎเซเช• เช†เชœเซ€เชตเชจ เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช† เชชเซ‹เชธเซเชŸ เชธเชฐเซเชตเชฟเชธ เชจเซ‹เชกเชจเชพ เชนเซ‡เชคเซเช“ เชฎเชพเชŸเซ‡ เช…เชจเช‚เชค เช†เชœเซ€เชตเชจ เชนเชถเซ‡ เชœเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเชฎเชพเชชเซเชค เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ SIGTERM, เชœเซเชฏเชพเชฐเซ‡ เช‡เช•เซ‹ เช•เซเชฒเชพเชฏเชจเซเชŸ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เชฎเชฐเซเชฏเชพเชฆเชฟเชค เช…เชตเชงเชฟ เชชเช›เซ€ เชธเชฎเชพเชชเซเชค เชฅเชถเซ‡. เชœเซเช“ เชธเซเชŸเชพเชฐเซเชŸเชฐ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชตเชฟเช—เชคเซ‹ เชฎเชพเชŸเซ‡.

เชเช•เช‚เชฆเชฐ เชตเชฟเช•เชพเชธ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ

เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช เช•เซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช† เช…เชญเชฟเช—เชฎ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เชฐเซ€เชคเชจเซ‡ เชฌเชฆเชฒเซ‡ เช›เซ‡.

เช•เซ‹เชก เชคเชฐเซ€เช•เซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเช‚เช•เชฒเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เช…เชจเซ‡ เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸเชจเซเช‚ เชจเชฟเชฐเซเชฎเชพเชฃ เช•เชฐเชถเซ‡. เช…เชจเซเชฏ เช•เซ‹เชก เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸเซเชธเชฅเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸเชจเซ‡ เช…เชฒเช— เช•เชฐเชตเซเช‚ เชตเชพเชœเชฌเซ€ เชฒเชพเช—เซ‡ เช›เซ‡. เช˜เชฃเซ€เชตเชพเชฐ เช†เชชเชฃเซ€ เชชเชพเชธเซ‡ เชธเชฎเชพเชจ เช•เซ‹เชก เชฌเซ‡เช เชชเชฐ เช˜เชฃเซ€ เชฌเชงเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเซ‹ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. เช…เชจเซ‡ เช…เชฒเชฌเชคเซเชค, เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชตเชฟเชตเชฟเชง เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชถเชพเช–เชพเช“เชจเชพ เชฌเชนเซเชตเชฟเชง เชธเช‚เชธเซเช•เชฐเชฃเซ‹ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เช†เชชเชฃเซ‡ เชฒเชพเชˆเชฌเซเชฐเซ‡เชฐเซ€เช“เชจเซ€ เชšเซ‹เช•เซเช•เชธ เช†เชตเซƒเชคเซเชคเชฟเช“ เชชเชธเช‚เชฆ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช เช…เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชชเชฃ เช†เชชเชฃเซ‡ เช† เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ เชคเซเชฏเชพเชฐเซ‡ เช† เชธเซเชฅเชฟเชฐ เชฐเชนเซ‡เชถเซ‡.

เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเซ‡เชฐเชซเชพเชฐ เช•เซ‹เชก เชซเซ‡เชฐเชซเชพเชฐ เชฌเชจเซ€ เชœเชพเชฏ เช›เซ‡. เชคเซ‡เชฅเซ€ เชคเซ‡ เชธเชฎเชพเชจ เช—เซเชฃเชตเชคเซเชคเชพ เช–เชพเชคเชฐเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฆเซเชตเชพเชฐเชพ เช†เชตเชฐเซ€ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเชตเซ€ เชœเซ‹เชˆเช:

เชŸเชฟเช•เชฟเชŸ -> PR -> เชธเชฎเซ€เช•เซเชทเชพ -> เชฎเชฐเซเชœ -> เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ -> เชธเชคเชค เชœเชฎเชพเชตเชŸ

เช…เชญเชฟเช—เชฎเชจเชพ เชจเซ€เชšเซ‡เชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เช›เซ‡:

  1. เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชšเซ‹เช•เซเช•เชธ เชธเชฟเชธเซเชŸเชฎเชจเชพ เชฆเชพเช–เชฒเชพ เชฎเชพเชŸเซ‡ เชธเซเชธเช‚เช—เชค เช›เซ‡. เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เช—เชพเช‚เช เซ‹ เชตเชšเซเชšเซ‡ เช–เซ‹เชŸเชพ เชœเซ‹เชกเชพเชฃเชจเซ€ เช•เซ‹เชˆ เชฐเซ€เชค เชจเชฅเซ€.
  2. เชฎเชพเชคเซเชฐ เชเช• เชจเซ‹เชกเชฎเชพเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฌเชฆเชฒเชตเซเช‚ เชธเชฐเชณ เชจเชฅเซ€. เชฒเซ‰เช— เช‡เชจ เช•เชฐเชตเซเช‚ เช…เชจเซ‡ เช•เซ‡เชŸเชฒเซ€เช• เชŸเซ‡เช•เซเชธเซเชŸ เชซเชพเช‡เชฒเซ‹ เชฌเชฆเชฒเชตเซ€ เชคเซ‡ เช—เซ‡เชฐเชตเชพเชœเชฌเซ€ เชฒเชพเช—เซ‡ เช›เซ‡. เชคเซ‡เชฅเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชกเซเชฐเชฟเชซเซเชŸ เช“เช›เซเช‚ เชถเช•เซเชฏ เชฌเชจเซ‡ เช›เซ‡.
  3. เชจเชพเชจเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเชฐเชณ เชจเชฅเซ€.
  4. เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชธเชฎเชพเชจ เชตเชฟเช•เชพเชธ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เช…เชจเซเชธเชฐเชถเซ‡, เช…เชจเซ‡ เชคเซ‡ เช•เซ‡เชŸเชฒเซ€เช• เชธเชฎเซ€เช•เซเชทเชพ เชชเชธเชพเชฐ เช•เชฐเชถเซ‡.

เชถเซเช‚ เช†เชชเชฃเชจเซ‡ เช‰เชคเซเชชเชพเชฆเชจ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฎเชพเชŸเซ‡ เช…เชฒเช— เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡? เช‰เชคเซเชชเชพเชฆเชจ เช—เซ‹เช เชตเชฃเซ€เชฎเชพเช‚ เชธเช‚เชตเซ‡เชฆเชจเชถเซ€เชฒ เชฎเชพเชนเชฟเชคเซ€ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เชœเซ‡เชจเซ‡ เช…เชฎเซ‡ เช˜เชฃเชพ เชฒเซ‹เช•เซ‹เชจเซ€ เชชเชนเซ‹เช‚เชšเชฅเซ€ เชฆเซ‚เชฐ เชฐเชพเช–เชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช. เชคเซ‡เชฅเซ€ เชคเซ‡ เชชเซเชฐเชคเชฟเชฌเช‚เชงเชฟเชค เชเช•เซเชธเซ‡เชธ เชธเชพเชฅเซ‡ เช…เชฒเช— เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชฐเชพเช–เชตเชพ เชฏเซ‹เช—เซเชฏ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เช‰เชคเซเชชเชพเชฆเชจ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชนเชถเซ‡. เช…เชฎเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‡ เชฌเซ‡ เชญเชพเช—เซ‹เชฎเชพเช‚ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช - เชเช• เชœเซ‡เชฎเชพเช‚ เช‰เชคเซเชชเชพเชฆเชจเชจเชพ เชธเซŒเชฅเซ€ เช–เซเชฒเซเชฒเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เช›เซ‡ เช…เชจเซ‡ เชเช• เชœเซ‡เชฎเชพเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‹ เช—เซเชชเซเชค เชญเชพเช— เช›เซ‡. เช–เชฐเซ‡เช–เชฐ เชธเช‚เชตเซ‡เชฆเชจเชถเซ€เชฒ เชตเชธเซเชคเซเช“เชจเซ€ เชเช•เซเชธเซ‡เชธเชจเซ‡ เชชเซเชฐเชคเชฟเชฌเช‚เชงเชฟเชค เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช†เชจเชพเชฅเซ€ เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เชจเซ‡ เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเซ€ เชเช•เซเชธเซ‡เชธ เชธเช•เซเชทเชฎ เชฌเชจเชพเชตเชถเซ‡. เชกเชฟเชซเซ‹เชฒเซเชŸ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐ เชฎเซ‚เชฒเซเชฏเซ‹ เชธเชพเชฅเซ‡ เชฎเชงเซเชฏเชตเชฐเซเชคเซ€ เชฒเช•เซเชทเชฃเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช† เชชเชฐเชฟเชชเซ‚เชฐเซเชฃ เช•เชฐเชตเซเช‚ เชธเชฐเชณ เช›เซ‡.

เชญเชฟเชจเซเชจเชคเชพ

เชšเชพเชฒเซ‹ เช…เชจเซเชฏ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชตเซเชฏเชตเชธเซเชฅเชพเชชเชจ เชคเช•เชจเซ€เช•เซ‹เชจเซ€ เชคเซเชฒเชจเชพเชฎเชพเช‚ เชธเซ‚เชšเชฟเชค เช…เชญเชฟเช—เชฎเชจเชพ เช—เซเชฃเชฆเซ‹เชท เชœเซ‹เชˆเช.

เชธเซŒ เชชเซเชฐเชฅเชฎ, เช…เชฎเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เชธเซ‚เชšเชฟเชค เชฐเซ€เชคเชจเชพ เชตเชฟเชตเชฟเชง เชชเชพเชธเชพเช“เชจเชพ เช•เซ‡เชŸเชฒเชพเช• เชตเชฟเช•เชฒเซเชชเซ‹เชจเซ€ เชธเซ‚เชšเชฟ เชฌเชจเชพเชตเซ€เชถเซเช‚:

  1. เชฒเช•เซเชทเซเชฏ เชฎเชถเซ€เชจ เชชเชฐ เชŸเซ‡เช•เซเชธเซเชŸ เชซเชพเช‡เชฒ.
  2. เช•เซ‡เชจเซเชฆเซเชฐเชฟเชฏ เช•เซ€-เชตเซ‡เชฒเซเชฏเซ เชธเซเชŸเซ‹เชฐเซ‡เชœ (เชœเซ‡เชฎ เช•เซ‡ etcd/zookeeper).
  3. เชธเชฌเชชเซเชฐเซ‹เชธเซ‡เชธ เช˜เชŸเช•เซ‹ เช•เซ‡ เชœเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ เชชเซเชจเชƒเชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค/เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.
  4. เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸ เช…เชจเซ‡ เชธเช‚เชธเซเช•เชฐเชฃ เชจเชฟเชฏเช‚เชคเซเชฐเชฃเชจเซ€ เชฌเชนเชพเชฐ เช—เซ‹เช เชตเชฃเซ€.

เชŸเซ‡เช•เซเชธเซเชŸ เชซเชพเช‡เชฒ เชเชก-เชนเซ‹เช• เชซเชฟเช•เซเชธเซ‡เชธเชจเชพ เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚ เชฅเซ‹เชกเซ€ เชฐเชพเชนเชค เช†เชชเซ‡ เช›เซ‡. เชธเชฟเชธเซเชŸเชฎเชจเชพ เชเชกเชฎเชฟเชจเชฟเชธเซเชŸเซเชฐเซ‡เชŸเชฐ เชฒเช•เซเชทเซเชฏ เชจเซ‹เชก เชชเชฐ เชฒเซ‰เช—เชฟเชจ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡, เชซเซ‡เชฐเชซเชพเชฐ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เชซเช•เซเชค เชธเซ‡เชตเชพเชจเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เช† เชฎเซ‹เชŸเซ€ เชธเชฟเชธเซเชŸเชฎเซ‹ เชฎเชพเชŸเซ‡ เชเชŸเชฒเซเช‚ เชธเชพเชฐเซเช‚ เชจ เชนเซ‹เชˆ เชถเช•เซ‡. เชชเชฐเชฟเชตเชฐเซเชคเชจ เชชเชพเช›เชณ เช•เซ‹เชˆ เชจเชฟเชถเชพเชจ เชฌเชพเช•เซ€ เชจเชฅเซ€. เชซเซ‡เชฐเชซเชพเชฐเชจเซ€ เชธเชฎเซ€เช•เซเชทเชพ เชฌเซ€เชœเซ€ เช†เช‚เช–เซ‹ เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ€ เชจเชฅเซ€. เชชเชฐเชฟเชตเชฐเซเชคเชจเชจเซเช‚ เช•เชพเชฐเชฃ เชถเซเช‚ เช›เซ‡ เชคเซ‡ เชถเซ‹เชงเชตเชพเชจเซเช‚ เชฎเซเชถเซเช•เซ‡เชฒ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. เชคเซ‡เชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชจเชฅเซ€. เชกเชฟเชธเซเชŸเซเชฐเชฟเชฌเซเชฏเซเชŸเซ‡เชก เชธเชฟเชธเซเชŸเชฎเชจเชพ เชชเชฐเชฟเชชเซเชฐเซ‡เช•เซเชทเซเชฏเชฎเชพเช‚ เชเชกเชฎเชฟเชจเชฟเชธเซเชŸเซเชฐเซ‡เชŸเชฐ เช…เชจเซเชฏ เชจเซ‹เชกเซเชธเชฎเชพเช‚เชฅเซ€ เชเช•เชฎเชพเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเชพเชจเซเช‚ เชญเซ‚เชฒเซ€ เชถเช•เซ‡ เช›เซ‡.

(Btw, เชœเซ‹ เช†เช–เชฐเซ‡ เชŸเซ‡เช•เซเชธเซเชŸ เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชซเชพเช‡เชฒเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชถเชฐเซ‚ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡, เชคเซ‹ เช…เชฎเชพเชฐเซ‡ เชซเช•เซเชค เชชเชพเชฐเซเชธเชฐ + เชตเซ‡เชฒเชฟเชกเซ‡เชŸเชฐ เช‰เชฎเซ‡เชฐเชตเซเช‚ เชชเชกเชถเซ‡ เชœเซ‡ เชธเชฎเชพเชจ เช‰เชคเซเชชเชพเชฆเชจ เช•เชฐเซ€ เชถเช•เซ‡. Config เชŸเชพเช‡เชช เช•เชฐเซ‹ เช…เชจเซ‡ เชคเซ‡ เชŸเซ‡เช•เซเชธเซเชŸ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชถเชฐเซ‚ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเซ‚เชฐเชคเซเช‚ เชนเชถเซ‡. เช† เช เชชเชฃ เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡ เช•เซ‡ เช•เชฎเซเชชเชพเช‡เชฒ-เชŸเชพเช‡เชฎ เช•เชจเซเชซเชฟเช—เชฐเซ‡เชถเชจเชจเซ€ เชœเชŸเชฟเชฒเชคเชพ เชŸเซ‡เช•เซเชธเซเชŸ-เช†เชงเชพเชฐเชฟเชค เชฐเซ‚เชชเชฐเซ‡เช–เชพเช“เชจเซ€ เชœเชŸเชฟเชฒเชคเชพ เช•เชฐเชคเชพเช‚ เชฅเซ‹เชกเซ€ เช“เช›เซ€ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชŸเซ‡เช•เซเชธเซเชŸ-เช†เชงเชพเชฐเชฟเชค เชธเช‚เชธเซเช•เชฐเชฃเชฎเชพเช‚ เช†เชชเชฃเชจเซ‡ เช•เซ‡เชŸเชฒเชพเช• เชตเชงเชพเชฐเชพเชจเชพ เช•เซ‹เชกเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เช›เซ‡.)

เชธเซ‡เชจเซเชŸเซเชฐเชฒเชพเชˆเชเซเชก เช•เซ€-เชตเซ‡เชฒเซเชฏเซ เชธเซเชŸเซ‹เชฐเซ‡เชœ เชเชชเซเชฒเซ€เช•เซ‡เชถเชจ เชฎเซ‡เชŸเชพ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐเซเชธเชจเซเช‚ เชตเชฟเชคเชฐเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเชพเชฐเซ€ เชชเชฆเซเชงเชคเชฟ เช›เซ‡. เช…เชนเซ€เช‚ เช†เชชเชฃเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฎเซ‚เชฒเซเชฏเซ‹ เช…เชจเซ‡ เชฎเชพเชคเซเชฐ เชกเซ‡เชŸเชพ เชถเซเช‚ เช›เซ‡ เชคเซ‡ เชตเชฟเชถเซ‡ เชตเชฟเชšเชพเชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชเช• เชซเช‚เช•เชถเชจ เช†เชชเซเชฏเซเช‚ C => A => B เช…เชฎเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชญเชพเช—เซเชฏเซ‡ เชœ เชฌเชฆเชฒเชพเชคเชพ เชฎเซ‚เชฒเซเชฏเซ‹ เช•เชนเซ€เช เช›เซ€เช C "เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ", เชœเซเชฏเชพเชฐเซ‡ เชตเชพเชฐเช‚เชตเชพเชฐ เชกเซ‡เชŸเชพ เชฌเชฆเชฒเชพเชฏ เช›เซ‡ A - เชซเช•เซเชค เชกเซ‡เชŸเชพ เช‡เชจเชชเซเชŸ เช•เชฐเซ‹. เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชกเซ‡เชŸเชพ เช•เชฐเชคเชพ เชชเชนเซ‡เชฒเชพ เชซเช‚เช•เซเชถเชจเชจเซ‡ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเซเช‚ เชœเซ‹เชˆเช A. เช† เชตเชฟเชšเชพเชฐเชจเซ‡ เชœเซ‹เชคเชพเช‚ เช†เชชเชฃเซ‡ เช•เชนเซ€ เชถเช•เซ€เช เช•เซ‡ เชคเซ‡ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ€ เช…เชชเซ‡เช•เซเชทเชฟเชค เช†เชตเชฐเซเชคเชจ เช›เซ‡ เชœเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชซเช•เซเชค เชกเซ‡เชŸเชพเชฅเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชกเซ‡เชŸเชพเชจเซ‡ เช…เชฒเช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡. เชคเซ‡เชฎเชœ เชกเซ‡เชŸเชพ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชเช• เชธเซเชคเซเชฐเซ‹เชค (เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ) เชฎเชพเช‚เชฅเซ€ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช…เชฒเช— เชธเซเชคเซเชฐเซ‹เชค (เชเชกเชฎเชฟเชจ) เชฎเชพเช‚เชฅเซ€ เช†เชตเซ‡ เช›เซ‡. เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชชเช›เซ€ เชฌเชฆเชฒเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชธเชพเชฅเซ‡ เชตเซเชฏเชตเชนเชพเชฐ เช•เชฐเชตเชพเชฅเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชœเชŸเชฟเชฒเชคเชพเชฎเชพเช‚ เชตเชงเชพเชฐเซ‹ เชฅเชพเชฏ เช›เซ‡. เช†เชตเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชฎเชพเชŸเซ‡ เช…เชฎเชพเชฐเซ‡ เชคเซ‡เชฎเชจเซ€ เชกเชฟเชฒเชฟเชตเชฐเซ€ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎ, เชชเชพเชฐเซเชธเชฟเช‚เช— เช…เชจเซ‡ เชฎเชพเชจเซเชฏเชคเชพ, เช–เซ‹เชŸเชพ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เชนเซ‡เชจเซเชกเชฒ เช•เชฐเชตเชพ เชชเชกเชถเซ‡. เช†เชฅเซ€, เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเซ€ เชœเชŸเชฟเชฒเชคเชพเชจเซ‡ เช˜เชŸเชพเชกเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐเซเชธเชจเซ€ เชธเช‚เช–เซเชฏเชพเชจเซ‡ เชตเชงเซ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เช˜เชŸเชพเชกเซ€เชถเซเช‚ เชœเซ‡ เชฐเชจเชŸเชพเชˆเชฎ เชชเชฐ เชฌเชฆเชฒเชพเชˆ เชถเช•เซ‡ เช›เซ‡ (เช…เชฅเชตเชพ เชคเซ‡เชจเซ‡ เชเช•เชธเชพเชฅเซ‡ เชฆเซ‚เชฐ เชชเชฃ เช•เชฐเซ€ เชฆเชˆเช เช›เซ€เช).

เช† เชชเซ‹เชธเซเชŸเชจเชพ เชชเชฐเชฟเชชเซเชฐเซ‡เช•เซเชทเซเชฏเชฎเชพเช‚ เช†เชชเชฃเซ‡ เชธเซเชฅเชฟเชฐ เช…เชจเซ‡ เช—เชคเชฟเชถเซ€เชฒ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชตเชšเซเชšเซ‡ เชคเชซเชพเชตเชค เช•เชฐเชตเซ‹ เชœเซ‹เชˆเช. เชœเซ‹ เชธเซ‡เชตเชพ เชคเชฐเซเช•เชจเซ‡ เชฐเชจเชŸเชพเช‡เชฎ เชธเชฎเชฏเซ‡ เช•เซ‡เชŸเชฒเชพเช• เชชเชฐเชฟเชฎเชพเชฃเซ‹เชฎเชพเช‚ เชญเชพเช—เซเชฏเซ‡ เชœ เชซเซ‡เชฐเชซเชพเชฐเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ, เชคเซ‹ เช…เชฎเซ‡ เชคเซ‡เชฎเชจเซ‡ เช—เชคเชฟเชถเซ€เชฒ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เช•เชนเซ€ เชถเช•เซ€เช เช›เซ€เช. เช…เชจเซเชฏเชฅเชพ เชคเซ‡เช“ เชธเซเชฅเชฟเชฐ เช›เซ‡ เช…เชจเซ‡ เชธเซ‚เชšเชฟเชค เช…เชญเชฟเช—เชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช—เซ‹เช เชตเซ€ เชถเช•เชพเชฏ เช›เซ‡. เช—เชคเชฟเชถเซ€เชฒ เชชเซเชจเชƒเชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฎเชพเชŸเซ‡ เช…เชจเซเชฏ เช…เชญเชฟเช—เชฎเซ‹เชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเซ€ เชถเช•เซ‡ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชธเชฟเชธเซเชŸเชฎเชจเชพ เชญเชพเช—เซ‹เชจเซ‡ เชจเชตเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชธเชพเชฅเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡ เชคเซ‡เชตเซ€ เชœ เชฐเซ€เชคเซ‡ เชตเชฟเชคเชฐเชฟเชค เชธเชฟเชธเซเชŸเชฎเชจเซ€ เช…เชฒเช— เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡.
(เชฎเชพเชฐเซ‹ เชจเชฎเซเชฐ เช…เชญเชฟเชชเซเชฐเชพเชฏ เชฐเชจเชŸเชพเช‡เชฎ เชชเซเชจเชƒเชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‡ เชŸเชพเชณเชตเชพเชจเซ‹ เช›เซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชธเชฟเชธเซเชŸเชฎเชจเซ€ เชœเชŸเชฟเชฒเชคเชพเชจเซ‡ เชตเชงเชพเชฐเซ‡ เช›เซ‡.
เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ เชฎเชพเชŸเซ‡ เชซเช•เซเชค OS เชธเชชเซ‹เชฐเซเชŸ เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เชตเซ‹ เชคเซ‡ เชตเชงเซ เชธเชฐเชณ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. เชœเซ‹ เช•เซ‡, เชคเซ‡ เชนเช‚เชฎเซ‡เชถเชพ เชถเช•เซเชฏ เชจ เชนเซ‹เชˆ เชถเช•เซ‡.)

เชธเซเชฅเชฟเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซเช‚ เชเช• เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชชเชพเชธเซเช‚ เชœเซ‡ เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชฒเซ‹เช•เซ‹เชจเซ‡ เช—เชคเชฟเชถเซ€เชฒ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ (เช…เชจเซเชฏ เช•เชพเชฐเชฃเซ‹ เชตเชฟเชจเชพ) เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡ เช›เซ‡ เชคเซ‡ เช›เซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช…เชชเชกเซ‡เชŸ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชธเชฐเซเชตเชฟเชธ เชกเชพเช‰เชจเชŸเชพเช‡เชฎ. เช–เชฐเซ‡เช–เชฐ, เชœเซ‹ เช†เชชเชฃเซ‡ เชธเซเชฅเชฟเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐ เช•เชฐเชตเชพ เชนเซ‹เชฏ, เชคเซ‹ เช†เชชเชฃเซ‡ เชธเชฟเชธเซเชŸเชฎเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชถเชฐเซ‚ เช•เชฐเชตเซ€ เชชเชกเชถเซ‡ เชœเซ‡เชฅเซ€ เช•เชฐเซ€เชจเซ‡ เชจเชตเชพ เชฎเซ‚เชฒเซเชฏเซ‹ เช…เชธเชฐเช•เชพเชฐเช• เชฌเชจเซ‡. เชตเชฟเชตเชฟเชง เชธเชฟเชธเซเชŸเชฎเซ‹ เชฎเชพเชŸเซ‡ เชกเชพเช‰เชจเชŸเชพเช‡เชฎ เชฎเชพเชŸเซ‡เชจเซ€ เช†เชตเชถเซเชฏเช•เชคเชพเช“ เช…เชฒเช—-เช…เชฒเช— เชนเซ‹เชฏ เช›เซ‡, เชคเซ‡เชฅเซ€ เชคเซ‡ เชเชŸเชฒเซเช‚ เชœเชŸเชฟเชฒ เชจ เชนเซ‹เชˆ เชถเช•เซ‡. เชœเซ‹ เชคเซ‡ เชœเชŸเชฟเชฒ เช›เซ‡, เชคเซ‹ เช†เชชเชฃเซ‡ เช•เซ‹เชˆเชชเชฃ เชธเชฟเชธเซเชŸเชฎ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เชฎเชพเชŸเซ‡ เช†เช—เชณเชจเซ€ เชฏเซ‹เชœเชจเชพ เช•เชฐเชตเซ€ เชชเชกเชถเซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช…เชฎเซ‡ เช…เชฎเชฒ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช AWS ELB เช•เชจเซ‡เช•เซเชถเชจ เชกเซเชฐเซ‡เช‡เชจเชฟเช‚เช—. เช† เชฆเซƒเชถเซเชฏเชฎเชพเช‚ เชœเซเชฏเชพเชฐเซ‡ เชชเชฃ เช†เชชเชฃเซ‡ เชธเชฟเชธเซเชŸเชฎเชจเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ, เชคเซเชฏเชพเชฐเซ‡ เช…เชฎเซ‡ เชธเชฎเชพเช‚เชคเชฐเชฎเชพเช‚ เชธเชฟเชธเซเชŸเชฎเชจเซ‹ เชจเชตเซ‹ เชฆเชพเช–เชฒเซ‹ เชถเชฐเซ‚ เช•เชฐเซ€เช เช›เซ€เช, เชชเช›เซ€ เชœเซ‚เชจเซ€ เชธเชฟเชธเซเชŸเชฎเชจเซ‡ เชนเชพเชฒเชจเชพ เช•เชจเซ‡เช•เซเชถเชจเชจเซ‡ เชชเซ‚เชฐเซเชฃ เช•เชฐเชตเชพ เชฆเซ‡เชคเชพ, เชคเซ‡เชฎเชพเช‚ ELB เชธเซเชตเชฟเชš เช•เชฐเซ€เช เช›เซ€เช.

เชตเชฐเซเชเชจเซ‡เชก เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸเชจเซ€ เช…เช‚เชฆเชฐ เช…เชฅเชตเชพ เชฌเชนเชพเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฐเชพเช–เชตเชพ เชตเชฟเชถเซ‡ เชถเซเช‚? เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸเชจเซ€ เช…เช‚เชฆเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฐเชพเช–เชตเชพเชจเซ‹ เช…เชฐเซเชฅ เช เชฅเชพเชฏ เช›เซ‡ เช•เซ‡ เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ เช•เชฟเชธเซเชธเชพเช“เชฎเชพเช‚ เช† เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช…เชจเซเชฏ เช•เชฒเชพเช•เซƒเชคเชฟเช“เชจเซ€ เชธเชฎเชพเชจ เช—เซเชฃเชตเชคเซเชคเชพ เช–เชพเชคเชฐเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชชเชธเชพเชฐ เช•เชฐเซ‡ เช›เซ‡. เชคเซ‡เชฅเซ€ เช•เซ‹เชˆ เช–เชพเชคเชฐเซ€ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เช•เซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเชพเชฐเซ€ เช—เซเชฃเชตเชคเซเชคเชพ เช…เชจเซ‡ เชตเชฟเชถเซเชตเชพเชธเชชเชพเชคเซเชฐ เช›เซ‡. เชคเซ‡เชจเชพเชฅเซ€ เชตเชฟเชชเชฐเซ€เชค, เชเช• เช…เชฒเช— เชซเชพเช‡เชฒเชฎเชพเช‚ เช—เซ‹เช เชตเชฃเซ€เชจเซ‹ เช…เชฐเซเชฅ เช เช›เซ‡ เช•เซ‡ เชคเซ‡ เชซเชพเช‡เชฒเชฎเชพเช‚ เช•เซ‹เชฃเซ‡ เช…เชจเซ‡ เชถเชพ เชฎเชพเชŸเซ‡ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เช•เชฐเซเชฏเชพ เชคเซ‡เชจเชพ เช•เซ‹เชˆ เชจเชฟเชถเชพเชจ เชจเชฅเซ€. เชถเซเช‚ เช† เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡? เช…เชฎเซ‡ เชฎเชพเชจเซ€เช เช›เซ€เช เช•เซ‡ เชฎเซ‹เชŸเชพเชญเชพเช—เชจเซ€ เช‰เชคเซเชชเชพเชฆเชจ เชชเซเชฐเชฃเชพเชฒเซ€เช“ เชฎเชพเชŸเซ‡ เชธเซเชฅเชฟเชฐ เช…เชจเซ‡ เช‰เชšเซเชš เช—เซเชฃเชตเชคเซเชคเชพเชจเซ€ เช—เซ‹เช เชตเชฃเซ€ เชนเซ‹เชฏ เชคเซ‡ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡.

เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸเชจเซเช‚ เชธเช‚เชธเซเช•เชฐเชฃ เช เชถเซ‹เชงเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡ เช•เซ‡ เชคเซ‡ เช•เซเชฏเชพเชฐเซ‡ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚, เชคเซ‡เชฎเชพเช‚ เช•เชฏเชพ เชฎเซ‚เชฒเซเชฏเซ‹ เช›เซ‡, เช•เชˆ เชธเซเชตเชฟเชงเชพเช“ เชธเช•เซเชทเชฎ/เช…เช•เซเชทเชฎ เช›เซ‡, เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เชฆเชฐเซ‡เช• เชซเซ‡เชฐเชซเชพเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชฃ เชœเชตเชพเชฌเชฆเชพเชฐ เชนเชคเซเช‚. เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸเชจเซ€ เช…เช‚เชฆเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฐเชพเช–เชตเชพ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‡เชŸเชฒเชพเช• เชชเซเชฐเชฏเชคเซเชจเซ‹เชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชกเชฟเชเชพเช‡เชจ เชชเชธเช‚เชฆเช—เซ€ เช›เซ‡.

เช—เซเชฃเชฆเซ‹เชท

เช…เชนเซ€เช‚ เช…เชฎเซ‡ เช•เซ‡เชŸเชฒเชพเช• เชซเชพเชฏเชฆเชพเช“เชจเซ‡ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเชตเชพ เช…เชจเซ‡ เชธเซ‚เชšเชฟเชค เช…เชญเชฟเช—เชฎเชจเชพ เช•เซ‡เชŸเชฒเชพเช• เช—เซ‡เชฐเชซเชพเชฏเชฆเชพ เชตเชฟเชถเซ‡ เชšเชฐเซเชšเชพ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช.

เชฒเชพเชญเซ‹

เชธเช‚เชชเซ‚เชฐเซเชฃ เชตเชฟเชคเชฐเชฟเชค เชธเชฟเชธเซเชŸเชฎเชจเชพ เช•เชฎเซเชชเชพเช‡เชฒเซ‡เชฌเชฒ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ€ เชธเซเชตเชฟเชงเชพเช“:

  1. เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ€ เชธเซเชฅเชฟเชฐ เชคเชชเชพเชธ. เช† เช‰เชšเซเชš เชธเซเชคเชฐเชจเซ‹ เช†เชคเซเชฎเชตเชฟเชถเซเชตเชพเชธ เช†เชชเซ‡ เช›เซ‡, เช•เซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เช†เชชเซ‡เชฒ เชชเซเชฐเช•เชพเชฐเชจเชพ เช…เชตเชฐเซ‹เชงเซ‹ เช›เซ‡.
  2. เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ€ เชธเชฎเซƒเชฆเซเชง เชญเชพเชทเชพ. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช…เชจเซเชฏ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช…เชญเชฟเช—เชฎเซ‹ เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ เชšเชฒ เช…เชตเซ‡เชœเซ€ เชธเซเชงเซ€ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชนเซ‹เชฏ เช›เซ‡.
    เชธเซเช•เซ‡เชฒเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‡ เชฌเชนเซ‡เชคเชฐ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชญเชพเชทเชพ เชธเซเชตเชฟเชงเชพเช“เชจเซ€ เชตเชฟเชถเชพเชณ เชถเซเชฐเซ‡เชฃเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชฆเชพเช–เชฒเชพ เชคเชฐเซ€เช•เซ‡, เช…เชฎเซ‡ เชกเชฟเชซเซ‰เชฒเซเชŸ เชฎเซ‚เชฒเซเชฏเซ‹ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฒเช•เซเชทเชฃเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช, เชตเชฟเชตเชฟเชง เช…เชตเช•เชพเชถ เชธเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช, เช…เชฎเซ‡ เชธเช‚เชฆเชฐเซเชญ เชฒเชˆ เชถเช•เซ€เช เช›เซ€เช vals เชฌเชพเชนเซเชฏ เช…เชตเช•เชพเชถ (DRY) เชฎเชพเช‚ เชฎเชพเชคเซเชฐ เชเช• เชœ เชตเชพเชฐ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เชฅเชฏเซ‡เชฒ เช›เซ‡. เชถเชพเชฌเซเชฆเชฟเช• เชธเชฟเช•เซเชตเชจเซเชธ เช…เชฅเชตเชพ เช…เชฎเซเช• เชตเชฐเซเช—เซ‹เชจเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชถเช•เซเชฏ เช›เซ‡ (Seq, Map, เชตเช—เซ‡เชฐเซ‡).
  3. เชกเซ€เชเชธเชเชฒ. เชธเซเช•เซ‡เชฒเชพ เชชเชพเชธเซ‡ DSL เชฒเซ‡เช–เช•เซ‹ เชฎเชพเชŸเซ‡ เชฏเซ‹เช—เซเชฏ เชธเชฎเชฐเซเชฅเชจ เช›เซ‡. เชตเซเชฏเช•เซเชคเชฟ เช† เชธเซเชตเชฟเชงเชพเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชญเชพเชทเชพ เชธเซเชฅเชพเชชเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เชœเซ‡ เชตเชงเซ เช…เชจเซเช•เซ‚เชณ เช…เชจเซ‡ เช…เช‚เชคเชฟเชฎ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฎเซˆเชคเซเชฐเซ€เชชเซ‚เชฐเซเชฃ เชนเซ‹เชฏ, เชœเซ‡เชฅเซ€ เช…เช‚เชคเชฟเชฎ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช“เช›เชพเชฎเชพเช‚ เช“เช›เซเช‚ เชกเซ‹เชฎเซ‡เชจ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฆเซเชตเชพเชฐเชพ เชตเชพเช‚เชšเซ€ เชถเช•เชพเชฏ.
  4. เชธเชฎเช—เซเชฐ เชจเซ‹เชกเซเชธเชฎเชพเช‚ เช…เช–เช‚เชกเชฟเชคเชคเชพ เช…เชจเซ‡ เชธเซเชธเช‚เช—เชคเชคเชพ. เชธเชฎเช—เซเชฐ เชตเชฟเชคเชฐเชฟเชค เชชเซเชฐเชฃเชพเชฒเซ€ เชฎเชพเชŸเซ‡ เชเช• เชœ เชœเช—เซเชฏเชพเช เช—เซ‹เช เชตเชฃเซ€ เช•เชฐเชตเชพเชจเซ‹ เชเช• เชซเชพเชฏเชฆเซ‹ เช เช›เซ‡ เช•เซ‡ เชคเชฎเชพเชฎ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เชเช•เชตเชพเชฐ เชธเช–เชค เชฐเซ€เชคเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชชเช›เซ€ เชคเซ‡ เชคเชฎเชพเชฎ เชธเซเชฅเชณเซ‹เช เชชเซเชจเชƒเช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซเชฏเชพเช‚ เช…เชฎเชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ. เชธเชฒเชพเชฎเชค เชชเซ‹เชฐเซเชŸ เช˜เซ‹เชทเชฃเชพเช“ เชชเชฃ เชŸเชพเชˆเชช เช•เชฐเซ‹ เช–เชพเชคเชฐเซ€ เช•เชฐเซ‹ เช•เซ‡ เชคเชฎเชพเชฎ เชธเช‚เชญเชตเชฟเชค เชฏเซ‹เช—เซเชฏ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเซ‹เชฎเชพเช‚ เชธเชฟเชธเซเชŸเชฎเชจเชพ เชจเซ‹เชกเซเชธ เชธเชฎเชพเชจ เชญเชพเชทเชพ เชฌเซ‹เชฒเชถเซ‡. เชจเซ‹เชกเซเชธ เชตเชšเซเชšเซ‡ เชธเซเชชเชทเซเชŸ เช…เชตเชฒเช‚เชฌเชจ เช›เซ‡ เชœเซ‡ เช•เซ‡เชŸเชฒเซ€เช• เชธเซ‡เชตเชพเช“ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพเชจเซเช‚ เชญเซ‚เชฒเซ€ เชœเชตเชพเชจเซเช‚ เชฎเซเชถเซเช•เซ‡เชฒ เชฌเชจเชพเชตเซ‡ เช›เซ‡.
  5. เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ€ เช‰เชšเซเชš เช—เซเชฃเชตเชคเซเชคเชพ. เชธเชพเชฎเชพเชจเซเชฏ PR เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฆเซเชตเชพเชฐเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชชเชธเชพเชฐ เช•เชฐเชตเชพเชจเซ‹ เชเช•เช‚เชฆเชฐ เช…เชญเชฟเช—เชฎ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เชชเชฃ เช—เซเชฃเชตเชคเซเชคเชพเชจเชพ เช‰เชšเซเชš เชงเซ‹เชฐเชฃเซ‹ เชธเซเชฅเชพเชชเชฟเชค เช•เชฐเซ‡ เช›เซ‡.
  6. เชเช• เชธเชพเชฅเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเซ‡เชฐเชซเชพเชฐเซ‹. เชœเซเชฏเชพเชฐเซ‡ เชชเชฃ เช†เชชเชฃเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เช•เซ‹เชˆ เชซเซ‡เชฐเชซเชพเชฐ เช•เชฐเซ€เช เช›เซ€เช เชคเซเชฏเชพเชฐเซ‡ เช†เชชเซ‹เช†เชช เชœเชฎเชพเชตเชŸ เช–เชพเชคเชฐเซ€ เช•เชฐเซ‡ เช›เซ‡ เช•เซ‡ เชคเชฎเชพเชฎ เชจเซ‹เชกเซเชธ เช…เชชเชกเซ‡เชŸ เชฅเชˆ เชฐเชนเซเชฏเชพเช‚ เช›เซ‡.
  7. เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชธเชฐเชณเซ€เช•เชฐเชฃ. เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชชเชพเชฐเซเชธ เช…เชจเซ‡ เชฎเชพเชจเซเชฏ เช•เชฐเชตเชพเชจเซ€ เช…เชจเซ‡ เช–เซ‹เชŸเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เชนเซ‡เชจเซเชกเชฒ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€. เช† เชเช•เช‚เชฆเชฐ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเซ‡ เช›เซ‡. (เช•เซ‡เชŸเชฒเซ€เช• เชœเชŸเชฟเชฒเชคเชพเชฎเชพเช‚ เชตเชงเชพเชฐเซ‹ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เชœ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เชธเชฒเชพเชฎเชคเซ€ เชคเชฐเชซ เชธเชญเชพเชจ เชตเซ‡เชชเชพเชฐ เช›เซ‡.) เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชชเชฐ เชชเชพเช›เชพ เชซเชฐเชตเซเช‚ เช–เซ‚เชฌ เชœ เชธเชฐเชณ เช›เซ‡ - เชซเช•เซเชค เช–เซ‚เชŸเชคเชพ เชŸเซเช•เชกเชพเช“ เช‰เชฎเซ‡เชฐเซ‹. เชธเช‚เช•เชฒเชฟเชค เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเชพเชฅเซ‡ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเซเช‚ เช…เชจเซ‡ เชตเชงเชพเชฐเชพเชจเชพ เชŸเซเช•เชกเชพเช“เชจเชพ เช…เชฎเชฒเซ€เช•เชฐเชฃเชจเซ‡ เชชเช›เซ€เชจเชพ เชธเชฎเชฏเชฎเชพเช‚ เชฎเซเชฒเชคเชตเซ€ เชฐเชพเช–เชตเซเช‚ เชธเชฐเชณ เช›เซ‡.
  8. เชตเชฐเซเชเชจ เช•เชฐเซ‡เชฒ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ. เช เชนเช•เซ€เช•เชคเชจเซ‡ เช•เชพเชฐเชฃเซ‡ เช•เซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชธเชฎเชพเชจ เชตเชฟเช•เชพเชธ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เช…เชจเซเชธเชฐเซ‡ เช›เซ‡, เชชเชฐเชฟเชฃเชพเชฎเซ‡ เช…เชฎเชจเซ‡ เช…เชจเชจเซเชฏ เชธเช‚เชธเซเช•เชฐเชฃ เชธเชพเชฅเซ‡ เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸ เชฎเชณเซ‡ เช›เซ‡. เชœเซ‹ เชœเชฐเซ‚เชฐเซ€ เชนเซ‹เชฏ เชคเซ‹ เชคเซ‡ เช…เชฎเชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‡ เชชเชพเช›เซเช‚ เชธเซเชตเชฟเชš เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เช…เชฎเซ‡ เชเช• เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชชเชฃ เชœเชฎเชพเชตเซ€ เชถเช•เซ€เช เช›เซ€เช เชœเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชเช• เชตเชฐเซเชท เชชเชนเซ‡เชฒเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹ เช…เชจเซ‡ เชคเซ‡ เชฌเชฐเชพเชฌเชฐ เช เชœ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเชถเซ‡. เชธเซเชฅเชฟเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชตเชฟเชคเชฐเชฟเชค เชธเชฟเชธเซเชŸเชฎเชจเซ€ เช†เช—เชพเชนเซ€ เช…เชจเซ‡ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏเชคเชพเชฎเชพเช‚ เชธเซเชงเชพเชฐเซ‹ เช•เชฐเซ‡ เช›เซ‡. เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช•เชฎเซเชชเชพเช‡เชฒ เชธเชฎเชฏเซ‡ เชจเชฟเชถเซเชšเชฟเชค เช›เซ‡ เช…เชจเซ‡ เช‰เชคเซเชชเชพเชฆเชจ เชธเชฟเชธเซเชŸเชฎ เชชเชฐ เชธเชฐเชณเชคเชพเชฅเซ€ เชšเซ‡เชกเชพเช‚ เช•เชฐเซ€ เชถเช•เชพเชคเชพ เชจเชฅเซ€.
  9. เชฎเซ‹เชกเซเชฏเซเชฒเชพเชฐเชฟเชŸเซ€. เชธเซ‚เชšเชฟเชค เชฎเชพเชณเช–เซเช‚ เชฎเซ‹เชกเซเชฏเซเชฒเชฐ เช›เซ‡ เช…เชจเซ‡ เชฎเซ‹เชกเซเชฏเซเชฒเซ‹เชจเซ‡ เชตเชฟเชตเชฟเชง เชฐเซ€เชคเซ‡ เชœเซ‹เชกเซ€ เชถเช•เชพเชฏ เช›เซ‡
    เชตเชฟเชตเชฟเชง เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเซ‹ (เชธเซ‡เชŸเช…เชชเซเชธ/เชฒเซ‡เช†เช‰เชŸ) เชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเซ‡ เช›เซ‡. เช–เชพเชธ เช•เชฐเซ€เชจเซ‡, เชจเชพเชจเชพ เชชเชพเชฏเซ‡ เชธเชฟเช‚เช—เชฒ เชจเซ‹เชก เชฒเซ‡เช†เช‰เชŸ เช…เชจเซ‡ เชฎเซ‹เชŸเชพ เชชเชพเชฏเซ‡ เชฎเชฒเซเชŸเซ€ เชจเซ‹เชก เชธเซ‡เชŸเชฟเช‚เช— เชถเช•เซเชฏ เช›เซ‡. เชฌเชนเซเชตเชฟเชง เช‰เชคเซเชชเชพเชฆเชจ เชฒเซ‡เช†เช‰เชŸ เชนเซ‹เชตเซเช‚ เชตเชพเชœเชฌเซ€ เช›เซ‡.
  10. เชชเชฐเซ€เช•เซเชทเชฃ. เชชเชฐเซ€เช•เซเชทเชฃเชจเชพ เชนเซ‡เชคเซเช“ เชฎเชพเชŸเซ‡ เช•เซ‹เชˆ เชเช• เชฎเซ‹เช• เชธเซ‡เชตเชพเชจเซ‹ เช…เชฎเชฒ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชธเซเชฐเช•เซเชทเชฟเชค เชฐเซ€เชคเซ‡ เชจเชฟเชฐเซเชญเชฐเชคเชพ เชคเชฐเซ€เช•เซ‡ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เชฎเซ‹เช•เซเชธ เชฆเซเชตเชพเชฐเชพ เชฌเชฆเชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒเชพ เชตเชฟเชตเชฟเชง เชญเชพเช—เซ‹ เชธเชพเชฅเซ‡เชจเชพ เช•เซ‡เชŸเชฒเชพเช• เชœเซเชฆเชพ เชœเซเชฆเชพ เชชเชฐเซ€เช•เซเชทเชฃ เชฒเซ‡เช†เช‰เชŸเชจเซ‡ เชเช•เชธเชพเชฅเซ‡ เชœเชพเชณเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡.
  11. เชเช•เซ€เช•เชฐเชฃ เชชเชฐเซ€เช•เซเชทเชฃ. เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชตเชฟเชคเชฐเชฟเชค เชชเซเชฐเชฃเชพเชฒเซ€เช“เชฎเชพเช‚ เชเช•เซ€เช•เชฐเชฃ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชšเชฒเชพเชตเชตเชพเชจเซเช‚ เชฎเซเชถเซเช•เซ‡เชฒ เชนเซ‹เชฏ เช›เซ‡. เชธเช‚เชชเซ‚เชฐเซเชฃ เชตเชฟเชคเชฐเชฟเชค เชธเชฟเชธเซเชŸเชฎเชจเชพ เชธเซเชฐเช•เซเชทเชฟเชค เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‡ เชŸเชพเชˆเชช เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเชฐเซเชฃเชตเซ‡เชฒ เช…เชญเชฟเช—เชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เช…เชฎเซ‡ เชคเชฎเชพเชฎ เชตเชฟเชคเชฐเชฟเชค เชญเชพเช—เซ‹เชจเซ‡ เชเช• เชœ เชธเชฐเซเชตเชฐ เชชเชฐ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เชฐเซ€เชคเซ‡ เชšเชฒเชพเชตเซ€ เชถเช•เซ€เช เช›เซ€เช. เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชจเซเช‚ เช…เชจเซเช•เชฐเชฃ เช•เชฐเชตเซเช‚ เชธเชฐเชณ เช›เซ‡
    เชœเซเชฏเชพเชฐเซ‡ เชเช• เชธเซ‡เชตเชพ เช…เชจเซเชชเชฒเชฌเซเชง เชฌเชจเซ‡ เช›เซ‡.

เช—เซ‡เชฐเชซเชพเชฏเชฆเชพเชฎเชพเช‚

เชธเช‚เช•เชฒเชฟเชค เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช…เชญเชฟเช—เชฎ "เชธเชพเชฎเชพเชจเซเชฏ" เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฅเซ€ เช…เชฒเช— เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ เชฌเชงเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเซ‹เชจเซ‡ เช…เชจเซเชฐเซ‚เชช เชจ เชนเซ‹เชˆ เชถเช•เซ‡. เชธเช‚เช•เชฒเชฟเชค เชฐเซ‚เชชเชฐเซ‡เช–เชพเชจเชพ เช•เซ‡เชŸเชฒเชพเช• เช—เซ‡เชฐเชซเชพเชฏเชฆเชพ เช…เชนเซ€เช‚ เช›เซ‡:

  1. เชธเซเชฅเชฟเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ. เชคเซ‡ เชฌเชงเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เชฎเชพเชŸเซ‡ เชฏเซ‹เช—เซเชฏ เชจ เชนเซ‹เชˆ เชถเช•เซ‡. เช•เซ‡เชŸเชฒเชพเช• เช•เชฟเชธเซเชธเชพเช“เชฎเชพเช‚ เชธเชฒเชพเชฎเชคเซ€เชจเชพ เชคเชฎเชพเชฎ เชชเช—เชฒเชพเช‚เชจเซ‡ เชฌเชพเชฏเชชเชพเชธ เช•เชฐเซ€เชจเซ‡ เช‰เชคเซเชชเชพเชฆเชจเชฎเชพเช‚ เช—เซ‹เช เชตเชฃเซ€เชจเซ‡ เชเชกเชชเชฅเซ€ เช เซ€เช• เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช† เช…เชญเชฟเช—เชฎ เชคเซ‡เชจเซ‡ เชตเชงเซ เชฎเซเชถเซเช•เซ‡เชฒ เชฌเชจเชพเชตเซ‡ เช›เซ‡. เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เช•เซ‹เชˆเชชเชฃ เชซเซ‡เชฐเชซเชพเชฐ เช•เชฐเซเชฏเชพ เชชเช›เซ€ เชธเช‚เช•เชฒเชจ เช…เชจเซ‡ เชชเซเชจเชƒเชธเซเชฅเชพเชชเชจ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เช† เชฒเช•เซเชทเชฃ เช…เชจเซ‡ เชฌเซ‹เชœ เชฌเช‚เชจเซ‡ เช›เซ‡.
  2. เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชœเชจเชฐเซ‡เชถเชจ. เชœเซเชฏเชพเชฐเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพ เช•เซ‡เชŸเชฒเชพเช• เช“เชŸเซ‹เชฎเซ‡เชถเชจ เชŸเซ‚เชฒ เชฆเซเชตเชพเชฐเชพ เชœเชจเชฐเซ‡เชŸ เชฅเชพเชฏ เช›เซ‡ เชคเซเชฏเชพเชฐเซ‡ เช† เช…เชญเชฟเช—เชฎเชจเซ‡ เช…เชจเซเช—เชพเชฎเซ€ เชธเช‚เช•เชฒเชจเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเซ‡ เช›เซ‡ (เชœเซ‡ เชฌเชฆเชฒเชพเชฎเชพเช‚ เชจเชฟเชทเซเชซเชณ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡). เช† เชตเชงเชพเชฐเชพเชจเชพ เชชเช—เชฒเชพเชจเซ‡ เชฌเชฟเชฒเซเชก เชธเชฟเชธเซเชŸเชฎเชฎเชพเช‚ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเชงเชพเชฐเชพเชจเชพ เชชเซเชฐเชฏเชคเซเชจเซ‹เชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเซ€ เชถเช•เซ‡ เช›เซ‡.
  3. เชธเชพเชงเชจเซ‹. เช†เชœเซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ เชชเซเชทเซเช•เชณ เชธเชพเชงเชจเซ‹ เช›เซ‡ เชœเซ‡ เชŸเซ‡เช•เซเชธเซเชŸ-เช†เชงเชพเชฐเชฟเชค เชฐเซ‚เชชเชฐเซ‡เช–เชพเช“ เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ‡ เช›เซ‡. เช…เชฎเซเช•
    เชœเซเชฏเชพเชฐเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเช‚เช•เชฒเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ เชฒเชพเช—เซ เชฅเชถเซ‡ เชจเชนเซ€เช‚.
  4. เชฎเชพเชจเชธเชฟเช•เชคเชพเชฎเชพเช‚ เชชเชฐเชฟเชตเชฐเซเชคเชจ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เช…เชจเซ‡ DevOps เชŸเซ‡เช•เซเชธเซเชŸ เช•เชจเซเชซเชฟเช—เชฐเซ‡เชถเชจ เชซเชพเช‡เชฒเซ‹เชฅเซ€ เชชเชฐเชฟเชšเชฟเชค เช›เซ‡. เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช•เชฎเซเชชเชพเช‡เชฒ เช•เชฐเชตเชพเชจเซ‹ เชตเชฟเชšเชพเชฐ เชคเซ‡เชฎเชจเซ‡ เชตเชฟเชšเชฟเชคเซเชฐ เชฒเชพเช—เซ€ เชถเช•เซ‡ เช›เซ‡.
  5. เช•เชฎเซเชชเชพเช‡เชฒเซ‡เชฌเชฒ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‹ เชชเชฐเชฟเชšเชฏ เช†เชชเชคเชพ เชชเชนเซ‡เชฒเชพ เช‰เชšเซเชš เช—เซเชฃเชตเชคเซเชคเชพเชจเซ€ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡.

เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชพเชฏเซ‡เชฒ เช‰เชฆเชพเชนเชฐเชฃเชจเซ€ เช•เซ‡เชŸเชฒเซ€เช• เชฎเชฐเซเชฏเชพเชฆเชพเช“ เช›เซ‡:

  1. เชœเซ‹ เช…เชฎเซ‡ เชตเชงเชพเชฐเชพเชจเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ€เช เช›เซ€เช เชœเซ‡ เชจเซ‹เชก เช…เชฎเชฒเซ€เช•เชฐเชฃ เชฆเซเชตเชพเชฐเชพ เชฎเชพเช‚เช—เชตเชพเชฎเชพเช‚ เช†เชตเชคเซ€ เชจเชฅเซ€, เชคเซ‹ เช•เชฎเซเชชเชพเช‡เชฒเชฐ เช—เซ‡เชฐเชนเชพเชœเชฐ เช…เชฎเชฒเซ€เช•เชฐเชฃเชจเซ‡ เชถเซ‹เชงเชตเชพเชฎเชพเช‚ เช…เชฎเชจเซ‡ เชฎเชฆเชฆ เช•เชฐเชถเซ‡ เชจเชนเซ€เช‚. เช†เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเช‚เชฌเซ‹เชงเชฟเชค เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ HList เช…เชฅเชตเชพ เชฒเช•เซเชทเชฃเซ‹ เช…เชจเซ‡ เช•เซ‡เช• เชชเซ‡เชŸเชฐเซเชจเชจเซ‡ เชฌเชฆเชฒเซ‡ เชจเซ‹เชก เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฎเชพเชŸเซ‡ ADTs (เช•เซ‡เชธ เชตเชฐเซเช—เซ‹).
  2. เช…เชฎเชพเชฐเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชซเชพเชˆเชฒเชฎเชพเช‚ เช•เซ‡เชŸเชฒเซ€เช• เชฌเซ‹เชˆเชฒเชฐเชชเซเชฒเซ‡เชŸ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเซ€ เชชเชกเชถเซ‡: (package, import, object เช˜เซ‹เชทเชฃเชพเช“
    override defเชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชฎเชพเชŸเซ‡ เช•เซ‡ เชœเซ‡เชฎเชพเช‚ เชกเชฟเชซเซ‹เชฒเซเชŸ เชฎเซ‚เชฒเซเชฏเซ‹ เชนเซ‹เชฏ เช›เซ‡). DSL เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช† เช†เช‚เชถเชฟเช• เชฐเซ€เชคเซ‡ เชธเช‚เชฌเซ‹เชงเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชถเช•เซ‡ เช›เซ‡.
  3. เช† เชชเซ‹เชธเซเชŸเชฎเชพเช‚ เช…เชฎเซ‡ เชธเชฎเชพเชจ เช—เชพเช‚เช เซ‹เชจเชพ เช•เซเชฒเชธเซเชŸเชฐเซ‹เชจเชพ เช—เชคเชฟเชถเซ€เชฒ เชชเซเชจเชƒเชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‡ เช†เชตเชฐเซ€ เชฒเซ‡เชคเชพ เชจเชฅเซ€.

เช‰เชชเชธเช‚เชนเชพเชฐ

เช† เชชเซ‹เชธเซเชŸเชฎเชพเช‚ เช…เชฎเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‡ เชธเซ€เชงเชพ เชœ เชธเซเชคเซเชฐเซ‹เชค เช•เซ‹เชกเชฎเชพเช‚ เชธเซเชฐเช•เซเชทเชฟเชค เชฐเซ€เชคเซ‡ เชฐเชœเซ‚ เช•เชฐเชตเชพเชจเชพ เชตเชฟเชšเชพเชฐเชจเซ€ เชšเชฐเซเชšเชพ เช•เชฐเซ€ เช›เซ‡. เชเช•เซเชธเชเชฎเชเชฒ- เช…เชจเซ‡ เช…เชจเซเชฏ เชŸเซ‡เช•เซเชธเซเชŸ-เช†เชงเชพเชฐเชฟเชค เชฐเซ‚เชชเชฐเซ‡เช–เชพเช“เชจเชพ เชธเซเชฅเชพเชจเซ‡ เช˜เชฃเชพ เช•เชพเชฐเซเชฏเช•เซเชฐเชฎเซ‹เชฎเชพเช‚ เช…เชญเชฟเช—เชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชคเซ‡เชฎ เช›เชคเชพเช‚ เช…เชฎเชพเชฐเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เชธเซเช•เซ‡เชฒเชพเชฎเชพเช‚ เชฒเชพเช—เซ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡, เชคเซ‡ เช…เชจเซเชฏ เช•เชฎเซเชชเชพเช‡เชฒเซ‡เชฌเชฒ เชญเชพเชทเชพเช“เชฎเชพเช‚ เชชเชฃ เช…เชจเซเชตเชพเชฆเชฟเชค เชฅเชˆ เชถเช•เซ‡ เช›เซ‡ (เชœเซ‡เชฎ เช•เซ‡ เช•เซ‹เชŸเชฒเชฟเชจ, เชธเซ€#, เชธเซเชตเชฟเชซเซเชŸ, เชตเช—เซ‡เชฐเซ‡). เช•เซ‹เชˆ เช† เช…เชญเชฟเช—เชฎเชจเซ‡ เชจเชตเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เช…เชœเชฎเชพเชตเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡, เชœเซ‹ เชคเซ‡ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เชฌเช‚เชงเชฌเซ‡เชธเชคเซเช‚ เชจ เชนเซ‹เชฏ เชคเซ‹, เชœเซ‚เชจเชพ เชœเชฎเชพเชจเชพเชจเซ€ เชฐเซ€เชค เชชเชฐ เชธเซเชตเชฟเชš เช•เชฐเซ‹.

เช…เชฒเชฌเชคเซเชค, เช•เชฎเซเชชเชพเช‡เชฒ เช•เชฐเชตเชพ เชฏเซ‹เช—เซเชฏ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฎเชพเชŸเซ‡ เช‰เชšเซเชš เช—เซเชฃเชตเชคเซเชคเชพเชจเซ€ เชตเชฟเช•เชพเชธ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชฌเชฆเชฒเชพเชฎเชพเช‚ เชคเซ‡ เชธเชฎเชพเชจ เช‰เชšเซเชš เช—เซเชฃเชตเชคเซเชคเชพเชจเซ€ เชฎเชœเชฌเซ‚เชค เช—เซ‹เช เชตเชฃเซ€ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพเชจเซเช‚ เชตเชšเชจ เช†เชชเซ‡ เช›เซ‡.

เช† เช…เชญเชฟเช—เชฎเชจเซ‡ เชตเชฟเชตเชฟเชง เชฐเซ€เชคเซ‡ เชตเชฟเชธเซเชคเซƒเชค เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡:

  1. เช•เซ‹เชˆ เชชเชฃ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฎเชพเชจเซเชฏเชคเชพ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฎเซ‡เช•เซเชฐเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เช•เซ‹เชˆเชชเชฃ เชตเซเชฏเชตเชธเชพเชฏ-เชคเชฐเซเช• เช…เชตเชฐเซ‹เชงเซ‹เชจเซ€ เชจเชฟเชทเซเชซเชณเชคเชพเชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช•เชฎเซเชชเชพเชˆเชฒ เชธเชฎเชฏเซ‡ เชจเชฟเชทเซเชซเชณ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡.
  2. เชกเซ‹เชฎเซ‡เชจ-เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ-เชฎเซˆเชคเซเชฐเซ€เชชเซ‚เชฐเซเชฃ เชฐเซ€เชคเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซเช‚ เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟเชคเซเชต เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ DSL เชฒเชพเช—เซ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.
  3. เชธเซเชตเชšเชพเชฒเชฟเชค เช—เซ‹เช เชตเชฃเซ€ เช—เซ‹เช เชตเชฃเซ‹ เชธเชพเชฅเซ‡ เช—เชคเชฟเชถเซ€เชฒ เชธเช‚เชธเชพเชงเชจ เชธเช‚เชšเชพเชฒเชจ. เชฆเชพเช–เชฒเชพ เชคเชฐเซ€เช•เซ‡, เชœเซเชฏเชพเชฐเซ‡ เช†เชชเชฃเซ‡ เช•เซเชฒเชธเซเชŸเชฐ เชจเซ‹เชกเซเชธเชจเซ€ เชธเช‚เช–เซเชฏเชพเชจเซ‡ เชธเชฎเชพเชฏเซ‹เชœเชฟเชค เช•เชฐเซ€เช เช›เซ€เช เชคเซเชฏเชพเชฐเซ‡ เช…เชฎเซ‡ เชˆเชšเซเช›เซ€ เชถเช•เซ€เช เช›เซ€เช (1) เชจเซ‹เชกเซเชธ เชธเชนเซ‡เชœ เชธเช‚เชถเซ‹เชงเชฟเชค เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡; (2) เชจเชตเชพ เชจเซ‹เชกเซเชธเชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡ เช•เซเชฒเชธเซเชŸเชฐ เชฎเซ‡เชจเซ‡เชœเชฐ.

เช†เชญเชพเชฐ

เช† เชชเซ‹เชธเซเชŸเชจเชพ เชกเซเชฐเชพเชซเซเชŸ เชชเชฐ เชชเซเชฐเซ‡เชฐเชฃเชพเชฆเชพเชฏเซ€ เชชเซเชฐเชคเชฟเชธเชพเชฆ เช†เชชเชตเชพ เชฌเชฆเชฒ เชนเซเช‚ เชเชจเซเชกเซเชฐเซ‡ เชธเชพเช•เชธเซ‹เชจเซ‹เชต, เชชเชพเชตเซ‡เชฒ เชชเซ‹เชชเซ‹เชต, เชเชจเซเชŸเซ‹เชจ เชจเซ‡เชนเชพเชˆเชตเชจเซ‹ เช†เชญเชพเชฐ เช•เชนเซ‡เชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เชœเซ‡เชฃเซ‡ เชฎเชจเซ‡ เชคเซ‡เชจเซ‡ เชธเซเชชเชทเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเซ€.

เชธเซ‹เชฐเซเชธ: www.habr.com