어느 해커쏜에 참여한 백엔드 개발자들을 위한 교육자료
쉽게 만든다고 했는데도, 많이 어려웠나봅니다.
제 욕심이 과했던 것 같아요. 담번엔 좀 더 쉽게 !
- 독자 : 백엔드 개발자를 희망하는 사람 (취준생, 이직 희망자), 5년차 이하
- 주요 내용 : 백엔드 개발을 할 때 일어나는 일들(개발팀의 일)
- 비상업적 목적으로 인용은 가능합니다. (출처 명기 필수)
Introduction to Real-time, Streaming Data and Amazon Kinesis: Streaming Data ...Amazon Web Services
Amazon Kinesis is a platform for streaming data on AWS, offering powerful services to make it easy to load and analyze streaming data. In this session, you’ll learn about how AWS customers are transitioning from batch to real-time processing using Amazon Kinesis, and how to get started. We will provide an overview of streaming data applications and introduce the Amazon Kinesis platform and its services. We will walk through a production use case to demonstrate how to ingest streaming data, prepare it, and analyze it to gain actionable insights in real time using Amazon Kinesis. We will also provide pointers to tutorials and other resources so you can quickly get started with your streaming data application.
2018년 6월 24일 "백수들의 Conference"에서 발표한 개발자를 위한 (블로그) 글쓰기 intro입니다
좋은 글을 많이 보는 노하우 + 꾸준히 글을 작성하는 노하우에 대해 주로 이야기했습니다! (어떻게 글을 작성하는가는 없어요!)
피드백은 언제나 환영합니다 :)
어느 해커쏜에 참여한 백엔드 개발자들을 위한 교육자료
쉽게 만든다고 했는데도, 많이 어려웠나봅니다.
제 욕심이 과했던 것 같아요. 담번엔 좀 더 쉽게 !
- 독자 : 백엔드 개발자를 희망하는 사람 (취준생, 이직 희망자), 5년차 이하
- 주요 내용 : 백엔드 개발을 할 때 일어나는 일들(개발팀의 일)
- 비상업적 목적으로 인용은 가능합니다. (출처 명기 필수)
Introduction to Real-time, Streaming Data and Amazon Kinesis: Streaming Data ...Amazon Web Services
Amazon Kinesis is a platform for streaming data on AWS, offering powerful services to make it easy to load and analyze streaming data. In this session, you’ll learn about how AWS customers are transitioning from batch to real-time processing using Amazon Kinesis, and how to get started. We will provide an overview of streaming data applications and introduce the Amazon Kinesis platform and its services. We will walk through a production use case to demonstrate how to ingest streaming data, prepare it, and analyze it to gain actionable insights in real time using Amazon Kinesis. We will also provide pointers to tutorials and other resources so you can quickly get started with your streaming data application.
2018년 6월 24일 "백수들의 Conference"에서 발표한 개발자를 위한 (블로그) 글쓰기 intro입니다
좋은 글을 많이 보는 노하우 + 꾸준히 글을 작성하는 노하우에 대해 주로 이야기했습니다! (어떻게 글을 작성하는가는 없어요!)
피드백은 언제나 환영합니다 :)
1일 수천대의 서버에서 발생하는 30~50억건의 Log와 Metric을 처리하는 Planet Mon 을 지탱하는 기술인 Collection(Collectd, NXlog), Transport(Kakfa, Logstash), Log Stream Analytics, Storage(Elasticsearch), Visualization을 구성하는 Architecture에 대해 설명드리고 제가 개발한 Log Stream Analytics 서버들의 구현 기술에 대해 좀더 상세히 설명합니다.
AWS는 다양한 서비스 빌딩 블록을 이용하여, 고객의 요구에 따른 다양한 사물 인터넷(IoT) 서비스를 구축할 수 있습니다. 본 온라인 세미나에서는 AWS IoT 서비스의 주요 개념과 함께 일반적인 인터넷 기기 및 스마트 홈을 위한 IoT 서비스 구현 패턴을 알아봅니다. 이를 위해 데이터 상태 관리, 데이터 분석 및 자원 관리 등의 패턴을 통해 비용 효율적이고 확장 가능한 아키텍처를 살펴봅니다.
AWS Lambda, API Gateway, DynamoDB 등 서버리스 빌딩 블록과 AWS IoT를 연계한 iRobot의 아카텍처 사례를 함께 살펴봄으로서 IoT 기반 서비스 구현 및 이전에 통찰력을 얻으실 수 있습니다.
AWS Japan YouTube 公式チャンネルでライブ配信された 2022年4月26日の AWS Developer Live Show 「Infrastructure as Code 談議 2022」 の資料となります。 当日の配信はこちら からご確認いただけます。
https://youtu.be/ed35fEbpyIE
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)Seungmin Yu
2016년도 데이터야놀자에서 발표한 자료입니다.
멜론에서 InfluxDB + Telegraf + Grafana 조합으로 모니터링 시스템을 구축하고 활용한 사례를 발표한 내용입니다. 다양한 메트릭데이터와 DevOps 측면의 활용 가치에 대해서도 생각해 볼 수 있을 것 같습니다.
넥슨코리아 사내 발표자료로 왓 스튜디오에서 파이썬으로 《야생의 땅: 듀랑고》 서버를 비롯한 여러가지 도구를 만든 경험을 공유합니다.
- 게임서버와 각종 툴, 테스트/빌드/배포 시스템을 만들 때 사용한 재료
- 파이썬 코드 품질 개선, 디버깅, 프로파일링, 최적화
- 파이썬 오픈소스 생태계와 왓 스튜디오가 하는 오픈소스 활동
본 세션에서는 Amazon의 관리형 데이터베이스 서비스(RDS) 중 기존 상용데이터베이스의 5배 성능 및 1/10 가격으로도 확장성을 보장하는 Aurora에 대한 소개 및 사용법 그리고 기존의 DB에서의 마이그레이션 방법에 대해 소개해드립니다. 10월 리인벤트를 통해 동경 리전에 Aurora를 사용가능하게 되었습니다.
1일 수천대의 서버에서 발생하는 30~50억건의 Log와 Metric을 처리하는 Planet Mon 을 지탱하는 기술인 Collection(Collectd, NXlog), Transport(Kakfa, Logstash), Log Stream Analytics, Storage(Elasticsearch), Visualization을 구성하는 Architecture에 대해 설명드리고 제가 개발한 Log Stream Analytics 서버들의 구현 기술에 대해 좀더 상세히 설명합니다.
AWS는 다양한 서비스 빌딩 블록을 이용하여, 고객의 요구에 따른 다양한 사물 인터넷(IoT) 서비스를 구축할 수 있습니다. 본 온라인 세미나에서는 AWS IoT 서비스의 주요 개념과 함께 일반적인 인터넷 기기 및 스마트 홈을 위한 IoT 서비스 구현 패턴을 알아봅니다. 이를 위해 데이터 상태 관리, 데이터 분석 및 자원 관리 등의 패턴을 통해 비용 효율적이고 확장 가능한 아키텍처를 살펴봅니다.
AWS Lambda, API Gateway, DynamoDB 등 서버리스 빌딩 블록과 AWS IoT를 연계한 iRobot의 아카텍처 사례를 함께 살펴봄으로서 IoT 기반 서비스 구현 및 이전에 통찰력을 얻으실 수 있습니다.
AWS Japan YouTube 公式チャンネルでライブ配信された 2022年4月26日の AWS Developer Live Show 「Infrastructure as Code 談議 2022」 の資料となります。 当日の配信はこちら からご確認いただけます。
https://youtu.be/ed35fEbpyIE
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)Seungmin Yu
2016년도 데이터야놀자에서 발표한 자료입니다.
멜론에서 InfluxDB + Telegraf + Grafana 조합으로 모니터링 시스템을 구축하고 활용한 사례를 발표한 내용입니다. 다양한 메트릭데이터와 DevOps 측면의 활용 가치에 대해서도 생각해 볼 수 있을 것 같습니다.
넥슨코리아 사내 발표자료로 왓 스튜디오에서 파이썬으로 《야생의 땅: 듀랑고》 서버를 비롯한 여러가지 도구를 만든 경험을 공유합니다.
- 게임서버와 각종 툴, 테스트/빌드/배포 시스템을 만들 때 사용한 재료
- 파이썬 코드 품질 개선, 디버깅, 프로파일링, 최적화
- 파이썬 오픈소스 생태계와 왓 스튜디오가 하는 오픈소스 활동
본 세션에서는 Amazon의 관리형 데이터베이스 서비스(RDS) 중 기존 상용데이터베이스의 5배 성능 및 1/10 가격으로도 확장성을 보장하는 Aurora에 대한 소개 및 사용법 그리고 기존의 DB에서의 마이그레이션 방법에 대해 소개해드립니다. 10월 리인벤트를 통해 동경 리전에 Aurora를 사용가능하게 되었습니다.
4. GCM 이란?
기존의 방식
1. GCM(Google Cloud Messaging)이란, 구글 서버를 이용해서 안드로이드 기기에 푸시를 보내는 것.
5. 기존에 알아야 할 사실
기존의 방식
1.GCM은 HTTP Request를 통해 메세지를 보낼 수 있음.
2.GCM은 한번에 1000개씩 보낼 수 있음.
3.저희 서버에 등록된 GCM Key는 약 70만개.
4.모든 사람이 공정하게 푸시를 받아야 함. (매번 푸시 발송 순서가 달라야함.)
6. 기존의 방식
기존의 동작 방식
사용자를 1000명
단위로 그룹 지정
그룹을 랜덤으로
Shuffle
1000개 단위로
푸시 전송
로그 쌓기
끝날때까지 반복
7. 기존의 방식
기존의 동작 방식
사용자를 1000명
단위로 그룹 지정
그룹을 랜덤으로
Shuffle
1000개 단위로
푸시 전송
로그 쌓기
끝날때까지 반복
여기까지 보통 80분 정도 소요..
8. 기존의 방식
기존의 동작 방식
사용자를 1000명
단위로 그룹 지정
그룹을 랜덤으로
Shuffle
1000개 단위로
푸시 전송
로그 쌓기
끝날때까지 반복
9. 기존의 방식
기존의 동작 방식
사용자를 1000명
단위로 그룹 지정
그룹을 랜덤으로
Shuffle
1000개 단위로
푸시 전송
로그 쌓기
끝날때까지 반복
여기를 개선해보자!!
14. PHP에서 Async의 지원
어떻게 개선할까? - Async
1.PHP의 모든 로직은 전부 Sync가 기반.
2.PHP에서 Async를 사용하기 위해서는 Pthread 모듈이나 Ev, Uv 등을 사용해야 함.
3.하지만, 내장 Curl의 경우 Multi Curl을 지원해서 비동기로 처리가 가능.
4.즉, Curl에 한해서는 기본 PHP로 Async스럽게 사용할 수 있음.
5.이 Multi Curl을 Async(그리고 Promise)를 통해서 구현해놓은 라이브러리가 Guzzle Http.
15. 어떻게 개선할까? - Async
HTTP Request할때, 다들 많이 사용할 그 녀석..
16. 어떻게 개선할까? - Async
Request 생성 매서드 하나 만들고..
public function createRequest($tokens, $message, $url = '')
{
return new Request(
'POST',
new Uri('https://android.googleapis.com/gcm/send'),
'1.1',
[
'Authorization' => "key=xxxxxxxxxxxxxxx",
'Content-Type' => 'application/json',
],
new StringStream(json_encode([
'registration_ids' => $tokens,
'data' => [
'alert' => $message,
'url' => $url
],
]))
);
}
Request, Uri, StringStream은 PSR-7 객체입니다.
17. 어떻게 개선할까? - Async
나머진 그냥 예시 참고해서 만들면 됨.
http://docs.guzzlephp.org/en/latest/quickstart.html
$requests = [];
foreach ($this->getChunkedTokens() as $tokens) {
$message = $this->getMessate();
$url = $this->getUrl();
$requests[] = $this->createRequest($tokens, $message, $url);
}
$pool = new Pool($this->client, $requests, [
'concurrency' => 20, // 메모리에 맞춰서 알아서..
'fulfilled' => function ($response, $index) {
$this->output->writeln(date('[Y-m-d H:i:s] ') ."success in {$index} !!");
},
'rejected' => function ($reason, $index) {
$this->output->writeln(date('[Y-m-d H:i:s] ') ."fail in {$index} ..");
},
]);
$pool->promise()->wait();
19. 여기까지 했을 때의 문제.
어떻게 개선할까? - Async
1.Iterator로 요청하기 때문에 GCM 키 70만건을 한번에 메모리에 올려야 함.
2.구글 문서에 따르면 GCM Key는 최대 4Kb 까지 가능함.
3.그냥 2.8Gb 정도의 메모리를 소요함.
4.굳이 이 만큼의 메모리를 소비해야 하는가?
28. 결론
1.Async는 속도를 향상 시킬 수 있음. 따라서, Async로 할 수 있는 작업은 Async로 바꾸자.
2.Generator는 메모리를 효율적으로 사용할 수 있음. 따라서, Generator로 할 수 있다면 Generator를 사용해보자.
3.그렇지만 이게 정답은 아님.
정리