[번역] ZeroMQ설계자: 세계를 구원하라

  • 번역: coolspeed

이 글은 ZeroMQ설계자가 지은 책이며 ZeroMQ의 “바이블”이라 불리는 ZGuide 의 머리말이다.

이 책은 다양한 프로그래밍 언어 예시 버전의  PDF, epub 등 이북 포맷으로 다운로드도 가능하고[1], 한글 번역도 온라인에서 읽을 수 있다. 당연히 그속에는 이 머리말의 한글번역도 포함되어 있었다. 다만 번역이 만족스럽지 못해 필자가 직접 번역했다.


ZeroMQ 100 자 요약

ZeroMQ (ØMQ, 0MQ, or zmq 라고도 표기함) 는 임베드블 네트워킹 라이브러리처럼 생겼는데 실제론 컨커런시 프레임웤처럼 작동한다. ZeroMQ 는 원자적으로 메시지를 배송하는 소켓을 제공하는데 그 배송수단으로는 스레드간 통신, 프로세스간 통신, TCP 그리고 multicast 등 다양하다. 당신은 ZeroMQ 소켓을 N-to-N 방식으로, fan-out, pub-sub, task distribution, 그리고 request-reply 등 패턴으로 사용할 수 있다. 이것은 클러스터 제품들의 뼈대로 사용하기에 전혀 문제 없는 높은 성능을 가지고 있다. 이것의 비동기 I/O 모델은 당신이 message-passing task처럼 짜여진, 확장성 있는 멀티코어 애플리케이션을 만들 수 있게 해준다. 언어 API 만큼 고득점을 갖고 있으면서 거의 모든 OS에서 돌아간다. ZeroMQ 는 iMatix 에서 개발했으며 LGPLv3 라이센스로 소스가 오픈되어있다.

 

세상을 구원하다

ZeroMQ 요놈은 정말 좋은데. 어떻게 말로 표현할 방법이 없네.  ZeroMQ의 가치를 설명하기 위해, 일부 사람들은 요놈이 제공하는 모든 훌륭한 기능들을 나열하는 것으로 부터 시작하려고 한다:

  • 이놈은 스테로이드를 처먹은 소켓이야.
  • 이놈은 라우팅 기능이 있는 우편함으로 비유할 수 있지.
  • 존나 빠름.

Continue reading

Advertisements

한눈에 보는 MQ

  • coolspeed

요즘 MQ에 빠져 MQ덕질 좀 했습니다.
길게 쓰면 아무도 안읽고, 쓰는 사람도 귀찮아지니 알맹이만 적겠습니다.

ActiveMQ – 정통 MQ, 기능 많음, 트랜잭션 지원.

RocketMQ – 알리바바에서 오픈한 MQ. 지구상 가장 분주한 전자상거래 시스템중 하나인 알리바바의 인프라로 매일 높은 워크로드에서 사용되고 검증되고 있음. 세계 기록을 갱신한 쇼핑몰 오더 처리 성능.

Java로 개발됨. 활발한 개발과 (중국내) 활발한 커뮤니티. 트랜잭션 지원(그러니 전자상거래에 쓰일 수 있지).

단점: 클라이언트 언어는 Java 와 C++ 만 지원.

Apache Kafka – LinkedIn 에서 오픈. Scala 언어로 개발됨. 개발팀은 나가서 새로 회사를 차렸다는데 현재는 개발과 커뮤니티가 모두 그다지 활발하지 않음.
최대 장점은 성능. 특히 batch 모드를 켰을 때 (redis pipeline모드랑 유사).
단점: 트랜잭션 지원하지 않음.

RabbitMQ – Erlang 으로 개발됨. 성능 좋음. (거의) 모든 언어 클라이언트 제공.
AMQP의 여러 기능을 지원하는 만큼 ActiveMQ에 버금가는 다양한 피쳐.
Erlang으로 개발된 만큼 fault-tolerance 가 짱임.

ZeroMQ – 사실은 MQ가 아님. Zero * MQ == zero != MQ?
네트워크 라이브러리? 네트워크 프로토콜 스택상의 새로운 레이어? Linux커널에 들어가는 것을 목표로 한다.
끊기면 자동 재연결하는 고급 소켓. Listen 과 accept 순서 무관인 고급 소켓.

