언어

Rust

dayeonsheep 2024. 3. 5. 13:39

rust language;

 

장점

  • low level programming language 인데(임베디드나 서버 등에 구축하는 언어), 같은 low level PL인 C/C++보다 메모리 성능이 좋음 (memory-safe함)
  • TTFB(Time to first byte = 클라이언트요청 + 서버처리시간 + 서버로부터 클라이언트로 응답 시간)가 빠름
  • 인터프리지, 가상머신 없어서 빠름. 가비지 컬렉터 없음
  • 메모리 회수 작업 없음, 컴파일 타임이 미리 메모리 관리해서 성능 좋음
  • 컴파일러 친절함
  • unsafe 코드를 사용하지 않는 한, 컴파일되는 모든 코드는 메모리 버그를 일으키지 않음이 보장됨
    •  아주 가끔씩 safe 코드만으로 undefined behavior를 만들어낼 수 있는 구멍이 발생하지만(soundness hole), 그러한 동작들은 명백히 버그로 규정되어 최우선적으로 수정

 

단점

  • 배우기 어려움(학습 곡선이 높다)
  •  -> 빠르게 구현해서 내보내는 프로세스가 정립된 B2C 서비스들을 운영엔 적합하지 않음
    • <-> GO 는 기능 적고 진입 장벽 낮고 빨라서 백엔드에서 많이 쓰이는 이유와 반대되는 점
  • 라이브러리 및 통합 개발 환경(IDE) 지원 부족

https://blog.cro.sh/posts/four-years-of-rust/

 

4년간의 Rust 사용 후기

2018년 중순부터 4년간 Rust를 사용해보았고, 최근 1년 반 가량은 병역특례를 하면서 프로덕션에서도 사용을 해 보았다. 연말이기도 하니, 그 동안 내가 Rust를 하면서 어떤 인상을 받았는지를 중점

blog.cro.sh

 

 

 

cloudflare

-> c로 설계된 nginx로 구축하였음

 

nginx의 한계

  • 매 요청에 대해 단일 worker만 사용하므로 cpu core 사용 불균형이 존재
  • worker당 connection pool이 존재하기 때문에 TCP 및 TLS 커넥션 연결 재활용율이 나쁨 -> TTFB가 높아짐
    • TCP / TLS 커넥션 연결 : 
  • nginx를 운영하는데 필요한 기능들을 자체 구현하고 있었는데 C로 설계된 nginx는 memory-safe하지 않음 (숙련된 엔지니어도 실수를 하곤 했음)

 

Rust로 만든 HTTP proxy(=Pingora=HTTP 프록시 서비스 구축을 지원하는 Rust 비동기 다중 스레드 프레임워크=Rust framework) 활용 전환

  • Cloudflare는 비 RFC 규격의 요청도 많이 받고 있는데 타사 라이브러리(hyper)는 RFC에 엄격한 상태로 구현되어있어서 확장하려면 추가 공수가 들어가기에 자체 구축
  • Rust는 성능 저하 없이 memory safe한 방식으로 C가 할 수 있는 일을 대체 가능해서 선택
  • 연결 풀을 쉽게 공유하기 위해 work-stealing 방식의 스케줄링 시스템을 도입했고, 재사용률이 증가함. 이전에 비해서 초당 1/3 수준의 커넥션을 맺음
  • 이전에 비해서 CPU는 70%, 메모리는 67% 적게 사용함
  • Cloudflare 트래픽의 상당부분을 처리하며 2022년 9월에 소개한 이후 거의 1000조건에 달하는 요청을 처리해 왔음

 

Pingora 추가 설명

  • HTTP/1 및 HTTP/2, TLS 또는 TCP/UDP 위에 서비스를 구축하기 위한 라이브러리와 API를 제공
  • 프록시로서는 HTTP/1 및 HTTP/2 E2E, gRPC 및 웹소켓 프록시를 지원하며 HTTP/3 지원도 로드맵에 있음
  • 사용자 정의 가능로드 밸런싱 및 장애 조치 전략도 함께 제공
  • OpenSSL 과 BoringSSL 라이브러리를 둘 다 지원하며, FIPS 준수 및 Post-Quantum Crypto 도 포함
    • SSL?
    • FIPS?
    • Post-Quantum Crypto?
  • 사용자가 서비스가 요청을 처리, 변환 및 전달하는 방법을 완전히 사용자 정의할 수 있도록 필터와 콜백을 제공
  • OpenResty의 "*_by_lua" 콜백과 직관적으로 매핑되므로 OpenResty 및 NGINX 사용자에게 특히 친숙함
  • 운영상 편의를 위해 단일 수신 요청을 삭제하지 않고 자체적으로 업그레이드할 수 있도록 가동 중지 시간 없이 단계적으로 다시 시작하는 기능을 제공
  • Syslog, Prometheus, Sentry, OpenTelemetry 및 기타 필수 관찰 도구와도 쉽게 통합
  • 이벤트 계산, 오류 처리 및 캐싱과 같은 일반적인 로직을 구현하는 몇가지 유틸리티도 포함

 

 


참고

 

https://blog.cloudflare.com/how-we-built-pingora-the-proxy-that-connects-cloudflare-to-the-internet/

 

How we built Pingora, the proxy that connects Cloudflare to the Internet

Today we are excited to talk about Pingora, a new HTTP proxy we’ve built in-house using Rust that serves over 1 trillion requests a day.

blog.cloudflare.com

https://github.com/cloudflare/pingora

 

GitHub - cloudflare/pingora: A library for building fast, reliable and evolvable network services.

A library for building fast, reliable and evolvable network services. - cloudflare/pingora

github.com

https://news.hada.io/topic?id=13588&utm_source=weekly&utm_medium=email&utm_campaign=202410

 

Pingora - 네트워크 시스템 구축용 오픈소스 Rust 프레임워크 | GeekNews

HTTP 프록시 서비스 구축을 지원하는 Rust 비동기 다중 스레드 프레임워크빠르고 안정적이며 프로그래밍 가능한 네트워크 구축을 위해 Cloudflare가 내부적으로 사용하던 프레임워크를 오픈소스로

news.hada.io

https://news.hada.io/topic?id=13581&utm_source=weekly&utm_medium=email&utm_campaign=202410

 

백악관, 개발자들에게 C와 C++를 피하고 '메모리 안전' 언어 사용 촉구 | GeekNews

조 바이든 행정부는 소프트웨어 개발자들이 메모리 안전 프로그래밍 언어를 사용하고 C/C++ 와 같은 취약한 프로그래밍 언어를 버리기 원함.백악관 국가사이버국장실(ONCD)은 최근 발표한 보고서

news.hada.io

(안전한 PL 중 하나로도 백악관에서 꼽힘)