๐Ÿ’ป/MLOps

Finagle & Thrift

ruhz 2024. 5. 9. 05:44

RPC๋ž€?

์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ(remote procedure call, RPC)์€ ๋ณ„๋„์˜ ์›๊ฒฉ ์ œ์–ด๋ฅผ ์œ„ํ•œ ์ฝ”๋”ฉ ์—†์ด ๋‹ค๋ฅธ ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ ํ•จ์ˆ˜๋‚˜ ํ”„๋กœ์‹œ์ €๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  ๊ธฐ์ˆ ์ด๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ์„ ์ด์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ์— ๋กœ์ปฌ ์œ„์น˜์— ์žˆ๋“  ์›๊ฒฉ ์œ„์น˜์— ์žˆ๋“  ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์›์น™์„ ์‚ฌ์šฉํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ฒฝ์šฐ ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ์„ ์›๊ฒฉ ํ˜ธ์ถœ(remote invocation) ๋˜๋Š” ์›๊ฒฉ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ(remote method invocation)์ด๋ผ๊ณ  ์ผ์ปซ๋Š”๋‹ค.

์ถœ์ฒ˜: ์œ„ํ‚ค๋ฐฑ๊ณผ

 

RPC vs REST

 

RPC์™€ REST ๋น„๊ต - API ์•„ํ‚คํ…์ฒ˜ ๊ฐ„์˜ ์ฐจ์ด์  - AWS

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

aws.amazon.com

  RPC REST
๋ฌด์—‡์ธ๊ฐ€์š”? ์›๊ฒฉ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„์˜ ํ”„๋กœ์‹œ์ €๋ฅผ ๋งˆ์น˜ ๋กœ์ปฌ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์ง์ ‘์ ์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.  ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ •ํ˜• ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์ •์˜ํ•˜๋Š” ์ผ๋ จ์˜ ๊ทœ์น™์ž…๋‹ˆ๋‹ค.
์šฉ๋„ ์›๊ฒฉ ์„œ๋ฒ„์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์›๊ฒฉ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ƒ์„ฑ, ์ฝ๊ธฐ, ์—…๋ฐ์ดํŠธ ๋ฐ ์‚ญ์ œ(CRUD) ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ€์žฅ ์ ํ•ฉํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€ ๋ณต์žกํ•œ ๊ณ„์‚ฐ์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์„œ๋ฒ„์—์„œ ์›๊ฒฉ ํ”„๋กœ์„ธ์Šค๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ๋ฐ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ท ์ผํ•˜๊ฒŒ ๋…ธ์ถœํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
์ƒํƒœ ์œ ์ง€ ์—ฌ๋ถ€ ์ƒํƒœ ์œ ์ง€ ๋˜๋Š” ๋ฌด์ƒํƒœ ๋ฌด์ƒํƒœ
๋ฐ์ดํ„ฐ ์ „๋‹ฌ ํ˜•์‹ ์„œ๋ฒ„์—์„œ ์ •์˜ํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์ ์šฉ๋˜๋Š” ์ผ๊ด€๋œ ๊ตฌ์กฐ ์„œ๋ฒ„์— ์˜ํ•ด ๋…๋ฆฝ์ ์œผ๋กœ ๊ฒฐ์ •๋˜๋Š” ๊ตฌ์กฐ. ๋™์ผํ•œ API ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ํ˜•์‹์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

RPC ๋™์ž‘ ๋ฐฉ๋ฒ•

 

