ู…ูˆุงุฒู†ุฉ ุงู„ุญู…ู„ ุงู„ุฏูŠู†ุงู…ูŠูƒูŠ ููŠ ู…ุฎุทุท ุงู„ุณุญุจ

ููŠ ุขุฎุฑ ู…ุดุงุฑูƒุฉ ู„ูŠ ุญูˆู„ ูƒูŠููŠุฉ ุนู…ู„ ุฌุงู…ุนูŠ ุณุฌู„ุงุช PostgreSQL ุŒ ุฐูƒุฑุช ุฃู† ุฃุญุฏ ุนูŠูˆุจ ู†ู…ูˆุฐุฌ ุงู„ุณุญุจ ู‡ูˆ ุงู„ุญุงุฌุฉ ุฅู„ู‰ ู…ูˆุงุฒู†ุฉ ุชุญู…ูŠู„ ุฏูŠู†ุงู…ูŠูƒูŠุฉ . ูˆู„ูƒู† ุฅุฐุง ู‚ู…ุช ุจุฐู„ูƒ ุจุนู†ุงูŠุฉ ุŒ ูุฅู† ุงู„ุนูŠุจ ูŠุชุญูˆู„ ุฅู„ู‰ ูุถูŠู„ุฉ ุŒ ูˆูŠุตุจุญ ุงู„ู†ุธุงู… ูƒูƒู„ ุฃูƒุซุฑ ู…ู‚ุงูˆู…ุฉ ู„ู„ุชุบูŠูŠุฑุงุช ููŠ ุชุฏูู‚ ุงู„ุจูŠุงู†ุงุช.





ุฏุนูˆู†ุง ู†ุฑู‰ ู…ุง ู‡ูŠ ุงู„ุญู„ูˆู„ ู„ู‡ุฐู‡ ุงู„ู…ุดูƒู„ุฉ.



ุชูˆุฒูŠุน ุงู„ุฃุดูŠุงุก "ุญุณุจ ุงู„ุณุนุฉ"



ู…ู† ุฃุฌู„ ุนุฏู… ุงู„ุฎูˆุถ ููŠ ุงู„ุชุฌุฑูŠุฏุงุช ุบูŠุฑ ุงู„ู…ุซูŠุฑุฉ ู„ู„ุงู‡ุชู…ุงู… ุŒ ุณู†ู†ุธุฑ ููŠ ุงู„ุฃู…ุฑ ุจุงุณุชุฎุฏุงู… ู…ุซุงู„ ู…ู‡ู…ุฉ ู…ุญุฏุฏุฉ - ุงู„ู…ุฑุงู‚ุจุฉ . ุฃู†ุง ู…ุชุฃูƒุฏ ู…ู† ุฃู†ูƒ ุณุชูƒูˆู† ู‚ุงุฏุฑู‹ุง ุนู„ู‰ ุฑุจุท ุงู„ุฃุณุงู„ูŠุจ ุงู„ู…ู‚ุชุฑุญุฉ ุจู…ู‡ุงู…ูƒ ุงู„ู…ุญุฏุฏุฉ ุจู†ูุณูƒ.



ูƒุงุฆู†ุงุช ุงู„ู…ุฑุงู‚ุจุฉ "ุงู„ู…ูƒุงูุฆุฉ"



ู…ุซุงู„ ุนู„ู‰ ุฐู„ูƒ ุฌุงู…ุนูŠ ุงู„ู…ู‚ุงูŠูŠุณ ุงู„ุฎุงุต ุจู†ุง ู„ู€ Zabbix ุŒ ุงู„ุฐูŠู† ูŠุดุชุฑูƒูˆู† ุชุงุฑูŠุฎูŠุงู‹ ููŠ ุจู†ูŠุฉ ู…ุดุชุฑูƒุฉ ู…ุน ุฌุงู…ุนูŠ ุณุฌู„ุงุช PostgreSQL. ููŠ ุงู„ูˆุงู‚ุน



ุŒ ูŠูˆู„ุฏ ูƒู„ ูƒุงุฆู† ู…ุฑุงู‚ุจุฉ (ู…ุถูŠู) ู„ู€ zabbix ุชู‚ุฑูŠุจู‹ุง ุจุดูƒู„ ู…ุณุชู‚ุฑ ู†ูุณ ู…ุฌู…ูˆุนุฉ ุงู„ู…ู‚ุงูŠูŠุณ ุจู†ูุณ ุงู„ุชุฑุฏุฏ ุทูˆุงู„ ุงู„ูˆู‚ุช:





ูƒู…ุง ุชุฑู‰ ููŠ ุงู„ุฑุณู… ุงู„ุจูŠุงู†ูŠ ุŒ ู„ุง ูŠุชุฌุงูˆุฒ ุงู„ูุฑู‚ ุจูŠู† ู‚ูŠู… ุงู„ุญุฏ ุงู„ุฃุฏู†ู‰ ูˆุงู„ุญุฏ ุงู„ุฃู‚ุตู‰ ู„ุนุฏุฏ ุงู„ู…ู‚ุงูŠูŠุณ ุงู„ุชูŠ ุชู… ุฅู†ุดุงุคู‡ุง 15ูช . ู„ุฐู„ูƒ ุŒ ูŠู…ูƒู†ู†ุง ุงุนุชุจุงุฑ ุฌู…ูŠุน ุงู„ูƒุงุฆู†ุงุช ู…ุชุณุงูˆูŠุฉ ููŠ ู†ูุณ "ุงู„ุจุจุบุงูˆุงุช" .



