개발 서적 완독하기 15

쿠버네티스 교과서 5장 - 볼륨 마운트 클레임을 이용한 데이터 퍼시스턴시

5.1 쿠버네티스에서 컨테이너 파일 시스템이 구축되는 과정 kubectl exec deploy/sleep -- sh -c 'echo ch05 > /data/file.txt; ls /data' 해당 명령어 시 권한 때문인지 작성이 안됨 ymal 파일에 defaultMode 추가하든가, 다른 수정방법 찾아봐야함 apiVersion: apps/v1 kind: Deployment metadata: name: sleep spec: selector: matchLabels: app: sleep template: metadata: labels: app: sleep spec: containers: - name: sleep image: kiamol/ch03-sleep securityContext: runAsUser: 10..

쿠버네티스 교과서 2장 & 3장

2장 2.1 쿠버네티스는 어떻게 컨테이너를 실행하고 관리하는가 파드 쿠버네티스가 컨테이너를 실행하는 수단 쿠버네티스로 관리되는 자신만의 가상 IP 주소를 가진다. 파드는 쿠버네티스가 관리하는 가상 네트워크로 연결된다. -컨테이너를 또 다른 가상환경인 파드 로 감싼다. 컨테이너는 애플리케이션 구성 요소 하나를 실행하는 가상화 된 환경이다. 2.2 컨트롤러 객체와 함께 파드 실행하기 디플로이먼트 파드를 관리하는 컨트롤러 객체 한 노드에 문제가 발생하여 파드를 유실하면, 대체 파드를 다른 노드에 생성 디플로이먼트 스케일링 설정 디플로이먼트만 생성해도 파드가 자동으로 생성됨 쿠버네티스 API을 사용하여 현재 동작중인 리소스 확인 및 자신에게 필요한 파드 생성 디플로이먼트가 자신이 관리해야할 리소스를 어떻게 추적..

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 5장(안전 해시 설계)

수평적 규모 확장성을 달성하기 위해서는 요청 or 데이터를 서버에 균등하게 나눠야한다. 안정해시는 이 목표를 달성하기 위해 보편적으로 사용하는 기술인데, 이 해시기술이 어떤 문제를 해결할 수 있는지 부터 알아본다. 해시 키 재배치(rehash) 문제 N개의 캐시서버가 있다고 할 때, 이 서버들에 부하를 균등하게 나누는 보편적 방법은 아래의 해시 함수를 사용하는 것이다. serverIndex = hash(key) % N (N은 서버의 개수이다) 4대의 서버를 사용한다면 해시 값이 18358617은 1(서버인덱스)이다. 이런식으로 나머지연산(%)을 이용해서 각 서버에 저장한다. 그러나, 해당 방법은 서버가 추가되거나 삭제될 때 문제가 발생한다. 만약 0번 서버가 장애가 발생하여, 위 해시함수를 이용해서 해시..

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 4장(처리율 제한 장치의 설계)

처리율 제한 장치 네트워크 시스템에서 처리율 제한 장치는 클라이언트 또는 서비스가 보내는 트래픽의 처리율을 제어하기 위한 장치이다. API 요청 횟수가 제한 장치에 정의된 임계값을 넘어서면 추가 API들은 버려지거나, 중단된다. 아래에는 몇가지 예시이다. 사용자는 초당 2회 이상의 새 글을 올릴 수 없다. 같은 IP 주소로는 하루에 10개 이상의 계정을 생성할 수 없다. 같은 디바이스로는 주당 5회 이상 리워드를 요청 할 수 없다. 처리율 제한 장치를 두면 좋은점은 아래와 같다. DOS 공격에 의한 자원 고갈을 방지할 수 있다. (트위터는 3시간 동안 300개 트윗 제한, 등등) 비용을 절감한다. 추가요청에 대한 처리를 제한하면 서버를 많이 두지 않아도 되고, 우선순위가 더 높은 API에게 자원을 할당할..

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 3장(시스템 설계 면접 공략법)

효과적인 면접을 위한 4단계 접근법 책에서 제시하는 효과적인 면접을 위한 4단계 접근법이 있다. 해당 내용은 면접에도 유용하게 사용될 수 있지만, 문제 해결이나, 토론, 회의 등에도 유용하게 사용할 수 있는 방법론인 것 같다. 1단계 문제 이해 및 설계 범위 확정 먼저 시스템을 구축 OR 어떤 질문에 대한 답을 하기 전에, 구체적인 요구사항을 질문하는 것이 좋다. 아래는 몇가지 예시이다. 구체적으로 어떤 기능을 만들어야하는지? 사용자 수는 얼마나 되는지 회사 규모는? 기한은 언제까지인지? 회사가 주로 사용하는 기술 스택은 무엇이고, 어떤 모듈들을 사용중에 있는지? 2단계 개략적인 설계안 제시 및 동의 구하기 해당 단계에서 초점을 맞추어야 할 것은 개략적인 설계안을 제시하고 면접관의 동의를 얻는 것이다. ..

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 2장(개략적인 규모 추정)

