본문 바로가기

server

(34)
Consistent Hashing (일관된 해싱) 일관된 해싱은 여러 스토리지 서버 간에 데이터를 분할하여 스토리지 시스템의 확장성을 구현하기 위해 수행된다. 많은 서버 (데이터베이스 서버+ 파티션)에 많은 데이터가 분산되어 있고 사용 가능한 서버 수가 지속적으로 변경되는 경우 (서버 추가 또는 서버 제거) 일관된 해싱을 사용한다. 단순 해싱을 쓸 수 없는 이유 간단한 해싱은 데이터와 지정된 키를 모듈러 함수를 통해 지정된 범위의 숫자로 생성한다. 모듈러 함수로 md5 사용한다면 0~2^128−1 범위에서 임의의 값을 얻을 수 있다. 이제 우리의 해시 함수는 server_number = hash(key)%n 로 계산된다. 이것은 [0- (n-1)] 범위로 제공하며 n은 서버의 수가 된다. 이렇게 하면 서버수에 따라 데이터가 완벽하게 나뉜다. value를..
1. TinyURL // bitly (URL shortening service) 1. 기능 요구 사항 사용자가 입력한 url(원본 도메인)을 특정 도메인을 포함한 형태로 단축 URL로 반환한다. 반환된 단축 url 클릭시 원본 URL로 리다이렉트 된다. 단축 URL은 일정시간이 지나면 만료되어 삭제된다. 만료 시간은 지정할 수 있어야 한다. ex) 예시로 tinyurl.com에서 실행한 결과 기존 url https://www.youtube.com/watch?app=desktop&v=xFPJmk5NQao&ab_channel=siterubix 단축 url https://tinyurl.com/4fyzbta6 2. 추정 및 제약 사항 2-1 트래픽 해당 시스템은 read가 압도적으로 많을 것이다. 읽기와 쓰기 사이의 비율이 100:1로 가정한다. 예상 트래픽 매월 5억 개의 새로운 단축 U..
how to system desgin? system desgin 질문에서의 파악해야할 4가지 1. 사용자 : 시스템을 누가 어떻게 사용하는가? 2. 스케일 : 시스템 증가에 따른 데이터 처리 방법 3. 성능 : 시스템이 얼마나 빨라야 하는가? 4. 비용 : 어떤 구조가 더 빠르고 효율적인가? System desgin 시 생각해야할 사항들 요구 사항에 맞는 제약사항 도출 사용자 수 트래픽, 1년, 5년 파일 저장 용량 - 1년 5년 디비 저장 용량 - 1년 5년 웹 서버 메모리 + 캐시 메모리 사용 API 도출 및 설계 API에 따른 디비 설계 서비스에 필요한 기본 알고리즘 도출 수정 및 최적화 DB 최적화 ( 용도, 사이즈에 맞는 DB 선택 및 파티셔닝 여부 ) 데이터의 성향에 맞는 디비 선택 테이블간의 조인이 많이 필요하면 RDB 확장과 테..
로그가 서버를 죽이러 왔다. 사건의 발단 : 1) airflow가 설치된 서버의 스토리지가 모든 용량을 꽉 채우고 죽는 사태가 벌어진 적이 있다. 2) 문제는 airflow의 로그가 계속 쌓여 있어서, 해당 로그들을 삭제함으로써 몇달은 버틸 수 있었다. 3) 이제 스토리지 용량이 다 되어 로그 삭제를 개발하려 했다. 먼저 해당 서버의 스토리지 용량을 다음의 명령어들을 사용해서 확인하려고 했다. df (disk free) - 디스크 여유 공간 확인 df 명령을 사용하면 리눅스 시스템 전체의 (마운트 된) 디스크 사용량을 확인할 수 있다. 파일시스템, 디스크 크기, 사용량, 여유공간, 사용률, 마운트 지점 순으로 나타낸다. du (disk usage) - 디렉토리 디스크 사용량 확인 df 명령어가 시스템 전체의 디스크 공간을 확인하는 ..
airflow 시간대가 다른 두개의 dag을 ExternalTaskSensor 사용하기 airflow ExternalTaskSensor의 설명은 아래 블로그가 잘되어 있으니 참고!! tommybebe.github.io/2020/11/30/airflow-external-task-sensor/ Airflow ExternalTaskSensor 사용 방법 Airlflow Task의 upstream, downstream 설정을 통해 Task 실행 순서를 설정할 수 있는 것과 유사하게 DAG과 DAG 사이에서도 실행 순서를 설정할 필요가 있는 경우가 있다. 이 경우를 위해 Cross-DAG Dependencies가 tommybebe.github.io 나의 경우 ExternalTaskSensor를 이용해서 2개의 dag이 끝나는 시점을 감지한 후 새로운 dag을 실행해야 하는 상황이었다. * 감지해야 ..
Difference between the Accept and Content-Type HTTP headers https://stackoverflow.com/questions/35722586/header-parameters-accept-and-content-type-in-a-rest-context Accept 매개변수는 서버에서 전송된 클라이언트 응답에 예상되는 데이터 유형을 정의하기 때문에 응답 헤더로 사용되는 것으로 알고 있습니다. 저의 질문은 content-type에 관한 것인데, 클라이언트가 보낸 요청의 본문 형식을 정의하기 위해 content-type을 사용합니다. 항상 클라이언트 요청의 일부로 사용했기 때문에 Accept와 content-type으로 헤더를 설정하는 클라이언트 요청이 있습니다. 그리고 최근에 응답 헤더에 content-type이 정의되어 있는 프로젝트를 접하게 되었다(그래서 서버가 보낸..
cors 쉽게 이해하기 CORS란? Cross-Origin Resource Sharing (CORS)은 추가 HTTP 헤더를 사용하여 브라우저가 실행 중인 웹 애플리케이션에 선택된 액세스 권한을 부여하도록 하는 메커니즘입니다. 다른 출처(도메인, 프로토콜 또는 포트)의 자원 및 리소스를 요청할 때 cross-origin HTTP 요청을 실행합니다. 과거에 보안 상의 이유로, 브라우저들은 스크립트 내에서 cross-origin HTTP 요청을 제한했었습니다. 예를 들어, XMLHttpRequest and the Fetch API는 same-origin 정책을 따랐습니다. 다른 API의 응답에 올바른 CORS 헤더가 포함되어 있지 않으면 해당 API를 사용하는 웹 응용 프로그램은 동일한 출처의 리소스(같은 도메인, 같은 포트)만 ..
sentry.io 를 이용한 에러 탐지 (python) 프로그램을 작성시 테스트를 통해 수많은 에러를 겪으며 프로그램을 작성한다. 단위 테스트, 통합 테스트 등 수많은 테스트를 겪었으니 해당 프로그램은 에러가 없을까?세상에 완벽한 프로그램이 없듯이 자의든 타의든 프로그램엔 에러가 있을 수 밖에 없다. 에러 발견을 메신져 알림을 통해 바로 확인하게 할수도 있고, 디비에 해당 내역을 기록할수 도 있다. 수많은 프로그램이 난무 하는 가운데 그중 하나인 sentry.io를 소개 한다. 사용법이 간단하고(아마도??) 통합적으로 관리할수 있는 뷰가 있어서 sentry.io를 선택했다. 먼저 회원가입을 하면 사용하는 언어/프레임워크를 선택한다. 저의 경우 python을 선택했다.sentry-sdk 라는 패키지 설치 및 해당 프로젝트에 해당 api key를 선언해 준다. ..