RPC Implementation Mechanism in Distributed System - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

  1. Client, Client Stub ๋ฐ RPC ๋Ÿฐํƒ€์ž„์˜ ์ธ์Šคํ„ด์Šค๋Š” ๋ชจ๋‘ ํด๋ผ์ด์–ธํŠธ ๊ธฐ๊ธฐ์—์„œ ์‹คํ–‰ ์ค‘์ด๋‹ค.
  2. Client๋Š” ์ผ๋ฐ˜์ ์ธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ Client Stub ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค. Client Stub์€ ํด๋ผ์ด์–ธํŠธ์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ ์ €์žฅ์†Œ๋ฅผ ํ™•๋ณดํ•œ๋‹ค.
  3. ์ด ์‹œ์ ์—์„œ ์‚ฌ์šฉ์ž๋Š” ์ผ๋ฐ˜ ๋กœ์ปฌ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜์—ฌ RPC์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค. RPC ๋Ÿฐํƒ€์ž„์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฉ”์‹œ์ง€ ์ „์†ก์„ ๋‹ด๋‹นํ•œ๋‹ค. ์žฌ์ „์†ก, ํ™•์ธ, ๋ผ์šฐํŒ… ๋ฐ ์•”ํ˜ธํ™”๋Š” ๋ชจ๋‘ ์ด์— ์˜ํ•ด ์ˆ˜ํ–‰๋œ๋‹ค.
  4. Server ์ธก์—์„œ๋Š” ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„ ๊ฒฐ๊ณผ ๊ฐ’์ด Server Stub์— ๋ฐ˜ํ™˜๋˜๊ณ , ์ดํ›„ Server Stub์ด ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋ฉ”์‹œ์ง€๋กœ ํŒจํ‚น(marshalling)ํ•ฉ๋‹ˆ๋‹ค. ์ „์†ก ๊ณ„์ธต์€ Server Stub์œผ๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.
  5. ๊ฒฐ๊ณผ ๋ฉ”์‹œ์ง€๋Š” ์ „์†ก ๊ณ„์ธต์— ์˜ํ•ด Client ์ „์†ก ๊ณ„์ธต์œผ๋กœ ์ „์†ก๋˜๊ณ , Client Stub์œผ๋กœ ๋‹ค์‹œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.
  6. Client Stub์€ ๊ฒฐ๊ณผ ํŒจํ‚ท์—์„œ ๋ฐ˜ํ™˜ ์ธ์ˆ˜๋ฅผ ์–ธํŒจํ‚น(unmarshalling)ํ•˜๊ณ , ์ด ์‹œ์ ์—์„œ ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ˜ธ์ถœ์ž์—๊ฒŒ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

 

Stub

๋‹จ์–ด ์ž์ฒด๋Š” 'ํ† ๋ง‰'์ด๋ผ๋Š” ๋œป์ด๋‹ค.

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

 

Stub (distributed computing) - Wikipedia

From Wikipedia, the free encyclopedia This article is about replacement services for distributed computing. For other uses, see Stub (disambiguation). In distributed computing, a stub is a program that acts as a temporary replacement for a remote service o

en.wikipedia.org

 

 

Mocks Aren't Stubs

Explaining the difference between Mock Objects and Stubs (together with other forms of Test Double). Also the difference between classical and mockist styles of unit testing.

martinfowler.com

 

RPC with IDL

 

Thrift

 

Introduction to Thrift — Thrift Tutorial 1.0 documentation

Docs » Introduction to Thrift Edit on GitHub Introduction to Thrift Thrift Architecture. Image from wikipedia.org Thrift is a lightweight, language-independent software stack with an associated code generation mechanism for RPC. Thrift provides clean abst

thrift-tutorial.readthedocs.io

Thrift๋Š” RPC๋ฅผ ์œ„ํ•œ ์—ฐ๊ด€๋œ ์ฝ”๋“œ ์ƒ์„ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ํ•จ๊ป˜ ๊ฒฝ๋Ÿ‰์ด๋ฉฐ ์–ธ์–ด ๋…๋ฆฝ์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ์Šคํƒ์ž…๋‹ˆ๋‹ค. Thrift๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก, ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™” ๋ฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ˆ˜์ค€์˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊น”๋”ํ•œ ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Thrift๋Š” ์›๋ž˜ Facebook์—์„œ ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ ํ˜„์žฌ๋Š” Apache ํ”„๋กœ์ ํŠธ๋กœ ์˜คํ”ˆ ์†Œ์Šคํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Apache Thrift๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜• ๋ฐ ์„œ๋น„์Šค ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ„๋‹จํ•œ ์ •์˜ ํŒŒ์ผ์—์„œ ์ •์˜ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ RPC ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ผ๋ จ์˜ ์ฝ”๋“œ ์ƒ์„ฑ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์„ ์ž…๋ ฅ์œผ๋กœ ์ œ๊ณตํ•˜๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ํšก๋‹จํ•˜๋Š” RPC ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋ฒ„๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

 

Finagle

 

Finagle: A Protocol-Agnostic RPC System

Finagle: A Protocol-Agnostic RPC System

blog.x.com

 

Finagle๋Š” JVM์„ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ์— ์ค‘๋ฆฝ์ ์ด๋ฉฐ ๋น„๋™๊ธฐ RPC ์‹œ์Šคํ…œ์œผ๋กœ, Java, Scala ๋˜๋Š” ๊ธฐํƒ€ JVM ํ˜ธ์ŠคํŒ… ์–ธ์–ด๋กœ ๊ฐ•๋ ฅํ•œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