"ุงุฎุชู„ุงู„" ู‚ูˆูŠ ุจูŠู† ุงู„ุฃุดูŠุงุก



ุนู„ู‰ ุนูƒุณ ุงู„ู†ู…ูˆุฐุฌ ุงู„ุณุงุจู‚ ุŒ ูุฅู† ุงู„ู…ุถูŠูุงุช ุงู„ู…ุฑุงู‚ุจุฉ ุจุนูŠุฏุฉ ูƒู„ ุงู„ุจุนุฏ ุนู† ุงู„ุชุฌุงู†ุณ ุจุงู„ู†ุณุจุฉ ู„ู…ุฌู…ุนูŠ ุงู„ุณุฌู„ุงุช .



ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ูŠู…ูƒู† ู„ู…ุถูŠู ูˆุงุญุฏ ุฅู†ุดุงุก ู…ู„ูŠูˆู† ุฎุทุฉ ูŠูˆู…ูŠู‹ุง ููŠ ุงู„ุณุฌู„ ุŒ ูˆุนุดุฑุงุช ุงู„ุขู„ุงู ุฃุฎุฑู‰ ุŒ ูˆุจุนุถู‡ุง - ุญุชู‰ ุงู„ู‚ู„ูŠู„ ู…ู†ู‡ุง. ูˆุงู„ุฎุทุท ู†ูุณู‡ุง ู…ุฎุชู„ูุฉ ุชู…ุงู…ู‹ุง ู…ู† ุญูŠุซ ุงู„ุญุฌู… ูˆุงู„ุชุนู‚ูŠุฏ ูˆู…ู† ุญูŠุซ ุงู„ุชูˆุฒูŠุน ุนู„ู‰ ู…ุฏุงุฑ ุงู„ูˆู‚ุช ู…ู† ุงู„ูŠูˆู…. ู„ุฐู„ูƒ ุงุชุถุญ ุฃู† ุงู„ุญู…ู„ "ูŠู‡ุชุฒ" ุจู‚ูˆุฉ ููŠ ุจุนุถ ุงู„ุฃุญูŠุงู†:





ุญุณู†ู‹ุง ุŒ ู†ุธุฑู‹ุง ู„ุฃู† ุงู„ุญู…ู„ ูŠู…ูƒู† ุฃู† ูŠุชุบูŠุฑ ูƒุซูŠุฑู‹ุง ุŒ ูุฃู†ุช ุจุญุงุฌุฉ ุฅู„ู‰ ู…ุนุฑูุฉ ูƒูŠููŠุฉ ุฅุฏุงุฑุชู‡ ...



ู…ู†ุณู‚



ู†ุญู† ู†ูู‡ู… ุนู„ู‰ ุงู„ููˆุฑ ุฃู†ู†ุง ู†ุญุชุงุฌ ุจูˆุถูˆุญ ุฅู„ู‰ ุชูˆุณูŠุน ู†ุทุงู‚ ู†ุธุงู… ุงู„ุชุฌู…ูŠุน ุŒ ู†ุธุฑู‹ุง ู„ุฃู† ุนู‚ุฏุฉ ูˆุงุญุฏุฉ ู…ู†ูุตู„ุฉ ู…ุน ุงู„ุญู…ู„ ุงู„ูƒุงู…ู„ ุณุชุชูˆู‚ู ูŠูˆู…ู‹ุง ู…ุง ุนู† ุงู„ุชุฃู‚ู„ู…. ูˆู„ู‡ุฐุง ู†ุญุชุงุฌ ุฅู„ู‰ ู…ู†ุณู‚ - ุดุฎุต ูŠุฏูŠุฑ ุญุฏูŠู‚ุฉ ุงู„ุญูŠูˆุงู†ุงุช ุจุฃูƒู…ู„ู‡ุง.



ุงุชุถุญ ุฃู† ุดูŠุฆู‹ุง ู…ุซู„ ู‡ุฐุง:





ูƒู„ ุนุงู…ู„ ุญู…ู„ู‡ "ููŠ ุงู„ุจุจุบุงูˆุงุช" ูˆูƒู†ุณุจุฉ ู…ุฆูˆูŠุฉ ู…ู† ูˆุญุฏุฉ ุงู„ู…ุนุงู„ุฌุฉ ุงู„ู…ุฑูƒุฒูŠุฉ ุจุดูƒู„ ุฏูˆุฑูŠ ูŠุนูŠุฏ ุชุนูŠูŠู† ุงู„ุณูŠุฏ ุŒ ู‡ุคู„ุงุก - ุฅู„ู‰ ุงู„ู…ุฌู…ุน. ูˆูŠู…ูƒู†ู‡ ุŒ ุนู„ู‰ ุฃุณุงุณ ู‡ุฐู‡ ุงู„ุจูŠุงู†ุงุช ุŒ ุฅุตุฏุงุฑ ุฃู…ุฑ ู…ุซู„ "ูˆุถุน ู…ุถูŠู ุฌุฏูŠุฏ ุนู„ู‰ ุนุงู…ู„ ุบูŠุฑ ู…ุญู…ู„ ุฑู‚ู… 4" ุฃูˆ "ูŠุฌุจ ู†ู‚ู„ ุงู„ู…ุถูŠู ุฃ ุฅู„ู‰ ุงู„ุนุงู…ู„ ุฑู‚ู… 3" .



