인프라

    대규모 서비스를 지탱하는 기술, 7강 대규모 데이터를 다루기 위한 기초 지식 요약

    대규모 서비스를 지탱하는 기술, 7강 대규모 데이터를 다루기 위한 기초 지식 요약 프로그램을 작성할 때의 요령 어떻게 하면 메모리에서 처리를 마칠 수 있을까 생각해보기 디스크 seek 횟수를 최소화해보자. 데이터량 증가에 강한 알고리즘 사용 선형 탐색 말고 이분 검색 같은 알고리즘을 사용하면 데이터 양이 기하급수적으로 증가해도 실제 연산 양이 많이 늘지 않는다. 데이터 압축, 검색기술과 같은 테크닉 이용하기 압축해서 데이터량을 줄이거나 검색엔진을 이용하자 대규모 데이터를 다루기 위한 전제 지식 OS 캐시 분산을 고려한 RDBMS 운용 알고리즘 데이터 구조 CPU 사용률, I/O 대기율 확인하기 리눅스에서 sar 명령어로 가능 윈도우즈에서 Performance Monitor, Resource Monitor..

    대규모 서비스를 지탱하는 기술, 6강 규모 조정의 요소 요약

    대규모 서비스를 지탱하는 기술, 6강 규모 조정의 요소 요약 스케일 업과 스케일 아웃 전략 스케일 업보다는 스케일 아웃이 주류 하드웨어 가격 차이가 아주 많이 난다. 시스템 구성에 유연성이 크다. CPU 부하와 I/O 부하 데이터와 관련된 작업 ex.DB 에 질의하는 부분 등을 빼면 나머지는 CPU 부하 데이터 작업을 수행하는 경우 DB 서버 측면에서는 I/O 부하 애플리케이션에 걸리는 부하는 단순히 애플리케이션 서버를 더 늘리고 로드밸런서로 부하 분산을 해주면 됨 DB 에 걸리는 I/O 부하는 단순하지 않음 DB 를 여러개 클러스터링해서 사용하려면 DB 에 있는 데이터 쓰기 내역을 매번 동기화해줘야 함 정리 CPU 부하의 규모 조정은 간단하다. 서버를 늘리고 로드 밸런서로 분산 웹, AP 서버, 크롤러..

    대규모 서비스를 지탱하는 기술, 5강 대규모 데이터 처리의 어려운 점 요약

    대규모 서비스를 지탱하는 기술, 5강 대규모 데이터 처리의 어려운 점 요약 디스크는 왜 메모리보다 느린가 물리적인 장치를 통해 데이터를 찾아나간다. 원반을 돌리거나 디스크 헤드를 이동시켜서 데이터를 찾아낸다. 메모리는 전기적 신호를 사용한다. SSD 는 이전의 디스크 역할을 하지만 전기적 신호를 이용하는 디스크이다. 메모리와 디스크의 전송 속도는 100배 이상 차이가 난다. 메모리 7.5GB/s 디스크 58MB/s (2008년에 발간된 책이라 현재는 어떨지 잘 모르겠다.) OS 레벨에서의 해결책 자주 같이 쓰이는 데이터를 몰아놓는다. 한번 읽을 때 4KB 정도의 주변 데이터를 같이 읽는다. 단일 호스트 부하 개선 팁 단일 서버의 성능을 최대한 끌어내야 복수 서버에서의 부하 분산이 의미를 갖는다. 추측하지..

    대규모 서비스를 지탱하는 기술, 4강 대규모 데이터란 요약

    대규모 서비스를 지탱하는 기술, 4강 대규모 데이터란 요약 대규모 데이터 환경에 대한 이해 대규모 데이터의 크기는 어느정도인가? 대규모 데이터 처리는 왜 오래 걸리는가? 애플리케이션과 대규모 데이터의 부하 관계는 어떻게 되는가? DB 에서 대규모 데이터란? 수백 GB 이상의 데이터만 축적돼도 기본적인 select 쿼리가 동작하지 않는다. 규모에 따라 수백 GB, TB, PB 가 될 수 있다. 대규모 데이터 처리는 왜 어려운가 메모리 내에서 계산할 수 없다. 많은 양의 데이터를 디스크에서 찾아 메모리에 올렸다 내렸다하며 데이터를 처리해나가야 한다. I/O 에 많은 시간이 소비된다. 메모리는 디스크보다 대략 10만~100만배 정도 빠르다.

    대규모 서비스를 지탱하는 기술, 3강 서비스 개발의 현장 요약

    대규모 서비스를 지탱하는 기술, 3강 서비스 개발의 현장 요약 개발 팀을 나누는 방식 서비스 개발부 서비스 구현 및 애플리케이션 측면 개선 애플리케이션 코드로 부하 개선이 가능한 경우 인프라부와 협업 인프라부 서버/인프라 시스템의 운용을 담당하는 팀 서버 준비, 데이터 센터 운용, 부하 분산 등을 담당 부하 상황 등 모니터링 커뮤니케이션 그룹웨어 이용 되도록 공유가 되지 않는 개인 이메일 사용하지 않음 위키에 자료를 남김 IRC 사내 메신저로 이용 시스템 알람용으로도 사용 장애 통지 서버 관리 도구 현대의 뉴렐릭과 비슷한 서비스 같음 실무 서비스 개발 아침 스크럼, 진척 상황, 할 일 공유 아침 미팅에서 기능 구현 태스크 담당자를 정함 기능 구현 시 가능한 테스트 코드 작성 가능한 -> 타협 가능하다는 ..

    대규모 서비스를 지탱하는 기술, 2강 계속 성장하는 서비스와 대규모화의 벽 요약

    대규모 서비스를 지탱하는 기술, 2강 계속 성장하는 서비스와 대규모화의 벽 요약 웹 서비스의 어려움 트래픽이 점점 증가 다중화, 부하분산을 적용 시스템 규모 확장 1차 라우터 도입 HTTP 요청 부하 분산 apache mod_rewrite 로드 밸런서보다 훨씬 적은 기능을 가지고 있음 단순 URL 리다이렉팅만 가능 DB 분산 MySQL 레플리케이션 2차 LVS (Linux Virtual Server) 로드 밸런싱 기능 Keepalived 서버의 헬스체크를 하고 unhealthy 서버가 있는 경우 healthy 쪽으로 트래픽을 돌려줌 서버 정보 관리 시스템도 개발 각 서버에 받고 있는 부하, 서버의 용도 등을 쉽게 관리 가능해짐

    대규모 서비스를 지탱하는 기술, 1강 대규모 서비스와 소규모 서비스 요약

    대규모 서비스를 지탱하는 기술, 1강 대규모 서비스와 소규모 서비스 요약 개요 하테나라는 기업의 인턴십 내용 대규모 서비스 개발 경험 대규모 서비스는 특성을 파악하지 못하고 어중간하게 구현하면 장애 잘남 선배가 2주간 강의 책에서 설명하는 것 대규모 웹개발, 사고방식 OS, DB, 알고리즘, 자료구조 선택 중요성 RDBMS 의 한계 파악 검색엔진 만들어봄 서버/인프라의 예와 개념 프로그래밍 코드 같은 세부사항 외에 전체적 그림을 배움 장별 설명 2장 대규모란 어느정도 3장 OS 캐시 4장 MySQL 대규모 서비스에서 갖는 문제 5장 애플리케이션단 핵심 내용 6장 압축기법 7장 알고리즘 8장 키워드 9, 10장 검색엔진 개발 RDBMS 에서 다룰 수 없는 데이터 규모 다루기 11~15장 인프라 구성 등 설..

    Lettuce 란? (feat. 레디스의 자바 클라이언트)

    Lettuce 란? 고성능(high-performance), 확장 가능(scalable), 스레드 안전한(thread-safe) 레디스 자바 클라이언트이다. 동기, 비동기, 리액티브 프로그래밍 모델 모두 지원한다. Netty 프레임워크 위에 빌드된 비동기 이벤트 기반 네트워크 애플리케이션 프레임워크이다. 다중 연결을 처리하기 위해 디자인되었다. 강력하고 유연한 API 를 제공한다. 핵심 기능 커넥션 핸들링 (Connection handling) standalone 연결 혹은 커넥션 풀의 일부인 커넥션 오브젝트를 통해 Redis 로의 커넥션을 관리한다. 커넥션은 논블로킹으로 동작하며, 여러 스레드들과 효율적으로 동작하게 디자인되어 있다. 동기, 비동기, 리액티브 API Lettuce 는 다양한 API 를 ..

    Redis Sentinel 이란?

    Redis Sentinel 이란? Redis 설정에 문제가 발생했을 때 모니터링, 알람, 자동 페일 오버를 제공하는 Redis 용 고가용성 솔루션이다. 분산 환경에서 레디스와 함께 동작하도록 설계되었다. 레디스 시스템의 전체적인 상태와 신뢰성을 유지하는데 도움을 준다. 주요 기능 모니터링 알람 자동 페일 오버 구성정보 제공자 모니터링 주기적으로 레디스 인스턴스들의 상태를 확인한다. 가용성, 지연율 그리고 인스턴스의 다른 상태 관련된 수치들에 대한 정보를 수집한다. 알람 마스터나 레플리카 노드에 장애가 발생했을 때 이를 알아챈다. 시스템 관리자나 다른 모니터링 시스템에 장애를 알린다. 자동 장애 극복 (Automatic failover) 마스터 노드에 장애가 발생했을 때 이를 발견하고 장애 극복 (fail..

    레디스 (Redis) 란?

    Redis 란? 오픈소스이다. in-memory 데이터 구조 저장소이다. in-memory 특성덕에 갖는 빠른 퍼포먼스 때문에 인기가 많다. memcached 랑 비슷한데 list, set, ordered sets 같은 다양한 데이터타입을 지원한다. 데이터에 대한 atomic operations 을 지원한다. 데이터베이스, 캐시, 메시지 브로커 등으로 이용한다. 레디스의 핵심 기능들 Redis 가 지원하는 데이터 타입 Strings: 레디스의 문자열은 Binary-safe 하다. 어떤 타입이든 저장할 수 있다. Hashes: 하나의 레디스 키 내부에 있는 키-밸류 쌍이다. object 나 다중 필드 저장에 적합하다. Lists: 링크드 리스트로 구성된 정렬된 문자열 컬렉션이다. head 와 tail 에 ..

    publish-subscribe pattern (pub sub pattern, 발행자 구독자 패턴) 이란?

    publish-subscribe pattern 이란? 메시징 패턴의 한 종류이다. 각각의 컴포넌트가 서로의 identity 를 알 필요 없이 통신하게 해준다. 컴포넌트간 느슨한 결합 (loose coupling) 이 가능하게 만들어 유지보수를 쉽게 만든다. 주 컴포넌트는 3가지이다. 발행자 (publishers) 구독자 (subscribers) 메세지 브로커 (message broker) 각 개념에 대한 세부 설명 메세지 브로커 기본 개념은 메세지 브로커란? 링크에서 확인하면 된다. pub-sub 패턴에서 중심이 되는 컴포넌트이다. pub-sub 통신을 관리하는 책임이 있다. 메세지 (혹은 이벤트) 를 잠시 받아두었다 전달한다. 각 메세지 타입이나 토픽에 대한 구독자 (sub) 리스트를 가지고 있다. 발..

    AOF (Append Only File) 란?

    AOF (Append Only File) 란? 영속적인 데이터 저장 매커니즘이다. DB 와 Redis 같은 저장소에서 사용된다. 쓰기(write) 연산에 대한 로그를 모두 남겨서 유지하여 시스템 장애가 발생하거나 시스템이 재시작되었을 때 데이터 재구성을 돕는다. 모든 연산을 순차적으로 저장하여 로그를 통해 상태를 복구할 수 있도록 돕는다. AOF (Append Only File) 가 동작하는 방식 초기화 (Initialization) 스토리지는 먼저 AOF 파일이 존재하는지 확인한다. 존재한다면, AOF 파일을 읽어 데이터 복원을 준비한다. 연산 데이터 쌓기 (Wirte Operation) DB 에서 다양한 연산 (SET, DEL, INCR 등) 이 일어날 때마다 AOF 파일에 연산 내역을 쌓는다. 시스..

반응형