twitter.com์—์„œ ์‹ฌ์ง€์–ด ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋ ค๋ฉด ๋งŽ์€ ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋Š” ์ˆ˜์‹ญ ๊ฐœ์˜ ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค์˜ ํ˜‘๋ ฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ™ˆ ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์†Œ์…œ ๊ทธ๋ž˜ํ”„ ์„œ๋น„์Šค, Memcached, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ๊ธฐํƒ€ ๋งŽ์€ ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค์— ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด๋“ค ๊ฐ๊ฐ์€ Thrift, Memcached, MySQL ๋“ฑ ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ด๋Ÿฌํ•œ ๋งŽ์€ ์„œ๋น„์Šค ์ค‘ ์ผ๋ถ€๋Š” ๋‹ค๋ฅธ ์„œ๋น„์Šค์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์„œ๋ฒ„์ด์ž ํด๋ผ์ด์–ธํŠธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์†Œ์…œ ๊ทธ๋ž˜ํ”„ ์„œ๋น„์Šค๋Š” Thrift ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค.

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

์ •๊ตํ•œ ๋„คํŠธ์›Œํฌ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋Š” ๋‹ค์–‘ํ•œ ๋ถ€๋ถ„๋“ค์ด ์›€์ง์ž…๋‹ˆ๋‹ค: ์žฅ์•  ํƒ์ง€๊ธฐ, ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ, ์žฅ์•  ์กฐ์น˜ ์ „๋žต ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„๋“ค์€ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ๋•์…˜ ์‹œ์Šคํ…œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค์–‘ํ•œ ์žฅ์• ์— ๊ฒฌ๊ณ ํ•˜๊ฒŒ ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋กœ ์„ฌ์„ธํ•œ ๊ท ํ˜• ์†์—์„œ ํ•จ๊ป˜ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ, ํ”„๋กœํ† ์ฝœ๋งˆ๋‹ค ๋‹ค์–‘ํ•œ ์žฅ์•  ํƒ์ง€๊ธฐ, ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ๋“ฑ์˜ ๊ตฌํ˜„์ด ์žˆ์–ด์„œ ์ด๋ฅผ ์กฐ์œจํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Thrift์˜ back-pressure ์ „๋žต์˜ ๊ตฌํ˜„์€ HTTP์˜ ๊ฒƒ๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด์งˆ์ ์ธ ์‹œ์Šคํ…œ์ด ์‚ฌ๊ฑด ๋ฐœ์ƒ ์ค‘์— ์•ˆ์ •๋œ ์ƒํƒœ๋กœ ์ˆ˜๋ ดํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์–ด๋ ค์šด ์ž‘์—…์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ํ”„๋กœํ† ์ฝœ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„คํŠธ์›Œํฌ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋‹จ์ผ ๊ตฌํ˜„์ฒด๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. Finagle์€ Java Virtual Machine (JVM)์„ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ์— ์ค‘๋ฆฝ์ ์ด๋ฉฐ ๋น„๋™๊ธฐ ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ(RPC) ์‹œ์Šคํ…œ์œผ๋กœ, Java, Scala ๋˜๋Š” JVM ํ˜ธ์ŠคํŠธ ์–ธ์–ด์—์„œ ๊ฐ•๋ ฅํ•œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Finagle์€ ๋‹ค์–‘ํ•œ ์š”์ฒญ/์‘๋‹ต ์ง€ํ–ฅ RPC ํ”„๋กœํ† ์ฝœ๊ณผ ๋‹ค์–‘ํ•œ ์ŠคํŠธ๋ฆฌ๋ฐ ํ”„๋กœํ† ์ฝœ ํด๋ž˜์Šค๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Finagle์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ•๋ ฅํ•œ ๊ตฌํ˜„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • ์—ฐ๊ฒฐ ํ’€: TCP ์—ฐ๊ฒฐ ๋ณ€๋™์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ์Šค๋กœํ‹€๋ง์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • ์žฅ์•  ํƒ์ง€๊ธฐ: ๋Š๋ฆฐ ๋˜๋Š” ์ถฉ๋Œํ•œ ํ˜ธ์ŠคํŠธ๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • ์žฅ์•  ์กฐ์น˜ ์ „๋žต: ๊ฑด๊ฐ•ํ•˜์ง€ ์•Š์€ ํ˜ธ์ŠคํŠธ๋กœ๋ถ€ํ„ฐ ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ: "์ตœ์†Œ ์—ฐ๊ฒฐ" ๋ฐ ๊ธฐํƒ€ ์ „๋žต์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐฑํ”„๋ ˆ์…” ๊ธฐ์ˆ : ์„œ๋ฒ„๋ฅผ ๋‚จ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ๋ฐ ๋„๊ทธํŒŒ์ผ๋ง์— ๋Œ€๋น„ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, Finagle์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ๋” ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ํ‘œ์ค€ ํ†ต๊ณ„, ๋กœ๊ทธ ๋ฐ ์˜ˆ์™ธ ๋ณด๊ณ ์„œ๋ฅผ ๊ฒŒ์‹œํ•˜๋Š” ์„œ๋น„์Šค ๊ตฌ์ถ• ์šฉ์ด์„ฑ
  • ํ”„๋กœํ† ์ฝœ ๊ฐ„ ๋ถ„์‚ฐ ์ถ”์ (Dapper์™€ ์œ ์‚ฌ)
  • ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์˜ต์…˜์œผ๋กœ ZooKeeper ์‚ฌ์šฉ
  • ์ผ๋ฐ˜์ ์ธ ์ƒค๋”ฉ ์ „๋žต ์ง€์›

