Gaurun〜A general push notification server in Go〜

3474 단어 Gogaurun

Gaurun〜A general push notification server in Go〜


Go Conference 2015 Summer에서 담화도 채택됐기 때문에 OSS에 자신의 소속사가 개발한 푸시알림 서버Gaurun를 공개했다.자세한 내용은 2015년 6월 21일 개최Go Conference 2015 Summer됐다.

메일 알림 시스템의 구성과 변천


작년 9월 이메일 회사에 입사했을 때 메일 속 애플리케이션에서 발생한 이벤트의 푸시 알림 처리는 모두 PHP에 적힌 API 서버에서 동기화 처리(!)이(가) 구현되었습니다.예를 들어 API 서버가 의견을 적어 달라는 요청을 받으면 메모 데이터를 DB에 쓴 후 알림을 전송하고 고객에게 응답을 되돌려줍니다.
물론 스마트폰 앱에서 자주 사용하는 APNS와 GCM(또는 아마존 SNS)의 푸시 알림은 외부 서버와의 통신과 함께 시간이 많이 걸린다(수백밀리초에서 수sec).실제로 당시 Treasuredata가 액세스 로그에 기록한 응답 시간을 내림차순으로 집계하면 푸시 알림 이벤트가 발생할 수 있는 API가 상위를 차지했다.

php-Plallel-Prefork 및 Q4M 기반 비동기 푸시 알림


그래서 제가 회사에 들어간 후 첫 번째 업무는 Gaurunphp-Parallel-Prefork의 비동기적인 방식으로 이 부분을 진행하는 것입니다.다행히 프레임워크가 갖춰져 있어 비교적 간단하게 구현할 수 있고 API 서버의 성능 향상에 큰 효과가 있다.

나는 앞으로 수백만 건의 추송 통지를 보내고 싶다


응용 프로그램에서 발생하는 이벤트 알림의 수량 자체가 전체 요청 수량에 비해 많지 않습니다.다른 한편, 홍보 활동이나 알림 등을 통해 순간적으로 대량의 알림을 전송하는 임무가 발생할 수 있다.그게 갑자기 "이제부터 수백만 건의 푸시 알림을 보내도 될까요?"잠깐만요.
이 문제에 대해 처음에 우리는 php-Polll-Prefork를 시작하는 서버를 많이 처리했지만 성능이 좋지 않아 대규모 처리를 하지 않았다.

nginx+Go(net/http) 기반의 유니버설 전송 알림 시스템


통지 처리를 대규모로 추진하기 위해서는 절차의 높은 병행성이 필요하기 때문에 원래 PHP는 부적합한 임무였다.따라서 GCM과 APNS의 푸시 알림 처리를 별도의 API로 패키지해 에이전트하는 HTTP 서버를 Go로 작성하고, 전단에nginx를 구성해 부하 균형을 맞추는 구조를 적용했다.이 HTTP 서버는 뒤에 있는 Gaurun입니다.
Q4M
결과적으로 이런 구조를 채택함으로써 대량의 전송 알림 처리를 간단하게 축소할 수 있다.또한 APNS 및 GCM과의 유지 상태 및 개별 계약과 달리 프로그램 논리를 단순화하는 부작용도 있다는 사실을 고객들이 특별히 인식할 필요가 없습니다.

Gaurun 사건 시작.


다음은 Gaurun의 간단한 소개입니다.

Gaurun의 다운로드 및 구축


현재 Gaurun의 구축 후 바이너리 정보가 분배되지 않았기 때문에 실행하려면 Go의 환경을 따로 준비해서 컴파일해야 한다.
$ git clone https://github.com/mercari/gaurun.git
$ cd gaurun
$ make gom
$ make bundle
$ make

시작 및 구성 파일


Gaurun을 시작하려면 TOML 설정 파일이 필요합니다.
$ bin/gaurun -c conf/gaurun.toml
설정 파일의 자세한 내용은 로 요약됩니다.

HTTP API


Gaurun에는 다음과 같은 4개의 API가 있습니다.자세한 내용은 CONFIGURATION.md로 요약됩니다.
API 이름
해설
POST/push
밀어넣기 알림 요청 수락
GET/stat/go
Go 런타임 모니터링 데이터 가져오기
GET/stat/app
Gaurun 모니터링 데이터 가져오기
GET/config/app
Gaurun의 설정 데이터 가져오기

클라이언트 샘플 프로그램


Gaurun 서버에 알림 푸시 요청SPEC.md이 있습니다.

최후


이번에 아주 간단하게 소개했는데 클라이언트 프로그램 샘플 좀 더 깊이 들어가고 싶어요.

좋은 웹페이지 즐겨찾기