ElasticSearch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Highload ํ”„๋กœ์ ํŠธ์—์„œ ๋กœ๋“œ ์ตœ์ ํ™”

ํ—ค์ด ํ•˜๋ธŒ๋ฅด! ์ €๋Š” FINCH์—์„œ ๋ถ„์„๊ฐ€์ด์ž ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์ž๋กœ ์ผํ•˜๊ณ  ์žˆ๋Š” Maxim Vasiliev์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜ ์ €๋Š” ElasticSearch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 15๋ถ„ ๋งŒ์— 6๋งŒ ๊ฑด์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ณ ๊ฐ ์‚ฌ์ดํŠธ์˜ ์ผ์ผ ๋กœ๋“œ๋ฅผ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๋ฐฉ๋ฒ•์„ ๋ง์”€๋“œ๋ฆฌ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ์šฐ๋ฆฌ๋Š” NDA๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฆ„์—†์ดํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ์‚ฌ์˜ ๋‚ด์šฉ์ด ์ด๋กœ ์ธํ•ด ๊ณ ํ†ต๋ฐ›์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ฐ‘์‹œ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ž‘๋™ ๋ฐฉ์‹

๋ฐฑ์—”๋“œ์—์„œ ๊ณ ๊ฐ์˜ ์›น์‚ฌ์ดํŠธ ๋ฐ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ตฌ์กฐ๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ElasticSearch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Highload ํ”„๋กœ์ ํŠธ์—์„œ ๋กœ๋“œ ์ตœ์ ํ™”

์ž‘์—… ๊ณผ์ •์—์„œ ์šฐ๋ฆฌ๋Š” ๊ตฌ๋งค, ๊ฒฐ์ œ, ์‚ฌ์šฉ์ž ์ž”์•ก์ด ์žˆ๋Š” ์ž‘์—… ๋“ฑ ๋งŽ์€ ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ๋งŽ์€ ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€ ์‹œ์Šคํ…œ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ณ  ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌํ•  ๋•Œ๋„ ์—ญ๊ณผ์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ง€๋ถˆ ๋ฐ ๋ณด๋„ˆ์Šค ํ”„๋กœ๊ทธ๋žจ ์ž‘์—…์„ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„์ง ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋žตํ•œ ๋ฐฐ๊ฒฝ

์ฒ˜์Œ์—๋Š” PostgreSQL์„ ์œ ์ผํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋กœ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. DBMS์— ๋Œ€ํ•œ ํ‘œ์ค€ ์ด์ : ํŠธ๋žœ์žญ์…˜์˜ ์กด์žฌ, ๊ฐœ๋ฐœ๋œ ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ๋ง ์–ธ์–ด, ๊ด‘๋ฒ”์œ„ํ•œ ํ†ตํ•ฉ ๋„๊ตฌ ์ข‹์€ ์„ฑ๋Šฅ๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ฝค ์˜ค๋žซ๋™์•ˆ ์šฐ๋ฆฌ์˜ ์š”๊ตฌ๋ฅผ ์ถฉ์กฑ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

๊ฑฐ๋ž˜๋ถ€ํ„ฐ ๋‰ด์Šค๊นŒ์ง€ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ Postgres์— ์ €์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ–ˆ๊ณ  ์ด์— ๋”ฐ๋ผ ์š”์ฒญ ์ˆ˜๋„ ์ฆ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด 2017๋…„ ๋ฐ์Šคํฌํ†ฑ ์‚ฌ์ดํŠธ์˜ ์—ฐ๊ฐ„ ์„ธ์…˜ ์ˆ˜๋Š” 131์–ต 2018๋งŒ์ž…๋‹ˆ๋‹ค. 125๋…„์—๋Š” 2019์–ต 130๋งŒ, 100๋…„์—๋Š” ๋‹ค์‹œ 200์–ต XNUMX๋งŒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋ฐ”์ผ ๋ฒ„์ „ ์‚ฌ์ดํŠธ์™€ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ XNUMX์–ต ~ XNUMX์–ต์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์—„์ฒญ๋‚œ ์ˆ˜์˜ ์š”์ฒญ์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ๊ฐ€ ์„ฑ์žฅํ•จ์— ๋”ฐ๋ผ Postgres๋Š” ๋ถ€ํ•˜ ์ฒ˜๋ฆฌ๋ฅผ ์ค‘๋‹จํ–ˆ๊ณ  ์‹œ๊ฐ„์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์ฟผ๋ฆฌ๊ฐ€ ๋งŽ์ด ๋‚˜ํƒ€๋‚˜ ์ถฉ๋ถ„ํ•œ ์ˆ˜์˜ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ œ๊ณตํ•˜๊ณ  PostgreSQL์˜ ๋ถ€๋‹ด์„ ๋œ์–ด์ค„ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค. Elasticsearch์™€ MongoDB๊ฐ€ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์œผ๋กœ ๊ณ ๋ ค๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ›„์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ์—์„œ ํŒจ๋ฐฐํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ์ธ๋ฑ์Šค์˜ ๋ฐ์ดํ„ฐ ์–‘์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์ธ๋ฑ์‹ฑ ์†๋„๊ฐ€ ๋Š๋ ค์ง‘๋‹ˆ๋‹ค. Elastic์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์–‘์— ๋”ฐ๋ผ ์†๋„๊ฐ€ ๋‹ฌ๋ผ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. ์ „์ฒด ํ…์ŠคํŠธ ๊ฒ€์ƒ‰ ์—†์Œ

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์Šค์Šค๋กœ Elastic์„ ์„ ํƒํ–ˆ๊ณ  ์ „ํ™˜์„ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค.

