Central Dogma - ์†ก๋ฏผ์šฐ๋‹˜

LINEโ€™s Git-based highly-available service configuration repository

  • Central Dogma๋Š” Git, ZooKeeper ์™€ HTTP/2์— ๊ธฐ๋ฐ˜ํ•˜๋Š” ๋ฉ€ํ‹ฐ-๋งˆ์Šคํ„ฐ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ณ ๊ฐ€์šฉ์„ฑ ๋ฒ„์ „๊ด€๋ฆฌ ์„œ๋น„์Šค ์„ค์ • ์ €์žฅ์†Œ๋กœ์„œ, LINE์˜ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ์ž…๋‹ˆ๋‹ค.
  • Central Dogma์˜ ๊ธฐ๋Šฅ ์†Œ๊ฐœ์™€ ๋”๋ถˆ์–ด ์„ค์ • ๊ด€๋ฆฌ ์›Œํฌํ”Œ๋กœ์šฐ ๊ด€์ ์—์„œ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”๋ฅผ ๊ฐ€์ ธ์™”๋Š”์ง€ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

Central Dogma

๋ฐฐ๊ฒฝ

  • ์„ค์ •ํŒŒ์ผ์€ ์–ด๋Š ์œ„์น˜์— ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•ด์•ผํ• ๊นŒ?
    • HardCoding
  • HardCoding์˜ ๋ฌธ์ œ์ ?
    • ์„œ๋ฒ„ ์ค‘์ง€
    • ๋ณ€๊ฒฝ
    • ์„œ๋ฒ„ ์žฌ์‹œ์ž‘
  • Central Dogma
    • ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅ
    • ์ฃผ๋กœ JSON
    • HA(High Available)
    • JSON ์ผ๋ถ€๋ถ„๋งŒ ์ˆ˜์ • ๊ฐ€๋Šฅ
    • ํŠน์ • ๋ถ€๋ถ„์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๊ฒฝ์šฐ notification
    • Mirroring from an external Git repository
  • Stores anything textual
    • Start Time
      • Bean Properties
    • Run time์—๋„ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
      • User Ip ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ
      • A/B Test๋ฅผ ์œ„ํ•œ ๋ณ€์ˆ˜
      • scheduled maintenance notice
      • Bussiness rule ์Šคํฌ๋ฆฝํŠธ๋“ค
  • ๊ณ ๊ฐ€์šฉ์„ฑ(Highly-available)
    • Multi-master
    • Eventually consistent
    • Fast read/ Slow write
    • ZooKeeper as a replication log queue
      • ZooKeeper๋Š” Ram์„ ์‚ฌ์šฉ
      • ZooKeeper๋Š” Write๊ฐ€ ๋Š๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์œ ์˜ํ•  ๊ฒƒ.
  • Version-controlled
    • jGit as a back-end storage
    • History - diffs and authors
    • Bigger than Ram
  • Focus on simplicity
    • Integer revision numbers : Integer๋งŒ์œผ๋กœ ์ตœ์‹ ์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋‹จ ๊ฐ€๋Šฅ
    • Linear history : no branches
  • Advanced query mechanism
    • first-class JSON support
    • JSON์„ Query ํ˜•ํƒœ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Fine-grained access control
    • Apache Shiro as the authentication layer
    • Four roles
      • Administrator, Owner, Member and Guest

๊ฐ€์น˜

  • Queryable
  • Watchable
  • Highly-available
  • Accessible from same network

์•ž์œผ๋กœ ํ•ด์•ผ ํ•  ๊ฒƒ.

  • Go client improvements
  • Web UI improvements
  • Independence from Apache Shiro
  • Replace Zookeeper With Raft

Slide

Armeria - ์ดํฌ์Šน๋‹˜

