Page History
...
수백 명의 고객이 1-800 번호로 전화를 걸어 여러 명의 고객 서비스 상담원 중 한 명과 동시에 대화를 나누는 콜센터를 생각해 보세요.
이러한 유형의 상호작용은 액터를 사용하여 모델링할 수 있습니다.
...
따라서 Akka.NET에서는 모든 메시지가 변경 불가능하므로 스레드로부터 안전합니다. 이것이 수천 개의 Akka.NET 액터가 동기화 메커니즘이나 기타 이상한 기능 없이 동시에 메시지를 처리할 수 있는 이유 중 하나입니다. 변경 불가능한 메시지는 이러한 필요성을 없애주기 때문입니다.
...
액터 행동 101
그렇다면 우리는 액터와 메시지에 어떤 구성 요소가 들어가는지 대략적으로 알고 있습니다. 이게 실제로 어떻게 작동할까요?
...
액터들은 메시지 전달을 통해 소통합니다
객체 지향 프로그래밍(OOP)에서 객체는 함수 호출을 통해 서로 통신합니다. 절차적 프로그래밍에서도 마찬가지입니다. 클래스 A는 클래스 B의 함수를 호출하고, 그 함수가 반환될 때까지 기다린 후 나머지 작업을 진행합니다.
...
액터를 사용하여 Microsoft Word에서 실행 취소 버튼과 같은 것을 만드는 것이 얼마나 쉬운지 상상해 보세요. 기본적으로 문서에 적용된 모든 변경 사항을 나타내는 메시지가 있습니다. 이러한 변경 사항 중 하나를 실행 취소하려면 UndoActor 의 메시지 모음에서 메시지를 꺼내 Word 문서의 현재 상태를 관리하는 다른 액터에게 해당 변경 사항을 푸시하기만 하면 됩니다. 이는 실제로 매우 강력한 개념입니다.
...
액터들은 액터에게 직접 메시지를 보내는 것이 아니라
...
액터 참조에 메시지를 보냅니다.
또 다른 유행어를 기대하시나요? 위치 투명성 . 배우들이 액터들이 바로 그겁니다.
위치 투명성이 의미하는 바는, 액터에게 메시지를 보낼 때마다 수백 대의 컴퓨터에 걸쳐 있는 액터 시스템 내에서 액터가 어디에 있는지 알 필요가 없다는 것입니다. 액터의 주소만 알면 됩니다.
...
이 내용을 언급하는 이유는 다음 섹션에서 액터의 수명 주기에 대해 이야기할 것이고, 예상치 못한 문제가 발생할 때마다 Akka.NET이 모든 액터 클래스를 초기 상태로 재부팅할 수 있다는 것을 기억하는 것이 중요하기 때문입니다.
...
액터들은 명확하게 정의된 라이프 사이클을 가지고 있습니다
액터가 사서함에서 메시지 처리를 시작하려면 먼저 액터 시스템에 의해 인스턴스화되고 수명 주기를 거쳐야 합니다.
...
앞서 보여드린 라이프사이클에 Akka.NET 메서드가 어떻게 적용되는지는 다음과 같습니다.
모든
...
액터에게는 부모가 있고, 어떤
...
액터에게는 자녀가 있습니다.
사람과 마찬가지로 배우에게도 액터에게도 부모가 있습니다. 그리고 어떤 배우에게는 액터에게는 조부모, 형제 자매, 자녀가 있습니다.
뭐야? 이게 무슨 뜻이야?
...
이제… 이것이 왜 중요한지 알아보겠습니다.
부모는 자녀를 감독합니다
배우의 액터의 라이프사이클에 대한 섹션에서 "감독자에 의해 배우가 액터가 재시작된다"는 개념을 언급했습니다. 제가 말하고자 하는 것은 모든 부모 배우가액터가 자녀에게서 " 도와주세요, 저 망가졌어요! "라는 특별한 메시지를 받는다는 것입니다.
...
- 실패한 액터를 다시 시작합니다 . 이는 자식이 짧은 시간(예: 60초) 동안 반복적으로 실패하지 않는 한 부모가 기본적으로 수행하는 작업입니다.
- 실패한 행위자를 중지하여 영구적으로 종료합니다. 또는
- 감독을 조부모 배우에게액터에게 확대합니다 .
Restart또는 지시가 내려 지면 Stop영향을 받는 액터의 모든 자식도 재시작되거나 종료됩니다. 즉, 실패했던 액터 가계도 전체를 한 번에 재부팅할 수 있습니다.
이는 신뢰성과 자가 복구 시스템에 대한 매우 강력한 개념으로, 앞으로 더 자세히 살펴보겠습니다.
잠깐만요... 이 모든 것이 사실이라면 어떻게
...
액터들이 대규모로 동시에 작업할 수 있나요?
액터는 한 번에 하나의 메시지만 처리할 수 있다고요? 엄청 느리지 않나요?
좋은 질문입니다. 이러한 액터들을 동시 처리가 가능한 거대 기계로 만드는 방법에 대한 자세한 설명은 다음과 같습니다.
...
액터들은 싸다
Akka.NET 웹사이트 의 벤치마크 결과에 따르면 , 1GB RAM에 250만 개의 액터를 저장할 수 있습니다. 그 이후로 상당한 메모리 최적화를 진행했기 때문에 이제는 훨씬 더 많은 액터를 메모리에 저장할 수 있을 것으로 예상됩니다.
하지만 요점은 배우를 액터를 고용하는 데 비용이 많이 들지 않고, 많은 수의 배우를 액터를 활용할 수 있다는 것입니다.
...
액터들의 확장
액터 비용이 저렴하다면, 액터 한 개를 사용하는 것과 액터 천 개를 사용하는 것의 메모리 오버헤드가 미미하다는 것을 의미합니다. 그리고…
...
따라서 액터 모델의 동시 처리 기능을 최대한 활용하려면 액터 시스템을 확장 가능하도록 설계하세요.
...
액터들은 게으르다
그렇다면 행위자가 처리할 메시지가 없다면 어떻게 될까요?
...
메시지가 없는 액터는 스레드나 다른 컴퓨팅 리소스를 사용하지 않습니다. 이들은 반응형입니다 . 즉, 도착하는 메시지로 깨어날 때까지 기다립니다.
이것이 배우가 액터가 매우 저렴하고 확장성이 뛰어난 이유 중 하나입니다.
...


