Skip to content

Latest commit

ย 

History

History
58 lines (43 loc) ยท 3.59 KB

File metadata and controls

58 lines (43 loc) ยท 3.59 KB

11. Front Cache ๊ธฐ๋Šฅ

๊ฐœ์š”

ARCUS๋Š” Remote Cache ์‹œ์Šคํ…œ์ด๋ฏ€๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์žฅ๋น„์˜ ์‚ฌ์–‘, ๋„คํŠธ์›Œํฌ ๋ฆฌ์†Œ์Šค์— ๋”ฐ๋ผ ์ง€์—ฐ ์‹œ๊ฐ„์ด ๋А๋ ค์ง€๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋ฏ€๋กœ JVM์˜ Garbage Collector์— ๋ถ€๋‹ด์ด ๊ฐ€ํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ , ๋ณ€๊ฒฝ์ด ์žˆ๋”๋ผ๋„ ์•„์ฃผ ์งง์€ ์‹œ๊ฐ„ ๋‚ด์—๋Š” ์ด์ „ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ค˜๋„ ์ƒ๊ด€์—†๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด Front Cache๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

ARCUS Java Client์—์„œ๋Š” Transparentํ•˜๊ฒŒ Front Cache๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š” API๋ฅผ ์ œ๊ณตํ•˜์—ฌ, Remote Cache์—์„œ Hit์ด ๋˜์—ˆ์„ ๋•Œ Front Cache์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•˜๊ฑฐ๋‚˜ Front Cache๋กœ๋ถ€ํ„ฐ ๋จผ์ € ์กฐํšŒ ํ›„ Remote Cache๋ฅผ ์กฐํšŒํ•˜๋Š” Front cache ๋กœ์ง์„ ์ง์ ‘ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

Arcus Java Client๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Ehcache3 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•œ๋‹ค. ๋”ฐ๋ผ์„œ Front Cache๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ์—๋Š” ARCUS์™€ Ehcache์— ๋ชจ๋‘ ์ €์žฅ๋œ๋‹ค.

img.png

์ฃผ์˜ ์‚ฌํ•ญ

  • Transparent Front Cache๋Š” ํ˜„์žฌ Key-Value get/set์— ๋Œ€ํ•ด์„œ๋งŒ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Front cache๋Š” remote ARCUS์™€ sync๋ฅผ ๋งž์ถ”์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ๋กœ read-only data๋ฅผ cachingํ•˜๋Š”๋ฐ ์ ํ•ฉํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  front caching expire time๋„ remote cache entry update์ฃผ๊ธฐ์— ๋”ฐ๋ผ sync๊ฐ€ ๋งž์ง€ ์•Š๋Š” ๊ธฐ๊ฐ„์„ ์ž˜ ํŒŒ์•…ํ•˜์—ฌ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.
  • Front Cache์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ArcusClient์˜ flush ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด flush ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋งŒ์•ฝ ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ARCUS์˜ front cache๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด ๋‚˜๋‰œ๋‹ค๋ฉด, ๊ฐ ์šฉ๋„์— ๋งž๋Š” ARCUS client ๊ฐ์ฒด๋ฅผ ๋ณ„๋„๋กœ ์ƒ์„ฑํ•ด ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์‚ฌ์šฉ๋ฒ•

Front cache๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด ConnectionFactoryBuilder ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์•„๋ž˜ ๋ฉ”์„œ๋“œ๋“ค์„ ํ˜ธ์ถœํ•œ ํ›„, ArcusClient ๊ฐ์ฒด ์ƒ์„ฑ์„ ์œ„ํ•œ ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ์ธ์ž๋กœ ๋„˜๊ฒจ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

  • setMaxFrontCacheElements(int to) (Required)

    Front Cache์—์„œ ์‚ฌ์šฉํ•  ์ตœ๋Œ€ ์•„์ดํ…œ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 0์ด๋ฉฐ Front Cache๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋œป์ด๋‹ค. ๋”ฐ๋ผ์„œ Front Cache๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์–‘์˜ ์ •์ˆ˜๊ฐ’์„ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ์ตœ๋Œ€ Item ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด LRU ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๊ฐ€์žฅ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” Item์„ ์ œ๊ฑฐํ•˜๊ณ  ์ƒˆ๋กœ์šด Item์„ ๋“ฑ๋กํ•˜๊ฒŒ ๋œ๋‹ค.

  • setFrontCacheExpireTime(int to) (Optional, default 5)

    Front Cache item์˜ expire time์ด๋‹ค. Front cache๋Š” item๋ณ„ expire time์„ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ , ๋“ฑ๋ก๋œ ๋ชจ๋“  item์— ๋™์ผํ•œ expire time์ด ์ ์šฉ๋œ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 5์ด๋ฉฐ ๋‹จ์œ„๋Š” second์ด๋‹ค. ์„ค์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋“ฑ๋ก๋œ ์ง€ 5์ดˆ๊ฐ€ ์ง€๋‚˜๋ฉด ์ž๋™์œผ๋กœ ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

์•„๋ž˜๋Š” Front cache๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์˜ˆ์‹œ ์ฝ”๋“œ์ด๋‹ค. setMaxFrontCacheElements์„ 0๋ณด๋‹ค ํฐ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋ฉด Front Cache๊ฐ€ ํ™œ์„ฑํ™”๋œ๋‹ค. setFrontCacheExpireTime์€ ํ•„์ˆ˜ ์„ค์ •์€ ์•„๋‹ˆ์ง€๋งŒ, ์‚ฌ์šฉ ์šฉ๋„์— ๋งž๋„๋ก ๋ช…์‹œ์ ์ธ ๊ฐ’์„ ์„ค์ •ํ•ด ์ฃผ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

ConnectionFactoryBuilder cfb = new ConnectionFactoryBuilder();

/* Required to use transparent front cache */
cfb.setMaxFrontCacheElements(10000);

/* Optional settings */
cfb.setFrontCacheExpireTime(5);

ArcusClient client = new ArcusClient(SERVICE_CODE, cfb);