2의 제곱수 모든 프로그래머가 알아야 하는 응답지연 값 메모리는 빠르지만 디스크는 아직도 느리다. 디스크 탐색은 가능한 피하라 단순한 압축 알고리즘은 빠르다. 데이터를 인터넷으로 전송하기 전에 가능하면 압축하라 데이터 센터는 보통 여러지역에 분산되어 있고, 센터들 간에 데이터를 주고 받는데에 시간이 걸린다. 통신할 때, 데이터를 압축하거나, 용량을 줄이는 것에 대해는 와닿는다. 예를 들어, 이미지를 저장하는데, 클라 -> 서버 -> 이미지서버라면, 2번의 통신에 용량이 큰 이미지가 들어갈 것이다. 용량이 큰 이미지는 클라이언트에서 바로 이미지 서버로 전송하는 것이 더 효율적일 것이다. 가용성에 관계된 수치들 고가용성(High availability)는 시스템이 오랜 시간 동안 지속적으로 중단 없이 운영될..

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 1장 (사용자 수에 따른 규모 확장성)

단일서버 모든 컴포넌트가 서버(머신,인스턴스) 1대에서 실행되는 경우이다. 여기서 컴포넌트란 웹, 앱, 데이터베이스, 캐시를 뜻한다. 1. 사용자는 도메인 이름을 이용하여 웹사이트에 접속 (이름 서비스는 DNS 서버에서 IP로 변경) 2. IP 주소로 HTTP 요청 전달 3. 요청을 받은 웹서버에서 HTML 페이지나 JSON 형태의 응답 데이터베이스 사용자가 늘면, 컴포넌트를 분리하기 시작한다. 대표적으로 데이터베이스 서버와 웹서버를 분리한다. - 데이터베이스 서버는 용량 및 처리량이 크기 때문에 서버 분리 우선대상 어떤 데이터베이스를 사용할 것인가? 전통적으로 관계형 데이터베이스와 비관계형 데이터베이스로 나눠진다. 워낙 많이 들어본 내용이기 때문에 간단하게 정리하고 넘어간다. (자세한 내용은 https..

성공과 실패를 결정하는 1% 네트워크 - 서버의 수신 동작

1. LAN 어댑터에서 수신 신호를 디지털 데이터로 변환한다. 수신 동작은 패킷의 신호를 LAN 어댑터에서 수신하고 디지털 데이터로 바꾸는 부분에서 시작된다. LAN을 흐르는 패킷의 신호는 1과 0으로 이루어진 디지털 데이터의 신호와 타이밍을 나타내는 클록 신호를 합성한 것이다. 여기에서 클록 신호를 추출하고 클록 신호에서 타이밍을 계산하면서 신호를 읽어오면, 1과 0의 디지털 데이터로 바꿀 수 있다. 신호에서 디지털 데이터로 되돌린 패킷은 아래와 같다. LAN 어댑터 담당 프리앰블/스타트 프레임 딜리미터 FCS IP가 담당 MAC 헤더 IP 헤더 TCP가 담당 TCP 헤더 데이터 이부분을 만드는 것이 애플리케이션의 담당 LAN 어댑터의 MAC 부분이 패킷을 신호로부터 디지털 데이터로 되돌리고 FCS을 ..

성공과 실패를 결정하는 1% 네트워크 - 서버의 개요

1. 클라이언트와 서버의 차이점 접속동작을 할때 클라는 보내는쪽이고, 서버는 기다리는 쪽이라, Socket 라이브러리의 활용법이 달라진다. 또한, 서버는 동시에 다수의 클라이언트 PC와 통신한다는 차이도 있다. 그러므로 서버와 클라이언트는 구조가 다르다. 2. 서버 애플리케이션의 구조 서버는 여러 클라이언트와 통신해야 함으로 대화의 진행이 어디까지인지 알아야한다. 그래서 클라가 새로 접속할 때 마다 새로 서버 프로그램을 작동하여 서버 애플리케이션이 클라와 1대 1로 대화하는 방법을 선택하는 것이 일반적이다. 서버 OS는 멀티태스크, 멀티스레드 라는 기능에 의해 다수의 프로그램을 동시에 함께 작동할 수 있는데 이를 활용하여 접속을 기다리는 부분과 클라이언트가 대화하는 부분을 나눈다. 만약 접속을 접수하면 ..

성공과 실패를 결정하는 1% 네트워크 - UDP 프로토콜을 이용한 송 수신 동작

수정 송신이 필요없는 데이터의 송신은 UDP가 효율적이다. TCP가 복잡한 원리를 사용할 이유는 데이터를 확실하면서도 효율적으로 전달하기 위함이다. 데이터를 확실히 전달하려면 도착한 것을 확인하고, 도착하지 않았으면 다시 보내야한다. 위 내용을 가장 간단히 실현할 수 있는 방법은 그냥 데이터를 ‘전부’ 보낸 후에 수신측에서 수신 확인 응답을 받는 것이다. 이는 TCP 처럼 복잡한 과정을 생략하는 것이다. 그러나, 패킷이 한개만 없어져도 전체를 다시 보내야 함으로 비효율적인데, 용도에 맞게 TCP와 UDP를 사용하면 된다. 제어용 짧은 데이터 예를들어 DNS 서버에 대한 조회는 한개의 패킷으로 끝나기 때문에 UDP를 사용한다. UDP 동작방식도 간단하다. 애플리케이션에서 송신 데이터를 받으면 UDP 헤더를..

728x90