본문 바로가기

소프트웨어 이야기/인프라

(PostgreSQL) Temporary Table과 Autovacuum Temporary Table은 Autovacuum 대상이 아니다. Temporary Table은 임시 테이블을 생성한 Connection에서만 조회할 수 있기 때문에 Autovacuum 데몬은 Temporary Table을 볼 수 없다. Temporary Table이 사용중인 공간은 Connection이 닫히면 저절로 회수된다. 그러나 만약, Transaction이 장기간 지속된다면 자원이 회수되지 않아 문제가 될 수 있다. Temporary Table에서 XID를 오랜시간 점유하고 있다면, Temporary Table을 생성한 세션을 종료하여 자원을 반환시켜야한다. 참고 What is autovacuum doing to my temporary tables? - Cybertec Did you know t..
(PostgreSQL) PostgreSQL autovacuum을 튜닝할 때 유용한 Tip 💡 이번 글에서는 Working with PostgreSQL autovacuum on Amazon RDS을 정리한 내용을 다루고자 한다. Autovacuum은 자동으로 VACUUM과 ANALYZE 명령문을 실행한다. Autovacuum은 추가/수정/삭제된 튜플이 많은 테이블을 찾는다. 그리고 데이터베이스에서 더 이상 사용되지 않는 데이터를 정리하여 저장공간을 확보한다. 기본적으로 AWS RDS PostgreSQL에서 Autovacuum이 활성화되어있다. 그리고 autovacuum과 관련된 설정들을 적절한 값을 기본값으로 설정해준다. 이 기본값들은 일반적인 기준으로 설정한 값이다. 때문에 시스템 특성에 맞는 적절한 값으로 설정값을 튜닝하면 성능상 이점을 얻을 수 있다. 해당 포스팅에서는 autovacuum 튜..
[쿠버네티스] uWsgi Graceful Shutdown 발단 회사 시스템에서 API 요청이 비정상적으로 종료되는 오류가 있어서 원인을 분석하게 되었다. 그러다 이 오류는 배포 타이밍과 비슷한 패턴으로 발생한다는 것을 발견하게 되었다. 즉, 이 문제는 Pod이 죽을 때, uWsgi 컨테이너가 Graceful Shutdown을 하고있지 않아서 발생한 문제였다. 이번 글에서는 이 경험에서 학습했던 uWsgi의 특징과 쿠버네티스 파드의 종료 방식에 대해서 정리해보고자 한다. Graceful Shutdown이란? 프로그램이 종료될 때, 최대한 사이드 이펙트 없이 로직을 잘 처리하고 종료하는 것을 말한다. 예를 들어, 열심히 PPT를 작성하던 도중에 파워포인트가 꺼지는 모습을 상상해보자. 이 때, 아무런 조치없이 프로그램이 종료되고, 이전의 작업 내용이 유실된다면 이는..
[uWsgi] harakiri 옵션 - 지나치게 오래걸리는 요청 제어하기 harakiri 하라키리는 워커의 Request 처리 지연을 예방할 수 있는 uWsgi의 기능이다. Request 처리 시간이 uWsgi에 설정한 값보다 오래 소요되는 경우, 해당 Request는 제거되고, 워커는 재사용된다. 사용법 uwsgi 설정 [uwsgi] http = 0.0.0.0:80 harakiri = 30 ...nginx 설정 nginx의 timeout은 harakiri 설정과 동일해야, 각 기능이 기대한대로 동작하게 된다. 예를 들어, harakiri 값이 더 높으면, nginx timeout 설정이 의미 없게 된다. 반면, harakiri 설정값이 더 낮으면, harakiri 설정이 의미 없게 된다. location / { proxy\_pass http://my\_uwsgi\_upstr..
ElasticSearch Remote Reindex - ES 버전업과 마이그레이트 Remote Reindex란?Elasticsearch의 Reindex API를 사용하면 도큐먼트를 새로운 인덱스로 복사할 수 있다. Remote Reindex를 사용하면, 도큐먼트를 원격 클러스터의 인덱스로 복사할 수 있다. 때문에 이 기능을 사용하면 Elasticsearch 버전업을 수월하게 할 수 있다. Rolling Upgrade가 불가능한 버전 업을 해야하는 경우, 실시간으로 구 클러스터와 신규 클러스터의 인덱스를 동기화해야하는 경우에 유용하게 쓰일 수 있다. POST _reindex { "source": { "remote": { "host": "http://oldhost:9200", "username": "user", "password": "pass" }, "index": "source", "q..
(Istio) Traffic Management - Network resilience Istio의 Traffic Management 기능은 네트워크의 탄력성 (resilience)을 높이는 역할을 담당하고 있다. 이를 위해 failure recovery 기능과 fault injection feature 기능을 지원한다. 특정 노드에서 네트워크 오류가 발생하면, Istio는 의도적으로 결함을 일으킨다. 그리고 그동안 서버가 복구될 수 있는 시간을 확보한다. 이러한 방식은 특정 노드의 장애가 전체 노드에 전파되는 것을 막는다. 이는 Fault tolerant 시스템을 가능하게 해준다. 덕분에, 일부 서비스에서 결함이 발생하더도, 전체 서비스는 잘 운영될 수 있다. Timeouts Envoy proxy가 서비스 노드에서 응답받아야하는 최대 시간을 의미한다. 이 시간내에 응답하지 않으면, HTT..
ngrok - 외부에서 로컬 컴퓨터에 접속할 수 있게 만들기 ngrok 로컬에서 실행중인 서버를 외부에서 접속할 수있도록 도와주는 프로그램이다. ngrok은 로컬에서 개발 중인 API와 웹페이지를 다른 컴퓨터에서 조회해야할 때 유용하다. 예를 들어, 로컬에서 띄운 포트인 "localhost:3000"를 "a6fee076.ngrok.io" 처럼 도메인을 만들어주고, 도메인을 통해 외부에서 접속도 가능하게 해준다. 설치 ngrok 사이트, npm, brew 등으로 설치하면 된다. npm install ngrok 실행 ngrok http 3000
[Varnish] Vary User-Agent HTTP Header가 캐시 퍼포먼스에 미치는 영향 Vary HTTP Header란? vary: Accept-Language, User-Agent, Cookie, Accept-Encoding 동일한 URL에서 사용자 에이전트에 따라 다른 응답을 내려줄 때 가용되는 Header이다. Vary User-Agent HTTP Header가 Cache Hit에 미치는 영향 과거의 웹 환경에서는 에이전트 환경 별로 보여주는 HTML이 달랐다. 그래서 Vary Header의 User-Agent 값을 활용하여 클라이언트 별로 다른 데이터를 내려줬다. 그러나 오늘날에는 에이전트별로 다른 HTML을 내려주지 않는다. 그리고 현대 웹 개발에서는 JSON 데이터으로 데이터를 주고받기 때문에, 유저 에이전트 별로 데이터가 다른 경우는 흔치 않다. 때문에 Vary HTTP Hea..