Blazor with Akka.net

소개:
분산환경에서 사용가능한 동시성 처리툴킷인 akka.net 의 액터모델을 Blazor를 통해 시각화하는 프로젝트입니다.

만들다 보니 Blazor에 손이 더 가게되네요~

다음내용이 포함되어 있으며 자세한것은 소스를 통해서 실행및 확인 가능합니다.

  • Actor - 액터기본 사용 방법
  • Router - 메시지 분배를위한 분배처리기 이용
  • Throttle - 메시지의 흐름(속도)를 제어하는 장치를 이용
  • RemoteActor - 원격지 닷넷어플리케이션간 메시지를 전송하는방법
  • UnitTest - 실시간 메시지를 유닛검사할수 있는 패턴과 성능테스트방법

git : GitHub - psmon/NetCoreLabs: 닷넷코어 연구소

19개의 좋아요

와… 이건 또 뭐죠…
대단하시네요~! :+1:

5개의 좋아요

와 github 내용 하나하나가 대단하시네요

4개의 좋아요

데모앱 임시기간 제공합니다

http://code.webnori.com/actor/roundrobin

7개의 좋아요

우와 대단 한데요…
메모리 관리는 잘 되는지 궁금 하네요

6개의 좋아요

@피스몬 좋은 프로젝트 공유해주셔서 감사합니다. :smile:

별 누르고 갑니다.

3개의 좋아요

스레드 모델이면 1개의 작업자당 1MB의 스택메모리가 증가하지만
액터 모델인경우 수십만개의 액터가 1GB 힙메모리를 사용한다 라고 소개를 하고 있네요~

메모리사용량 2GB가 넘으면 테스트앱 종료예정입니다.

4개의 좋아요

궁금한것이 몇가지 있습니다.
akka를 실무에서 사용하신다면 분명히 APM 툴도 운용하실것 같은데 어떻게 운용하시나요?
저는 actor model 을 실무에 적용해본적은 없는데
CI/CD 무중단 배포를 하신다면 ? 어떤 방법을 사용하시나요??

그리고 무엇보다 궁금한것이 해당 아키텍쳐를 팀원들이 잘 이해하고 따랐나요??
그러시다면 맨파워가 엄청나시네요

4개의 좋아요

심도있는 질문에 답하기위해 조금 지루하지만 긴 컨텍스트로 답변드립니다.

액터의 모니터링은 윈도우 퍼포먼스/애져/프로메테우스/데이터독등 다양하게 연동가능합니다.
다만 JVM/CLR(닷넷) APM수준까지 모니터링을 한다고 하면 당연 Object의 생성 빈도와 GC발생빈도입니다. 하지만 운영중 이 수준까지 모니터링을 하지 않고 있습니다.

컨테이너가 가진 시스템 모니터링이라도 제대로 한후 도입할수 있는 부분이기때문입니다.
액터의 모니터링은 APM수준보다 더 디테일하며 다음 링크를 통해 도입할수있습니다.
( 더 고도화된 모니터링은 유료화입니다. -액터의 구조를 시각화하고 성능을 모니터링함)

참고링크 : Real time performance counters - WebFrameWork - WEBNORI

무중단 배포의 경우 상태없는 rest api 경우 블루그린 배포전략으로 충분하지만 실시간 메시징을 다루는 경우 단 1건이라도 유실업없는 배포가 중요하며

무중단 배포의 경우 대부분 우아한 종료(자동 종료) 만 생각하면 되지만 실시간 메시징을 다루는 경우 이것만으로 충분하지 않으며 설계된 종료를 다루어야 합니다.

참고링크 :

액터모델은 디자인 패턴중 액티브오브젝트 패턴에 해당하며 해당 패턴을 항상 적용하라고 권장하지 않습니다. 다만 일반적인 웹서비스와 다르게 백그라운드 서비스가 필요하며 1개의 공유 객체가 있고 N개의 스레개발을 하려고 할때 액터모델을 권장합니다.

액터모델은 수준높은 개발방법이 아니라 멀티스레드를 사용해 이러한 문제를 해결할때 훨씬 더 어려우며 오히려 액터모델은 이것과 비교해 단순화된 모델이라고 이야기 드리고 싶습니다.

마지막 질문은 팀원에게 akka를 전면 채택을 권장하지 않으며 스레드 프로그래밍이 필요한 부분에대해서 일부 로컬 액터모델로의 전환을 권장하며

다만 분산처리에 관심있는 개발자라고 한다고하면 akka의 채택이아닌 기본프레임워크가 제공하는것을 충분히 이용해 도메인문제를 해결하고 그것이 안되면 다른것을 이용하라고 권장합니다.

닷넷을포함해 복잡성을 다루는 비동기 동시성 프로그래밍이 이미 발전했기때문입니다.

마침 작성중인 아티컬이 있어 함께 공유합니다.

akka의 최종목표인 단일지점 병목 없는 클러스터 개발이라는 고급 주제는 모두 적용하지 못했으며 클러스터를 직접개발해야하는 난제는 kafka를 활용함으로 낮추었습니다.

분산처리를 다루는 개발자가 akka를 학습해야하는 이유 (도입이 아닌)

7개의 좋아요

대단하시네요 솔직히 고객이 우리 시스템 잘 돌아가나요? 네 잘돌아갑니다 ㅎ
구두로 하는것이 아니라
image
잘돌아간다 보여주면 좋고
로그는
image
키바나로 추적 하고 이러면 좋아하긴 하죠

아마 예제로 만드신것도 실시간 파악을 위해 visual 적으로 보기위해서 만드신 것 같습니다.
저는 아직 CQRS 패턴 수준에서 머물러 있는데 저런 시스템 구축 하고 싶네요

8개의 좋아요