- 데이터 부호화 형식
- 부호화(직렬화, 마샬링): 인메모리 표현을 바이트열로 변환하는 작업
- 복호화(역직렬화, 파싱, 언마샬링): 바이트열을 표현으로 변환하는 작업
- 언어별 형식: 언어에서 제공하는 만큼 편리하지만, 특정 언어에 적합한 형식으로 다른 언어나 상위/하위 호환 등에 문제가 발생한다.
- JSON, XML: 수를 표현할 때 애매한 문제가 있다, 유니코드는 잘 지원하나 바이너리는 잘 지원하지 않아서 base64를 사용하게 된다.
- 이진부호화: json의 경우 여러가지 이진 부호화가 있었지만 널리 채택되진 못 했고, 대부분 성능상의 큰 이점은 없음
- 스리프트(Thrift)와 프로토콜 버퍼(Protocol Buffers)
- 같은 원리를 기반으로 함. 이름 대신 필드 태그를 사용함
- required의 경우 이진 데이터에선 확인하지 않고 읽기 시점에서 확인 함
- 태그 번호를 사용하므로 optional로 추가하거나 optional만 삭제한다면 상위호환성과 하위호환성을 유지함
- 상위호환성: 예전 코드에서 새로운 코드로 기록된 데이터를 읽는 것
- 하위호환성: 새로운 코드에서 예전 데이터를 읽는 것
- avro
- 태그번호나 타입 등이 없고 단순히 문자열을 연결하는 방식
- 따라서 스키마가 같아야만 이진 데이터를 복호화할 수 있다.
- 스키마 에볼루션에서는 호환만 가능하면 되도록 한다.
- 읽기 스키마에 없는 스키마를 만나면 무시하고 새로운 스키마는 기본값으로 채운다.
- 상위호환성과 하위호환성은 기본값이 있는 경우에만 추가, 삭제가 가능하다.
- 쓰기 스키마를 저장하는 법
- 모든 레코드가 동일한 스키마라고 가정하여 처음에만 저장하는 방식(하둡 등)
- 각 레코드 별로 버전을 포함하여 같은 버전끼리는 같은 스키마를 사용하는 방식
- 네트워크 통신을 할 떄 스키마 버전을 합의하는 방식
- 데이터플로
- REST
- 네트워크 상에서 API 요청을 하기 위한 가장 최신 형상이다.
- 네트워크 요청을 로컬 함수 처럼 취급하여 제어가 어려워진다.
- 네트워크로 인한 예외 처리, 유실, 지연, 제한 등이 있다.
- 테스트와 디버깅에 효율적이여서 오픈 API에서 주요한 방식
- 차세대 RPC
- 원격 요청이 로컬 함수와는 다르다는 걸 분명히 한다.
- future(promise) 등 사용
- gRPC에서는 스트림 처리 지원
- 클라이언트를 강제로 업그레이드 할 수 없기 때문에 조직 내에서만 사용할 때 좋다.
- 원격 요청이 로컬 함수와는 다르다는 걸 분명히 한다.
- 메시지 전달
- 생산자 → 브로커 → 소비자 의 구조
- 비동기
- 유실 가능성 적음
- 분산 엑터 프레임워크: 단일 프로세스에서도 분산으로 처리한다고 가정하기 때문에 위치 투명성이 높고, 로컬과의 차이를 발생시키지 않는다.
- REST
'Studying > Data System Design' 카테고리의 다른 글
파티셔닝 [데이터 중심 애플리케이션 설계 6장] (0) | 2023.07.13 |
---|---|
복제 [데이터 중심 애플리케이션 설계 5장] (0) | 2023.07.09 |
저장소와 검색 [데이터 중심 애플리케이션 설계 3장] (0) | 2023.07.07 |
데이터 모델 및 질의 언어 [데이터 중심 애플리케이션 설계 2장] (0) | 2023.06.14 |
신뢰성, 확장성, 유지보수성 [데이터 중심 애플리케이션 설계 1장] (0) | 2023.06.04 |