Elastic์œผ๋กœ ์ „ํ™˜

1. ํŒ๋งค ์‹œ์  ๊ฒ€์ƒ‰ ์„œ๋น„์Šค์—์„œ ์ „ํ™˜์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ๊ณ ๊ฐ์€ ์ด ์•ฝ 70๊ฐœ์˜ ํŒ๋งค ์ง€์ ์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์‚ฌ์ดํŠธ์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์—ฌ๋Ÿฌ ์œ ํ˜•์˜ ๊ฒ€์ƒ‰์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ๋„์‹œ ์ด๋ฆ„์œผ๋กœ ํ…์ŠคํŠธ ๊ฒ€์ƒ‰
  • ์–ด๋–ค ์ง€์ ์—์„œ ์ฃผ์–ด์ง„ ๋ฐ˜๊ฒฝ ๋‚ด์—์„œ ์ง€์˜ค์„œ์น˜. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ์ง‘์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํŒ๋งค ์ง€์ ์„ ํ™•์ธํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.
  • ์ง€์ •๋œ ์‚ฌ๊ฐํ˜•์œผ๋กœ ๊ฒ€์ƒ‰ - ์‚ฌ์šฉ์ž๊ฐ€ ์ง€๋„์— ์‚ฌ๊ฐํ˜•์„ ๊ทธ๋ฆฌ๋ฉด ์ด ๋ฐ˜๊ฒฝ์˜ ๋ชจ๋“  ์ง€์ ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ์ถ”๊ฐ€ ํ•„ํ„ฐ๋กœ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ํŒ๋งค ์ง€์ ์€ ๊ตฌ์ƒ‰์ด ์„œ๋กœ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์กฐ์ง์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋ฉด Postgres์—๋Š” ์ง€๋„์™€ ๋‰ด์Šค ๋ชจ๋‘์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์†Œ์Šค๊ฐ€ ์žˆ๊ณ  Elastic Snapshots์—์„œ๋Š” ์›๋ณธ ๋ฐ์ดํ„ฐ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ฒ˜์Œ์—๋Š” Postgres๊ฐ€ ๋ชจ๋“  ๊ธฐ์ค€์œผ๋กœ ๊ฒ€์ƒ‰์— ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๊ฐ€ ๋งŽ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ค‘๋ณต๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Postgres ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๊ธธ์„ ์žƒ๊ณ  ์–ด๋–ค ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

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

3. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฑฐ๋ž˜ ์ฒ˜๋ฆฌ๋ฅผ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์‚ฌ์ดํŠธ์—์„œ ํŠน์ • ์ œํ’ˆ์„ ๊ตฌ๋งคํ•˜๊ณ  ๊ฒฝํ’ˆ ์ถ”์ฒจ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ๋งค ํ›„์—๋Š” ํŠนํžˆ ์ฃผ๋ง๊ณผ ๊ณตํœด์ผ์— ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋น„๊ต๋ฅผ ์œ„ํ•ด ํ‰์ผ ๊ตฌ๋งค ๊ฑด์ˆ˜๊ฐ€ 1,5 ~ 2 ๋งŒ ๊ฑด์ด๋ฉด ํœด์ผ์—๋Š” 53 ๋งŒ ๊ฑด์— ๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์‹œ์— ๋ฐ์ดํ„ฐ๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ๋‹จ ์‹œ๊ฐ„ ๋‚ด์— ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋ฉฐ์น  ๋™์•ˆ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Postgres๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๊ธฐํ•œ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ข…์ข… ์ž ๊ธˆ์„ ๋ฐ›์•˜๊ณ  ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์•ˆ ์‚ฌ์šฉ์ž๋Š” ์ƒํ’ˆ์„ ๋ฐ›์•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋น„์ฆˆ๋‹ˆ์Šค์— ๊ทธ๋‹ค์ง€ ์œ ์พŒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌ๋ฅผ Elasticsearch๋กœ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค.

์ฃผ๊ธฐ์œจ