ู‡ู†ุง ุชุญุชุงุฌ ุฃูŠุถู‹ุง ุฅู„ู‰ ุฃู† ุชุชุฐูƒุฑ ุฃู†ู‡ ุŒ ุนู„ู‰ ุนูƒุณ ู…ุฑุงู‚ุจุฉ ุงู„ูƒุงุฆู†ุงุช ุŒ ูุฅู† ุงู„ู…ุฌู…ุนุงุช ุฃู†ูุณู‡ู… ู„ูŠุณ ู„ุฏูŠู‡ู… "ุทุงู‚ุฉ" ู…ุชุณุงูˆูŠุฉ ุนู„ู‰ ุงู„ุฅุทู„ุงู‚ - ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ู‚ุฏ ูŠูƒูˆู† ู„ุฏูŠูƒ 8 ู†ูˆู‰ ู„ูˆุญุฏุฉ ุงู„ู…ุนุงู„ุฌุฉ ุงู„ู…ุฑูƒุฒูŠุฉ ููŠ ุฃุญุฏู‡ุง ุŒ ูˆู…ู† ู†ุงุญูŠุฉ ุฃุฎุฑู‰ - 4 ูู‚ุท ุŒ ูˆุญุชู‰ ุชุฑุฏุฏ ุฃู‚ู„. ูˆุฅุฐุง ู‚ู…ุช ุจุชุญู…ูŠู„ู‡ู… ุจุงู„ู…ู‡ุงู… "ุจุงู„ุชุณุงูˆูŠ" ุŒ ูุณูŠุจุฏุฃ ุงู„ุซุงู†ูŠ ููŠ "ุงู„ุตู…ุช" ุŒ ูˆุณูŠูƒูˆู† ุงู„ุฃูˆู„ ุฎุงู…ู„ุงู‹. ูˆู…ู† ู‡ู†ุง ูŠุชุจุน ...



ู…ู‡ุงู… ุงู„ู…ู†ุณู‚



ููŠ ุงู„ูˆุงู‚ุน ุŒ ู‡ู†ุงูƒ ู…ู‡ู…ุฉ ูˆุงุญุฏุฉ ูู‚ุท - ู„ุถู…ุงู† ุงู„ุชูˆุฒูŠุน ุงู„ู…ุชุณุงูˆูŠ ู„ู„ุญู…ู„ ุจุงู„ูƒุงู…ู„ (ููŠ ูˆุญุฏุฉ ุงู„ู…ุนุงู„ุฌุฉ ุงู„ู…ุฑูƒุฒูŠุฉูช) ุจูŠู† ุฌู…ูŠุน ุงู„ุนู…ุงู„ ุงู„ู…ุชุงุญูŠู†. ุฅุฐุง ุชู…ูƒู†ุง ู…ู† ุญู„ู‡ุง ุชู…ุงู…ู‹ุง ุŒ ูุณูŠุชู… ุชู„ู‚ุงุฆูŠู‹ุง ุงู„ุญุตูˆู„ ุนู„ู‰ ุชูˆุญูŠุฏ ุชูˆุฒูŠุน ุญู…ู„ ูˆุญุฏุฉ ุงู„ู…ุนุงู„ุฌุฉ ุงู„ู…ุฑูƒุฒูŠุฉ ุนู„ู‰ ุงู„ู…ุฌู…ุนุงุช.



ู…ู† ุงู„ูˆุงุถุญ ุฃู†ู‡ ุญุชู‰ ู„ูˆ ูƒุงู† ูƒู„ ูƒุงุฆู† ูŠูˆู„ุฏ ู†ูุณ ุงู„ุญู…ู„ ุŒ ุจู…ุฑูˆุฑ ุงู„ูˆู‚ุช ุŒ ู‚ุฏ "ูŠู…ูˆุช" ุจุนุถู‡ุง ุŒ ูˆุชุธู‡ุฑ ุจุนุถ ุงู„ุนู†ุงุตุฑ ุงู„ุฌุฏูŠุฏุฉ. ู„ุฐู„ูƒ ุŒ ูŠุฌุจ ุฃู† ุชูƒูˆู† ู‚ุงุฏุฑู‹ุง ุนู„ู‰ ุฅุฏุงุฑุฉ ุงู„ู…ูˆู‚ู ุจุงู„ูƒุงู…ู„ ุจุดูƒู„ ุฏูŠู†ุงู…ูŠูƒูŠ ูˆุงู„ุญูุงุธ ุนู„ู‰ ุงู„ุชูˆุงุฒู† ุจุงุณุชู…ุฑุงุฑ .