(거의) 모든 언어 클라이언트 제공. 라이트한 만큼 성능이 장점.

“ZeroMQ” 에서 “Zero”는 broker가 없음을 의미. 그만큼 분산식 차원에서 더욱 철저하다.

(무엇보다 얘는 정말 MQ가 아니기에 MQ리스트 안에 넣어서 비교하는 자체가 어색하다. MQ같은 네트워크 라이브러리.)

차세대 Go언어 게임서버 Century 뼈대

소스코드 주소: https://github.com/coolspeed/century

Amazon Gamelyft 때문에 맥나서 안짤려다가 블로그글 에서 쳐놓은 허풍들이 죄가 되여 끄적여보았습니다.

일단 현재는 실행 가능한 채팅서버이구요.

벤치마크결과는 8만5천 TPS 씩이나 나와서 벤치마크 프로그램을 의심하는 중입니다.

그 어떤 비평도 다 저에게 다 도움이 될 것이니 어떤 비평이든 아끼지 말고 주시기 바랍니다.
(라고 쓰고 “칭찬과 좋은 비평만 듣겠다” 라고 읽는다.)

매니지드 언어로 MMORPG 만들기

사건의 유래는 게임코디에 어느분이 이런 질문을 올린겁니다.

MORPG까지는 만들어봤는데, 심리스한 MMORPG를 Java나 C#으로 ( 메이저 한 언어로 갑시다…! ) 만든다고 하면 막연히 가장 걱정되는게 Full GC 상황에서의 world stop입니다. 아무리 concurrent gc나 vm 옵션을 건드려서 최적화 한다고 해도 언젠가는 Full GC를 마주칠텐데 1초만 world가 멈춘다고 해도 썩 유쾌한 경험은 아닐거 같거든요.

두번째로는 최대가용 메모리 입니다. Full GC랑 연관이 있는데 결국 Full GC상황에서의 GC 수행시간은 vm에 할당한 최대 heap size에 어느정도 비례합니다. 이 주제를 놓고 지인들과 몇번 토론을 했는데 주로 나온 얘기들은…

‘마영전은?’
‘누가 시도해 본 사람?’
‘요즘 하드웨어 좋은데 괜찮지 않을까?’
‘C++ 놓은지 너무 오래되서…(?)’
‘최소화 할 수는 있겠다, 죄다 pooling 한다던가, 그런데 적당히 해야지 이럴거면 왜 java나 c#을 써야할까?’

와 같은 얘기 -_- 어떻게 생각하시나요?

Continue reading

[퍼옴] Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)

웬만해서는 블로그에 퍼온 내용은 올리지 않을려고 했는데…

이건 올려야 해 ( __ __)\

NDC 2014 세션 키노트:

SlideShare 사이트 링크:

Continue reading

The C10M Problem

C10K 도 어제같은데 C10M 이라니 ㄷㄷ..

여기서도 우리의 미운 오리 Java 는 등장합니다.

WhatsApp 의 Erlang 으로 (FreeBSD상에서) 만든 200만 커넥션을 무색하게 만드는,

무려 천2백만 커넥션. Java 로 구현. (Linux 상에서). [1]

Haskell 언어의 2천만 QPS (epoll / kqueue)도 인상적입니다. [2]

Several prominent programming languages provide lightweight threads or processes. Erlang provides lightweight processes that communicate only using message passing. The Go programming language provides sophisticated coroutines, called goroutines. The Go scheduler also uses N (one per cpu) poll serve. In upcoming releases, Go’s IO event notification will be integrated with the scheduler, whereas with Mio, the event notification is implemented entirely in Haskell.

Event libraries such as libevent, libev, and libuv also provide abstraction over platform-specific event notification APIs. These APIs require programmer to express programs as event handle, while Mio is designed and optimized to support a lightweight thread programming model.

Mio has been fully implemented, has been incorporated into the GHC code base, and will be released as part of GHC 7.8.1. Mio includes 874 new lines of code and 359 old lines of code deleted.

쩌.. 쩐다..

 

References:

[1] Scaling to 12 Million Concurrent Connections: How MigratoryData Did It

[2] Mio: A High-Performance Multicore IO Manager for GHC