🐧 간단하지만 활용도가 높은 cron 스케줄러 이해하기
·
DevOps/Linux
cron이란?cron은 Linux/Unix 기반 시스템에서 작업을 정기적으로 실행하기 위한 스케줄러입니다. 특정 시간, 날짜, 간격마다 명령이나 스크립트를 자동으로 실행하는 데몬 프로세스를 의미합니다. 리눅스 기반 시스템뿐만 아니라 AWS의 EventBridge나 Spring 프레임워크의 스케줄링 기능 등 다양한 곳에서도 cron 표현식이 사용됩니다. * * * * * * * {실행 명령어} cron은 위와 같이 5개의 시간 필드와 실행 명령어로 구성됩니다. 앞에서부터 분, 시, 일, 월, 요일을 나타냅니다.분 (0-59)시 (0-23)일 (1-31)월 (1-12)요일 (0-7, 0 또는 7이 일요일)cron은 crontab(cron table)이라는 스케줄을 정의하는 파일에서 선언됩니다. 30 2 * ..
🐧 컨테이너는 어떻게 독립된 환경을 만들까?
·
DevOps/Linux
Container란? VM은 하이퍼바이저 위에서 독립적인 Guest OS를 실행합니다. VM 내부에서 애플리케이션, 파일 시스템, 바이너리/라이브러리, OS가 모두 포함되기 때문에 하나의 VM은 물리적으로 완전한 하나의 서버처럼 동작합니다.VM은 높은 격리 수준을 제공하지만, VM마다 자체 OS를 포함하기 때문에 무겁고 리소스 소모가 크다는 단점이 있습니다. 컨테이너는 별도의 운영체제를 포함하지 않고 호스트 운영체제의 커널을 공유(호스트의 시스템 콜 호출)합니다. 컨테이너마다 Guest OS를 갖지 않는 대신 namespace와 cgroup을 활용해 컨테이너마다 독립된 실행환경을 구성하게 됩니다.컨테이너는 하나의 프로세스처럼 실행되어 가볍고 리소스 소모가 작다는 장점이 있습니다. 컨테이너가 동작하는 원..
🐧 디스크를 유연하게 관리할 수 있게 해주는 LVM과 RAID
·
DevOps/Linux
LVM (Logical Volume Manager)리눅스에서 디스크를 사용하려면 파티션을 나누고 파일 시스템을 생성해야 합니다. 이러한 파티션 분할은 정적으로 파티션의 크기를 늘리거나 줄일 수 없다는 문제가 있습니다. LVM은 여러 개의 디스크를 하나로 보고, 논리적으로 나눌 수 있게 해 줍니다.또한, 간단한 명령어로 사용 중인 파티션의 크기를 늘리거나 줄일 수 있게 도와줍니다. LVM이란?LVM은 여러 개의 디스크나 파티션을 하나의 큰 저장소로 보고, 필요한 만큼 논리적 공간으로 나누어 사용할 수 있게 해주는 디스크 관리 기술입니다. LVM을 사용하면 디스크를 추가하거나 크기를 조절하는 작업을 중단 없이 수행할 수 있습니다.즉, 서버 운영 중에도 마운트 된 파일 시스템의 용량을 늘리거나 줄이는 것이 가..
🐧 리눅스 파티션
·
DevOps/Linux
파티션파티션 : 물리적 디스크 ➡ 여러 개의 논리적인 디스크로 분할분할된 파티션은 독립적인 디스크로 간주되어 블록과 파일 시스템 구성 등을 독자적으로 설정 가능합니다. 파티션 분할의 장점하나의 디스크에 여러 개의 운영체제를 사용 가능각각의 파티션에 서로 다른 OS를 설치할 수 있습니다.부팅 시 부트로더를 통해 원하는 OS를 선택하여 부팅할 수 있습니다. 파티션 단위의 다양한 정책 설정이 가능각 파티션마다 독립적으로 정책을 설정하여 시스템 운영에 유연성과 안정성을 더할 수 있습니다.사용자 또는 그룹별로 디스크 사용량을 제한하여 과도한 리소스 사용을 방지하거나 파티션의 접근 권한을 제한하여 데이터 손상이나 무단 접근을 방지할 수 있습니다. 그 외에도, 파티션별 백업 주기 설정, 파일 시스템 점검(fsck) ..
키-값 저장소(key-value store) 설계
·
독서
키-값 저장소 (key-value store)키-값 저장소는 비 관계형 데이터베이스로 고유 식별자를 키로 저장합니다. 키는 유일해야 하며, 키에 저장된 값은 키를 통해서만 접근 가능합니다. 일반적으로 DynamoDB, memcached, redis 같은 저장소가 사용됩니다. 문제 이해key-value 쌍의 크기는 10KB 이하큰 데이터를 저장할 수 있어야 함고가용성 제공, 장애가 발생하더라도 빨리 응답할 수 있어야 함높은 확장성 제공, auto scaling을 제공할 수 있어야 함데이터 일관성 수준 조정 가능응답 지연 시간이 짧아야 함 단일 서버 키-값 저장소한 대의 서버만 이용할 경우 모든 key-value 데이터를 메모리에 해시 테이블로 저장할 수 있습니다.메모리 위에 모든 데이터를 저장하면 속도는 ..
벡터 시계 (Vector Clock) 완벽 이해하기
·
Computer Science/Data Structure
벡터 시계 (Vector Clock)벡터 시계는 분산 시스템에서 사건의 순서를 추적하기 위한 자료구조입니다.다수의 노드가 서로 독립적으로 동작하면서 발생하는 이벤트의 인과관계를 기록하고 비교할 수 있도록 설계되어 있습니다.분산 시스템에서 여러 노드에 동일한 데이터가 저장되고 수정될 때, 데이터의 동시성을 판단하기 위해 활용됩니다. 벡터 시계는 왜 필요할까? 왼쪽 그림은 두 노드가 name:john이라는 동일한 데이터를 저장하고 있습니다. 이 상황에서 n1에는 name:johnSanFransico를 저장하고, n2에는 name:johnNewYork을 동시에 저장하면 각 노드는 서로 다른 데이터를 저장하게 됩니다. 즉, 충돌이 발생하게 됩니다. 벡터 시계는 이러한 충돌을 발견하기 위한 해결책을 제시해 줍니다..
머클 트리(Merkle Tree)
·
Computer Science/Data Structure
머클 트리 (Merkle Tree, Hash Tree) 머클 트리는 데이터 무결성을 검증하고 효율적으로 동기화하기 위해 사용하는 이진 트리 구조를 의미합니다.블록체인과 파일 시스템, 분산 데이터베이스에 사용됩니다. 머클 트리의 리프 노드는 원본 데이터 자체를 저장하지 않고 원본 데이터의 해시값을 저장하게 됩니다내부 노드는 두 자식 노드의 해시값을 더하여 다시 해싱한 값을 저장하게 됩니다.최상위 노드는 머클 루트(Merkle Root)로, 전체 데이터에 대한 요약 역할을 하게 됩니다. 내부 노드의 해시값은 자식 노드들의 해시값을 더한 후 다시 해시 연산을 한 값이 됩니다. 머클 루트를 사용하는 이유1.데이터 무결성 검증머클 트리를 사용하게 되면 최종적으로 하나의 머클 루트 해시로 요약됩니다. 리프 노드에..
안정 해시 설계
·
독서
해시 키 재배치(rehash) 문제N개 캐시 서버가 있을 때, 부하를 균등하게 나누기 위해 해시함수를 사용할 수 있습니다. serveIndex = hash(key) % N (N은 서버의 개수) 나머지 연산을 이용하면 특정 키에 해당하는 서버를 알아낼 수 있지만, 서버가 새롭게 추가되거나 중단되었을 때 의도와 다른 서버를 조회할 수 있습니다. 안정 해시 (Consistent Hash)전통적인 방법을 이용하면 노드의 수가 변경되면 대부분의 키를 재배치하게 됩니다.반면, 안정 해시는 해시 테이블 크기가 조정될 때 대략 k/n 개의 키만 재배치하는 기술을 의미합니다.(k = 키 개수, n = 노드의 개수) 예를 들어, 100개의 노드가 존재하고, 저장된 키의 개수가 1,000,000개일 때, 서버가 추가되는 상..