เด’เดฐเต เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป

เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเตฝ เด’เดฐเต เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฐเดธเด•เดฐเดฎเดพเดฏ เด’เดฐเต เดฎเดพเตผเด—เด‚ เดชเด™เตเด•เดฟเดŸเดพเตป เดžเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต.
เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด’เดฐเต เดคเดฐเด‚ เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดพเดฏ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดธเตเด•เดพเดฒ เดญเดพเดทเดฏเดฟเตฝ เดจเต‡เดฐเดฟเดŸเตเดŸเต เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเต เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดฎเตŠเดคเตเดคเดคเตเดคเดฟเดฒเตเดณเตเดณ เดตเดฟเด•เดธเดจ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเดฟเดฒเต† เดธเตเดตเดพเดงเต€เดจเด‚ เด‰เตพเดชเตเดชเต†เดŸเต†, เดจเดฟเตผเดฆเตเดฆเต‡เดถเดคเตเดคเดฟเดจเตเดฑเต† เดตเดฟเดตเดฟเดง เดตเดถเด™เตเด™เตพ เดšเตผเดšเตเดšเดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เด’เดฐเต เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป

(เดฑเดทเตเดฏเตป เดญเดพเดทเดฏเดฟเตฝ)

เด…เดตเดคเดพเดฐเดฟเด•

เด•เดฐเตเดคเตเดคเตเดฑเตเดฑ เดตเดฟเดคเดฐเดฃ เดธเด‚เดตเดฟเดงเดพเดจเด™เตเด™เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดŽเดฒเตเดฒเดพ เดจเต‹เดกเตเด•เดณเดฟเดฒเตเด‚ เดถเดฐเดฟเดฏเดพเดฏเดคเตเด‚ เดฏเต‹เดœเดฟเดšเตเดšเดคเตเดฎเดพเดฏ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เด’เดฐเต เดŸเต†เด•เตโ€Œเดธเตโ€Œเดšเตเดตเตฝ เดตเดฟเดจเตเดฏเดพเดธ เดตเดฟเดตเดฐเดฃเดตเตเด‚ (เดŸเต†เดฑเดพเดซเต‹เด‚, เด†เตปเดธเดฟเดฌเดฟเตพ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดฑเตเดฑเต†เดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚) เดธเตเดตเดฏเดฎเต‡เดต เดธเตƒเดทเตโ€ŒเดŸเดฟเดšเตเดš เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเตเด•เดณเตเด‚ (เดชเดฒเดชเตเดชเต‹เดดเตเด‚ - เด“เดฐเต‹ เดจเต‹เดกเดฟเดจเตเด‚/เดฑเต‹เดณเดฟเดจเตเด‚ เดตเต‡เดฃเตเดŸเดฟ เดธเดฎเตผเดชเตเดชเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดŸเดต) เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เดชเดฐเดฟเดนเดพเดฐเด‚. เด“เดฐเต‹ เด†เดถเดฏเดตเดฟเดจเดฟเดฎเดฏ เดจเต‹เดกเตเด•เดณเดฟเดฒเตเด‚ เด’เดฐเต‡ เดชเดคเดฟเดชเตเดชเตเด•เดณเตเดŸเต† เด…เดคเต‡ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดจเตเด‚ เดžเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดชเตŠเดฐเตเดคเตเดคเด•เตเด•เต‡เดŸเดฟเดจเตเดฑเต† เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เดžเด™เตเด™เตพ เด…เดจเตเดญเดตเดฟเด•เตเด•เตเด‚). 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 เด…เดคเต เด•เตเดฒเดพเดธเตเดธเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. เด…เดคเต เดตเดฟเดณเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเดตเดฏเดพเดฃเต เดซเดพเดจเตเดฑเด‚ เดคเดฐเด‚. เดฑเตบเดŸเตˆเดฎเดฟเตฝ เดžเด™เตเด™เตพเด•เตเด•เต เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เดเดกเดจเตเดฑเดฟเดซเดฏเดฑเดฟเดจเตเดฑเต† เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดตเดณเดฐเต† เด…เดชเต‚เตผเดตเดฎเดพเดฏเดฟ เดฎเดพเดคเตเดฐเดฎเต‡ เด†เดตเดถเตเดฏเดฎเตเดณเตเดณเต‚, เด…เดคเตเด•เตŠเดฃเตเดŸเดพเดฃเต เดžเด™เตเด™เตพ เด…เดคเต เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. เดธเดฎเดพเดนเดฐเดฟเด•เตเด•เตเดจเตเดจ เดธเดฎเดฏเดคเตเดคเต เดˆ เดซเดพเดจเตเดฑเด‚ เดคเดฐเด‚ เด…เดงเดฟเด• เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดธเตเดฐเด•เตเดท เดจเตฝเด•เตเดจเตเดจเต. เดคเต†เดฑเตเดฑเดพเดฏ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เตพเด•เตเด•เต เดชเต‹เตผเดŸเตเดŸเต เด•เตˆเดฎเดพเดฑเดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ.