ุงู„ุชูˆุงุฒู† ุงู„ุฏูŠู†ุงู…ูŠูƒูŠ



ูŠู…ูƒู†ู†ุง ุญู„ ู…ุดูƒู„ุฉ ุจุณูŠุทุฉ (zabbix) ุจุดูƒู„ ุชุงูู‡:



  • ู†ุญุณุจ ุงู„ุณุนุฉ ุงู„ู†ุณุจูŠุฉ ู„ูƒู„ ุฌุงู…ุน "ููŠ ุงู„ู…ู‡ุงู…"
  • ุชู‚ุณูŠู… ุฌู…ูŠุน ุงู„ู…ู‡ุงู… ุจูŠู†ู‡ู…ุง ุจุงู„ุชู†ุงุณุจ
  • ู†ูˆุฒุน ุจุงู„ุชุณุงูˆูŠ ุจูŠู† ุงู„ุนู…ุงู„






ูˆู„ูƒู† ู…ุงุฐุง ุชูุนู„ ููŠ ุญุงู„ุฉ ูˆุฌูˆุฏ ูƒุงุฆู†ุงุช "ุบูŠุฑ ู…ุชูƒุงูุฆุฉ ุจุดุฏุฉ" ุŒ ู…ุซู„ ุฌุงู…ุน ุงู„ุณุฌู„ุงุชุŸ ..



ุชู‚ูŠูŠู… ุงู„ุชูˆุญูŠุฏ



ุฃุนู„ุงู‡ ุŒ ุงุณุชุฎุฏู…ู†ุง ู…ุตุทู„ุญ " ุงู„ุชูˆุฒูŠุน ุงู„ู…ู†ุชุธู… ุงู„ุฃู‚ุตู‰ " ุทูˆุงู„ ุงู„ูˆู‚ุช ุŒ ูˆู„ูƒู† ูƒูŠู ูŠู…ูƒู† ู„ู„ู…ุฑุก ุฃู† ูŠู‚ุงุฑู† ุฑุณู…ูŠู‹ุง ุจูŠู† ุชูˆุฒูŠุนูŠู† ุŒ ุฃูŠู‡ู…ุง "ุฃูƒุซุฑ ุงู†ุชุธุงู…ู‹ุง"ุŸ



ู„ุชู‚ูŠูŠู… ุงู„ุชูˆุญูŠุฏ ููŠ ุงู„ุฑูŠุงุถูŠุงุช ุŒ ูƒุงู† ู‡ู†ุงูƒ ู…ู†ุฐ ูุชุฑุฉ ุทูˆูŠู„ุฉ ุดูŠุก ู…ุซู„ ุงู„ุงู†ุญุฑุงู ุงู„ู…ุนูŠุงุฑูŠ . ู…ู† ู‡ูˆ ูƒุณูˆู„ ู„ู„ู‚ุฑุงุกุฉ:

S[X] = sqrt( sum[ ( x - avg[X] ) ^ 2 of X ] / count[X] )


ู†ุธุฑู‹ุง ู„ุฃู† ุนุฏุฏ ุงู„ุนู…ุงู„ ููŠ ูƒู„ ู…ู† ุงู„ู…ุฌู…ุนูŠู† ูŠู…ูƒู† ุฃู† ูŠุฎุชู„ู ุฃูŠุถู‹ุง ุจุงู„ู†ุณุจุฉ ู„ู†ุง ุŒ ูŠุฌุจ ุชุณูˆูŠุฉ ุงู†ุชุดุงุฑ ุงู„ุญู…ู„ ู„ูŠุณ ูู‚ุท ุจูŠู†ู‡ู… ุŒ ูˆู„ูƒู† ุฃูŠุถู‹ุง ุจูŠู† ุงู„ู…ุฌู…ุนูŠู† ูƒูƒู„ .



ุฃูŠ ุฃู† ุชูˆุฒูŠุน ุงู„ุญู…ู„ ุนู„ู‰ ุนู…ุงู„ ุงู„ู…ุฌู…ุนูŠู† [ (10%, 10%, 10%, 10%, 10%, 10%) ; (20%) ]ู„ูŠุณ ุฌูŠุฏู‹ุง ุฃูŠุถู‹ุง ุŒ ุญูŠุซ ุชุจูŠู† ุฃู† ุงู„ุฃูˆู„ ู‡ูˆ 10 ูช ุŒ ูˆุงู„ุซุงู†ูŠ - 20 ูช ุŒ ูˆู‡ูˆ ุถุนู ุงู„ู†ุณุจุฉ ุงู„ู†ุณุจูŠุฉ.



ู„ุฐู„ูƒ ุŒ ู†ู‚ุฏู… ู…ุณุงูุฉ ู…ุชุฑูŠุฉ ูˆุงุญุฏุฉ ู„ุชู‚ุฏูŠุฑ ุนุงู… ู„ู€ "ุงู„ุชูˆุญูŠุฏ":

