잡동사니
결과적 일관성 (Eventual Consistency)이란? 본문
안녕하세요. yeTi입니다.
오늘은 Eventual Consistency
에 대해 다뤄보고자 합니다. 유영모님의 가이드를 따라가다가 거대한 자료의 수집채로 해당글을 씁니다.
정의
Eventual consistency에 따르면 결과적 일관성
은 분산 환경에서 고가용성을 보장하기 위한 일관성 모델이라고 설명하고 있습니다.
Eventual consistency is a consistency model used in distributed computing to achieve high availability that informally guarantees that, if no new updates are made to a given data item, eventually all accesses to that item will return the last updated value.
일관성 모델
(consistency model) 의 대상은 distributed shared memory systems 이나 filesystems, databases, optimistic replication systems or web caching과 같은 distributed data stores
입니다.
맥락 (Context)
결과적 일관성(eventual consistency)
을 가져야하는 이유는 결국 서비스가 분산 환경에 놓여지게된 배경과 동일하게 볼 수 있습니다.
모든 비즈니스를 아우르는 하나의 서비스를 만들어도 되는데 왜 분산 환경을 선택하는 업체가 많아질까요?
이는 간결하게 MSA
의 유행과 일맥상통한다고 생각합니다.
MSA를 하는 이유 에서 키워드로 Loosely-Coupled
를 언급했습니다. 비즈니스 유연성을 극대화하기 위해 도메인별 책임의 분업, 그에 따른 개발 유연성의 증가가 결국 물리적인 분산 환경
을 가지게되는 이유라고 생각합니다.
분산 환경에 놓이게 되다보니 자연스럽게 DBMS에서 제공하는 트랜젝션을 활용하여 데이터 일관성을 유지할 수 없게 되었고, 결과적 일관성(eventual consistency)
에 대한 고민으로 이어지게 되었다고 생각합니다.
보다 자세한 배경은 아래 참고 문헌
의 자료들을 시간을 가지고 천천히 읽어보시는것을 추천드립니다.
어떻게?
사실 제가 유영모님께 드린 질문은 여기서 출발했습니다.
어떻게 결과적 일관성 (Eventual Consistency)을 가지도록 구현할 수 있을까요?
책이나 구체적인 자료가 있을까요?
감사하게도 영모님께서 답변을 주셨고, 전달해주신 가이드의 참조를 따라다니다 보니 어마어마한 양의 경험을 간접적으로 경험하게 되었습니다.
최종적으로 알아낸것은 결과적 일관성 (Eventual Consistency)
을 구현하기 위한 정답은 없다는 것입니다.
그래도 대외적으로 나타내기 위한 신뢰성있고 확실한 방향성은 Chris Richardson
이 운영하는 가이드 서비스에서 제시하는 여러 MSA Pattern
들을 적용하는 것입니다.
아니면 제 생각에 보다 쉬운 가이드적인 자료는 안영회님의 마이크로 서비스 공부하게 책 하나 추천해주세요가 적정한 가이드를 제공하지 않을까 싶습니다.
아차차, 위의 예시는 전체적인 맥락을 포착하기 위해 유용하다는 의미였고 유영모님께서 제시해주신 가이드도 굉장히 실질적인 예시가 포함되어 있어 구체적인 가이드로 추천드립니다.
느낀점
결국 결과적 일관성 (Eventual Consistency)
이란 우리가 만들고자 하는 서비스를 잘 만들기 위한 목표일뿐 어떻게 그 목표에 도달할지는 개인과 팀, 회사의 선택이라는 생각이 들었습니다.
하나하나 접근하다보면 서비스의 경계, 이벤트에 대한 정의, 오류/예외 처리, 모니터링 등 정의 혹은 선택, 결정의 연속일 것입니다.
이러한 연속적인 선택속에서 중요한 것은 멋진 기술을 활용해서 결과적 일관성 (Eventual Consistency)
을 구현했느냐 보다 팀이 가진 퍼포먼스내에서 우리의 서비스를 만들어가기 위해 알맞은 선택을 했느냐와 서비스를 성장시키기 위해 팀은 성장했느냐가 아닌가 라는 생각이 듭니다.
참고 문헌
Golang에서 카프카 컨슈머 그룹과 재시도로 결과적 일관성 구현하기
마이크로 서비스 공부하게 책 하나 추천해주세요
-- 마이크로 서비스 못 다한 이야기
--- 마이크로 서비스 구축 경험 공유
--- 클라우드 비즈니스 - 사업자 관점에서 본 SaaS
--- Micro Service, Docker로 할 수 밖에 없었던 사연
--- 시스템 개선을 위한 REST API 도입?
--- 마이크로 서비스(MSA)로 구축할 때 모듈은 어떤 단위로 할까?---- [다양한 아기발걸음으로 배우기](https://www.popit.kr/%EB%8B%A4%EC%96%91%ED%95%9C-%EC%95%84%EA%B8%B0%EB%B0%9C%EA%B1%B8%EC%9D%8C%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EA%B8%B0/) ----- [애자일이 중요한 것이 아니다!](https://www.popit.kr/%EC%95%A0%EC%9E%90%EC%9D%BC%EC%9D%B4-%EC%A4%91%EC%9A%94%ED%95%9C-%EA%B2%83%EC%9D%B4-%EC%95%84%EB%8B%88%EB%8B%A4/) ----- [코드가 아닌 개념 레이어링과 폴리몰피즘](https://www.popit.kr/%EC%BD%94%EB%93%9C%EA%B0%80-%EC%95%84%EB%8B%8C-%EA%B0%9C%EB%85%90-%EB%A0%88%EC%9D%B4%EC%96%B4%EB%A7%81%EA%B3%BC-%ED%8F%B4%EB%A6%AC%EB%AA%B0%ED%94%BC%EC%A6%98/) ------ [함께 그리고 가볍게 하는 소프트웨어 설계의 즐거움](https://www.popit.kr/%ED%95%A8%EA%BB%98-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EA%B0%80%EB%B3%8D%EA%B2%8C-%ED%95%98%EB%8A%94-%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%EC%84%A4%EA%B3%84%EC%9D%98-%EC%A6%90%EA%B1%B0%EC%9B%80/)
--- 한국형 개발이란 우물에서 벗어나기 위한 새로운 소프트웨어 원칙들
--- 일하면서 행복하기- '소프트웨어 엔지니어링 문화'
-- 우버의 마이크로서비스 적용기 해설
-- 내 멋대로 구현한 이벤트 드리븐
--- 개발자가 바라본 중국 쇼핑 축제 쐉쓰이(광군제)---- [마이크로 서비스와 TIME_WAIT 문제](https://www.popit.kr/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%99%80-time_wait-%EB%AC%B8%EC%A0%9C/)
REST 기반의 간단한 분산 트랜잭션 구현 - 2편 TCC Cancel, Timeout
REST 기반의 간단한 분산 트랜잭션 구현 - 3편 TCC Confirm(Eventual Consistency)
'IT > 소프트웨어 공학' 카테고리의 다른 글
조직에서 소통의 어려움은 광장으로 해결하자. (0) | 2023.06.14 |
---|---|
협의한 개발 목표와 개발의 결과는 같을까? (0) | 2022.11.24 |
기획서는 어떤 수준으로 작성해야 할까요? (feat. 의사소통) (0) | 2022.11.20 |
페어 프로그래밍 vs 코드 리뷰 (feat. 코드기반 대화하기) (0) | 2022.11.17 |
설계의 목적과 검수하는 문화 (0) | 2022.11.14 |