Armeria๋ฅผ ์ด์šฉํ•œ ๋น„๋™๊ธฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐœ๋ฐœ

  • Armeria๋Š” Java, Netty, HTTP/2, gRPC ์™€ Thrift ์— ๊ธฐ๋ฐ˜ํ•œ LINE์˜ ์˜คํ”ˆ์†Œ์Šค ๋ฆฌ์•กํ‹ฐ๋ธŒ ๋น„๋™๊ธฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ”„๋ ˆ์ž„์›Œํฌ ์ž…๋‹ˆ๋‹ค.
  • ๋ถ„์‚ฐ tracing๊ณผ ์„œ๋น„์Šค discovory์™€ ๊ฐ™์€ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋ฉด์„œ๋„ ๋ฐฐ์šฐ๊ธฐ ์‰ฌ์šด Armeria์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ , ์™œ ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•˜๋Š” ๋ฆฌ์•กํ‹ฐ๋ธŒ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋ชจ๋“  ๊ทœ๋ชจ์˜ ์„œ๋น„์Šค์—์„œ ๊ผญ ํ•„์š”ํ•œ์ง€ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

Armeria

  • ๋น„๋™๊ธฐ๋ฅผ ์ง€ํ–ฅ

  • 1000๊ฐœ์˜ ์š”์ฒญ์ด ์˜ค๋ฉด 1000๊ฐœ์˜ Thread๊ฐ€ ์ผ์„ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

  • ์‹ค์ œ๋กœ๋Š” just waiting for the backend.

  • Java Thread Default Stack size : 2MB

  • Shard 1๊ฐœ๊ฐ€ ์˜ค๋ฅ˜๊ฐ€ ๋‚œ ๊ฒฝ์šฐ?

    • ์ ์  ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” Thread๊ฐœ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด์„œ..
    • ์„œ๋ฒ„๊ฐ€ ์ „๋ฉด ์žฅ์•  ๋ฐœ์ƒ.
  • Reactive Streams

    • ์‘๋‹ต ๊ฒฐ๊ณผ๊ฐ€ ํฐ ๊ฒฝ์šฐ
      • ์ˆœ๊ฐ„์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ฆ๊ฐ€.
      • Out of Memory ๋ฐœ์ƒ.
      • Pagenation?
        • ์ถ”๊ฐ€์ ์ธ Resource ์†Œ์š”.
      • ๋ฌด์ œํ•œ์ผ์ˆ˜๋„ ์žˆ๋Š” Response?
        • Stock quotes
    • HTTP ๋ฌธ์ œ ์ธ๊ฐ€?
      • ๊ทธ๊ฑด ์•„๋‹ˆ๋‹ค.
      • ๋™๊ธฐ ๋ฌธ์ œ๋กœ ์ธํ•œ ๋ฌธ์ œ ๋ฐœ์ƒ.
    • ์‘๋‹ต์ด ์ž‘์€ ๊ฒฝ์šฐ
  • Armeria ์ง€์› Protocol

    • HTTP2 ์ง€์›
    • Reactive Streams API
    • gRPC, Thrift, REST services
    • Tomcat or Jetty
    • RPC ์ง€์›
      • 1st Class citizen in web framework
      • binary Protocol
  • Vert.x

    • OpenSSL-based faster TLS connection
  • Thrift

  • ์™œ ์‚ฌ์šฉํ• ๊นŒ?

    • gRPC
      • HTTP/1.2, TLS on off
      • gRPC-Web support, i.e.
    • Thrift
      • HTTP/2
      • TTEXT a.k.a human-readable JSON
  • Decorate

    • AOP
    • Request throttling
    • Metric collection
    • Distributed tracing Zipkin
    • HTTP content encoding
    • CORS
    • Automatic retries
    • Circuit breakers
  • ๋น„๋™๊ธฐ Stack Trace ์–ด๋ ค์›€

    • Heap Dump

Slide

Redis - ์ตœ์ข…์—ด๋‹˜