d([%wrk], [%col]) = sqrt( S[%wrk] ^ 2 + S[%col] ^ 2 )
ูˆู‡ุฐุง ูŠุนู†ูŠ ุฃู† ู‚ูŠู… ุงู†ุญุฑุงู ุงู„ุฌุฐุฑ ุงู„ุชุฑุจูŠุนูŠ ู„ู…ุฌู…ูˆุนุงุช ู…ู† ู‚ูŠู… ุงู„ุญู…ู„ ู„ุฌู…ูŠุน ุงู„ุนู…ุงู„ ูˆู„ุฌู…ูŠุน ุงู„ุฌุงู…ุนูŠู† ูŠูู†ุธุฑ ุฅู„ูŠู‡ุง ุนู„ู‰ ุฃู†ู‡ุง ุฅุญุฏุงุซูŠุงุช ู„ู…ุชุฌู‡ ุŒ ุณู†ุญุงูˆู„ ุชู‚ู„ูŠู„ ุทูˆู„ู‡.



ุงู„ู†ู…ุฐุฌุฉ



ุฅุฐุง ูƒุงู† ู„ุฏูŠู†ุง ุงู„ู‚ู„ูŠู„ ู…ู† ุงู„ุฃุดูŠุงุก ุŒ ููŠู…ูƒู†ู†ุง ุญูŠู†ุฆุฐู "ู†ุดุฑ" ุงู„ู‚ูˆุฉ ุงู„ุบุงุดู…ุฉ ุจูŠู† ุงู„ุนู…ุงู„ ุจุญูŠุซ ูŠูƒูˆู† ุงู„ู…ู‚ูŠุงุณ ููŠ ุญุฏู‡ ุงู„ุฃุฏู†ู‰ . ู„ูƒู† ู„ุฏูŠู†ุง ุขู„ุงู ุงู„ุฃุดูŠุงุก ุŒ ู„ุฐุง ูุฅู† ู‡ุฐู‡ ุงู„ุทุฑูŠู‚ุฉ ู„ู† ุชู†ุฌุญ. ู„ูƒู†ู†ุง ู†ุนู„ู… ุฃู† ุงู„ู…ุฌู…ุน ู‚ุงุฏุฑ ุนู„ู‰ "ู†ู‚ู„" ูƒุงุฆู† ู…ู† ุนุงู…ู„ ุฅู„ู‰ ุขุฎุฑ - ูู„ู†ุนู…ู„ ุนู„ู‰ ุชุตู…ูŠู… ู‡ุฐุง ุงู„ุฎูŠุงุฑ ุจุงุณุชุฎุฏุงู… ุทุฑูŠู‚ุฉ ุงู„ุชุฏุฑุฌ ุงู„ู„ูˆู†ูŠ .



ู…ู† ุงู„ูˆุงุถุญ ุฃู†ู†ุง ู‚ุฏ ู„ุง ู†ุฌุฏ ุงู„ุญุฏ ุงู„ุฃุฏู†ู‰ "ุงู„ู…ุซุงู„ูŠ" ู„ู„ู…ู‚ูŠุงุณ ุŒ ู„ูƒู† ุงู„ู…ู‚ูŠุงุณ ุงู„ู…ุญู„ูŠ ู…ุคูƒุฏ. ูˆูŠู…ูƒู† ุฃู† ูŠุชุบูŠุฑ ุงู„ุญู…ู„ ู†ูุณู‡ ูƒุซูŠุฑู‹ุง ุจู…ุฑูˆุฑ ุงู„ูˆู‚ุช ุจุญูŠุซ ู„ุง ุชูˆุฌุฏ ุญุงุฌุฉ ู…ุทู„ู‚ู‹ุง ู„ู„ุจุญุซ ุนู† "ู…ุซุงู„ูŠ" ู„ูุชุฑุฉ ุบูŠุฑ ู…ุญุฏูˆุฏุฉ .



ุจู…ุนู†ู‰ ุŒ ุนู„ูŠู†ุง ูู‚ุท ุชุญุฏูŠุฏ ุฃูŠ ูƒุงุฆู† ูˆุฅู„ู‰ ุฃูŠ ุนุงู…ู„ ูŠูƒูˆู† "ุงู„ุงู†ุชู‚ุงู„" ุฃูƒุซุฑ ูุนุงู„ูŠุฉ. ูˆุฏุนู†ุง ู†ุฌุนู„ู‡ุง ู†ู…ูˆุฐุฌู‹ุง ุชุงูู‡ู‹ุง ูˆุดุงู…ู„ู‹ุง:



  • ( host, worker)
  • host worker' ยซยป

    ยซยป .
  • ยซ ยป
  • d ยซยป


