ݺߣ

ݺߣShare a Scribd company logo
AWS 없이만든AWS와유사한데이터파이프라인
JaeHyuk Kim, airkjh99@gmail.com
다룰내용
데이터근처를맴돌던시간들
현재구성된데이터처리아키텍처
현재의아키텍쳐를AWS로마이그레이션한다면
소개
과거 : Java 개발자
현재: 데이터잡부
관심사
Agile, DevOps, Container, Serverless, Data 관련기술들
ML
Certificate collector
진짜자격증따고 싶다
데이터근처를맴돌던시간들
데이터주변인: 데이터를다루지만데이터엔지니어도아니고 데이터과
학자도아닌괴생명체
ѫ먼옛날
ICLAS ‑ 기능
Embedded javascript로데이터수집‑ GA와유사한방식
주기적(보통1시간)으로수집된데이터를정제하여통계 테이블에저장
약50여개의그래프
Oracle analytics function 사용
ICLAS ‑ 시련
새로운패턴의데이터가 수집되면정제시오류발생‑> 수동으로처리
새로운데이터패턴을보고 싶어요
리얼타임으로는통계 데이터를볼수없나요?
고객사에서Oracle을뺀답니다. Non‑Oracle 버전은없나요?
만들땐허접했던Google Analytics가 너무발전함(게다가 무료)
새로운분석시스템을만들자!
그럼국책과제에써먹을수있겠군요
10만호급 전력빅데이터관리체계 및서비스개발
전력관련빅데이터및생활관련빅데이터를연계하여인사이트를도출
하여서비스로승화
데이터주변인으로서의역할
비즈니스모델을만들었는데검증을하고 싶다
1. 수집해달라는데이터를수집한다
2. 데이터를어떻게 전처리할지, 어디다저장할지고민한다
3. 검증에필요한데이터를뽑아visualize한다
4. 보고서작성에필요한데이터를추출한다
신기루같은데이터
특정도메인은일반적으로사용되는지표가 있습니다
DAU
매출추이(일간, 주간, 월간 등)
방문패턴(얼마나페이지에오래머무르는지, 어떤검색엔진에서어
떤검색어를입력하고 방문했는지등)
신기루같은데이터
수집대상이명확한데이터도있습니다
Web server access log
System metric (CPU, Memory, Disk, Network...)
JVM
신기루같은데이터
이런시나리오면좋을것 같아요. 검증해봅시다
일단이런이런데이터수집이필요할것 같아요
앗이런데이터도추가로필요하겠군요
검증해보니아닌것 같아요. 다른데이터로다시해봅시다
새로운시나리오가 나왔어요. 멋지죠?
요구 사항‑ 데이터수집
아직은무슨데이터를수집할지모르겠군요
주기적으로수집할데이터가 있을수도있습니다
스팟성으로제공되는데이터도있습니다
엑셀파일도분석해줄거죠?
요구 사항‑ 데이터수집
외부에서채워주는데이터가 있을지도모릅니다
데이터를수집하는방식이REST가 아닐수도있습니다
그 업체가 FTP방식이좋다네요?
수집해야하는데이터유형은계속추가될수있습니다
설마추가될때마다서버재시작하고 그런거 아니죠?
공공 데이터포털에서주는데이터는기관마다제각각입니다.
공무원이원래그렇죠뭐
요구 사항‑ 데이터가공
어떤데이터를가공할지아직모르겠어요
데이터가 어떤포맷인지모릅니다
XML, JSON, CSV, Excel, MS Access...
어디에저장할지모릅니다
그건 니가 고민해야죠?
요구 사항‑ 데이터연동
수집한데이터를외부에제공할수있는방법이필요합니다
하지만어떤데이터를어떤포맷으로제공할지는모르겠습니다
일별데이터지만월별, 주별, 요일별로보고 싶군요
앗이번보고서에는이데이터는빼주세요미안:)
설마새API 추가한다고 서버재시작하고 그런거 아니죠?
요구 사항‑ Visualization
데이터만주르륵보여주진않을거죠?
하지만어떤차트가 필요한지아직모르겠어요
데이터는내가 보고 싶은대로나와야해요
정해놓고 알아서보라고 하지말아요
주기적으로정제한다고 말하지말아요대세는실시간이라구요
자게임을시작하도록하지
자넨개발자를소중히생각하지않았어
쵵Ӵ의Ϊ근
Runtime에...
수집할데이터의유형이추가된다
분석할데이터의유형이추가된다
보여줄데이터의유형이추가된다
서버재시작은안된다
비즈니스로직을스크립트로작성하자!
Java의ScriptEngine
여러유형의스크립트를Java에서실행시킬수있다
Java 7까지는Rhino, Java 8부터는Nashorn 이라고 불림
스크립트에서도Java 객체에접근할수있다
스크립트로작성된BM을메모리에저장후요청에맞게 실행
좋아이거면되겠다
Data Flow
Data Flow
사례‑ Web Log 분석
준비물
데이터수집스크립트(URL, Referrer, Browser...)
데이터분석스크립트
PageView 분석스크립트
Visitor 분석스크립트
Referrer 분석스크립트
등등
Web Log 분석
결과물
Architecture
Architecture
Architecture
DataSource
Workbook
Script
Cron
잘못된판단들
ScriptEngine
스크립트를작성하기 어려움
스크립트엔진의동작방식으로인한특수한문법들
이것은Java 객체인가? JavaScript 객체인가?
Inject되는Java 객체의API도알아야한다
Debug는오직 System.out.println() 
Data Flow
이벤트핸들러체인의overview를알기 ̘들다
A 이벤트가 발생하면누가 동작하나?
A 이벤트처리의끝은어디인가?
Chart
차트의데이터를가져오는용도의스크립트를별도로작성해야한다
차트화면과 차트데이터스크립트화면을왔다갔다하면서확인
디버그가 ̘들다
다른차트라이브러리를사용하기 ̘들다
Event Dispatcher (Craken)의불안정성
내부적으로Lucene + Infinispan으로구현
서버가 비정상적으로종료된경우Lucene Index가 망가짐‑> 복구 불가
추가로더해야하는것들
더많은Wrapper 객체들
Spark (+Hadoop)
R 연동
Wrapper 클래스를작성하는수고스러움+ 서버재시작
다른접근
희망사항
좀더Visual한모습으로전체프로세스를볼수있었으면좋겠다
Event 처리Flow의비주얼한화면
Javascript를쓰는것은좋은데좀더표준적인방법으로사용했으면좋겠
다
그냥NodeJS 사용하듯이Javascript를사용하고 싶다
힘들지않게 차트를그리고 싶다
Chart framework로코딩하는것이아니라데이터만주면알아서그
려줬으면좋겠다
새로운모습
Architecture
AWS없이 만든  AWS와 유사한 데이터 파이프라인
NodeRed
nodered.org
Visual wiring tool for the Internet of Things
JS Foundation 프로젝트
IBM이Foundation member
Javascript(Node) 생태계를위한여러가지툴을Incubating
jQuery/UI, Grunt, ESLint, Lodash, Mocha, RequireJs,
Webpack...
Nodered
브라우저기반의Flow 에디팅
Node.js 기반
오픈소스
IoT 데이터처리를주목적으로탄생
Raspberry Pi, BeagleBone Black, Arduino, Android...
JSON message payload
Nodered ‑ Input
Inject ‑ Flow 수동실행, Cron
Catch ‑ Flow에서발생하는모든오류를catch
Status ‑ 탭내의다른노드의상태를리포트
Link ‑ Flow간의가상와이어생성
MQTT ‑ MQTT에서메세지를수신
HTTP ‑ REST Endpoint
websocket ‑ Websocket Endpoint
TCP
UDP
Cron
Redis in
Kafka Consumer
Nodered ‑ Output
Debug ‑ 디버그 메세지
Link
MQTT
HTTP Response
websocket
TCP
UDP
Redis out
Kafka Producer
Nodered ‑ Function
Function ‑ Javascript로Message 객체의조작
HTTP Request
Switch ‑ 조건에따른Sub flow 분기
split ‑ Message payload에담긴 array를분리
XML ‑ XML 메세지를JSON으로변환
기타등등
Nodered ‑ Social
Twitter ‑ Input
Twitter ‑ Output
Slack
Nodered ‑ Storage
Tail
File
FTP
SFTP
PG Listen
mysql
Postgres
Nodered ‑ Advanced
Watch ‑ 디렉토리모니터링
feedparse ‑ RSS 피드
exec ‑ shell command를실행하고 output을리턴
Nodered ‑ AWS
EC2 ‑ Start/Stop/Describe EC2 인스턴스
Kinesis ‑ Kinesis 스트림에get / put
Lambda ‑ Lambda 함수를실행후output을리턴
S3 ‑ S3에get / put
dynamodb ‑ DynamoDB에put / get / scan
sns ‑ SNS에메세지전송
sqs ‑ send / receive / delete / purge SQS
Nodered ‑ Elasticsearch
search
create
exists
update
delete
get
Nodered ‑ Dependency
nodered의부가 모듈을NPM 리파지토리에서설치할수있음
nodered용모듈이아니더라도설치후Function 모듈에서이용가능
부가 모듈의개발가이드를보고 커스텀모듈을제작할수있음
Nodered ‑ 단점
분산말고 클러스터기능이없다
몇몇부가 모듈은유지보수가 잘되고 있지않다
NodeJs로작성되어있어서Hadoop ecosystem과 잘어울리진않는다
구성모듈
Spark
Hadoop
MySQL
ElasticSearch
Zeppelin
프로세스
1. Data (or File)
2. Spark
3. Parquet, CSV, JSON
4. Hadoop, MySQL
5. Zeppelin
File
생각보다많은데이터들이API를통해수집되지않는다
CSV, Excel 등등
파일갯수만큼의포맷이존재
파일을받으면일단Hadoop에복사
Spark
Hadoop에복사된파일을읽어서처리하기 편한포맷으로변경
Spark의RDD 형태보다는Spark SQL의DataFrame 형태로변환
DataFrame 형태의결과물을Parquet 포맷으로Hadoop에저장
데이터사이즈가 크지않으면Zeppelin에서바로분석
MySQL
메타데이터저장
통계 데이터
고급(?) SQL이필요한데이터
Zeppelin
여러Interpreter를제공 ‑ Spark, JDBC, Hive, ElasticSearch, R...
온라인상태에서바로데이터를가공 후Visualization 가능
데이터분석및Visualization의De facto standard
Monitoring
주기적으로수집해야할데이터가 잘수집되고 있나?
여기까지가 2차년도결과물
3차년도
주의) AWS라면이런서비스를쓰면될텐데! 라는생각이휘몰아칩니다
3차년ѫ키텍쳐
달라진점
Mesos 기반의Containerize
HDFS를버리고 Alluxio + Minio 조합으로변경 (Hadoop을버림)
Monitoring (MetricBeat + ElasticSearch + Kibana)
왜Mesos?
Container, Container Orchestration 자체의장점
언제어떤서비스를배포할지모르는데특정기술스택에종속적이면
안됨
죽기 쉬운(?) 서비스는자동으로살려줌
Mesos Framework
mesos‑lb : HAProxy 내장docker, 특정서비스를vhost 형태로
80, 443으로오픈
mesos‑dns : Internal service naming
Marathon : Docker container orchestration (JSON 형태로task
definition, REST로배포가능)
왜Mesos?
Spark cluster
mesos의spark dispatcher framework를통해job 분산처리가능
Worker 노드의남는리소스에따라job 분배
Hadoop 관리가 너무어려워서
왜Alluxio + Minio?
Alluxio
Spark에서바로사용가능( alluxio:// ... )
캐시기능
Minio
S3 API 호환( aws s3 --endpoint=... 로aws cli 사용가능)
Spark에서바로사용가능( s3a://... )
혹시나AWS로마이그레이션할수도있을지몰라서
개선하지못한부분
FaaS 도입보류(OpenWhisk ‑> Too big, OpenFaaS 고려중)
Time Series DB 도입보류
Kafka를이용한스트리밍데이터처리보류(스트리밍데이터수집요구
사라짐)
Demo
AWS 상에서동일한아키텍쳐를구현한다면?
토론해봅시다!
Storage layer
Alluxio + Minio => S3
ETL layer
Spark cluster
Athena
Redshift
EMR (spark!)
Glue
Visualize layer
Zeppelin => QuickSight?
Preprocess Layer
Nodered => Lambda + Step Function (visualize??)
Kafka => Kinesis
Database layer
간단한Metadata => csv, json 형태로S3에넣어두면ETL에서사용가
능
통계 데이터=> RDS(Aurora) / Athena
ElasticSearch
형태소분석이필요하기 때문에Lambda를통해미리분석된형태로
저장
Service Layer
Nodered => Lambda + API Gateway
Front‑end => Vue.js를이용하고 있으므로빌드해서S3의static file
host
Monitoring
MetricBeat + ElasticSearch + Kibana => CloudWatch + X‑Ray
결론
빅데이터파이프라인은AWS serverless 기술만으로도충분하다?
감사니다!

More Related Content

AWS없이 만든 AWS와 유사한 데이터 파이프라인