เดเดฑเตเดฑเดตเตเด‚ เดตเตเดฏเดพเดชเด•เดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเตเด•เดณเดฟเตฝ เด’เดจเตเดจเดพเดฃเต Json เดธเต€เดฐเดฟเดฏเดฒเตˆเดธเต‡เดทเดจเต‹เดŸเตเด•เต‚เดŸเดฟเดฏ 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. เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต, เดจเต‹เดกเต เดนเต‹เดธเตเดฑเตเดฑเต เด‡เตปเดธเตเดฑเตเดฑเดจเตเดฑเต‡เดทเตป เดธเดฎเดฏเดคเตเดคเต, เดžเด™เตเด™เตพเด•เตเด•เต เดฏเดฅเดพเตผเดคเตเดฅ เดตเดฟเดฒเดพเดธเด™เตเด™เตพ เด…เดฑเดฟเดฏเดพเดฎเต†เด™เตเด•เดฟเตฝ, เดจเดฎเตเด•เตเด•เต เดฏเดฅเดพเตผเดคเตเดฅ เดตเดฟเดฒเดพเดธเด™เตเด™เตพเด•เตเด•เตŠเดชเตเดชเด‚ เดธเตเด•เดพเดฒ เด•เต‹เดกเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเดจเตเด‚ เด…เดคเดฟเดจเตเดถเต‡เดทเด‚ เดฌเดฟเตฝเดกเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚ (เด‡เดคเต เด•เด‚เดชเตˆเตฝ เดธเดฎเดฏ เดชเดฐเดฟเดถเต‹เดงเดจเด•เตพ เดจเดŸเดคเตเดคเตเด•เดฏเตเด‚ เดคเตเดŸเตผเดจเตเดจเต เด‡เดจเตเดฑเด—เตเดฐเต‡เดทเตป เดŸเต†เดธเตเดฑเตเดฑเต เดธเตเดฏเต‚เดŸเตเดŸเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต). เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ เดžเด™เตเด™เดณเตเดŸเต† เดฎเดพเดชเตเดชเดฟเด‚เด—เต เดซเด‚เด—เตโ€Œเดทเตป เดธเตเดฅเดฟเดฐเดฎเดพเดฏเดฟ เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเต, เด…เดคเต เดชเต‹เดฒเต†เดฏเตเดณเตเดณ เด’เดจเตเดจเดฟเดฒเต‡เด•เตเด•เต เดฒเดณเดฟเดคเดฎเดพเด•เตเด•เดพเด‚ Map[NodeId, NodeAddress].
  2. เดšเดฟเดฒเดชเตเดชเต‹เตพ เดจเต‹เดกเต เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดชเดฟเดจเตเดจเต€เดŸเตเดณเตเดณ เด˜เดŸเตเดŸเดคเตเดคเดฟเตฝ เดฎเดพเดคเตเดฐเดฎเต‡ เดจเดฎเตเด•เตเด•เต เดฏเดฅเดพเตผเดคเตเดฅ เดตเดฟเดฒเดพเดธเด™เตเด™เตพ เดฒเดญเดฟเด•เตเด•เต‚, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด‡เดคเตเดตเดฐเต† เด†เดฐเด‚เดญเดฟเดšเตเดšเดฟเดŸเตเดŸเดฟเดฒเตเดฒเดพเดคเตเดค เดจเต‹เดกเตเด•เดณเตเดŸเต† เดตเดฟเดฒเดพเดธเด™เตเด™เตพ เดžเด™เตเด™เดณเตเดŸเต† เดชเด•เตเด•เดฒเดฟเดฒเตเดฒ. เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดฎเดฑเตเดฑเต†เดฒเตเดฒเดพ เดจเต‹เดกเตเด•เตพเด•เตเด•เตเด‚ เดฎเตเดฎเตเดชเดพเดฏเดฟ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด•เดฃเตเดŸเต†เดคเตเดคเตฝ เดธเต‡เดตเดจเด‚ เดจเดฎเตเด•เตเด•เตเดฃเตเดŸเดพเดฏเต‡เด•เตเด•เดพเด‚, เด“เดฐเต‹ เดจเต‹เดกเตเด‚ เด† เดธเต‡เดตเดจเดคเตเดคเดฟเตฝ เด…เดคเดฟเดจเตเดฑเต† เดตเดฟเดฒเดพเดธเด‚ เดชเดฐเดธเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเตเด•เดฏเตเด‚ เดกเดฟเดชเตปเดกเตปเดธเดฟเด•เตพ เดธเดฌเตโ€Œเดธเตโ€Œเด•เตเดฐเตˆเดฌเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเดพเด‚.
  3. เดจเดฎเตเด•เตเด•เต เดชเดฐเดฟเดทเตเด•เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดฎเต†เด™เตเด•เดฟเตฝ /etc/hosts, เดจเดฎเตเด•เตเด•เต เดฎเตเตปเด•เต‚เดŸเตเดŸเดฟ เดจเดฟเดถเตเดšเดฏเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดณเตเดณ เดนเต‹เดธเตเดฑเตเดฑเต เดจเดพเดฎเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚ (เด‡เดคเต เดชเต‹เดฒเต† my-project-main-node เด’เดชเตเดชเด‚ echo-backend) เดตเดฟเดจเตเดฏเดพเดธ เดธเดฎเดฏเดคเตเดคเต เดˆ เดชเต‡เดฐเต เดเดชเดฟ เดตเดฟเดฒเดพเดธเดตเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดคเตเดคเตเด•.

เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเตฝ เดžเด™เตเด™เตพ เดˆ เด•เต‡เดธเตเด•เตพ เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจเดฟเดฒเตเดฒ. เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ เดžเด™เตเด™เดณเตเดŸเต† เด•เดณเดฟเดชเตเดชเดพเดŸเตเดŸ เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ เดŽเดฒเตเดฒเดพ เดจเต‹เดกเตเด•เตพเด•เตเด•เตเด‚ เด’เดฐเต‡ เดเดชเดฟ เดตเดฟเดฒเดพเดธเด‚ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ - 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. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฑเต† เดธเดฎเตเดชเดจเตเดจเดฎเดพเดฏ เดญเดพเดท. เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เดฎเดฑเตเดฑเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเดฎเต€เดชเดจเด™เตเด™เตพ เดเดฑเตเดฑเดตเตเด‚ เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดธเดฌเตเดธเตเดฑเตเดฑเดฟเดฑเตเดฑเตเดฏเต‚เดทเดจเดฟเดฒเต‡เด•เตเด•เต เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.
    เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฎเดฟเด•เดšเตเดšเดคเดพเด•เตเด•เดพเตป Scala เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเดพเตพเด•เตเด•เต เดตเดฟเดถเดพเดฒเดฎเดพเดฏ เดญเดพเดทเดพ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฎเตเด•เตเด•เต เดธเตเดตเดญเดพเดตเดตเดฟเดถเต‡เดทเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚, เดตเตเดฏเดคเตเดฏเดธเตเดค เดธเตเด•เต‹เดชเตเดชเต เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด’เดฌเตเดœเด•เตเดฑเตเดฑเตเด•เตพ, เดจเดฎเตเด•เตเด•เต เดฑเดซเตผ เดšเต†เดฏเตเดฏเดพเด‚ valเดฌเดพเดนเตเดฏ เดธเตเด•เต‹เดชเตเดชเดฟเตฝ (DRY) เด’เดฐเดฟเด•เตเด•เตฝ เดฎเดพเดคเตเดฐเด‚ เดจเดฟเตผเดตเดšเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดฒเดฟเดฑเตเดฑเดฑเตฝ เดธเต€เด•เตเดตเตปเดธเตเด•เดณเต‹ เดšเดฟเดฒ เด•เตเดฒเดพเดธเตเด•เดณเตเดŸเต† เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเต‹ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚ (Seq, Map, เดคเตเดŸเด™เตเด™เดฟเดฏเดต.).
  3. เดกเดฟเดŽเดธเตเดŽเตฝ. DSL เดŽเดดเตเดคเตเดคเตเด•เดพเตผเด•เตเด•เต เดธเตเด•เดพเดฒเดฏเตเด•เตเด•เต เดฎเดพเดจเตเดฏเดฎเดพเดฏ เดชเดฟเดจเตเดคเตเดฃเดฏเตเดฃเตเดŸเต. เด•เต‚เดŸเตเดคเตฝ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดตเตเด‚ เด…เดจเตเดคเดฟเดฎ เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดธเต—เดนเตƒเดฆเดตเตเดฎเดพเดฏ เด’เดฐเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดญเดพเดท เดธเตเดฅเดพเดชเดฟเด•เตเด•เดพเตป เด’เดฐเดพเตพเด•เตเด•เต เดˆ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚, เด…เดคเตเดตเดดเดฟ เด…เดจเตเดคเดฟเดฎ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด•เตเดฑเดžเตเดžเดคเต เดกเตŠเดฎเต†เดฏเตเตป เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เต เดตเดพเดฏเดฟเด•เตเด•เดพเดจเดพเด•เตเด‚.
  4. เดจเต‹เดกเตเด•เดณเดฟเดฒเตเดŸเดจเต€เดณเด‚ เดธเดฎเด—เตเดฐเดคเดฏเตเด‚ เดฏเต‹เดœเดฟเดชเตเดชเตเด‚. เดฎเตเดดเตเดตเตป เดตเดฟเดคเดฐเดฃ เดธเด‚เดตเดฟเดงเดพเดจเดคเตเดคเดฟเดจเตเด‚ เด’เดฐเต เดธเตเดฅเดฒเดคเตเดคเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด‰เดณเตเดณเดคเดฟเดจเตเดฑเต† เด’เดฐเต เดจเต‡เดŸเตเดŸเด‚, เดŽเดฒเตเดฒเดพ เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเด‚ เด•เตผเดถเดจเดฎเดพเดฏเดฟ เด’เดฐเดฟเด•เตเด•เตฝ เดจเดฟเตผเดตเดšเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดชเดฟเดจเตเดจเต€เดŸเต เด…เดต เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เดŽเดฒเตเดฒเดพ เดธเตเดฅเดฒเด™เตเด™เดณเดฟเดฒเตเด‚ เดตเต€เดฃเตเดŸเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดŽเดจเตเดจเดคเดพเดฃเต. เดธเดพเดงเตเดฏเดฎเดพเดฏ เดŽเดฒเตเดฒเดพ เดถเดฐเดฟเดฏเดพเดฏ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด•เดณเดฟเดฒเตเด‚ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดจเต‹เดกเตเด•เตพ เด’เดฐเต‡ เดญเดพเดทเดฏเดฟเตฝ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดธเตเดฐเด•เตเดทเดฟเดค เดชเต‹เตผเดŸเตเดŸเต เดกเดฟเด•เตเดฒเดฑเต‡เดทเดจเตเด•เตพ เดŸเตˆเดชเตเดชเต เดšเต†เดฏเตเดฏเตเด•. เดจเต‹เดกเตเด•เตพเด•เตเด•เดฟเดŸเดฏเดฟเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เดกเดฟเดชเตปเดกเตปเดธเดฟเด•เตพ เด‰เดฃเตเดŸเต, เด…เดคเต เดšเดฟเดฒ เดธเต‡เดตเดจเด™เตเด™เตพ เดจเตฝเด•เดพเตป เดฎเดฑเด•เตเด•เตเดจเตเดจเดคเต เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเด•เตเด•เตเดจเตเดจเต.
  5. เดฎเดพเดฑเตเดฑเด™เตเด™เดณเตเดŸเต† เด‰เดฏเตผเดจเตเดจ เดจเดฟเดฒเดตเดพเดฐเด‚. เดธเดพเดงเดพเดฐเดฃ เดชเดฟเด†เตผ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเดฟเดฒเต‚เดŸเต† เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เด•เดŸเดจเตเดจเตเดชเต‹เด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฎเตŠเดคเตเดคเดคเตเดคเดฟเดฒเตเดณเตเดณ เดธเดฎเต€เดชเดจเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเดฒเตเด‚ เด‰เดฏเตผเดจเตเดจ เดจเดฟเดฒเดตเดพเดฐเดฎเตเดณเตเดณ เดจเดฟเดฒเดตเดพเดฐเด‚ เดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเต.
  6. เด’เดฐเต‡เดธเดฎเดฏเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฎเดพเดฑเตเดฑเด™เตเด™เตพ. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดตเดฐเตเดคเตเดคเตเดฎเตเดชเต‹เดดเต†เดฒเตเดฒเดพเด‚ เด“เดŸเตเดŸเต‹เดฎเดพเดฑเตเดฑเดฟเด•เต เดตเดฟเดจเตเดฏเดพเดธเด‚ เดŽเดฒเตเดฒเดพ เดจเต‹เดกเตเด•เดณเตเด‚ เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเตเดตเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เตเดจเตเดจเต.
  7. เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดฒเดณเดฟเดคเดฎเดพเด•เตเด•เตฝ. เด…เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดชเดพเดดเตโ€Œเดธเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดฎเต‚เดฒเตเดฏเดจเดฟเตผเดฃเตเดฃเดฏเด‚ เดจเดŸเดคเตเดคเตเด•เดฏเตเด‚ เดคเต†เดฑเตเดฑเดพเดฏ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ. เด‡เดคเต เดฎเตŠเดคเตเดคเดคเตเดคเดฟเดฒเตเดณเตเดณ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเต† เดฒเดณเดฟเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต. (เดšเดฟเดฒ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดค เดตเตผเดฆเตเดงเดจเดตเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดคเดจเตเดจเต†เดฏเตเดฃเตเดŸเต, เดชเด•เตเดทเต‡ เด‡เดคเต เดธเตเดฐเด•เตเดทเดฟเดคเดคเตเดตเดคเตเดคเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดฌเต‹เดงเดชเต‚เตผเดตเดฎเดพเดฏ เดตเตเดฏเดพเดชเดพเดฐเดฎเดพเดฃเต.) เดธเดพเดงเดพเดฐเดฃ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เตเดจเตเดจเดคเต เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเดฃเต - เดจเดทเตโ€ŒเดŸเดฎเดพเดฏ เดญเดพเด—เด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เตเด•. เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตโ€Œเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต เด•เต‚เดŸเดพเดคเต† เด…เดงเดฟเด• เดญเดพเด—เด™เตเด™เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเต เดชเดฟเดจเตเดจเต€เดŸเต เด•เตเดฑเดšเตเดšเต เดธเดฎเดฏเดคเตเดคเต‡เด•เตเด•เต เดฎเดพเดฑเตเดฑเดฟเดตเดฏเตเด•เตเด•เตเด•.
  8. เดชเดคเดฟเดชเตเดชเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เด’เดฐเต‡ เดตเดฟเด•เดธเดจ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเต† เดชเดฟเดจเตเดคเตเดŸเดฐเตเดจเตเดจเต เดŽเดจเตเดจ เดตเดธเตเดคเตเดค เด•เดพเดฐเดฃเด‚, เด…เดคเดฟเดจเตเดฑเต† เดซเดฒเดฎเดพเดฏเดฟ เดจเดฎเตเด•เตเด•เต เดคเดจเดคเดพเดฏ เดชเดคเดฟเดชเตเดชเตเดณเตเดณ เด’เดฐเต เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตเดฑเตเดฑเต เดฒเดญเดฟเด•เตเด•เตเด‚. เด†เดตเดถเตเดฏเดฎเต†เด™เตเด•เดฟเตฝ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดคเดฟเดฐเดฟเด•เต† เดฎเดพเดฑเตเดฑเดพเตป เด‡เดคเต เดžเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เดตเตผเดทเด‚ เดฎเตเดฎเตเดชเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดš เด’เดฐเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดชเต‹เดฒเตเด‚ เดจเดฎเตเด•เตเด•เต เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เดพเด‚, เด…เดคเต เด…เดคเต‡ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดคเดจเตเดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเด‚. เดธเตเดฅเดฟเดฐเดฎเดพเดฏ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดชเตเดฐเดตเดšเดจเดพเดคเตเดฎเด•เดคเดฏเตเด‚ เดตเดฟเดถเตเดตเดพเดธเตเดฏเดคเดฏเตเด‚ เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเต. เด•เด‚เดชเตˆเตฝ เดธเดฎเดฏเดคเตเดคเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด‰เดฑเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ เด’เดฐเต เดชเตเดฐเตŠเดกเด•เตเดทเตป เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเตฝ เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เด•เตƒเดคเตเดฐเดฟเดฎเด‚ เดจเดŸเดคเตเดคเดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ.
  9. เดฎเต‹เดกเตเดฒเดพเดฐเดฟเดฑเตเดฑเดฟ. เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเต เดฎเต‹เดกเตเดฒเดพเตผ เด†เดฃเต, เด•เต‚เดŸเดพเดคเต† เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เตพ เดตเดฟเดตเดฟเดง เดฐเต€เดคเดฟเด•เดณเดฟเตฝ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเด•เตเด•เดพเด‚
    เดตเตเดฏเดคเตเดฏเดธเตเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด•เตพ (เดธเต†เดฑเตเดฑเดชเตเดชเตเด•เตพ/เดฒเต‡เด”เดŸเตเดŸเตเด•เตพ) เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเด•. เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเตเด‚, เด’เดฐเต เดšเต†เดฑเดฟเดฏ เดธเตเด•เต†เดฏเดฟเตฝ เดธเดฟเด‚เด—เดฟเตพ เดจเต‹เดกเต เดฒเต‡เด”เดŸเตเดŸเตเด‚ เดตเดฒเดฟเดฏ เดคเต‹เดคเดฟเดฒเตเดณเตเดณ เดฎเตพเดŸเตเดŸเดฟ เดจเต‹เดกเต เด•เตเดฐเดฎเต€เด•เดฐเดฃเดตเตเด‚ เดธเดพเดงเตเดฏเดฎเดพเดฃเต. เด’เดจเตเดจเดฟเดฒเดงเดฟเด•เด‚ เดชเตเดฐเตŠเดกเด•เตเดทเตป เดฒเต‡เด”เดŸเตเดŸเตเด•เตพ เด‰เดณเตเดณเดคเต เดจเตเดฏเดพเดฏเดฎเดพเดฃเต.
  10. เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เต. เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เต เด†เดตเดถเตเดฏเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เด’เดฐเดพเตพเด•เตเด•เต เด’เดฐเต เดฎเต‹เด•เตเด•เต เดธเต‡เดตเดจเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเด•เดฏเตเด‚ เด’เดฐเต เดคเดฐเด‚ เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดพเดฏ เดฐเต€เดคเดฟเดฏเดฟเตฝ เด’เดฐเต เดกเดฟเดชเตปเดกเตปเดธเดฟ เด†เดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเดพเด‚. เดฎเต‹เด•เตเด•เตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเดšเตเดš เดตเดฟเดตเดฟเดง เดญเดพเด—เด™เตเด™เดณเตเดณเตเดณ เด•เตเดฑเดšเตเดšเต เดตเตเดฏเดคเตเดฏเดธเตเดค เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดฒเต‡เด”เดŸเตเดŸเตเด•เตพ เด’เดฐเต‡เดธเดฎเดฏเด‚ เดชเดฐเดฟเดชเดพเดฒเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.
  11. เด‡เดจเตเดฑเด—เตเดฐเต‡เดทเตป เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เต. เดšเดฟเดฒเดชเตเดชเต‹เตพ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เดณเดฟเตฝ เด‡เดจเตเดฑเด—เตเดฐเต‡เดทเตป เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเต เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเดฃเต. เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเดฟ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดธเตเดฐเด•เตเดทเดฟเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดŸเตˆเดชเตเดชเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดตเดฟเดตเดฐเดฟเดšเตเดš เดธเดฎเต€เดชเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดจเดฎเตเด•เตเด•เต เดŽเดฒเตเดฒเดพ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดญเดพเด—เด™เตเด™เดณเตเด‚ เด’เดฐเต เดธเต†เตผเดตเดฑเดฟเตฝ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เดพเดตเตเดจเตเดจ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. เดธเดพเดนเดšเดฐเตเดฏเด‚ เด…เดจเตเด•เดฐเดฟเด•เตเด•เดพเตป เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต
    เดธเต‡เดตเดจเด™เตเด™เดณเดฟเดฒเตŠเดจเตเดจเต เดฒเดญเตเดฏเดฎเดฒเตเดฒเดพเดคเตเดคเดชเตเดชเต‹เตพ.