์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ์˜ ์ž‘์—…์ด ์„ฑ๊ณผ๋ฅผ ๊ฑฐ๋‘์—ˆ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค - ์ด์ œ ํ›จ์”ฌ ๋” ์‰ฝ๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

A Beginners Guide for Twitter Finagle

Twitter Finagle is a great framework to write distributed applications in Scala or Java. This article is a “getting started” guide for a…

medium.com

 

Finagle & Thrift

Thrift

  • Thrift๋Š” RPC ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ํ†ต์‹ ์„ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ์„ ์ •์˜ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • Thrift๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ์„œ๋น„์Šค์˜ API๋ฅผ ์ •์˜ํ•˜๊ณ , ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์„ ์–ธํ•˜๋ฉฐ, ํ”„๋กœํ† ์ฝœ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„œ๋น„์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ ๋ฐ ์„œ๋น„์Šค ๋ฉ”์„œ๋“œ๋ฅผ Thrift IDL(Interface Definition Language)์„ ํ†ตํ•ด ์ž‘์„ฑํ•˜๊ณ , Thrift ์ปดํŒŒ์ผ๋Ÿฌ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์–ธ์–ด๋กœ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹ ์„ ์œ„ํ•œ ํ‘œ์ค€ํ™”๋œ ํ”„๋กœํ† ์ฝœ์„ ์ •์˜ํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

Finagle

  • Finagle์€ RPC ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋น„๋™๊ธฐ ๋„คํŠธ์›Œํฌ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • Finagle์„ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹ ์„ ๊ด€๋ฆฌํ•˜๊ณ , ์„œ๋น„์Šค์˜ ์„ฑ๋Šฅ ๋ฐ ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Finagle์€ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์„œ๋ฒ„ ๋ฐ ํด๋ผ์ด์–ธํŠธ์˜ ๊ฐœ๋ฐœ์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ , ์‹คํŒจ ์ฒ˜๋ฆฌ, ๋ถ€ํ•˜ ๋ถ„์‚ฐ, ๋กœ๊น… ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • Thrift๋ฅผ ํ†ตํ•ด ์ •์˜๋œ ์„œ๋น„์Šค์˜ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , ์ด๋“ค ๊ฐ„์˜ ํ†ต์‹ ์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์žฅ์•  ์ฒ˜๋ฆฌ ๋ฐ ๋ถ€ํ•˜ ๋ถ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ, Thrift๋Š” ์„œ๋น„์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ˜๋ฉด, Finagle์€ ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค์˜ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉด, Thrift๋กœ ์ •์˜๋œ ์„œ๋น„์Šค๋ฅผ Finagle์„ ํ†ตํ•ด ๊ตฌํ˜„ํ•˜๊ณ  ์šด์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Protocols — Finagle 24.2.0 documentation

Protocols The core of Finagle is protocol-agnostic, meaning its internals provide an extensible RPC subsystem without defining any details of specific client-server protocols. Thus in order to provide usable APIs for clients and servers, there are a number

twitter.github.io