Page History
Info |
---|
RestAPI는 단순하고 직관적입니다. 하지만 미들웨어 고성능통신 또는 미들웨어 분산 마이크로 서비스 구축시 RestAPI 로만은 분명, 고성능 Push메시지를 처리하기에 성능적으로 한계가 있습니다. 선택가능한 전송모델 몇개를 간략하게 소개합니다. |
연결 방식에의한 분류
...
RestFul(폴링방식)
draw.io Diagram | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
...
단순하게 초당 천개의 메시지를 전송하는 시나리오에서, 다수의 커넥션을 맺는데 값비싼 리소스를사용하게 됩니다.
WebSocket(Push방식)
Rest vs Websocket 수행시간
Rest의 수행속도가 메시지가 증가함에 따라, 기울기가 급격해지는 성능저하를
...
웹소켓 VS 일반스트림 : http://blog.lightstreamer.com/2013/05/benchmarking-socketio-vs-lightstreamer.html
Server/Client VS PeerToPeer
Client/Sever방식은 Client가 중앙관리를 해주는 서버에 항상 연결을 유지하여 중앙 서버의 통제를받습니다.
...
메시지 처리 모델이며 AKKA의 목표는 이 사용을 단순화하는데 있습니다.
채널에의한 분류
...
Point To Point
송신자의 메시지가 특정 수신자에게 전달되는것으로 대부분 메시지전송은 이 채널로 충분하며
...
하지만 애플리케이션이 수행되는 동안, 채널이 다양화되고 수신자들이 자유롭게 채널을 바꾸고자할때는
PUS/SUB을 활용할수가 있습니다.
PUB/SUB
신문의 발행/구독모델과 유사하며 실제로 활용도가 높기때문에 여러 통신가능한 라이브러리 혹은 툴킷에서 기본으로 도입되었습니다.
...
Info |
---|
PUB/SUB 모델은 심플하기때문에, 직접 구현도 가능합니다. 아래는 TopicEventBus 라는 객체를 자바모델 참고하여 실제로 작성하고 사용해본 샘플입니다. (이개념을 쉽게 설명하기위해 직접 개발) |
다양한 언어의 시청자가 존재하는 다국어 방송 메시지 모듈
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
//Create Act Act System for Testing ActorSystem system = TopicEventBus.inItSystem("TestTopic"); //ActorSystem Init //Create user TopicEventBus.CreateActor("A"); TopicEventBus.CreateActor("B"); TopicEventBus.CreateActor("C"); //A user wants to receive News A in English TopicEventBus.Subscribe("A", "newsA", "en").Wait(); //User B wants to receive news A in Korean TopicEventBus.Subscribe("B", "newsA", "kr").Wait(); //Users of c want to receive News B in English TopicEventBus.Subscribe("C", "newsB", "en").Wait(); //Server real-time messages (server sprays news regardless of user) TopicEventBus.Publish("newsA", "Hi...here news A", "en"); TopicEventBus.Publish("newsA", "여기에 새로운 뉴스가 있습니다.", "kr"); TopicEventBus.Publish("newsB", "Hi...here news B", "en"); Result: create actor name:A create actor name:B create actor name:C Subscribe actor name:A to newsA Subscribe actor name:B to newsA A FirstSet LangCode en from newsA B FirstSet LangCode kr from newsA Subscribe actor name:C to newsB C FirstSet LangCode en from newsB Publish Topic:newsA msg:Hi...here news A Publish Topic:newsA msg:여기에 새로운 뉴스가 있습니다. A가 뉴스를 받음 Hi...here news A from newsA Publish Topic:newsB msg:Hi...here news B C가 뉴스를 받음 Hi...here news B from newsB B가 뉴스를 받음 여기에 새로운 뉴스가 있습니다. from newsA |
저장소위치
http://git.webnori.com/projects/AKKA/repos/topiceventbus/browse
메시지 처리및 전송 최종목표
Info |
---|
우리의 응답이 좋은 메시지의 목표는 출발한 메시지 type상관없이 ( rest / websocket ) 출발하여 미들웨어에서 가장 효율적인 처리를 위해 어떠한 라우터및 클러스터 방식을 선택할것이며 ( client to server ,peertopeer , pubsub) 중앙 Db의 호출을 최소화 하여 응답을 할것입니다. |
...