์ด์ œ ์—…๋ฐ์ดํŠธ๋Š” ๋‹ค์Œ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  1. ํŒ๋งค ํฌ์ธํŠธ. ์™ธ๋ถ€ ์†Œ์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  2. ์†Œ์‹. ๋‰ด์Šค๊ฐ€ ์‚ฌ์ดํŠธ์—์„œ ํŽธ์ง‘๋˜๋Š” ์ฆ‰์‹œ ์ž๋™์œผ๋กœ Elastic์œผ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋‹ค์‹œ Elastic์˜ ์žฅ์ ์„ ์–ธ๊ธ‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Postgres์—์„œ๋Š” ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์ •์งํ•˜๊ฒŒ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. 10๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ Elastic์— ๋ณด๋‚ด๊ณ  ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ชจ๋“  ์ƒค๋“œ์— ๋ฐฐํฌ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ฆ‰์‹œ ์ž‘์—…์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ผ๋ถ€ Shard ๋˜๋Š” Replica๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋กœ ๋ณผ ์ˆ˜ ์—†์ง€๋งŒ ๊ณง ๋ชจ๋“  ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ†ตํ•ฉ ๋ฐฉ๋ฒ•

Elastic๊ณผ ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. TCP๋ฅผ ํ†ตํ•œ ๊ธฐ๋ณธ ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ†ตํ•ด. ๊ธฐ๋ณธ ๋“œ๋ผ์ด๋ฒ„๋Š” ์ ์ฐจ ์‚ฌ๋ผ์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ๊ตฌ๋ฌธ์ด ๋งค์šฐ ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์™„์ „ํžˆ ๋ฒ„๋ฆฌ๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.
  2. JSON ์š”์ฒญ๊ณผ Lucene ๊ตฌ๋ฌธ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” HTTP ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด. ๋งˆ์ง€๋ง‰์€ Elastic์„ ์‚ฌ์šฉํ•˜๋Š” ํ…์ŠคํŠธ ์—”์ง„์ž…๋‹ˆ๋‹ค. ์ด ๋ฒ„์ „์—์„œ๋Š” HTTP๋ฅผ ํ†ตํ•œ JSON ์š”์ฒญ์„ ํ†ตํ•ด ์ผ๊ด„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

HTTP ์ธํ„ฐํŽ˜์ด์Šค ๋•๋ถ„์— HTTP ํด๋ผ์ด์–ธํŠธ์˜ ๋น„๋™๊ธฐ ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Batch์™€ ๋น„๋™๊ธฐ์‹ API๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ ๋†’์€ ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ๋ชจ์…˜ ๊ธฐ๊ฐ„ ๋™์•ˆ ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ์ฐธ์กฐ).

๋น„๊ต๋ฅผ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ˆซ์ž:

  • ๊ทธ๋ฃนํ™” ์—†์ด 20๊ฐœ์˜ ์Šค๋ ˆ๋“œ์—์„œ Postgres ๋ฐ”์šดํ‹ฐ ์‚ฌ์šฉ์ž ์ €์žฅ: 460713์ดˆ์— 42๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ
  • ํƒ„๋ ฅ์  + 10๊ฐœ์˜ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ ๋ฐ˜์‘ํ˜• ํด๋ผ์ด์–ธํŠธ + 1000๊ฐœ์˜ ์š”์†Œ์— ๋Œ€ํ•œ ๋ฐฐ์น˜: 596749์ดˆ์— 11๊ฐœ ๋ ˆ์ฝ”๋“œ
  • 10๊ฐœ์˜ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ Elastic + ๋ฐ˜์‘ํ˜• ํด๋ผ์ด์–ธํŠธ + 1000๊ฐœ์˜ ์š”์†Œ์— ๋Œ€ํ•œ ๋ฐฐ์น˜: 23801684๋ถ„ ์•ˆ์— 4๊ฐœ ํ•ญ๋ชฉ

์ด์ œ JSON์„ Batch๊ฐ€ ์•„๋‹Œ Batch๋กœ ๋นŒ๋“œํ•˜๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๊ด€๊ณ„์—†์ด ๋ชจ๋“  HTTP ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ†ตํ•ด ์ „์†กํ•˜๋Š” HTTP ์š”์ฒญ ๊ด€๋ฆฌ์ž๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋™๊ธฐ์‹ ๋˜๋Š” ๋น„๋™๊ธฐ์‹์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋„๋ก ์„ ํƒํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ ํ†ตํ•ฉ์—์„œ๋Š” ์—ฌ์ „ํžˆ ๊ณต์‹ ์ „์†ก ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ด๋Š” ๋‹ค์Œ ๋ฆฌํŒฉํ† ๋ง์˜ ๋ฌธ์ œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ Spring WebClient๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋œ ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ElasticSearch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Highload ํ”„๋กœ์ ํŠธ์—์„œ ๋กœ๋“œ ์ตœ์ ํ™”

