๐_๊ถ๊ทน์_์น_ํ๋ ์์ํฌ_์๋_๋๊ฒฐ[20260103113810]
Iโm happy to help translate the article for you. Could you please paste the text youโd like translated (excluding the source line you already provided)? Once I have the content, Iโll translate it into Korean while preserving the original formatting, markdown, and any code blocks or URLs.
์ปจํ ์คํธ
- ์ฐ๋: 2024
- ์ผ๋ฐ์ ์ธ ์๊ตฌ ์ฌํญ: ์ ์ ์๊ฑฐ๋, ์์ ํ๋ซํผ ๋ฐ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ๋ฐ๋ฆฌ์ด ์์ค์ ์๋ต ์๊ฐ.
ํ ์คํธ ํ๊ฒฝ
| ๊ตฌ์ฑ ์์ | ์ฌ์ |
|---|---|
| ์๋ฒ | Intel XeonโฏE5โ2686โฏv4 @โฏ2.30โฏGHz |
| ๋ฉ๋ชจ๋ฆฌ | 32โฏGB DDR4 |
| ๋คํธ์ํฌ | Gigabit Ethernet |
| ์ด์ ์ฒด์ | Ubuntuโฏ20.04โฏLTS |
1๏ธโฃ wrk โ KeepโAlive ํ์ฑํ
| ํ๋ ์์ํฌ | ์ด๋น ์์ฒญ ์ (QPS) | ์ง์ฐ ์๊ฐ | ์ ์ก ์๋ | ์์ |
|---|---|---|---|---|
| Tokio | 340,130.92 | 1.22โฏms | 30.17โฏMB/s | ๐ฅ |
| Hyperlane | 334,888.27 | 3.10โฏms | 33.21โฏMB/s | ๐ฅ |
| Rocket | 298,945.31 | 1.42โฏms | 68.14โฏMB/s | ๐ฅ |
| Rust std lib | 291,218.96 | 1.64โฏms | 25.83โฏMB/s | 4๏ธโฃ |
| Gin | 242,570.16 | 1.67โฏms | 33.54โฏMB/s | 5๏ธโฃ |
| Go std lib | 234,178.93 | 1.58โฏms | 32.38โฏMB/s | 6๏ธโฃ |
| Node std lib | 139,412.13 | 2.58โฏms | 19.81โฏMB/s | 7๏ธโฃ |
2๏ธโฃ ab โ KeepโAlive ํ์ฑํ
| ํ๋ ์์ํฌ | QPS | ์ง์ฐ ์๊ฐ | ์ ์ก ์๋ | ์์ |
|---|---|---|---|---|
| Hyperlane | 316,211.63 | 3.162โฏms | 32,115.24โฏKB/s | ๐ฅ |
| Tokio | 308,596.26 | 3.240โฏms | 28,026.81โฏKB/s | ๐ฅ |
| Rocket | 267,931.52 | 3.732โฏms | 70,907.66โฏKB/s | ๐ฅ |
| Rust std lib | 260,514.56 | 3.839โฏms | 23,660.01โฏKB/s | 4๏ธโฃ |
| Go std lib | 226,550.34 | 4.414โฏms | 34,071.05โฏKB/s | 5๏ธโฃ |
| Gin | 224,296.16 | 4.458โฏms | 31,760.69โฏKB/s | 6๏ธโฃ |
| Node std lib | 85,357.18 | 11.715โฏms | 4,961.70โฏKB/s | 7๏ธโฃ |
3๏ธโฃ wrk โ KeepโAlive Disabled
| ํ๋ ์์ํฌ | ์ด๋น ์์ฒญ ์ (QPS) | ์ง์ฐ์๊ฐ (Latency) | ์ ์ก ์๋ (Transfer Rate) | ์์ (Ranking) |
|---|---|---|---|---|
| Hyperlane | 51,031.27 | 3.51โฏms | 4.96โฏMB/s | ๐ฅ |
| Tokio | 49,555.87 | 3.64โฏms | 4.16โฏMB/s | ๐ฅ |
| Rocket | 49,345.76 | 3.70โฏms | 12.14โฏMB/s | ๐ฅ |
| Gin | 40,149.75 | 4.69โฏms | 5.36โฏMB/s | 4๏ธโฃ |
| Go std lib | 38,364.06 | 4.96โฏms | 5.12โฏMB/s | 5๏ธโฃ |
| Rust std lib | 30,142.55 | 13.39โฏms | 2.53โฏMB/s | 6๏ธโฃ |
| Node std lib | 28,286.96 | 4.76โฏms | 3.88โฏMB/s | 7๏ธโฃ |
4๏ธโฃ ab โ KeepโAlive ๋นํ์ฑํ
| ํ๋ ์์ํฌ | ์ด๋น ์์ฒญ ์ (QPS) | ์ง์ฐ ์๊ฐ (Latency) | ์ ์ก ์๋ (Transfer Rate) | ์์ (Ranking) |
|---|---|---|---|---|
| Tokio | 51,825.13 | 19.296โฏms | 4,453.72โฏKB/s | ๐ฅ |
| Hyperlane | 51,554.47 | 19.397โฏms | 5,387.04โฏKB/s | ๐ฅ |
| Rocket | 49,621.02 | 20.153โฏms | 11,969.13โฏKB/s | ๐ฅ |
| Go std lib | 47,915.20 | 20.870โฏms | 6,972.04โฏKB/s | 4๏ธโฃ |
| Gin | 47,081.05 | 21.240โฏms | 6,436.86โฏKB/s | 5๏ธโฃ |
| Node std lib | 44,763.11 | 22.340โฏms | 4,983.39โฏKB/s | 6๏ธโฃ |
| Rust std lib | 31,511.00 | 31.735โฏms | 2,707.98โฏKB/s | 7๏ธโฃ |
์ฃผ์ ๊ด์ฐฐ
- KeepโAlive ํ์ฑํ (wrk): Tokio๊ฐ 340,130.92โฏQPS๋ก 1์๋ฅผ ์ฐจ์งํ์ง๋ง, Hyperlane์ด 1.5โฏ% ๋ฎ์ ์ฐจ์ด๋ก ๊ทผ์ํ๊ฒ 2์์ด๋ฉฐ ์ ์ก ์๋์์ Tokio๋ฅผ ์์ ๋ค (33.21โฏMB/s ๋ 30.17โฏMB/s).
- KeepโAlive ํ์ฑํ (ab): Hyperlane์ด Tokio๋ฅผ ์์ ๋ค (316,211.63โฏQPS ๋ 308,596.26โฏQPS), ์ด๋ฒ ํ ์คํธ์์ โ์ง์ ํ ์ฑ๋ฅ ์โ์ด ๋๋ค.
- KeepโAlive ๋นํ์ฑํ (wrk): Hyperlane์ด ๋ค์ 1์๋ฅผ ์ฐจ์งํ๊ณ (51,031.27โฏQPS), Tokio๋ ์ฝ๊ฐ ๋ค์ฒ์ง๋ค.
- KeepโAlive ๋นํ์ฑํ (ab): Tokio๊ฐ ๋ค์ 1์๋ฅผ ์ฐจ์งํ์ง๋ง, Hyperlane๊ณผ์ ์ฐจ์ด (โโฏ0.5โฏ%)๋ ๋ฏธ๋ฏธํ์ฌ ์ค์ง์ ์ผ๋ก ํ ์คํธ ๋ณ๋ ๋ฒ์ ์์ ์๋ค.
์ด๋ฌํ ๊ฒฐ๊ณผ๋ Hyperlane์ ์ฐ๊ฒฐ ๊ด๋ฆฌ ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ด ๋งค์ฐ ํจ์จ์ ์์ ์์ฌํ๋ฉฐ, ํนํ ๋จ์๊ฐ ์ฐ๊ฒฐ ์๋๋ฆฌ์ค์์ ๋๋๋ฌ์ง๋ค.
Sample Implementations
Node.js (standard library)
// server.js
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello');
});
server.listen(60000, '127.0.0.1');
๊ตฌํ์ ๊ฐ๊ฒฐํ์ง๋ง ๋๊ท๋ชจ ๋์์ฑ ํ์์ ์ด๋ฒคํธ ๋ฃจํ ๋ณ๋ชฉ ํ์๊ณผ ์ ์ฌ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํฉ๋๋ค. ํ ์คํธ์์๋ Node.js ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์ ๋ถํ์์ 811,908๊ฐ์ ์คํจ ์์ฒญ์ ๊ธฐ๋กํ์ต๋๋ค.
Go (standard library)
// main.go
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":60000", nil)
}
Go์ ๊ณ ๋ฃจํด ๋ชจ๋ธ์ ๋ ๋์ ๋์์ฑ์ ์ ๊ณตํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ธก๋ฉด์์ ๊ฐ์ ์ฌ์ง๊ฐ ๋จ์ ์์ต๋๋ค. ๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ๋ 234,178.93โฏQPS๋ฅผ ๊ธฐ๋กํ์ผ๋ฉฐ, Node๋ณด๋ค ํจ์ฌ ์ฐ์ํ์ง๋ง ์ต์์ Rust ๊ธฐ๋ฐ ํ๋ ์์ํฌ๋ณด๋ค๋ ์์ง ๋ค์ฒ์ง๋๋ค.
Rust (standard library)
// main.rs
use std::io::prelude::*;
use std::net::{TcpListener, TcpStream};
fn handle_client(mut stream: TcpStream) {
let response = "HTTP/1.1 200 OK\r\n\r\nHello";
stream.write_all(response.as_bytes()).unwrap();
stream.flush().unwrap();
}
fn main() {
let listener = TcpListener::bind("127.0.0.1:60000").unwrap();
for stream in listener.incoming() {
let stream = stream.unwrap();
handle_client(stream);
}
}
Rust์ ์ ๋ก ์ฝ์คํธ ์ถ์ํ์ ์์ ๊ถ ๋ชจ๋ธ์ 291,218.96โฏQPS๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ธ์์ ์ด์ง๋ง, ์ฐ๊ฒฐ ๊ด๋ฆฌ๋ ๊ทนํ ๋์์ฑ์ ์ํด ์์ง ์กฐ์ ๋ ์ฌ์ง๊ฐ ์์ต๋๋ค.
Takeaway
๋น๊ต ํ ์คํธ๋ Hyperlane์ด ๊ฐ์ฅ ์ธ๊ธฐ ์๋ Rust ํ๋ ์์ํฌ(Tokio, Rocket)์ ์ฑ๋ฅ์ ์ง์์ ์ผ๋ก ๋์ ํ๊ฑฐ๋ ๋ฅ๊ฐํ๋ฉฐ, Go, Node ๋ฐ ์ผ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ตฌํ๋ณด๋ค ํจ์ฌ ์์ ๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ด์ ์ง์ฐ ๋ฐ ๋์ ์ฒ๋ฆฌ๋์ ์๊ตฌํ๋ ์ํฌ๋ก๋โํนํ keepโalive๊ฐ ๋นํ์ฑํ๋ ๊ฒฝ์ฐโ์ ๋ํด Hyperlane์ ์ฐ๊ฒฐ ์ฒ๋ฆฌ์ ๋ฐ์ดํฐ ์ ์ก์ ๊ดํ ์ค๊ณ ์ ํ์ด ๋งค๋ ฅ์ ์ธ ์ต์ ์ด ๋ฉ๋๋ค.
์์ ์ฝ๋ ์ค๋ํซ์ ์์ ๋กญ๊ฒ ์คํํ๊ณ ๊ตฌ์ฑ๋ค์ ์ฌ๋ฌ๋ถ์ ์ํฌ๋ก๋์ ๋ง๊ฒ ์กฐ์ ํ์ธ์.
์ฐ๊ฒฐ ๊ด๋ฆฌ
- Hyperlane ํ๋ ์์ํฌ๋ connection reuse์ ๋ฐ์ด๋๋ฉฐ, ์ด๋ KeepโAlive ํ ์คํธ์์ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ด๋ ์ด์ ๋ฅผ ์ค๋ช ํฉ๋๋ค.
- ์ ํต์ ์ธ ์น ํ๋ ์์ํฌ๋ ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํ ๋ ๅคง้ไธดๆถๅฏน่ฑก๋ฅผ ์์ฃผ ์์ฑํ์ฌ GC ์๋ฐ์ ์ฆ๊ฐ์ํต๋๋ค.
- Hyperlane๋ objectโpool technology๋ฅผ ์ฑํํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ค๋ฒํค๋๋ฅผ ํฌ๊ฒ ์ค์ ๋๋ค.
Memory Management
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ์นโํ๋ ์์ํฌ ์ฑ๋ฅ์ ๋ ๋ค๋ฅธ ํต์ฌ ์์์ ๋๋ค.
- ํ ์คํธ์์๋ Rust์ ์์ ๊ถ ์์คํ ์ด ๋ฐ์ด๋ ์ฑ๋ฅ์ ์ ๊ณตํ์ง๋ง, ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๊ฐ๋ฐ์๋ค์ด ๋ณต์กํ ๋ผ์ดํํ์ ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ์ด์ผ ํ ๋๊ฐ ๋ง์ต๋๋ค.
- Hyperlane์ Rust์ ์์ ๊ถ ๋ชจ๋ธ์ ๋ง์ถค ๋ฉ๋ชจ๋ฆฌ ํ์ ๊ฒฐํฉํ์ฌ ์ ๋กโ๋ณต์ฌ ๋ฐ์ดํฐ ์ ์ก์ ๊ตฌํํฉ๋๋ค โ ํนํ ๋์ฉ๋ ํ์ผ ์ ์ก์ ํจ๊ณผ์ ์ ๋๋ค.
๋น๋๊ธฐ ์ฒ๋ฆฌ
- ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ ํ๋ ์น ํ๋ ์์ํฌ์ ํต์ฌ ๊ธฐ๋ฅ์ ๋๋ค.
- Tokio๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ์์ ์ข์ ์ฑ๋ฅ์ ๋ณด์ด์ง๋ง, ๋์ ๋์์ฑ ํ์์๋ ์์ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ด ๋ณ๋ชฉ ํ์์ ๊ฒช์ ์ ์์ต๋๋ค.
- Hyperlane์ ์์คํ ๋ถํ์ ๋ฐ๋ผ ์์ ํ ๋น์ ๋์ ์ผ๋ก ์กฐ์ ํ๋ ๋ณด๋ค ์ง๋ณด๋ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๊ธ์ฆํ๋ ํธ๋ํฝ์ ํนํ ํจ๊ณผ์ ์ ๋๋ค.
์ฌ์ฉ ์ฌ๋ก ๊ถ์ฅ ์ฌํญ
์ ์ ์๊ฑฐ๋
- ์ฑ๋ฅ์ ์ง์ ์ ์ผ๋ก ๋งค์ถ๋ก ์ด์ด์ง๋๋ค.
- Hyperlane๋ ์ ํ ๋ชฉ๋ก, ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ์ฃผ๋ฌธ ์ฒ๋ฆฌ์์ ๋ฐ์ด๋ฉ๋๋ค.
- ์ถ์ฒ: ํต์ฌ ๋น์ฆ๋์ค ์์คํ ์ Hyperlane๋ฅผ ์ฌ์ฉํ๊ณ , ํนํ ์ ํ ๊ฒ์ ๋ฐ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฐ์ CPU ์ง์ฝ์ ์ธ ์์ ์ ํ์ฉํ์ญ์์ค.
- ์ ์ ์์ฐ์ ๊ฒฝ์ฐ Nginx์ ๊ฐ์ ์ ์ฉ ์๋ฒ๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
์์ ํ๋ซํผ
- ์๋ง์ ์ฐ๊ฒฐ๊ณผ ๋น๋ฒํ ๋ฉ์์ง๊ฐ ํน์ง์ ๋๋ค.
- Hyperlane๋ WebSocket ์ฐ๊ฒฐ ๊ด๋ฆฌ์ ๋ฐ์ด๋๋ฉฐ ์์ญ๋ง ๊ฐ์ ๋์ ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ์ถ์ฒ: Hyperlane์ Redis์ ๊ฐ์ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฒฐํฉํ์ฌ ์ค์๊ฐ ์ ๋ฌ์ ์ํ ๋ฉ์์ง ํธ์ ์์คํ ์ ๊ตฌ์ถํ์ญ์์ค.
- ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง(์: ์ฌ์ฉ์ ๊ด๊ณ ๊ด๋ฆฌ)์ ๊ฒฝ์ฐ GraphQL ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค.
์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์
- ๋ณต์กํ ๋น์ฆ๋์ค ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํด์ผ ํฉ๋๋ค.
- Hyperlane๋ ํธ๋์ญ์ ์ฒ๋ฆฌ์ ๋ํ ๊ฐ๋ ฅํ ์ง์์ ์ ๊ณตํ์ฌ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
- ์ถ์ฒ: ํต์ฌ ๋น์ฆ๋์ค ์์คํ ์ Hyperlane์ PostgreSQL๊ณผ ๊ฐ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํด ๊ตฌ์ถํ์ญ์์ค.
- ๋ณด๊ณ ์ ์์ฑ๊ณผ ๊ฐ์ CPU ์ง์ฝ์ ์ธ ์์ ์๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ์ฉํ์ญ์์ค.
์น ํ๋ ์์ํฌ์ ํฅํ ๋ฐฉํฅ
- ์ฑ๋ฅ ํ์ฅ โ ์ง์์ ์ธ ํ๋์จ์ด ๊ฐ์ ์ ๋ฐ๋ผ ํ๋ ์์ํฌ๋ ๋ฐฑ๋ง ์์ค QPS์ ๋ง์ดํฌ๋ก์ด ์์ค ์ง์ฐ์๊ฐ์ ๋ชฉํ๋ก ํ ๊ฒ์ ๋๋ค.
- ๊ฐ๋ฐ์ ๊ฒฝํ โ ํฅ์๋ IDE ํตํฉ, ๋๋ฒ๊น ๋๊ตฌ ๋ฐ ๋ชจ๋ํฐ๋ง ๋์๋ณด๋๋ ๊ณ ์ฑ๋ฅ ๊ฐ๋ฐ์ ๋ณด๋ค ์ฝ๊ฒ ์ ๊ทผํ ์ ์๊ฒ ํ ๊ฒ์ ๋๋ค.
- ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ๊ธฐ๋ฅ โ ์ปจํ ์ด๋ํ, ๋ง์ดํฌ๋ก์๋น์ค, ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ, ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ฐ ํ๋ก ์ฐจ๋จ์ ๋ํ ๋ด์ฅ ์ง์์ด ํ์ค์ด ๋ ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก
์ด ์ฌ์ธต ํ ์คํธ๋ฅผ ํตํด ์น ํ๋ ์์ํฌ์ ๋ฏธ๋ ๊ฐ๋ฐ์ ๋ํด ๋ณด๋ค ๋ช ํํ ์ดํด๋ฅผ ์ป์์ต๋๋ค. Hyperlane ํ๋ ์์ํฌ์ ๋ฑ์ฅ์ ์น ๊ฐ๋ฐ์์ Rust๊ฐ ์ ๊ณตํ ์ ์๋ ๋ฌดํํ ๊ฐ๋ฅ์ฑ์ ๋ณด์ฌ์ค๋๋ค. ์ผ๋ถ ๋ ๋ฆฝ์ ์ธ ํ ์คํธ์์๋ Tokio๊ฐ Hyperlane๋ณด๋ค ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์ ์์ง๋ง, Hyperlane์ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์์ ๋ ์ฐ์ํ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์๋์ด ๊ฐ๋ฐ์๋ก์ ์ ๋ ํ๋ ์์ํฌ๋ฅผ ํ๊ฐํ ๋ ๋จ์ํ ์์ ์ฑ๋ฅ ์งํ๋ฟ๋ง ์๋๋ผ ๊ฐ๋ฐ ๊ฒฝํ, ์ํ๊ณ, ์ปค๋ฎค๋ํฐ ์ง์๋ ๊ณ ๋ คํ ๊ฒ์ ์ ์ํฉ๋๋ค. Hyperlane์ ์ด๋ฌํ ์ธก๋ฉด์์๋ ๋์ ์ ์๋ฅผ ๋ฐ์ผ๋ฉฐ ์ฃผ๋ชฉ๋ฐ์ ๋งํ๊ณ ๅฐ่ฏํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
์น ๊ฐ๋ฐ์ ๋ฏธ๋๋ ์ฑ๋ฅ๊ณผ ํจ์จ์ฑ์ ๋์ฑ ์ด์ ์ ๋ง์ถ ๊ฒ์ด๋ฉฐ, ์ ๋ Hyperlane์ด ์ ์ ๋ ์ค์ํ ์ญํ ์ ํ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค. ๋ค์ ์นโ๊ฐ๋ฐ ๊ธฐ์ ํ์ ์ ํจ๊ป ๊ธฐ๋ํฉ์๋ค!
GitHub Homepage: