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

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

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

(เช‡เช‚เช—เชฒเชฟเชถ)

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

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

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

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

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

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

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

เชธเช‚เช•เชฒเชฟเชค เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ

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

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

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]]

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

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

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

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

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

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

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

sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]

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

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

sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]

เช…เชนเซ€เช‚ เชตเชฟเชจเช‚เชคเซ€ เช url เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒ เชธเซเชŸเซเชฐเชฟเช‚เช— เช›เซ‡ เช…เชจเซ‡ เชชเซเชฐเชคเชฟเชธเชพเชฆ เช HTTP เชชเซเชฐเชคเชฟเชธเชพเชฆเชจเชพ เชฎเซเช–เซเชฏ เชญเชพเช—เชฎเชพเช‚ เชชเชฐเชค เช•เชฐเชพเชฏเซ‡เชฒเซ€ เชธเซเชŸเซเชฐเชฟเช‚เช— เช›เซ‡.

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

เชธเซ‡เชตเชพเช“ เชตเชšเซเชšเซ‡เชจเซ€ เช…เชตเชฒเช‚เชฌเชจเชจเซ‡ เชเชตเซ€ เชชเชฆเซเชงเชคเชฟเช“ เชคเชฐเซ€เช•เซ‡ เชฐเชœเซ‚ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ เชœเซ‡ เชชเซ‹เชฐเซเชŸ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡ EndPointเช…เชจเซเชฏ เช—เชพเช‚เช เซ‹เชจเชพ:

  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)
  }

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

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

  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 - เชเช• เช…เชธเชฐ เชชเซเชฐเช•เชพเชฐ เชตเชฐเซเช— เช•เซ‡ เชœเซ‡ เชคเชฎเชจเซ‡ เชตเซเชฏเช•เซเชคเชฟเช—เชค เช…เชธเชฐเซ‹ (เชฒเช—เชญเช— เชเช• เชฎเซ‹เชจเชพเชก) เชจเซ‡ เชœเซ‹เชกเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชตเชงเซ เชœเชŸเชฟเชฒ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธเชฎเชพเช‚ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชตเชงเซ เชธเชพเชฐเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ Monad/ConcurrentEffect.

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

  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
}

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

เชฏเชœเชฎเชพเชจ เชจเชพเชฎ เช เชฐเชพเชต

เชฆเซ‚เชฐเชธเซเชฅ เชนเซ‹เชธเซเชŸ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเชจเซ‡ เชตเชพเชธเซเชคเชตเชฟเช• IP เชธเชฐเชจเชพเชฎเชพเช‚เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชธเช‚เชญเชต เช›เซ‡ เช•เซ‡ เชธเชฐเชจเชพเชฎเซเช‚ เชฌเชพเช•เซ€เชจเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช•เชฐเชคเชพเช‚ เชชเชพเช›เชณเชฅเซ€ เชœเชพเชฃเซ€เชคเซเช‚ เชฅเชˆ เชœเชถเซ‡. เชคเซ‡เชฅเซ€ เช…เชฎเชจเซ‡ เชเช• เชซเช‚เช•เซเชถเชจเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชœเซ‡ เชธเชฐเชจเชพเชฎเชพเช‚ เชชเชฐ เชจเซ‹เชก ID เชจเซ‡ เชฎเซ‡เชช เช•เชฐเซ‡ เช›เซ‡:

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

