Lorawan-stack: ๊ธฐ๊ธฐ ๋งค์นญ ์ตœ์ ํ™”

์— ๋งŒ๋“  2020๋…„ 06์›” 05์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: TheThingsNetwork/lorawan-stack

์š”์•ฝ

๋„คํŠธ์›Œํฌ ์„œ๋ฒ„์—์„œ ์žฅ์น˜ ๋งค์นญ ์ตœ์ ํ™”

์™œ ์ด๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

Redis I/O์˜ ๊ฒฝ์šฐ DevAddr ์žฌ์‚ฌ์šฉ์„ ๋Š˜๋ฆฌ๊ณ  DevAddr ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆด ๋•Œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ ์ „๋ฐ˜์ ์ธ ์ปดํ“จํŒ… ์„ฑ๋Šฅ.

์ด๋ฏธ ๊ฑฐ๊ธฐ์— ๋ฌด์—‡์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ง€๊ธˆ ๋ฌด์—‡์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ˜„์žฌ NS๋Š” DevAddr์— ์˜ํ•ด ์žฅ์น˜ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜๊ณ  proto๋ฅผ ๋””์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. protos๋Š” mac ์ƒํƒœ์™€ ์ตœ๊ทผ ์—…๋งํฌ ๋ฐ ๋‹ค์šด๋งํฌ ๋ฉ”์‹œ์ง€๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ค‘๋ณต DevAddr์˜ ๋งŽ์€ protos(์ˆ˜๋ฐฑ)๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—†์–ด์ง„ ๋ฌผ๊ฑด ์žˆ์–ด์š”? ๋ญ๋ฅผ๋ณด๊ณ  ์‹ถ์œผ์„ธ์š”?

์ผ์น˜ํ•˜๋Š” ์žฅ์น˜๋ฅผ ๋กœ๋“œํ•˜๊ธฐ ์ „์— UID๋กœ ์žฅ์น˜์— ๋Œ€ํ•œ ์—…๋งํฌ๋ฅผ ์ผ์น˜์‹œํ‚ค๊ธฐ ์œ„ํ•ด Redis์—์„œ ๊ตฌ์ฒดํ™”๋œ ๋ณด๊ธฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ์ œ์•ˆํ•ฉ๋‹ˆ๊นŒ?

์ „์šฉ ํ‚ค(๊ธฐ๋ณธ์ ์œผ๋กœ DevAddr, FCnt, NwkSIntKeys ๋ฐ UID)์— ์ผ์น˜๋ฅผ ์œ„ํ•œ ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ •๋ ฌ๋œ ์ง‘ํ•ฉ ๋ฐ/๋˜๋Š” ํ•ด์‹œ ๋งต์€ FCnt์— ์˜ํ•œ Redis ์ •๋ ฌ ๋ฐ ์ฟผ๋ฆฌ ์‹œ์ž‘, ๋ฌด๊ฒฐ์„ฑ ํ‚ค ๋ฐ UID ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฏ€๋กœ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ ์—…๋งํฌ ๋ฐ ๊ฐ€์ž… ์ˆ˜๋ฝ์—์„œ ์ด ๊ตฌ์ฒดํ™”๋œ ๋ณด๊ธฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด ๋งค์นญ ์ฒด๊ณ„๋กœ ๋Œ€์ฒดํ•˜์—ฌ ๋กค๋ง ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ์ œ์•ˆํ•ฉ๋‹ˆ๊นŒ?

ํ…Œ์ŠคํŠธ์—์„œ Redis ํ‚ค์™€ ํ•ด๋‹น ๊ฐ’์„ ์ž ์žฌ์ ์œผ๋กœ ์–ด์„ค์…˜ํ•˜๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ.

์ด ์ž‘์—…์„ ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜๊ณ  Pull Request๋ฅผ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฒ€ํ†  ๊ฐ€๋Šฅ

network server performance in progress scalability

๋ชจ๋“  5 ๋Œ“๊ธ€

๋” ๋‚˜์€ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐ„์„ ๋งŽ์ด ์ฐจ์ง€ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ”„๋กœํ† ์Šค์—์„œ ๋ถ„๋ฆฌํ•˜๊ณ  ๋ณ„๋„๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: recent_uplinks , recent_downlinks ๋“ฑ, ๋งˆ์ƒฌ๋ง๋œ ํ”„๋กœํ† ์Šค ๋Œ€์‹  ๋ชฉ๋ก์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๋” ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์‹ค์ œ๋กœ ๊ธฐ์กด ๋ฉ”์‹œ์ง€๋ฅผ ์ฟผ๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ ์ƒˆ ๋ฉ”์‹œ์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํ›จ์”ฌ ํšจ์œจ์ ์ด์ง€๋งŒ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ์‹œ์ž‘ํ•ด์„œ ๊ฑฐ๊ธฐ์—์„œ ๊ฐ€๋ด…์‹œ๋‹ค.
ํ•„๋“œ ๋งˆ์Šคํฌ๊ฐ€ ์žˆ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ proto ๋ถ„ํ• ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ณ  Redis ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ตฌํ˜„์—์„œ ์™„์ „ํžˆ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ œ์•ˆ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ns:devices:uid:foo:bar:recent_uplinks
  • ns:devices:uid:foo:bar:recent_downlinks
  • ns:devices:uid:foo:bar:mac_state:recent_uplinks
  • ns:devices:uid:foo:bar:mac_state:recent_downlinks
  • ns:devices:uid:foo:bar:pending_mac_state:recent_uplinks
  • ns:devices:uid:foo:bar:pending_mac_state:recent_downlinks
    ...
  • ns:devices:uid:foo:bar - ๋‚˜๋จธ์ง€ ํ”„๋กœํ† ํƒ€์ž…

์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํ•„๋“œ๊ฐ€ ์ด๋ฏธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์ž๋™์œผ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์ƒํƒœ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋‹ค์Œ ์ฃผ ๋ง๊นŒ์ง€ ๋ณ‘ํ•ฉ์„ ์œ„ํ•ด ์ค€๋น„๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.
๊ตฌํ˜„์€ ๋ช‡ ์ฃผ ๋™์•ˆ ์ˆ˜ํ–‰๋˜๋ฉฐ ๋ฆฌํŒฉํ† ๋ง ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ๊ทธ ์ดํ›„๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์žฅ์น˜๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๋œ ์˜ค๋ฅ˜๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด https://github.com/TheThingsNetwork/lorawan-stack/issues/2394 ๋ฅผ

๋งŽ์€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ device_not_found ๋Š” ์žฅ์น˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•˜์ง€๋งŒ DevAddr์„ ์ „ํ˜€ ์ฐพ์„ ์ˆ˜ ์—†๊ฑฐ๋‚˜ MIC๊ฐ€ ์ฐพ์€ ํ•ญ๋ชฉ๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” FCnt๊ฐ€ ๋ฐœ๊ฒฌ๋œ ํ•ญ๋ชฉ์œผ๋กœ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ๋™์•ˆ ์žฌ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

์ข‹์€ ์ œ์•ˆ์ด์ง€๋งŒ ์ƒ๋Œ€์ ์œผ๋กœ ๋ณต์žกํ•œ ๊ธฐ๋Šฅ์ด ๋งŽ์ด ํฌํ•จ๋˜์–ด ๊ฒ€ํ† ํ•˜๋Š” ๊ฒƒ์€ ์—„์ฒญ๋‚œ PR์ด ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