ู†ุตุทู ุฌู…ูŠุน ุงู„ุฃุฒูˆุงุฌ ุจุชุฑุชูŠุจ ุชุตุงุนุฏูŠ ู„ู„ู…ู‚ูŠุงุณ . ู…ู† ุงู„ู†ุงุญูŠุฉ ุงู„ู…ุซุงู„ูŠุฉ ุŒ ูŠุฌุจ ุนู„ูŠู†ุง ุฏุงุฆู…ู‹ุง ุชู†ููŠุฐ ู†ู‚ู„ ุงู„ุฒูˆุฌ ุงู„ุฃูˆู„ ู„ุฃู†ู‡ ูŠุนุทูŠ ุงู„ุญุฏ ุงู„ุฃุฏู†ู‰ ู…ู† ู…ู‚ูŠุงุณ ุงู„ู‡ุฏู. ู„ุณูˆุก ุงู„ุญุธ ุŒ ููŠ ุงู„ูˆุงู‚ุน ุŒ ูุฅู† ุนู…ู„ูŠุฉ ุงู„ู†ู‚ู„ ู†ูุณู‡ุง "ุชูƒู„ู ุงู„ู…ูˆุงุฑุฏ" ุŒ ู„ุฐุง ู„ุง ูŠุฌุจ ุชุดุบูŠู„ู‡ุง ู„ู†ูุณ ุงู„ูƒุงุฆู† ุฃูƒุซุฑ ู…ู† ูุชุฑุฉ "ุชุจุฑูŠุฏ" ู…ุนูŠู†ุฉ .



ููŠ ู‡ุฐู‡ ุงู„ุญุงู„ุฉ ุŒ ูŠู…ูƒู†ู†ุง ุฃู† ู†ุฃุฎุฐ ุงู„ุฒูˆุฌ ุงู„ุซุงู†ูŠ ูˆุงู„ุซุงู„ุซ ... ุจุชุฑุชูŠุจ - ุฅุฐุง ูƒุงู† ุงู„ู…ู‚ูŠุงุณ ุงู„ู‡ุฏู ูู‚ุท ุณูŠู†ุฎูุถ โ€‹โ€‹ุจุงู„ู†ุณุจุฉ ุฅู„ู‰ ุงู„ู‚ูŠู…ุฉ ุงู„ุญุงู„ูŠุฉ.



ุฅุฐุง ู„ู… ูŠูƒู† ู‡ู†ุงูƒ ู…ูƒุงู† ู„ู„ุชู‚ู„ูŠู„ - ูู‡ู†ุง ู‡ูˆ ุงู„ุญุฏ ุงู„ุฃุฏู†ู‰ ุงู„ู…ุญู„ูŠ!



ู…ุซุงู„ ููŠ ุงู„ุตูˆุฑุฉ:





ู„ูŠุณ ู…ู† ุงู„ุถุฑูˆุฑูŠ ุนู„ู‰ ุงู„ุฅุทู„ุงู‚ ุจุฏุก ุงู„ุชูƒุฑุงุฑุงุช "ุนู„ู‰ ุทูˆู„ ุงู„ุทุฑูŠู‚". ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒ ูŠู…ูƒู†ูƒ ุฅุฌุฑุงุก ุชุญู„ูŠู„ ู…ุชูˆุณุท โ€‹โ€‹ู„ู„ุญู…ู„ ุนู„ู‰ ู…ุฏุงุฑ ูุชุฑุฉ ุฒู…ู†ูŠุฉ ุชุจู„ุบ ุฏู‚ูŠู‚ุฉ ูˆุงุญุฏุฉ ุŒ ูˆุนู†ุฏ ุงูƒุชู…ุงู„ู‡ ุŒ ู‚ู… ุจุฅุฌุฑุงุก ุนู…ู„ูŠุฉ ู†ู‚ู„ ูˆุงุญุฏุฉ.



ุงู„ุชุญุณูŠู†ุงุช ุงู„ุฏู‚ูŠู‚ุฉ



ู…ู† ุงู„ูˆุงุถุญ ุฃู† ุงู„ุฎูˆุงุฑุฒู…ูŠุฉ ุฐุงุช ุงู„ุชุนู‚ูŠุฏ T() x W()ู„ูŠุณุช ุฌูŠุฏุฉ ุฌุฏู‹ุง. ูˆู„ูƒู† ูŠุฌุจ ุฃู„ุง ุชู†ุณู‰ ุชุทุจูŠู‚ ุจุนุถ ุงู„ุชุญุณูŠู†ุงุช ุงู„ูˆุงุถุญุฉ ุจุดูƒู„ ุฃูˆ ุจุขุฎุฑ ูˆุงู„ุชูŠ ูŠู…ูƒู†ู‡ุง ุชุณุฑูŠุนู‡ุง ููŠ ุจุนุถ ุงู„ุฃุญูŠุงู†.



ุจุฏูˆู† "ุจุจุบุงูˆุงุช"



ุฅุฐุง ุฃู†ุชุฌ ูƒุงุฆู† / ู…ู‡ู…ุฉ / ู…ุถูŠู ุญู…ูˆู„ุฉ "0 ู‚ุทุนุฉ" ุนู„ู‰ ุงู„ูุงุตู„ ุงู„ุฒู…ู†ูŠ ุงู„ู…ู‚ุงุณ ุŒ ูู„ุง ูŠู…ูƒู† ู†ู‚ู„ู‡ ุฅู„ู‰ ู…ูƒุงู† ู…ุง - ูˆู„ุง ูŠุญุชุงุฌ ุญุชู‰ ุฅู„ู‰ ุงู„ู†ุธุฑ ููŠู‡ ูˆุชุญู„ูŠู„ู‡.



ุงู„ุชุญูˆูŠู„ ุงู„ุฐุงุชูŠ