เช† เช•เชพเชฐเซเชฏเชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชจเซ€ เช˜เชฃเซ€ เชฐเซ€เชคเซ‹ เช›เซ‡:

  1. เชœเซ‹ เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ เชชเชนเซ‡เชฒเชพ เชธเชฐเชจเชพเชฎเชพเช‚เช“ เช…เชฎเชจเซ‡ เชœเชพเชฃเซ€เชคเชพ เชฅเชˆ เชœเชพเชฏ, เชคเซ‹ เช…เชฎเซ‡ เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เชธเซเช•เซ‡เชฒเชพ เช•เซ‹เชก เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช
    เชธเชฐเชจเชพเชฎเชพเช‚เช“ เช…เชจเซ‡ เชชเช›เซ€ เชฌเชฟเชฒเซเชก เชšเชฒเชพเชตเซ‹. เช† เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เช•เชฎเซเชชเชพเช‡เชฒ เช•เชฐเชถเซ‡ เช…เชจเซ‡ เชšเชฒเชพเชตเชถเซ‡.
    เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช•เชพเชฐเซเชฏ เชธเซเชฅเชฟเชฐ เชฐเซ€เชคเซ‡ เชœเชพเชฃเซ€เชคเซเช‚ เชนเชถเซ‡ เช…เชจเซ‡ เช•เซ‹เชกเชฎเชพเช‚ เชฎเซ‡เชชเชฟเช‚เช— เชคเชฐเซ€เช•เซ‡ เชฐเชœเซ‚ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ 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 เช•เชพเชฐเซเชฏเช•เซเชฐเชฎ เชธเชฎเชพเชชเซเชค เช•เชฐเซ‹. (Ctrl-C เชชเชฃ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเชฎเชพเชฎ เชธเช‚เชธเชพเชงเชจเซ‹เชจเซ‡ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เชฎเซเช•เซเชค เช•เชฐเซ‡ เช›เซ‡.)

เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช…เชจเซ‡ เช…เชฎเชฒเซ€เช•เชฐเชฃ เชฒเช•เซเชทเชฃเซ‹เชจเชพ เชธเชฎเชพเชจ เชธเชฎเซ‚เชนเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชงเชฐเชพเชตเชคเซ€ เชธเชฟเชธเซเชŸเชฎ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ เชฌเซ‡ เช…เชฒเช— เช—เชพเช‚เช เซ‹:

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

  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"
  }

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

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

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

  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'เช“เชฎ, เช…เชจเซ‡ เช•เซเชฒเชพเชฏเช‚เชŸ เชจเซ‹เชก เชฅเซ‹เชกเชพ เชธเชฎเชฏ เชชเช›เซ€ เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เช›เซ‡. เชธเซ‡เชฎเซ€. เชฒเซ‹เชจเซเชšเชฐ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ.

เชธเชพเชฎเชพเชจเซเชฏ เชตเชฟเช•เชพเชธ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ

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

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

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

เชฌเช— เชŸเซเชฐเซ‡เช•เชฐเชฎเชพเช‚ เชŸเชฟเช•เชฟเชŸ -> PR -> เชธเชฎเซ€เช•เซเชทเชพ -> เชธเช‚เชฌเช‚เชงเชฟเชค เชถเชพเช–เชพเช“ เชธเชพเชฅเซ‡ เชฎเชฐเซเชœ เช•เชฐเซ‹ ->
เชเช•เซ€เช•เชฐเชฃ -> เชœเชฎเชพเชตเชŸ

เชธเช‚เช•เชฒเชฟเชค เช—เซ‹เช เชตเชฃเซ€เชจเชพ เช…เชฎเชฒเซ€เช•เชฐเชฃเชจเชพ เชฎเซเช–เซเชฏ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เช›เซ‡:

  1. เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชตเชฟเชคเชฐเชฟเชค เชธเชฟเชธเซเชŸเชฎเชจเชพ เชคเชฎเชพเชฎ เช—เชพเช‚เช เซ‹ เชชเชฐ เชธเซเชธเช‚เช—เชค เชฐเชนเซ‡เชถเซ‡. เช เชนเช•เซ€เช•เชคเชจเซ‡ เช•เชพเชฐเชฃเซ‡ เช•เซ‡ เชคเชฎเชพเชฎ เชจเซ‹เชกเซเชธ เชเช• เชœ เชธเซเชคเซเชฐเซ‹เชคเชฎเชพเช‚เชฅเซ€ เชธเชฎเชพเชจ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ‡ เช›เซ‡.

  2. เชฎเชพเชคเซเชฐ เชเช• เชจเซ‹เชกเชฎเชพเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฌเชฆเชฒเชตเซเช‚ เชธเชฎเชธเซเชฏเชพเชฐเซ‚เชช เช›เซ‡. เชคเซ‡เชฅเซ€, "เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชกเซเชฐเชฟเชซเซเชŸ" เช…เชธเช‚เชญเชตเชฟเชค เช›เซ‡.

  3. เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เชจเชพเชจเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เช•เชฐเชตเชพ เชคเซ‡ เชตเชงเซ เชฎเซเชถเซเช•เซ‡เชฒ เชฌเชจเซ€ เชœเชพเชฏ เช›เซ‡.

  4. เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชเช•เช‚เชฆเชฐ เชตเชฟเช•เชพเชธ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเชพ เชญเชพเช— เชฐเซ‚เชชเซ‡ เชฅเชถเซ‡ เช…เชจเซ‡ เชธเชฎเซ€เช•เซเชทเชพเชจเซ‡ เช†เชงเซ€เชจ เชฐเชนเซ‡เชถเซ‡.

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

