Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

루나소프트에서는 이 기술을 어떻게 활용하는지 활용편을 소개합니다.

AKKA

Amdahl's LawImage Removed

Amdahl's Law :

멀티코어를 사용하는 프로그램의 속도는 프로그램 내부에 존재하는 순차적 부분이 사용하는 시간에 의해서 제한됩니다.

멀티스레드 프로그래밍으로 복잡한 도메인의 동시성을 처리하는데는 논리적인 한계가 있습니다. 그 복잡도가 도메인과 함께 증가하기 때문이며

Akka는 곳곳에 존재하는 순차적인 부분을 전부 없애거나 최소한으로 만들기 위해서 사용되며 액터패턴을 활용하여 다음과 같이 고성능 메시지 전송 전략 툴을 제공합니다. 

서비스 소개 - 루나소프트 솔루션

Image Removed

루나코인과 무관하며, 다양하게 파트너사로 확보한 채널또는 호스팅( 카카오채널,네이버톡톡,메타,CAFE24,MakeShop ) 을 통해 E-Commerce를 위한 구축형이아닌 SaaS형태의 CRM/메시지/마케팅 솔루션을 제공하고 있습니다.

Luna는 통상 달, 혹은 달의 여신을 지칭하지만 미칠 듯한 열정(lunatic)을 뜻하는 중의적 의미도 담고 있습니다. 치열한 E-commerce 생태계 속에서 어두운 밤길을 안내해 주는 달빛처럼 길을 제시하고, 파트너사들의 성공적인 내일을 위해 열정적으로 뛰겠다는 사명감을 가지고 시작한 루나소프트는 기존의 서비스들과 다른 새로운 아이템과 기술력으로 문화와 유행을 만들기 시작했습니다.

- 그레이

링크 : https://lunasoft.co.kr/home/main/page/company/partner

파트너사 솔루션 맵핑

Image Removed

AKKA를 부분적으로 선택하게 된 이유?

...

Akka - 위키백과

Akka는 오픈 소스 툴킷으로, JVM 상의 동시성과 분산 애플리케이션을 단순화하는 런타임이다. Akka는 동시성을 위한 여러 프로그래밍 모델을 지원하지만, Erlang으로부터 영향을 받아 actor 기반의 동시성이 두드러진다.

자바 스칼라 언어 모두로 작성이 가능하다. Akka는 스칼라 2.10로 작성되었으며, 스칼라 2.10의 Akka의 actor 구현은 스칼라 표준 라이브러리에 포함되어있다.[1]


성능이 높고 반응성이 높으며 가용성 있는 서비스를 운영하기 위해, 분산처리도 중요하지만 단일장비 자체의 성능을 올리는것도 중요합니다.

동시성 처리를 높이기위해 단일 어플리케이션 내에서도 한가지 일만 하는것이 아닌 동시에 여러가지 일을 수행하게 할수 있으며 , 스레드를 적극 활용하여 병렬성을 이용하는 개발을  멀티스레드 프로그래밍 이라고 합니다.

동시성 처리및 병렬처리

Image Added

동시성과 병렬성은 약간의 차이가 있지만

  • 동시성 : 커피주문 받고 만들기를 동시에한다. ( 커피머신을 이용하면서도 주문을 받음)
  • 병렬성 : 커피주문을 받는사람과 만드는 사람이 각각 따로 있다. 


일반적으로 작업의 최대 효율을 높이기 위해 동시성과 병렬성을 함께 고려해야 하며 병렬성에서는 커피주문 접수받는것 자체가 밀리게 되면, 그동안 커피만드는 사람이 놀수 있는 문제가 있으며

커피 주문을 받고/만들기를 동시에 하는 경우 커피를 만드는 커피머신이 결정적으로 느린경우 동시성 처리를하는 작업자를 늘린다고 작업효율이 증가하지 않습니다.

작업효율을 높이기위해 병렬+비동기처리 프로그래밍의 난이도가 높아지며 결정적으로 암달의 법칙에 의해 작업자를 늘린다고 작업효율이 높아지기 어렵습니다.

우리가 가진 비싼장비 성능대비 50%이상을 활용하기 어렵습니다.   


암달의 법칙

Image Added

병렬 컴퓨팅에서 멀티 프로세서를 사용할 때 프로그램의 성능향상은 프로그램의 순차적인 부분에 의해 제한된다. 예를 들면, 프로그램의 95%가 병렬화 할 수 있다면 이론적인 최대 성능 향상은 아무리 많은 프로세서를 사용하더라도 최대 20배로 제한된다.


AKKA역시 멀티스레드를 활용하기 때문에  암달의 법칙에서 자유로울수는 없지만,  순차적으로 처리하는 부분에 대한 면적을 최대한 줄이면서 멀티스레드 프로그래밍을 할필요 없게 단순화해주며 동일한 개발컨셉으로 네트워크 분산처리를 지원합니다. 원격에 있는 멀티스레드를 제어할수 있다라는 이야기이며 다음과 같은 특징을 가지게 됩니다.

Actor의 메시지큐와 Dispatcher

Image Added

  • MailBoxQueue : 모든 발생이벤트는 수행 되기전 Queue에 적재됩니다. 작업완료는 별도의 메시지를 통해 통지 받을수 있으며  
  • Dispatcher : 요청된 이벤트의 수행을 어떠한 스레드전략으로 수행할지 규칙은 Dispatcher에 할수 있으며, 멀티스레드를 이용하지만 멀티스레드 프로그래밍을 할 필요가 없습니다.
  • 액터 : 모든 액터는 메시지로 명령수행이 가능하며 리모트로 확장될시 클러스터 라우터를 통해서도 작업분배가 용이합니다. 이것은 로컬과 리모트의 프로그래밍 방식에 큰차이가 없음을 의미하며 Kafka와 같은 메시징 툴과의 조합도 유리할수 있습니다. ( alpakka 는 Reactive Stream의 구현체로 Akka를 모든곳과 연결을 할수 있는 모듈명입니다. )


해결사례와 적용사례

...

스마트 플러스 상품연동

  • 호스팅 연동 상품정보 병렬및 동시성처리를 위해 멀티스레드를 대신하여 Akka의 Dispatcher가 활용되고 있으며 상품정보를 안정적으로 업데이트하고 있습니다.  - Spring Boot With AKKA


AKKA Dispatcher

Image Added


나이키 드로우 이벤트 - 타임리밋 이벤트


문제 : 나이키 드로우 이벤트에서는 타임리및 이벤트를 진행하며, 전설적인 상품의 경우 100만건 이상의 이벤트가 짧은 시간에 응모됩니다. 순식간에 발생하는 대용량 이벤트를, 초기 시스템은 처리하지 못하였습니다.

...

해결 : 이벤트 적재의 저장소 라운드트립을 줄이기위해 FSMACTOR를 사용되었으며 위와같은 케이스에서 라운드트립 1이면 충분합니다. - Kafka와 연계되어 메시징 분산처리 성능및 보장능력을 더 개선할수 있습니다.

셀룩 상품검색

...

루나 소프트의 야심찬 형제 프로젝트로 셀룩의 검색엔진에 데이터를 실시간 대량 인입을 하기위해서 도 FSMACTOR가 이용되었습니다.

Image Added

-셀룩 : https://cellook.kr/



고객의 문장을 이해하기위해 NLP사전관리를 하고 있으며 단어 매칭이 될시 자주쓰는 메시지 설정을 통해 빠른 상담이 가능합니다. 

...