부호화(직렬화, 마샬링) - 인메모리 표현에서 바이트열로의 전환
복호화(파싱, 역직렬화, 언마샬링) - 바이트열에서 인메모리 표현으로 전환
많은 서비스가 새로운 버전의 서비스를 동시에 모든 노드에 배포 하는 방식보다 일부 노드부터 서서히 배포하는 순회식 업그레이드가 필요
순회식 업그레이드는 무중단으로 새로운 버전의 서비스를 출시 가능하게 함
순회식 업그레이드 중이거나 여러 가지 다른 이유로 다양한 노드에서 다른 버전의 여러 애플리케이션 코드가 수행 될 수 있는데 이 때문에 시스템을 흐르는 모든 데이터는 하위 호환성(새로운 코드가 예전 데이터를 읽을 수 있음), 상위 호환성(예전 코드가 새로운 데이터를 읽을 수 있음)을 제공하는 방식으로 부호화 해야함
프로그래밍 언어에 특화된 부호화는 단일 프로그래밍 언어로 제한되며 상위 호환성과 하위 호환성을 제공하지 못하는 경우가 종종 있음
JSON, XML, CSV 같은 텍스트 형식은 많이 사용 되며 이들 간 호환성은 이 형식들을 사용하는 방법에 달려 있음
- XML과 JSON 모두 스키마를 지원함(필수는 아님). CSV는 안함
- 이 형식들은 데이터 타입에 대해 다소 모호한 점이 있기 때문에 숫자나 이진 문자열과 같은 항목은 주의 해야함
스리프트, 프로토콜 버퍼, 아브로 같은 이진 스키마 기반 형식은 짧은 길이로 부호화되며 명확하게 정의된 상위 호환성과 하위 호환성의 맥락에서 효율적인 부호화를 지원함
- 이러한 스키마는 정적 타입 언어에서 문서와 코드 생성에 유용하지만 사람이 읽기 위해서는 복호화 해야 한다는 단점이 있음
데이터 플로 모드
- 데이터베이스를 통한 데이터 플로 : 데이터베이스에 기록하는 프로세스는 데이터를 부호화하고 데이터베이스에서 읽는 프로세스는 복호화함
- 서비스를 통한 데이터 플로 : REST와 RPC
- 하나의 프로세스가 네트워크를 통해 다른 프로세스로 요청을 전송하고 가능한 빠른 응답을 기대하는 방식
- 클라이언트가 요청을 부호화하고 서버는 요청을 복호화하고 응답을 부호화하고 최종적으로 클라이언트가 응답을 복호화 함
- 메세지 전달 데이터 플로 : 송신자가 부호화하고 수신자가 복호화하는 메세지를 서로 전송해서 노드 간 통신하는 비동기 메세지 전달(단방향)
'책 > 데이터 중심의 애플리케이션 설계' 카테고리의 다른 글
03. 저장소와 검색 (0) | 2019.01.27 |
---|---|
02. 데이터 모델과 질의 언어 (0) | 2019.01.26 |
01. 신뢰할 수 있고 확장 가능하면서 유지보수하기 쉬운 애플리케이션 (0) | 2019.01.21 |