เชถเช•เซเชฏ เชญเชฟเชจเซเชจเชคเชพ

เชšเชพเชฒเซ‹ เชธเช‚เช•เชฒเชฟเชค เช—เซ‹เช เชตเชฃเซ€เชจเซ‡ เช•เซ‡เชŸเชฒเชพเช• เชธเชพเชฎเชพเชจเซเชฏ เชตเชฟเช•เชฒเซเชชเซ‹ เชธเชพเชฅเซ‡ เชธเชฐเช–เชพเชตเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เช:

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

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

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

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

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

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

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

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

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

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

เชนเซเช‚ เชธเซ‚เชšเชฟเชค เชคเช•เชจเซ€เช•เชจเชพ เชซเชพเชฏเชฆเชพ เช…เชจเซ‡ เช—เซ‡เชฐเชซเชพเชฏเชฆเชพ เชชเชฐ เชงเซเชฏเชพเชจ เช†เชชเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚.

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

เชจเซ€เชšเซ‡ เชธเช‚เช•เชฒเชฟเชค เชตเชฟเชคเชฐเชฟเชค เชธเชฟเชธเซเชŸเชฎ เช—เซ‹เช เชตเชฃเซ€เชจเซ€ เชฎเซเช–เซเชฏ เชฒเชพเช•เซเชทเชฃเชฟเช•เชคเชพเช“เชจเซ€ เชธเซ‚เชšเชฟ เช›เซ‡:

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

เช—เซ‡เชฐเชซเชพเชฏเชฆเชพ เช…เชจเซ‡ เชฎเชฐเซเชฏเชพเชฆเชพเช“

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

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

เชšเชพเชฒเซ‹ เช†เชชเชฃเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ€เชงเซ‡เชฒเชพ เช‰เชฆเชพเชนเชฐเชฃเชจเซ€ เชธเช‚เช–เซเชฏเชพเชฌเช‚เชง เชฎเชฐเซเชฏเชพเชฆเชพเช“ เชชเชฐ เชชเชฃ เชงเซเชฏเชพเชจ เช†เชชเซ€เช เชœเซ‡ เชธเช‚เช•เชฒเชฟเชค เช—เซ‹เช เชตเชฃเซ€เชจเชพ เชตเชฟเชšเชพเชฐ เชธเชพเชฅเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค เชจเชฅเซ€:

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

เชจเชฟเชทเซเช•เชฐเซเชท

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

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

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

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

เชธเซเชตเซ€เช•เซƒเชคเชฟเช“

เชกเซเชฐเชพเชซเซเชŸ เชฒเซ‡เช–เชจเซ€ เชฐเชšเชจเชพเชคเซเชฎเช• เชŸเซ€เช•เชพ เชฎเชพเชŸเซ‡ เชนเซเช‚ เช†เชจเซเชฆเซเชฐเซ‡ เชธเชพเช•เชธเซ‹เชจเซ‹เชต, เชชเชพเชตเซ‡เชฒ เชชเซ‹เชชเซ‹เชต เช…เชจเซ‡ เชเชจเซเชŸเซ‹เชจ เชจเซ‡เช–เชพเชฏเซ‡เชตเชจเซ‹ เช†เชญเชพเชฐ เชฎเชพเชจเซเช‚ เช›เซเช‚.

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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