LINE, 25 billion messages per day

  • LINE์—์„œ๋Š” ๋ฉ”์‹œ์ง• ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ Storage system์œผ๋กœ Redis์™€ HBase, Kafka๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋งค์ผ 250์–ต๊ฑด ์ด์ƒ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐฐ๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ, 1,000๋Œ€ ์ด์ƒ์˜ ๊ณ ์„ฑ๋Šฅ ๋ฌผ๋ฆฌ ์„œ๋ฒ„์—์„œ 14,000๊ฐœ ์ด์ƒ์˜ Redis ๋…ธ๋“œ๋ฅผ, 60์—ฌ๊ฐœ ํด๋Ÿฌ์Šคํ„ฐ์— ๋‚˜๋ˆ ์„œ ์ด์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์—ฌ๊ธฐ์—์„œ๋Š” ๋งŽ์€ I/O์™€ ์‘๋‹ต์†๋„๊ฐ€ ์ค‘์š”ํ•œ ๋ฉ”์‹œ์ง•์„ ์œ„ํ•ด์„œ, ์–ด๋–ป๊ฒŒ Redis ๊ด€๋ จ facility๋ฅผ ๊ฐœ๋ฐœ ๋ฐ ์šด์˜ํ•˜์—ฌ ๋†’์€ ํŠธ๋ž˜ํ”ฝ์„ ์งง์€ ์‘๋‹ต์†๋„๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  • ๋‚ด์šฉ์—๋Š”, ํด๋ผ์ด์–ธํŠธ ์ƒค๋”ฉ์„ ์–ด๋–ป๊ฒŒ ํ•˜๊ณ  ์žˆ๋Š”์ง€, ๊ณต์‹ Redis ํด๋Ÿฌ์Šคํ„ฐ ๋„์ž… ๊ฒฝํ—˜, ๋‚ด๋ถ€ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ, ๋น„๋™๊ธฐ Redis ํด๋ผ์ด์–ธํŠธ ๋„์ž… ๊ฒฝํ—˜ ๋“ฑ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  • Redis 3.0 Clustering ์ง€์›

  • LINE

    • 25 billion messages per day
    • 420000 messages in Happy New Year
    • Messaging server
    • Asynchronous Task Processor
      • Kafka
    • Redis
      • Cache or Database
      • ์ข…๋ฅ˜๋ณ„๋กœ ์‚ฌ์šฉ
      • 1000๊ฐœ ์ด์ƒ ๋จธ์‹ 
      • 192 - 256 Gb Memory
    • Hbase
      • Back up
      • Cold data
    • ZooKeeper
      • Master, Slave ๊ด€๊ณ„ ์ •๋ณด ๊ด€๋ฆฌ
    • Client sharding
      • pros
        • shrot response
        • ์„œ๋ฒ„ ๋น„์šฉ ์ ˆ๊ฐ
      • cons
        • fat client
  • Switch Packet Drop

  • Redis Upgrade ํ•˜๊ธฐ ํž˜๋“ค๋‹ค.

Slide

๋‚ด๊ฐ€ ์–ป์€ ๊ฒƒ.

  • ํ˜„์žฌ ๋‚ด๊ฐ€ ๊ฒฝํ—˜ํ•˜๊ณ  ์žˆ๋Š” ๋น„์Šทํ•œ Architecture์—์„œ Scale์ด ์ปค์งˆ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค์ธ๊ฒƒ ๊ฐ™๋‹ค.
    • ์„ค์ • ํŒŒ์ผ ๋˜ํ•œ ์„œ๋ฒ„ ์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฉด ๋งŽ์„์ˆ˜๋ก ๊ด€๋ฆฌ ์–ด๋ ค์›€์„ Line์€ ์ €๋ ‡๊ฒŒ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ณ  ์˜คํ”ˆ์†Œ์Šคํ™” ํ•˜์˜€๋‹ค.
    • Monitoring์˜ ์ค‘์š”์„ฑ. ๊ธฐ๋กํ•˜๊ณ  ๊ด€์ฐฐํ•ด์•ผ ๋ฌธ์ œํ•ด๊ฒฐ์ด ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰๋œ๋‹ค.
    • ๋‹ค์–‘ํ•œ ์ƒํ™ฉ ๊ณ ๋ คํ•˜๊ธฐ. ์ด๋Ÿฐ Case, ์ €๋Ÿฐ Case ์ƒํ™ฉ์€ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ชจ๋ฅด๋Š” ์šฉ์–ด๊ฐ€ ์•„์ง ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ฆฌํ•˜๊ธฐ.

Reference