Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Go로 Push Agent 개선하
기
agun
어쩌다 보니 개발하고 있는 서비스가 0에서 시작해서
하루에 100만 ~ 200만 푸시를 전송하는 서비스가 됨
우리는 스타트업이기에... 처음에는
- 가장 자신있는 JAVA 로 push agent 를 몇시간 만에 뚝딱 개발
- 메시지큐에 대해 경험이 있기 때문에 RabbitMQ를 사용하여 큐잉처리함
- push 전송수가 늘때마다...
그러다가 결국...
- 생각보다 서비스가 잘되었음 (예측 못한 push 전송 숫자 )
- push수가 늘때마다 프로세스를 추가하여 자원낭비
- push 전송 속도의 퍼포먼스가 나오지 않음
(병렬로 함께 동작하는 메시지 ...
고민함
- JAVA Thread로 구현할까 or 다른 언어로 구현할까?
- 어쨋든 선택의 기준점은 퍼포먼스와 자원절약...
=> JAVA Thread 로 구현하는건 구현 복잡도가 있고 기본적으로
JAVA process ...
어떤 언어?
Erlang VS GO
난 GO 보다 오래됬고 풍
부한 레퍼런스가 있어!!
난 신상이고 세련됬어
내 뒤에는 google 형님이 있지
GO로 개발하기 결정 !
시작은 신상에 대한 개인적인 선호도
!!
GO 해보니
- 문서화와 튜토리얼이 잘되어 있음 (한글 포함)
- 개인적으로는 생각보다 러닝커브가 작음
- 성능은 좋고 동작이 가벼움
- 고루틴은 정말 매력적임
- 에러처리가 번거러움
- 간만에 컴파일을 명시적으로 하니...
GO 시작하기
- 그냥 공식사이트에서 튜토리얼만 따라해도 어느정도 감잡을수 있음
(https://go-tour-kr.appspot.com/#1 한글 튜토리얼)
- https://golang.org/dl/ 여러 바이너리 ...
Push Agent 개선된점
- 프로세스/메모리 자원 비용이 확 줄어둠
- 고루틴을 이용한 병렬적 처리를 하여 성능 무척 좋아짐
(병렬로 이루어진 메시지 DB insert 속도를 능가함 )
- 생각보다 적은 개발 복잡도...
고루틴의 매력
그냥 아래와 같이 코딩하면 fun1함수는 별도의 thread 에서 실행
go fun1()
아주 쉬운 멀티 쓰레딩 프로그래밍 !!
고루틴이 push agent 와 만났을때(1)
기존
queue
get
message
REQUEST
GCM OR APNS
단일 쓰레드이기 때문에 GCM OR APNS REQUEST 통신이 늦어지면 get message 모...
고루틴이 push agent 와 만났을때(2)
개선
queue
get
message
REQUEST
GCM OR APNS
GCM OR APNS REQUEST모듈은 고루틴에 의해 별도의 thread 로 실행되어 통신이 늦어...
단점도 있어요
- 언어 자체가 좋고 매력적이지만 사용해야 하는 외부 라이브러리는 아직
베타가 많아요, 어느정도 수정해서 사용해야함
- GOPATH 수동 설정이 좀 불편하다. (이건 내가 형상관리 부분은 아직
안봐서 그럴...
끝으로 RabbitMQ 연동 삽질 팁
다른 사람들은 삽질 않길 ...
- https://github.com/streadway/amqp 이용하여 RabbitMQ consumer 구현시
connection 이 끊기면 먹통이...
못다한 개발이야기는
http://blog.naver.com/pdc222 에서
Upcoming SlideShare
Loading in …5
×

Go로 push agent 개선하기

846 views

Published on

go language 를 이용하여 모바일 push agent 구현하기

Published in: Engineering
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Go도 Python 만큼 배우기 쉬운 언어인가 보네
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Go로 push agent 개선하기

  1. 1. Go로 Push Agent 개선하 기 agun
  2. 2. 어쩌다 보니 개발하고 있는 서비스가 0에서 시작해서 하루에 100만 ~ 200만 푸시를 전송하는 서비스가 됨
  3. 3. 우리는 스타트업이기에... 처음에는 - 가장 자신있는 JAVA 로 push agent 를 몇시간 만에 뚝딱 개발 - 메시지큐에 대해 경험이 있기 때문에 RabbitMQ를 사용하여 큐잉처리함 - push 전송수가 늘때마다 빠르게 대응하기 위하여 thread를 구현하기 보다는 push agent 의 프로세스를 늘림(구현 복잡도 줄임, 운영복잡도 올라 감) 어쨋든 빠르게 빠르게 빠르게 대응 !!!
  4. 4. 그러다가 결국... - 생각보다 서비스가 잘되었음 (예측 못한 push 전송 숫자 ) - push수가 늘때마다 프로세스를 추가하여 자원낭비 - push 전송 속도의 퍼포먼스가 나오지 않음 (병렬로 함께 동작하는 메시지 DB insert 속도를 못 따라감)
  5. 5. 고민함 - JAVA Thread로 구현할까 or 다른 언어로 구현할까? - 어쨋든 선택의 기준점은 퍼포먼스와 자원절약... => JAVA Thread 로 구현하는건 구현 복잡도가 있고 기본적으로 JAVA process 가 차지하는 시스템 비용이 마음에 안드니 다른 언어로 변경하자!!
  6. 6. 어떤 언어? Erlang VS GO 난 GO 보다 오래됬고 풍 부한 레퍼런스가 있어!! 난 신상이고 세련됬어 내 뒤에는 google 형님이 있지
  7. 7. GO로 개발하기 결정 ! 시작은 신상에 대한 개인적인 선호도 !!
  8. 8. GO 해보니 - 문서화와 튜토리얼이 잘되어 있음 (한글 포함) - 개인적으로는 생각보다 러닝커브가 작음 - 성능은 좋고 동작이 가벼움 - 고루틴은 정말 매력적임 - 에러처리가 번거러움 - 간만에 컴파일을 명시적으로 하니 예전 C로 개발했을때가 생각남 어쨋든 써보니 잘바꾸어다고 생각이 들었다 !!
  9. 9. GO 시작하기 - 그냥 공식사이트에서 튜토리얼만 따라해도 어느정도 감잡을수 있음 (https://go-tour-kr.appspot.com/#1 한글 튜토리얼) - https://golang.org/dl/ 여러 바이너리 배포판이 준비되어 설치가 쉬움 - 스터디나 처음 접하는 경우는 go을 소스 컴파일 설치 보다는 준비된 바 이너리로 설치하기를 추천
  10. 10. Push Agent 개선된점 - 프로세스/메모리 자원 비용이 확 줄어둠 - 고루틴을 이용한 병렬적 처리를 하여 성능 무척 좋아짐 (병렬로 이루어진 메시지 DB insert 속도를 능가함 ) - 생각보다 적은 개발 복잡도와 비용
  11. 11. 고루틴의 매력 그냥 아래와 같이 코딩하면 fun1함수는 별도의 thread 에서 실행 go fun1() 아주 쉬운 멀티 쓰레딩 프로그래밍 !!
  12. 12. 고루틴이 push agent 와 만났을때(1) 기존 queue get message REQUEST GCM OR APNS 단일 쓰레드이기 때문에 GCM OR APNS REQUEST 통신이 늦어지면 get message 모듈이 queue 에 쌓인 push 요청을 소비 할 수 없어서 전체 push 전송 프로세스가 늦어짐
  13. 13. 고루틴이 push agent 와 만났을때(2) 개선 queue get message REQUEST GCM OR APNS GCM OR APNS REQUEST모듈은 고루틴에 의해 별도의 thread 로 실행되어 통신이 늦어지더 라도 get message 모듈은 queue 에서 push 요청을 소비하여 GCM OR APNS 통신을 계속 요청 할 수 있음 REQUEST GCM OR APNS go
  14. 14. 단점도 있어요 - 언어 자체가 좋고 매력적이지만 사용해야 하는 외부 라이브러리는 아직 베타가 많아요, 어느정도 수정해서 사용해야함 - GOPATH 수동 설정이 좀 불편하다. (이건 내가 형상관리 부분은 아직 안봐서 그럴수도.. ) - panic 처리가 불편함 - 이밖에는 딱히 다른점은 잘 모르겠음
  15. 15. 끝으로 RabbitMQ 연동 삽질 팁 다른 사람들은 삽질 않길 ... - https://github.com/streadway/amqp 이용하여 RabbitMQ consumer 구현시 connection 이 끊기면 먹통이 됨.. https://github.com/streadway/amqp/blob/master/reconnect_test.go 를 참고하여 반드시 reconnect 를 구현 추천 Reconnect 에 대한 개선은 https://github.com/streadway/amqp/issues/133 에서 현재 진행중임
  16. 16. 못다한 개발이야기는 http://blog.naver.com/pdc222 에서

×