본문 바로가기

백엔드/성능 최적화8

Good Retry, Bad Retry 장애 스토리 Good Retry, Bad Retry 장애 스토리정말 좋은 글이기에, 아래 블로그에 있는 내용에 대한 리뷰를 써보고자 한다.https://medium.com/yandex/good-retry-bad-retry-an-incident-story-648072d3cee6 Good Retry, Bad Retry: An Incident StorySometimes, a seemingly simple and obvious solution can lead to a series of problems later on. This is especially true when adding retries.medium.com리뷰를 하기에 앞서 초보자들도 이해를 돕기 위해 몇가지 예시는 임의로 추가를 하였고 교정하였음을 알려 드린다. .. 2024. 11. 27.
FastAPI의 Uvicorn + Gunicorn 결합은 반드시 필요한 것인가? 개요 FastAPI는 비동기 프레임워크로 ASGI 서버를 지원하는 Uvicorn 과 함께 기동되어 사용된다. 다른 Flask, Django와 비교하여 성능이 2배정도 빠르다고 알려져있다. 하지만 성능이 빠르다고한들 개발자가 사용방법을 모르고 개발한다면 제대로 된 성능을 끌어올리기에는 어려움이 있을 수 있다. 우리는 정말 제대로 알고 사용하고 있는것인가? 이번 포스팅에서는 Uvicorn이 반드시 Guicorn과 결합이 필요한지에 대하여 알아보고자한다. 배경지식 Gunicorn이란 무엇인가? Gunicorn 은 WSGI 프로토콜을 사용하여 웹 애플리케이션과 상호 작용하는 서버이자 프로세스 관리자이다. Flask 또는 Django 와 같은 WSGI 동기식 웹 프레임워크로 작성된 애플리케이션을 제공한다. Gun.. 2024. 4. 10.
FastAPI 동기/비동기 동작 방식 분해해보기 개요 회사에서 FastAPI 프레임워크로 개발해서 서비스 런칭하는 일이 잦아지면서 백엔드와 FastAPI 사용방법에 대한 지식이 부족하다는 것을 요즘 느끼고있다. 디테일하게 공부하고자하는 마음에 여러가지 실험한 결과에 대해 오랜만에 블로그에 포스팅하고자한다. 이론으로는 알지만 게을러서 실험해보지 못했던 FastAPI 동기/비동기 동작 방식 분해해보기 먼저 작성해보려고한다. 우선 FastAPI 동기/비동기 동작 방식을 알아보기 전에 동기식 웹 방식 vs 비동기식 웹 방식의 기본적인 배경 지식부터 알아보고 가자 동기식 (sync) 웹 방식 전통적인 WSGI (Web Server Gateway Interface) 프레임워크에서 1개의 요청당 1개의 스레드 (Worker)를 생성하여 처리하는 방식이었다. 비동기.. 2024. 4. 5.
메모리 할당 기법 ptmalloc2 vs tcmalloc vs hoard vs jemalloc 비교 개요 우리가 서드파티 데이터베이스를 다루거나 운영체제 등을 설정할때 메모리를 할당하는 여러가지 기법이 있다. 대표적으로 ptmalloc2, tcmalloc, hoard, jemalloc등 있는데 이 기법에 대해 고찰해보자. 현대 메모리 할당 기법은 크게 차이가 나지 않지만 특정 상황에서는 우수한 성능을 발휘할 수 있다는 점을 인지하자 우선 개념부터 알아보자 PTMalloc2 PTMalloc2는 Doug Lea에 의해 개발된 메모리 할당기의 두 번째 버전이다. PTMalloc2는 기존의 PTMalloc보다 더 효율적인 메모리 할당과 관리를 제공하기 위해 개선되었다. 주로 glibc의 메모리 할당기로 사용되며, C/C++ 언어에서 사용되는 대규모의 동적 메모리 할당과 해제를 효율적으로 처리하는 것이 목표이다.. 2023. 7. 26.
JVM 성능을 최적화 방법 JVM GC 최적화 JVM과 GC에 대해 지식이 있다는 가정하에 작성하였다. GC와 JVM 기초는 대한 기본 동작 방식 소개는 이전 페이지를 보면 나와있다. 1. 명시적 GC 알고리즘 설정 필요한 GC 알고리즘을 명시적으로 지정해주는 것이 좋다. 예를 들어 Java 8에서 기본 GC는 병렬 GC이고 Java 11에서 기본값은 G1GC이다. 이는 명시적으로 GC를 설정하지 않는 한 Java 8에서 Java 11로 업그레이드할 때 더 좋든 나쁘든 간에 사용자와 의지와는 상관없이 변경됨을 의미한다. -XX:+UseG1GC 2. Heap 크기 설정 -ms 와 -mx 옵션을 이용해서 힙 크기를 설정한다. 이러한 옵션으로 인하여 서버 안의 메모리의 최소, 최대를 조절할 수 있다. 간혹 -ms -mx와 같게 설정하시.. 2022. 4. 8.
JVM 과 Garbage Collection 동작 방식 Garbage Collection GC (Garbage Collection) 이란? 힙 메모리를 살펴보고 사용 중인 개체와 사용하지 않은 객체를 식별하고 사용하지 않는 객체를 삭제하는 프로세스이다. Java에서 메모리 할당 해제 프로세스는 GC (가비지 컬렉션)에 의해 자동으로 처리된다. 기본 동작 방식 Step 1: Marking (마킹) 사용 중인 메모리 조각과 사용하지 않는 메모리 조각을 식별하는 단계 Step 2: Normal Deletion (일반 삭제) 일반 삭제는 참조되지 않은 개체를 제거하여 참조된 개체와 포인터를 여유 공간으로 남김 Step 2a: Deletion with Compacting (삭제 및 압축) 성능을 더욱 향상시키기 위해 참조되지 않은 개체를 삭제하는 것 외에도 참조된 나.. 2022. 4. 7.
K6 성능 테스트 툴 K6이란? k6은 엔지니어링 팀의 성능 테스트를 쉽고 생산적으로 만드는 오픈 소스 부하 테스트 도구이다. k6은 무료이며 개발자 중심적이며 확장 가능하다. 주요특징 테스트 스크립트를 Javascript (ES6) 로 작성. jmeter (jmx) 대비 개발자 친화적이고, 시나리오와 함께 테스트 설정까지 코드로 구현 가능, 재사용을 위한 모듈화 가능 Jmeter 대비 더 작은 리소스로 성능 테스트 구현, 즉, jmeter 보다 동일자원에서 더 많은 트래픽을 생산 가능 window 설치방법 1. PowerShell을 활용하여 Chocolatey 패키지 매니저를 설치 C:\> Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointM.. 2022. 3. 31.
인프라 관점의 성능 최적화 성능 최적화 인프라 관점 서버에 과부하가 걸리게되면 소프트웨어로 해결하는데는 어느정도 한계가 있다. 그렇기때문에 그 다음 순으로 물리적인 인프라를 증설하는 방법을 강구해야한다. 그렇다면 어느 시점에 어느 타이밍에 인프라를 증설하는게 맞는 것일까? 하는 물음이 생기게 된다. 정답은 없지만 임계치를 정하고 개념을 알아야 대응이 가능하다. CPU CPU가 100%가 차지하게되어 서버를 증설하려고하면 늦어도 한참 늦는다. 그럴 경우 이미 어플리케이션이나 데이터베이스등은 제대로 동작을 하지 않을 시점으로 장애가 발생한 후이다. 일반적으로 70~80% 까지 임계치를 설정해두고 20% 정도는 항상 여유를 남겨놓아 시간적 여유를 두어 증설할 수 있다. MEM Java와 같은 어플리케이션일 경우 JVM 메모리 제한을 설.. 2022. 3. 30.
728x90
반응형