เดธเดนเดŸเดชเดฟเด•เตเด•เดพเดจเตเด‚

เดธเดฎเดพเดนเดฐเดฟเดšเตเดš เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเดฎเต€เดชเดจเด‚ "เดธเดพเดงเดพเดฐเดฃ" เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฃเต, เด…เดคเต เดŽเดฒเตเดฒเดพ เด†เดตเดถเตเดฏเด™เตเด™เตพเด•เตเด•เตเด‚ เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดฒเตเดฒเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚. เดธเดฎเดพเดนเดฐเดฟเดšเตเดš เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฑเต† เดšเดฟเดฒ เดชเต‹เดฐเดพเดฏเตเดฎเด•เตพ เด‡เดคเดพ:

  1. เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป. เด‡เดคเต เดŽเดฒเตเดฒเดพ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพเด•เตเด•เตเด‚ เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดฒเตเดฒเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚. เดšเดฟเดฒ เดธเดพเดนเดšเดฐเตเดฏเด™เตเด™เดณเดฟเตฝ, เดŽเดฒเตเดฒเดพ เดธเตเดฐเด•เตเดทเดพ เดจเดŸเดชเดŸเดฟเด•เดณเตเด‚ เดฎเดฑเดฟเด•เดŸเดจเตเดจเต เด‰เตฝเดชเตเดชเดพเดฆเดจเดคเตเดคเดฟเดฒเต† เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดตเต‡เด—เดคเตเดคเดฟเตฝ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดˆ เดธเดฎเต€เดชเดจเด‚ เด•เต‚เดŸเตเดคเตฝ เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเด•เตเด•เตเดจเตเดจเต. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดฎเดพเดฑเตเดฑเด‚ เดตเดฐเตเดคเตเดคเดฟเดฏเดคเดฟเดจเต เดถเต‡เดทเด‚ เดธเดฎเดพเดนเดฐเดฃเดตเตเด‚ เดชเตเดจเตผเดตเดฟเดจเตเดฏเดพเดธเดตเตเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เด‡เดคเดพเดฃเต เดธเดตเดฟเดถเต‡เดทเดคเดฏเตเด‚ เดญเดพเดฐเดตเตเด‚.
  2. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดœเดจเดฑเต‡เดทเตป. เดšเดฟเดฒ เด“เดŸเตเดŸเต‹เดฎเต‡เดทเตป เดŸเต‚เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เต‹เตบเดซเดฟเด—เต‡เดทเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดˆ เดธเดฎเต€เดชเดจเดคเตเดคเดฟเดจเต เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เดธเดฎเดพเดนเดพเดฐเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฃเต (เด…เดคเต เดชเดฐเดพเดœเดฏเดชเตเดชเต†เดŸเดพเด‚). เดฌเดฟเตฝเดกเต เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดˆ เด…เดงเดฟเด• เด˜เดŸเตเดŸเด‚ เดธเดฎเดจเตเดตเดฏเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด…เดงเดฟเด• เดชเดฐเดฟเดถเตเดฐเดฎเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดจเตเดจเต‡เด•เตเด•เดพเด‚.
  3. เด‰เดชเด•เดฐเดฃเด™เตเด™เตพ. เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เด…เดงเดฟเดทเตเด เดฟเดค เด•เต‹เตบเดซเดฟเด—เดฑเตเด•เดณเต† เด†เดถเตเดฐเดฏเดฟเด•เตเด•เตเดจเตเดจ เดงเดพเดฐเดพเดณเด‚ เดŸเต‚เดณเตเด•เตพ เด‡เดจเตเดจเต เด‰เดชเดฏเต‹เด—เดคเตเดคเดฟเดฒเตเดฃเตเดŸเต. เด…เดตเดฏเดฟเตฝ เดšเดฟเดฒเดคเต
    เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ เดฌเดพเดงเด•เดฎเดพเด•เดฟเดฒเตเดฒ.
  4. เดšเดฟเดจเตเดคเดพเด—เดคเดฟเดฏเดฟเตฝ เด’เดฐเต เดฎเดพเดฑเตเดฑเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดกเต†เดตเดฒเดชเตเดชเตผเดฎเดพเตผเด•เตเด•เตเด‚ DevOps-เดจเตเด‚ เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเตเด•เตพ เดชเดฐเดฟเดšเดฟเดคเดฎเดพเดฃเต. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเตเด• เดŽเดจเตเดจ เด†เดถเดฏเด‚ เด…เดตเตผเด•เตเด•เต เดตเดฟเดšเดฟเดคเตเดฐเดฎเดพเดฏเดฟ เดคเต‹เดจเตเดจเดฟเดฏเต‡เด•เตเด•เดพเด‚.
  5. เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต เด‰เดฏเตผเดจเตเดจ เดจเดฟเดฒเดตเดพเดฐเดฎเตเดณเตเดณ เดธเต‹เดซเตเดฑเตเดฑเตโ€Œเดตเต†เดฏเตผ เดตเดฟเด•เดธเดจ เดชเตเดฐเด•เตเดฐเดฟเดฏ เด†เดตเดถเตเดฏเดฎเดพเดฃเต.

เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏ เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต เดšเดฟเดฒ เดชเดฐเดฟเดฎเดฟเดคเดฟเด•เดณเตเดฃเตเดŸเต:

  1. เดจเต‹เดกเต เด‡เด‚เดชเตเดฒเดฟเดฎเต†เดจเตเดฑเต‡เดทเตป เด†เดตเดถเตเดฏเดชเตเดชเต†เดŸเดพเดคเตเดค เด…เดงเดฟเด• เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดžเด™เตเด™เตพ เดจเตฝเด•เดฟเดฏเดพเตฝ, เดนเดพเดœเตผ เด‡เด‚เดชเตเดฒเดฟเดฎเต†เดจเตเดฑเต‡เดทเตป เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป เด•เด‚เดชเตˆเดฒเตผ เดžเด™เตเด™เดณเต† เดธเดนเดพเดฏเดฟเด•เตเด•เดฟเดฒเตเดฒ. เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด‡เดคเต เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเดตเตเดจเตเดจเดคเดพเดฃเต HList เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดธเตเดตเดญเดพเดตเดธเดตเดฟเดถเต‡เดทเดคเด•เตพเด•เตเด•เตเด‚ เด•เต‡เด•เตเด•เต เดชเดพเดฑเตเดฑเต‡เดฃเดฟเดจเตเด‚ เดชเด•เดฐเด‚ เดจเต‹เดกเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดพเดฏเดฟ ADT-เด•เตพ (เด•เต‡เดธเต เด•เตเดฒเดพเดธเตเด•เตพ).
  2. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเดฟเตฝ เดžเด™เตเด™เตพ เด•เตเดฑเดšเตเดšเต เดฌเต‹เดฏเดฟเดฒเตผ เดชเตเดฒเต‡เดฑเตเดฑเต เดจเตฝเด•เดฃเด‚: (package, import, object เดชเตเดฐเด–เตเดฏเดพเดชเดจเด™เตเด™เตพ;
    override defเดธเตเดฅเดฟเดฐ เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเดณเตเดณ เดชเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพเด•เตเด•เตเดณเตเดณเดคเดพเดฃเต). เด‡เดคเต เด’เดฐเต DSL เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดญเดพเด—เดฟเด•เดฎเดพเดฏเดฟ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดชเตเดชเต†เดŸเดพเด‚.
  3. เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเตฝ เดธเดฎเดพเดจ เดจเต‹เดกเตเด•เดณเตเดŸเต† เด•เตเดฒเดธเตเดฑเตเดฑเดฑเตเด•เดณเตเดŸเต† เดกเตˆเดจเดพเดฎเดฟเด•เต เดฑเต€เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดžเด™เตเด™เตพ เด•เดตเตผ เดšเต†เดฏเตเดฏเตเดจเตเดจเดฟเดฒเตเดฒ.

