일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 스위프트
- 파이썬 동시성
- 스칼라 강좌
- Actor
- 하이브리드앱
- 블록체인
- 파이썬
- Golang
- hyperledger fabric
- 주키퍼
- CORDA
- akka 강좌
- 엔터프라이즈 블록체인
- 안드로이드 웹뷰
- 이더리움
- Adapter 패턴
- 플레이프레임워크
- 그라파나
- 스칼라 동시성
- 파이썬 머신러닝
- 하이퍼레저 패브릭
- Play2
- Hyperledger fabric gossip protocol
- 파이썬 강좌
- Akka
- 스칼라
- play2 강좌
- 파이썬 데이터분석
- Play2 로 웹 개발
- play 강좌
- Today
- Total
HAMA 블로그
큐 시스템을 이용한 NPUSH-GW 개선 및 Luxun (펌) 본문
큐 시스템을 이용한 NPUSH-GW 개선
네이버 NAVER LABS 배상용, 임영완, 조항수, 김민곤, 김종현
Apple의 APNS(Apple Push Notification Service)나 Google의 GCM(Google Cloud Messaging) 같은 푸시 메시지 플랫폼은 모바일 서비스를 개발하면서 대부분 한 번씩은 사용해 봤을 만한 핵심 기능입니다. 최근에는 운영체제와 플랫폼 사업자별로 푸시 메시지 플랫폼이 끊임없이 개발되고 있습니다. 다양한 플랫폼을 이용해 메시지를 전송하려면 서비스 개발자가 모든 플랫폼의 명세를 이해하고 구현해야 합니다. 이런 불편 사항을 해결하려 네이버는 다양한 푸시 메시지 플랫폼을 하나의 인터페이스로 사용할 수 있도록 푸시 게이트웨이 시스템(이하 NPUSH-GW)을 개발해서 운영하고 있습니다.
이 글에서는 고성능 오픈소스 큐 시스템인 Luxun을 이용해 자체 개발한 NQueue 시스템으로 NPUSH-GW의 안정성을 향상시킨 방법을 공유하겠습니다.
NPUSH-GW란?
NPUSH-GW는 네이버의 모바일 푸시 메시지 플랫폼인 NPUSH의 컴포넌트 중 하나로, 서비스에서 요청한 푸시 메시지를 다양한 외부 푸시 플랫폼으로 전송하는 시스템이다.
그림 1 큐 시스템 도입 전 NPUSH-GW 구성도
2011년 11월에 네이버톡과 연동한 것을 시작으로 LINE, 네이버 앱 등을 포함해 네이버 계열사에서 개발하는 모바일 앱 대부분이 NPUSH-GW를 이용하여 푸시 메시지를 전송한다. 3년 동안 운영하면서 Apple과 Google은 물론 다양한 외부 오픈 푸시 플랫폼에 메시지를 전송하도록 개발했다.
NPUSH-GW 초기 개발 요구 사항 및 구조
초기의 NPUSH-GW는 네이버 서비스에서 요청한 푸시 메시지를 외부 푸시 플랫폼으로 전달할 때까지 소요되는 체류 시간을 최소화하도록 설계하고 구현했다. 되도록 시스템을 단순하게 하고 서버 구성을 간소하게 하도록 외부의 별도 큐 시스템을 사용하지 않고 Java에서 제공하는 LinkedBlockingQueue와 ThreadPoolExecutor의 내부 Worker Queue를 이용해 비동기 메시지를 처리하도록 구현했다. NPUSH-GW 내부의 모든 발송 모듈은 서비스별, 푸시 플랫폼별로 분리되어 있고, 각 모듈이 하나의 서비스 또는 푸시 플랫폼의 발송을 전담하는 구조다.
그림 2 NPUSH-GW 기본 아키텍처
나머지는
http://helloworld.naver.com/helloworld/textyle/1022966 가서 읽어보길
Luxun
'오픈소스, 미들웨어' 카테고리의 다른 글
MQTT 와 모스키토(Mosquitto) 란 무엇인가? (0) | 2015.09.03 |
---|---|
[OpenTSDB] 어떻게 OpenTSDB 는 동작하나? (0) | 2015.07.19 |
OSGi 는 어떻게 내 삶을 변화시켰나 (번역) (0) | 2015.07.17 |
초보자를 위한 JNDI (0) | 2015.07.16 |
쓰리프트 (Apache Thrift) 의 모든것 (1) - (번역) (0) | 2015.07.08 |