ํฐ ์Šน์ง„

XNUMX๋…„์— ํ•œ ๋ฒˆ ์ด ํ”„๋กœ์ ํŠธ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ํฐ ํ”„๋กœ๋ชจ์…˜์„ ๊ฐœ์ตœํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ˜„์žฌ ์ˆ˜์ฒœ๋งŒ ๋ช…์˜ ์‚ฌ์šฉ์ž์™€ ๋™์‹œ์— ์ž‘์—…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•œ Highload์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ํœด์ผ์— ์ตœ๋Œ€ ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ ์ด๋ฒˆ ํ”„๋กœ๋ชจ์…˜์€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค. ์žฌ์ž‘๋…„ ํ”„๋กœ๋ชจ์…˜ ๋‹น์ผ 27๊ฐœ์˜ ์ƒํ’ˆ์„ ํŒ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ 580๋ถ„ ์ด์ƒ ์ฒ˜๋ฆฌ๋˜์–ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถˆํŽธ์„ ๋ผ์ณค์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ฐธ์—ฌ์— ๋Œ€ํ•œ ๋ณด์ƒ์„ ๋ฐ›์•˜์ง€๋งŒ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ€์†ํ™”ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

2019๋…„ ์ดˆ์— ์šฐ๋ฆฌ๋Š” ElasticSearch๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. XNUMX๋…„ ๋‚ด๋‚ด ์šฐ๋ฆฌ๋Š” ์ˆ˜์‹ ๋œ ๋ฐ์ดํ„ฐ๋ฅผ Elastic์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ์›น์‚ฌ์ดํŠธ์˜ API์—์„œ ๋ฐœ๊ธ‰ํ•˜๋Š” ์ž‘์—…์„ ์กฐ์งํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ๋‚ด๋…„ ์บ ํŽ˜์ธ ๊ธฐ๊ฐ„ ๋™์•ˆ 15๋ถ„ ๋™์•ˆ 131๊ฐœ์˜ ํ•ญ๋ชฉ.

์ƒํ’ˆ์„ ๊ตฌ๋งคํ•˜๊ณ  ๊ฒฝํ’ˆ์ถ”์ฒจ์— ์ฐธ์—ฌํ•˜๊ณ  ์‹ถ์€ ๋ถ„๋“ค์ด ๋งŽ์•„ ์ผ์‹œ์ ์ธ ์กฐ์น˜์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ Elastic์— ์ตœ์‹  ์ •๋ณด๋ฅผ ๋ณด๋‚ด๊ณ  ์žˆ์ง€๋งŒ ์•ž์œผ๋กœ ๋ช‡ ๋‹ฌ ๋™์•ˆ ๋ณด๊ด€๋œ ์ •๋ณด๋ฅผ Postgres์— ์˜๊ตฌ ์ €์žฅ์†Œ๋กœ ์ „์†กํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ํ•œ๊ณ„๊ฐ€ ์žˆ๋Š” Elastic ์ธ๋ฑ์Šค๋ฅผ ๋ง‰ํžˆ์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๋ก /๊ฒฐ๋ก 

ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ์›ํ–ˆ๋˜ ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ Elastic์œผ๋กœ ์ด์ „ํ–ˆ์œผ๋ฉฐ ์ง€๊ธˆ์€ ์ด ์ž‘์—…์„ ์ผ์‹œ ์ค‘์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž ๋ถ€ํ•˜๋ฅผ ์ธ๊ณ„๋ฐ›๋Š” Postgres์˜ ๊ธฐ๋ณธ ์˜๊ตฌ ์Šคํ† ๋ฆฌ์ง€ ์œ„์— Elastic์— ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ–ฅํ›„ ๋ฐ์ดํ„ฐ ์š”์ฒญ์ด ๋„ˆ๋ฌด ๋‹ค์–‘ํ•ด์ง€๊ณ  ์—ด ์ˆ˜์— ์ œํ•œ์ด ์—†๋Š” ๊ฒƒ์œผ๋กœ ํŒŒ์•…๋˜๋ฉด ์„œ๋น„์Šค๋ฅผ ์ด์ „ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋” ์ด์ƒ Postgres์˜ ์ž‘์—…์ด ์•„๋‹™๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์ƒ ์ „์ฒด ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ๋‹ค์–‘ํ•œ ๊ฒ€์ƒ‰ ๊ธฐ์ค€์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ Elastic์œผ๋กœ ๋ฒˆ์—ญํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

โŒ˜โŒ˜โŒ˜

์ฝ์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ท€์‚ฌ์—์„œ๋„ ElasticSearch๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ž์ฒด ๊ตฌํ˜„ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์–ด๋–ค์ง€ ์•„๋Š” ๊ฒƒ์€ ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค ๐Ÿ™‚

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€