เดคเต€เดฐเตเดฎเดพเดจเด‚

เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเตฝ, เด’เดฐเต เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดพเดฏ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดธเต‹เดดเตเดธเต เด•เต‹เดกเดฟเตฝ เดจเต‡เดฐเดฟเดŸเตเดŸเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเต† เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจ เด†เดถเดฏเด‚ เดžเด™เตเด™เตพ เดšเตผเดšเตเดš เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต. xml- เดจเตเด‚ เดฎเดฑเตเดฑเต เดŸเต†เด•เตโ€Œเดธเตโ€Œเดฑเตเดฑเต เด…เดงเดฟเดทเตโ€Œเด เดฟเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด•เตพเด•เตเด•เตเด‚ เดชเด•เดฐเดฎเดพเดฏเดฟ เดˆ เดธเดฎเต€เดชเดจเด‚ เดชเดฒ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดฟเดฒเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚. เดžเด™เตเด™เดณเตเดŸเต† เด‰เดฆเดพเดนเดฐเดฃเด‚ เดธเตเด•เดพเดฒเดฏเดฟเตฝ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเดฒเตเด‚, เด‡เดคเต เดธเดฎเดพเดนเดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เดฎเดฑเตเดฑเต เดญเดพเดทเด•เดณเดฟเดฒเต‡เด•เตเด•เตเด‚ (เด•เต‹เดŸเตเดฒเดฟเตป, เดธเดฟ#, เดธเตเดตเดฟเดซเตเดฑเตเดฑเต เดฎเตเดคเดฒเดพเดฏเดต) เดตเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจเดคเดพเดฃเต. เด’เดฐเต เดชเตเดคเดฟเดฏ เดชเตเดฐเต‹เดœเด•เตโ€Œเดฑเตเดฑเดฟเตฝ เด’เดฐเดพเตพเด•เตเด•เต เดˆ เดธเดฎเต€เดชเดจเด‚ เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เดพเด‚, เด…เดคเต เดจเดจเตเดจเดพเดฏเดฟ เดฏเต‹เดœเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดชเดดเดฏ เดฐเต€เดคเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เดฎเดพเดฑเตเด•.

เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเต เด‰เดฏเตผเดจเตเดจ เดจเดฟเดฒเดตเดพเดฐเดฎเตเดณเตเดณ เดตเดฟเด•เดธเดจ เดชเตเดฐเด•เตเดฐเดฟเดฏ เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดชเด•เดฐเดฎเดพเดฏเดฟ, เด‰เดฏเตผเดจเตเดจ เดจเดฟเดฒเดตเดพเดฐเดฎเตเดณเตเดณ เดถเด•เตเดคเดฎเดพเดฏ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดจเตฝเด•เตเดฎเต†เดจเตเดจเต เดตเดพเด—เตเดฆเดพเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดˆ เดธเดฎเต€เดชเดจเด‚ เดชเดฒ เดคเดฐเดคเตเดคเดฟเตฝ เดตเดฟเดชเตเดฒเต€เด•เดฐเดฟเด•เตเด•เดพเด‚:

  1. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฎเต‚เดฒเตเดฏเดจเดฟเตผเดฃเตเดฃเดฏเด‚ เดจเดŸเดคเตเดคเดพเตป เด’เดฐเดพเตพเด•เตเด•เต เดฎเดพเด•เตเดฐเต‹เด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚ เด•เต‚เดŸเดพเดคเต† เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดฌเดฟเดธเดฟเดจเดธเต เดฒเต‹เดœเดฟเด•เต เดชเดฐเดฟเดฎเดฟเดคเดฟเด•เตพ เดชเดฐเดพเดœเดฏเดชเตเดชเต†เดŸเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ เด•เด‚เดชเตˆเตฝ เดธเดฎเดฏเดคเตเดคเต เดชเดฐเดพเดœเดฏเดชเตเดชเต†เดŸเดพเด‚.
  2. เด’เดฐเต เดกเตŠเดฎเต†เดฏเตโ€Œเตป-เด‰เดชเดฏเต‹เด•เตเดคเตƒ-เดธเต—เดนเตƒเดฆ เดฐเต€เดคเดฟเดฏเดฟเตฝ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเต† เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด’เดฐเต DSL เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเด‚.
  3. เด“เดŸเตเดŸเต‹เดฎเดพเดฑเตเดฑเดฟเด•เต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเตเดณเตเดณ เดกเตˆเดจเดพเดฎเดฟเด•เต เดฑเดฟเดธเต‹เดดเตเดธเต เดฎเดพเดจเต‡เดœเตเดฎเต†เดจเตเดฑเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดจเดฎเตเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดจเต‹เดกเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ เด•เตเดฐเดฎเต€เด•เดฐเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ (1) เดจเต‹เดกเตเด•เตพ เดšเต†เดฑเตเดคเดพเดฏเดฟ เดชเดฐเดฟเดทเตเด•เดฐเดฟเดšเตเดš เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดจเต‡เดŸเดฃเด‚; (2) เดชเตเดคเดฟเดฏ เดจเต‹เดกเตเด•เตพ เดตเดฟเดตเดฐเด™เตเด™เตพ เดฒเดญเดฟเด•เตเด•เดพเตป เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดฎเดพเดจเต‡เดœเตผ.

เดจเดจเตเดฆเดฟ

เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเดจเตเดฑเต† เดกเตเดฐเดพเดซเตเดฑเตเดฑเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดชเตเดฐเดšเต‹เดฆเดจเดพเดคเตเดฎเด•เดฎเดพเดฏ เดซเต€เดกเตโ€Œเดฌเดพเด•เตเด•เต เดจเตฝเด•เดฟเดฏเดคเดฟเดจเต, เด…เดคเต เด•เต‚เดŸเตเดคเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดพเตป เดŽเดจเตเดจเต† เดธเดนเดพเดฏเดฟเดšเตเดš เด†เตปเดกเตเดฐเดฟ เดธเดพเด•เตโ€Œเดธเต‹เดจเต‹เดตเต, เดชเดตเตฝ เดชเต‹เดชเต‹เดตเต, เด†เดจเตเดฑเตบ เดจเต†เดนเต‡เดตเต เดŽเดจเตเดจเดฟเดตเดฐเต‹เดŸเต เดจเดจเตเดฆเดฟ เดชเดฑเดฏเดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com