ุนู†ุฏ ุฅู†ุดุงุก ุฃุฒูˆุงุฌ ุŒ ู„ูŠุณุช ู‡ู†ุงูƒ ุญุงุฌุฉ ู„ุชู‚ูŠูŠู… ูƒูุงุกุฉ ู†ู‚ู„ ูƒุงุฆู† ุฅู„ู‰ ู†ูุณ ุงู„ุนุงู…ู„ ุŒ ุญูŠุซ ูŠูˆุฌุฏ ุจุงู„ูุนู„ . ุจุนุฏ ูƒู„ ุดูŠุก ุŒ ุณูŠูƒูˆู† ุจุงู„ูุนู„ T x (W - 1)- ุชุงูู‡ ุŒ ู„ูƒู†ู‡ ู„ุทูŠู!



ุญู…ูˆู„ุฉ ู„ุง ูŠู…ูƒู† ุชู…ูŠูŠุฒู‡ุง



ู†ุธุฑู‹ุง ู„ุฃู†ู†ุง ู†ู‚ูˆู… ุจู†ู…ุฐุฌุฉ ู†ู‚ู„ ุงู„ุญู…ู„ ุŒ ูˆุงู„ูƒุงุฆู† ู…ุฌุฑุฏ ุฃุฏุงุฉ ุŒ ูู„ุง ูุงุฆุฏุฉ ู…ู† ู…ุญุงูˆู„ุฉ ู†ู‚ู„ ูˆุญุฏุฉ ุงู„ู…ุนุงู„ุฌุฉ ุงู„ู…ุฑูƒุฒูŠุฉูช "ุงู„ู…ุชุทุงุจู‚ุฉ" - ุณุชุธู„ ู‚ูŠู… ุงู„ู…ู‚ุงูŠูŠุณ ูƒู…ุง ู‡ูŠ ุชู…ุงู…ู‹ุง ุŒ ูˆุฅู† ูƒุงู† ุฐู„ูƒ ู„ุชูˆุฒูŠุน ู…ุฎุชู„ู ู„ู„ูƒุงุฆู†ุงุช.



ุฃูŠ ุฃู†ู‡ ูŠูƒููŠ ุชู‚ูŠูŠู… ู†ู…ูˆุฐุฌ ูˆุงุญุฏ ู„ู„ู…ุฌู…ูˆุนุฉ (wrkSrc ุŒ wrkDst ุŒูช cpu) . ุญุณู†ู‹ุง ุŒ ูŠู…ูƒู†ูƒ ุงุนุชุจุงุฑ "ู…ุชุณุงูˆูŠุฉ" ุŒ ุนู„ู‰ ุณุจูŠู„ ุงู„ู…ุซุงู„ ุŒูช ู‚ูŠู… ูˆุญุฏุฉ ุงู„ู…ุนุงู„ุฌุฉ ุงู„ู…ุฑูƒุฒูŠุฉ ุงู„ุชูŠ ุชุทุงุจู‚ ุญุชู‰ ู…ู†ุฒู„ุฉ ุนุดุฑูŠุฉ ูˆุงุญุฏุฉ.



ุชุทุจูŠู‚ ู…ุซุงู„ JavaScript
var col = {
  'c1' : {
    'wrk' : {
      'w1' : {
        'hst' : {
          'h1' : 5
        , 'h2' : 1
        , 'h3' : 1
        }
      , 'cpu' : 80.0
      }
    , 'w2' : {
        'hst' : {
          'h4' : 1
        , 'h5' : 1
        , 'h6' : 1
        }
      , 'cpu' : 20.0
      }
    }
  }
, 'c2' : {
    'wrk' : {
      'w1' : {
        'hst' : {
          'h7' : 1
        , 'h8' : 2
        }
      , 'cpu' : 100.0
      }
    , 'w2' : {
        'hst' : {
          'h9' : 1
        , 'hA' : 1
        , 'hB' : 1
        }
      , 'cpu' : 50.0
      }
    }
  }
};

//       ""
let $iv = (obj, fn) => Object.values(obj).forEach(fn);
let $mv = (obj, fn) => Object.values(obj).map(fn);

// initial reparse
for (const [cid, c] of Object.entries(col)) {
  $iv(c.wrk, w => {
    w.hst = Object.keys(w.hst).reduce((rv, hid) => {
      if (typeof w.hst[hid] == 'object') {
        rv[hid] = w.hst[hid];
        return rv;
      }
      //     ,   
      if (w.hst[hid]) {
        rv[hid] = {'qty' : w.hst[hid]};
      }
      return rv;
    }, {});
  });
  c.wrk = Object.keys(c.wrk).reduce((rv, wid) => {
    // ID    -
    rv[cid + ':' + wid] = c.wrk[wid];
    return rv;
  }, {});
}

//  
let S = col => {
  let wsum = 0
    , wavg = 0
    , wqty = 0
    , csum = 0
    , cavg = 0
    , cqty = 0;

  $iv(col, c => {
    $iv(c.wrk, w => {
      wsum += w.cpu;
      wqty++;
    });
    csum += c.cpu;
    cqty++;
  });
  wavg = wsum/wqty;
  wsum = 0;
  cavg = csum/cqty;
  csum = 0;
  $iv(col, c => {
    $iv(c.wrk, w => {
      wsum += (w.cpu - wavg) ** 2;
    });
    csum += (c.cpu - cavg) ** 2;
  });
  return [Math.sqrt(wsum/wqty), Math.sqrt(csum/cqty)];
};

