[대규모 시스템 설계] 6장. 키-값 저장소 설계
·
Reference/대규모 시스템 설계
💡 해당 내용은 "가상 면접 사례로 배우는 대규모 시스템 설계 기초"를 참조하여 작성하였습니다.1. Introduction 📌 Key-Value Store서버 개발자라면, 키-값 저장소의 대표격인 Redis 정도는 사용해봤을 것이다.이번 파트는 이러한 키-값 저장소들을 분산 환경으로 설계하는 내용을 다룬다. 그 전에 기초 개념 정도로 책에 나온 내용을 슬쩍 다루고 넘어가야겠다. 💡 키는 짧을 수록 좋다.키-값 저장소의 키는 유일해야 한다.그리고 성능상의 이유로 짧을 수록 좋은데, 그래서 일반 텍스트보다 해시 값을 적용하는 경우가 많다.RDB도 마찬가지 아니냐고 할 수 있겠지만, RDB와 KV Store의 목적이 다름에 주의하자.1️⃣ 메모리 사용량 감소• Redis같은 in-memory 저장소는 모..
[대규모 시스템 설계] 5장. 안정(일관성 있는) 해시 설계
·
Reference/대규모 시스템 설계
1. 수평적 규모 확장에서 고려할 점 📌 수평적 규모 확장 (Horizontal Scaling, Scale-Out)수평적 규모 확장성을 달성하기 위해서는 요청 또는 데이터를 서버에 균등하게 나눌 수 있어야 한다.클라이언트의 요청이 쏟아질 때, 일부 서버에 요청이 몰리지 않게 균등하게 분배해야 한다.데이터들이 균등하게 서버에 배치되어, 한 곳에 부하가 걸리지 않도록 유지해야 한다. 따라서 이번 논제는 "서버의 규모 확장성을 고려한 해시키 설계 방법"이 되겠다. (수직/수평적 규모 확장의 개념은 1장에서 다뤘음) 📌 이상적인 환경에서 key 설계 방법N개의 캐시 서버가 있을 때, 가장 쉽게 키를 설계하는 방법은 serverIndex를 다음과 같이 설정하는 것이다.serverIndex = hash(key)..
[JVM 밑바닥까지 파헤치기] Part 2 - Chapter - Section 2.3 : 핫스팟 가상 머신에서 메모리 모델
·
Reference/JVM 밑바닥까지 파헤치기
저우즈밍(周志明) 저, "JVM 밑바닥까지 파헤치기"를 기반으로 작성한 글입니다.실행 환경은 Windows + Ubuntu 22.04.05 LTS 기반으로 진행합니다.2.2가 런타임 모델, 2.3에서는 메모리 모델을 다룬다.그 중 가장 보편적인 가상 머신인 핫스팟과 가장 보편적인 메모리 영역인 자바 힙을 예시로,객체 생성(할당), 레이아웃, 접근 방법 등의 과정을 다룬다.1. 객체 생성 📌 Overview시작하기 앞서, 일련의 과정을 간략하게 다이어그램으로 표현해봤는데 정확하진 않다.책에서 제공한 다이어그램이 아니기 때문에 대충 의미를 자체로 해석해서 이런 느낌이 아닐까 싶은데, 몇 가지 의문점들이 있다. 클래스 로더 시스템에서 로딩(loading), 해석(resolve), 초기화(initalize)은..
[JVM 밑바닥까지 파헤치기] Part 2 - Chapter - Section 2.2 : 런타임 데이터 영역
·
Reference/JVM 밑바닥까지 파헤치기
저우즈밍(周志明) 저, "JVM 밑바닥까지 파헤치기"를 기반으로 작성한 글입니다.실행 환경은 Windows + Ubuntu 22.04.05 LTS 기반으로 진행합니다.1. Overview 📌 JVM Specification Chapter 2. The Structure of the Java Virtual MachineConditional branch: ifeq, ifne, iflt, ifle, ifgt, ifge, ifnull, ifnonnull, if_icmpeq, if_icmpne, if_icmplt, if_icmple, if_icmpgt if_icmpge, if_acmpeq, if_acmpne.docs.oracle.comJVM 명세에 따르면, JVM은 자바 프로그램을 실행하는 동안 필요한 메모리를 ..