diff --git "a/6\354\236\245/\354\235\264\354\234\240\355\235\254.md" "b/6\354\236\245/\354\235\264\354\234\240\355\235\254.md" new file mode 100644 index 0000000..b6258fc --- /dev/null +++ "b/6\354\236\245/\354\235\264\354\234\240\355\235\254.md" @@ -0,0 +1,32 @@ +### 동시성 + +시간적 결합이란 여러 작업 단위가 동시에 또는 순서대로 일어나는 것을 의미한다. +동시성을 확보한 시스템은 응답속도도 더 빠르고 안정적인 시스템을 만들 수 있다. + +### 동시성 찾기 + +- 동시에 일어나도 되는 것과 반드시 순서대로 일어나야 하는 것을 구분하자 +- 방법: 활동 다이어그램 + + +### 공유 상태는 틀린 상태 + +동시에 또는 병렬적으로 이뤄지는 작업 단위들이 공유하는 자원은 일관성이 깨지기 쉽기 때문에 동기화를 잘 해야한다 + +- 세마포어 +- 리소스를 트랜잭션으로 관리하라 +- 독점적인 접근 + + +### 공유자원이 없이 동시성을 다루는 방법 + +- 액터 시스템 +- 칠판 + +> 이번장을 읽고 MSA 환경에서 이벤트 브로커를 두는 이유를 이해할 수 있었다. MSA를 경험해본 적이 없어 그냥 개념 정도만 알고 있었다. +> +> 어느 마이크로서비스가 이벤트 저장소(칠판)에 어떤 사건(이벤트)가 발생했음을 기록하면, 칠판을 바라보고 있는 다른 마이크로서비스들은 각자 이벤트에 부여된 책임을 수행한다. +> +> MSA는 공유자원 없이 이벤트에 부여된 각자의 책임만 수행하면 되기때문에 동시성이 확보되지만 반대로 트랜잭션의 원자성을 다루기 어려울 것 같다. +> 숙박 서비스 유저 입장에서 결제에 성공하면 예약 완료인데 해당 서비스가 msa로 되어있고, 주문 이벤트를 결제 서비스만 성공하고 예약 서비스에서는 실패하는 경우라든지.. +> 그래서 아웃박스 패턴이니 사가 패턴이니 다양한 패턴이 있나보다. \ No newline at end of file