// -
let distS = S => Math.sqrt(S[0] ** 2 + S[1] ** 2);

//      
let iterReOrder = col => {
  let qty = 0
    , max = 0;

  $iv(col, c => {
    c.qty = 0;
    c.cpu = 0;
    $iv(c.wrk, w => {
      w.qty = 0;
      $iv(w.hst, h => {
        w.qty += h.qty;
      });
      w.max = w.qty * (100/w.cpu);
      c.qty += w.qty;
      c.cpu += w.cpu;
    });
    c.cpu = c.cpu/Object.keys(c.wrk).length;
    c.max = c.qty * (100/c.cpu);
    qty += c.qty;
    max += c.max;
  });

  $iv(col, c => {
    c.nrm = c.max/max;
    $iv(c.wrk, w => {
      $iv(w.hst, h => {
        h.cpu = h.qty/w.qty * w.cpu;
        h.nrm = h.cpu * c.nrm;
      });
    });
  });

  // ""  
  console.log(S(col), distS(S(col)));

  //     
  let wrk = {};
  let hst = {};
  for (const [cid, c] of Object.entries(col)) {
    for (const [wid, w] of Object.entries(c.wrk)) {
      wrk[wid] = {
        wid
      , cid
      , 'wrk' : w
      , 'col' : c
      };
      for (const [hid, h] of Object.entries(w.hst)) {
        hst[hid] = {
          hid
        , wid
        , cid
        , 'hst' : h
        , 'wrk' : w
        , 'col' : c
        };
      }
    }
  }

  //      worker
  let move = (col, hid, wid) => {
    let w = wrk[wid]
      , h = hst[hid];

    let wsrc = col[h.cid].wrk[h.wid]
      , wdst = col[w.cid].wrk[w.wid];

    wsrc.cpu -= h.hst.cpu;
    wsrc.qty -= h.hst.qty;
    wdst.qty += h.hst.qty;
    //      ""   CPU
    if (h.cid != w.cid) {
      let csrc = col[h.cid]
        , cdst = col[w.cid];
      csrc.qty -= h.hst.qty;
      csrc.cpu -= h.hst.cpu/Object.keys(csrc.wrk).length;
      wsrc.hst[hid].cpu = h.hst.cpu * csrc.nrm/cdst.nrm;
      cdst.qty += h.hst.qty;
      cdst.cpu += h.hst.cpu/Object.keys(cdst.wrk).length;
    }
    wdst.cpu += wsrc.hst[hid].cpu;
    wdst.hst[hid] = wsrc.hst[hid];
    delete wsrc.hst[hid];
  };

  //       (host, worker)
  let moveCheck = (orig, hid, wid) => {
    let w = wrk[wid]
      , h = hst[hid];

    //    -   
    if (h.wid == w.wid) {
      return;
    }

    let col = JSON.parse(JSON.stringify(orig));
    move(col, hid, wid);

    return S(col);
  };

  //     (hsrc,hdst,%cpu)
  let checked = {};

  //     (  ->   )
  let moveRanker = col => {
    let currS = S(col);
    let order = [];

    for (hid in hst) {
      for (wid in wrk) {
        //          (   0.1%) ""    
        let widsrc = hst[hid].wid;
        let idx = widsrc + '|' + wid + '|' + hst[hid].hst.cpu.toFixed(1);
        if (idx in checked) {
          continue;
        }
        
        let _S = moveCheck(col, hid, wid);
        if (_S === undefined) {
          _S = currS;
        }
        checked[idx] = {
          hid
        , wid
        , S : _S
        };
        order.push(checked[idx]);
      }
    }
    order.sort((x, y) => distS(x.S) - distS(y.S));
    return order;
  };

  let currS = S(col);
  let order = moveRanker(col);

  let opt = order[0];
  console.log('best move', opt);

  //  
  if (distS(opt.S) < distS(currS)) {
    console.log('move!', opt.hid, opt.wid);
    move(col, opt.hid, opt.wid);
    console.log('after move', JSON.parse(JSON.stringify(col)));
    return true;
  }
  else {
    console.log('none!');
  }
  return false;
};

//   - 
while(iterReOrder(col));


ู†ุชูŠุฌุฉ ู„ุฐู„ูƒ ุŒ ูŠุชู… ุชูˆุฒูŠุน ุงู„ุญู…ู„ ุนู„ู‰ ุฎุฒุงู†ุงุชู†ุง ุจู†ูุณ ุงู„ุทุฑูŠู‚ุฉ ุชู‚ุฑูŠุจู‹ุง ููŠ ูƒู„ ู„ุญุธุฉ ุฒู…ู†ูŠุฉ ุŒ ู…ู…ุง ูŠุคุฏูŠ ุฅู„ู‰ ุชุณูˆูŠุฉ ุงู„ู‚ู…ู… ุงู„ู†ุงุดุฆุฉ ุนู„ู‰ ุงู„ููˆุฑ:






All Articles