오픈소스를 활용한 batch_처리_플랫폼_공유

60
사사사 사사 , 사사사 사사 , 사사사사사 사사사사사 사사사사 사사 , NHN 사 사사사 사사사 오오 오오오 오오오 Batch 오오 오오오 오오 NHN 오오오 [email protected] m

Upload: knight1128

Post on 10-Dec-2014

11.674 views

Category:

Technology


1 download

DESCRIPTION

JCO 2011 발표

TRANSCRIPT

Page 1: 오픈소스를 활용한 Batch_처리_플랫폼_공유

사람과 사람 , 오늘과 내일 , 네트워크와 네트워크가 연결되는

세상 ,

NHN 이 만들어 갑니다

오픈 소스를 활용한 Batch 처리 플랫폼 공유

NHN 김용환 [email protected]

Page 2: 오픈소스를 활용한 Batch_처리_플랫폼_공유

OVERVIEW

배경Batch 처리 플랫폼 선택Spring Batch 소개Hudson 소개적용사례

Page 3: 오픈소스를 활용한 Batch_처리_플랫폼_공유

발표자 소개

Page 4: 오픈소스를 활용한 Batch_처리_플랫폼_공유

배경Batch 처리 플랫폼 선택Spring Batch 소개Hudson 소개적용사례

Page 5: 오픈소스를 활용한 Batch_처리_플랫폼_공유

사용자의 추가적인 개입 없이 서비스를 지원하는 프로그램

또는 서비스

Front-End Back-End

배경

Page 6: 오픈소스를 활용한 Batch_처리_플랫폼_공유

배경

Batch 처리 플랫폼은

Back-end 서비스 중

중요한 솔루션 중 하나

Page 7: 오픈소스를 활용한 Batch_처리_플랫폼_공유

배경

Batch Job : 시스템 사용자가 주기적으로 또는 특정시간에 자동으로 실행되도록 하는 프로그램

Batch 처리 플랫폼 : Batch Job 을 실행하는 기반 프로그램

JOB JOB JOB JOB JOB JOB JOB JOB

LogUI

(Dash-board)

Monitor-ing

& AlertScheduler

Failover

LoadBalanc-

ing

Batch Job

Batch 처리 플랫폼

용어 정리

Page 8: 오픈소스를 활용한 Batch_처리_플랫폼_공유

배경

웹 서비스의 Batch Job 특징

• 특정 시간에 동작해야 한다 .• 대부분 DB 나 파일처리이다 .• 성능을 위해서 java 이외의 언어로 해결할 수 있다 .• 특정 시간 안으로 끝내야 하는 것은 거의 없다 .• 초기 개발 외에는 유지보수는 거의 하지 않는다 .

• 잘해도 티 안 나고 , 장애 발생하면 욕먹는다 .• 개발자의 성격이 드러나는 경우가 많다 .• 인수인계 할 때 빠트리는 경우가 많다 .

Page 9: 오픈소스를 활용한 Batch_처리_플랫폼_공유

• Linux 의 crontab 이용한 Shell Script• Web framework 위에 Web Call 호출 방식• Web framework 위에 Quartz 이용• 자체 Framework / 플랫폼 개발

- 일반적인 Batch- 서비스만의 특수한 상황을 해결

• Legacy (c, c++, php, python, perl, java)• Spring Batch

배경

기존 Batch 시스템 / 플랫폼

Page 10: 오픈소스를 활용한 Batch_처리_플랫폼_공유

배경

장애 발생 케이스

• 개발 환경이 존재하지 않음• 테스트 못함 (syntax 문제나 예측 불가능 )• 중복 실행• 잘못 만든 쿼리 문제 • 코드 오류• 서비스 DB 연결에 대한 Timeout• 서버 장애• API 연동 장애• Memory Leak

Þ Batch 에 대한 정상 실행 여부에 대한 모니터링이 쉽지 않다 .

Page 11: 오픈소스를 활용한 Batch_처리_플랫폼_공유

배경

장애 발생을 최소화하고 , 장애 발생시에 장애 파악을 빨리 하자

• Test Case 를 이용 , 사전에 문제를 예방• Batch Job 실행 후 , 문제 발생시 SMS/ 메일 알림• 테스트 환경을 쉽게 재현

Page 12: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Time

Scalability 이슈 ,서비스가 성장함에 따라Batch Job 이 복잡해지고 양이 많아져 서버 성능이 많이 저하되면서 실패율이 높아짐

JOB

JOB

JOB

JOB

JOB

JOBJOB

JOB

JOB

JOB

JOB

배경

Page 13: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Batch 처리 플랫폼

운영 비용최소

FailoverFailback

Load balanc-ing

확장성 / 안정성 /생산성 /

유지보수성확보

Failover

LoadBalanc-

ing

배경

Page 14: 오픈소스를 활용한 Batch_처리_플랫폼_공유

• Scheduler• 쓸만한 UI• Dashboard 를 통해 관리자 확인

- Batch Job 리스트- 다음 실행 시간을 확인

• Job 실패에 대한 SMS/Mail 알림• Web 에서의 Log 정보 확인 • API 존재• Batch Job Framework 와도 연동 가능성

Batch 처리 플랫폼 요구사항 (1)

배경

Page 15: 오픈소스를 활용한 Batch_처리_플랫폼_공유

• Load balancing 기능• Fail over / Fail back 기능• 확장 가능한 플러그인 지원• 믿을만한 오픈 소스 기반• 이해하기 쉽고 양질의 문서• Retry 가능• 기존에 사용하던 C, C++, shell script, Python, Perl 언어로 만들어진 Legacy Batch Job 실행가능• 운영하기 쉬워야 함• 노드 확장성

Batch 처리 플랫폼 요구사항 (2)

배경

Page 16: 오픈소스를 활용한 Batch_처리_플랫폼_공유

배경

Batch 처리 플랫폼을 새로 개발할까 ?

Controller

Executor Executor

※ 공짜로 쓸만한 Batch 처리 플랫폼은 거의 없음

Page 17: 오픈소스를 활용한 Batch_처리_플랫폼_공유

2008 년도 : Spring Batch 1 -> Spring Batch 2 많은 변화 ( 구조개선 , 안정화 )

2010 년도 : NHN 사내에 Batch 고도화 TF 결성

배경

• Batch 처리를 위한 가이드 문서 (java 를 포함한 여러 Language)• Spring Batch Job 을 잘 사용할 수 있는 Hudson 플러그인 개발

Page 18: 오픈소스를 활용한 Batch_처리_플랫폼_공유

배경Batch 처리 플랫폼 선택Spring Batch 소개Hudson 소개적용사례

Page 19: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Batch 처리 플랫폼 선택

서비스 부서에서 사용하는 Batch 처리 사례 및쓸만한 오픈 소스 확인

Hadoop

Hudson

Spring Batch

Shell Script

SSH/RSH

Rsync

Python/Perl/PHP/C/C++

Linux/crontab

Com-monjava

CustomAdmin

GridGain

MQ내부

솔루션Spring Batch Admin

Control-Tier

Quartz

Page 20: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Batch 처리 플랫폼 선택

Batch Job 이 성격이 너무 다양하기 때문에다양한 해결 방법은 당연

다만 , java 개발자가 처음쓰기에 괜찮은 ..

Batch Job 을 쉽게 개발할 수 있는 ..

유지보수가 편한 ..

서로 공유할 수 있는 ..

괜찮은 Batch Job Framework 와 Batch 처리 플랫폼이 있으면 좋겠다

Page 21: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Batch 처리 플랫폼 선택

Spring Source 의Spring Batch Admin • Inspect Jobs• Launch Job• Inspect Executions• Stop an Execution

▶ 기능이 많지 않음

Page 22: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Batch 처리 플랫폼 선택

Hudson ▶ 쓸만한 기능이 많음

Page 23: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Hudson

JOB

Batch 처리

플랫폼

Batch 처리 플랫폼 선택

Page 24: 오픈소스를 활용한 Batch_처리_플랫폼_공유

배경Batch 처리 플랫폼 선택Spring Batch 소개Hudson 소개적용사례

Page 25: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Spring Batch 소개

SpringSource 와 컨설팅 회사 Accenture 가 협업해서 개발한 Framework

실제 개발 사례를 바탕으로 표준화된 API 를 개발

1.0 Release (2008.2)

2.1.8.Release (2011.6.1)

His-tory

Page 26: 오픈소스를 활용한 Batch_처리_플랫폼_공유

문서 참조http://static.springsource.org/spring-batch/reference/html/do-main.html

Concept

CommandLineJobRunner

Shell Script“bash$ java CommandLineJobRunner endOfDayJob.xml endOf-Day schedule.date(date)=2011/06/19”

BO

File DB JMS

File DB JMS

Spring Batch 소개

Page 27: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Concept

Spring Batch 소개

Page 28: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Concept

Spring Batch 소개

Page 29: 오픈소스를 활용한 Batch_처리_플랫폼_공유

<job id="ioSampleJob"> <step name="step1"> <tasklet> <chunk reader="fooReader" processor=“fooProcessor" writer="foobarWriter“ commit-interval="10“/> </tasklet> </step></job>

Job example

Spring Batch 소개

Page 30: 오픈소스를 활용한 Batch_처리_플랫폼_공유

<job> <step name="gamesLoad" next="playerLoad"/> <step name="playerLoad"> <next on="*" to="summarize"/> <next on="FAILED" to=“error"/> </step> <step name=“error"/> <step name="summarize"/></job>

Job example

Spring Batch 소개

Page 31: 오픈소스를 활용한 Batch_처리_플랫폼_공유

내부 구조Job, JobParamter, Step, StepExecution, JobRepository

ItemWriter, IteamReader,ItemProcessor

JdbcTemplate

Spring Batch 소개

Page 32: 오픈소스를 활용한 Batch_처리_플랫폼_공유

장점

• Batch 개념을 명확히 할 수 있어 좋음 Job, Step, Reader, Writer, Processor• Job Repository 를 통해 job 실행 상태 확인• Skip, Retry, Restart 가능• Commit Interval 지정 • Scalability 제공 (remote chunking, partitioning)• 순차 및 병렬실행 가능• Spring Framework 를 같이 연동해서 사용 편리• AOP ( 보안 , 로깅 , 트랜잭션 ) 처리• 좋은 Utility Class 가 많음• Document 와 Forum 게시판에서 좋은 정보

http://static.springsource.org/spring-batch/reference/html/index.html

Spring Batch 소개

Page 33: 오픈소스를 활용한 Batch_처리_플랫폼_공유

• 코드양은 줄어드는 만큼 , 개념 이해 필수• 아직도 Spring Batch 는 진화 중 API 는 조금씩 변경되고 있으며 , Reference Document 에 설명이 적거나 예제가 없는 경우에는 계속 변경되고 있다는 암시적인 의미• 여러 개의 Spring Batch Job 들이 하나의 JobRepository 를 사용할 때 ,

Job 이 동시에 실행되지 않도록 하거나 Job 과 JobRepository 의 관계는 1 : 1 로 하는 것이 좋음 ( 채번 시 트랜잭션이슈 )

• Spring-batch 는 동일한 Job Repository 내에서 동일한 Job name 과 Job Parameter 로 Job Instance 를 생성할 수 없음

고려사항

Spring Batch 소개

Page 34: 오픈소스를 활용한 Batch_처리_플랫폼_공유

배경Batch 처리 플랫폼 선택Spring Batch 소개Hudson 소개적용사례

Page 35: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Hudson 소개

• Continuous Integration 서버• 주기 또는 코드 커밋마다 개발한 소스을 한번에 통합 빌드 하여 코드 오류를 발견시켜줌• 정적 분석과 연동

특징

Page 36: 오픈소스를 활용한 Batch_처리_플랫폼_공유

• Scheduler• 쓸만한 UI• Dashboard 를 통해 관리자 확인

- Batch Job 리스트- 다음 실행 시간을 확인

• Job 실패에 대한 SMS/Mail 알림• Web 에서의 Log 정보 확인 • API 존재• Batch Job Framework 와 연동가능성

오픈 소스 중 Batch 처리 플랫폼 요구사항에 가장 근접

• Load balancing 기능• Fail over / Fail back 기능• 확장 가능한 플러그인 지원• 믿을만한 오픈 소스 기반• 이해하기 쉽고 양질의 문서• Retry 가능• 기존에 사용하던 C, C++, shell script, Python, Perl 언어로 만들어진 Legacy Batch Job 실행가능• 운영이 쉬워야 함 • 노드 확장성

Hudson 소개

Page 37: 오픈소스를 활용한 Batch_처리_플랫폼_공유

JOBHudson Spring

BatchJOB

Batch 처리 플랫폼

Hudson 소개

Page 38: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Batch Platform (master)

SSH

Slave Slave

Batch Platform (master)

slave(backup)

Batch Platform (standalone)

Job실행

Job실행

Job실행

Job실행

Job실행

StandbyBatch Platform(master)

SSH

Slave Slave

Job실행

Job실행

단독 설정 백업 확장 구조 확장 - 백업 구조

Rsync

구성

Rsync

Hudson 소개

Job실행

Page 39: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Java VM

Tomcat

Hudson

JOB JOB JOB JOB

Spring Batch Job

Spring BatchDashboard Plugin

plugin

Job Repository DB

C/C++, ….

Batch 운영 플랫폼

Hudson 소개

Page 40: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Spring batch Dash-board

Short Message / Mail 알림

Batch Job 수행 지연 / 미실행 감시

Job Reposi-

toryjob 실행

log삭제

HudsonPlugins

Batch Job 운영을 위한 플러그인 개발

Hudson 소개

Page 41: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Hudson UI – Slave 지정

Hudson 소개

최대동작 가능한 ▶Job 개수 지정

Page 42: 오픈소스를 활용한 Batch_처리_플랫폼_공유

실행 여부

Hudson UI

로그 확인

Hudson 소개

Page 43: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Hudson UI – Job 기본 설정

실행 스크립트

Scheduler (cron)

Hudson 소개

Page 44: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Hudson API

http://1.1.1.1/hudson/api/xml

http://1.1.1.1/hudson/restart

▼ job 리스트

▼ 제어

http://1.1.1.1/hudson/job/myjob/con-fig.xml

▼ job 상세 정보

http://1.1.1.1/hudson/job/myjob/lastBuild/api/xml

▼ 마지막으로 job 이 실행했던 정보

Hudson 소개

Page 45: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Hudson UI – Dashborad ( 자체 개발 )

Spring Batch Job 실행 통계 - Job Repository DB 로부터 정보 얻어옴 - 특정 기간 동안의 전체 실행 개수 대비 실패율을 확인 - Refresh 기능Cron 정보을 바탕으로 다음 실행시간을 예측

Hudson 소개

1

2

1

2

Page 46: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Hudson UI – Spring Job Dashborad ( 자체 개발 )

▼ Job Repository 정보 확인

Hudson 소개

Page 47: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Hudson UI – Spring Job Time Table ( 자체 개발 )

▲ 실행 주기 , 얼마나 소요되는지 확인

Hudson 소개

Page 48: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Hudson UI – Job 실행 시간 지연 & Job 실패 시 SMS/Mail 알림 ( 자체 개발 )

Hudson 소개

Page 49: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Hudson UI – Job Repository 등록 및 로그 삭제 ( 자체 개발 )

Job Repository DB 정보Job Repository DB 로그 삭제 (table constraint 염두 )

Hudson 소개

Page 50: 오픈소스를 활용한 Batch_처리_플랫폼_공유

장점

• 실행 로그• Plug in 개발 및 활용 Dashboard UI, 모니터링 … • 확장 가능한 Plugin 을 이용하여 Customization

• 노드 확장 가능 (Scalability)

• 배포서버와의 API 연동 • 문서 참조 내용이 많음• Load balancing 기능• 간단한 Fail over 기능

Hudson 소개

Page 51: 오픈소스를 활용한 Batch_처리_플랫폼_공유

고려사항

• UI 에 익숙해 질 필요 ( 메뉴 구성 , Build)• 빌드 파일 개수는 최소화• cron 형태로 분 단위 Schedule 됨 정확한 시간에 동작한다는 보장은 없으나 ,

부하가 적으면 그 시간에 맞추어 동작 ( 정확한 시간에 동작되도록 Plug in 테스트 중 )• Governance 버전 사용• Job 배포 이슈

Hudson 소개

Page 52: 오픈소스를 활용한 Batch_처리_플랫폼_공유

고려사항

Hudson 은 최근에는 현재 Oracle 의 Hudson 과 오픈 소스 진영의 Jenkins 로 나눠졌다 .

계속해서 지켜볼 필요가 있다 .

Hudson 소개

Page 53: 오픈소스를 활용한 Batch_처리_플랫폼_공유

배경Batch 처리 플랫폼 선택Spring Batch 소개Hudson 소개적용사례

Page 54: 오픈소스를 활용한 Batch_처리_플랫폼_공유

적용사례

A 서비스

Batch Master

Slave SlaveSlave Slave

Page 55: 오픈소스를 활용한 Batch_처리_플랫폼_공유

적용사례

A-1 서비스

Batch Master

Slave SlaveSlave Slave

NAS

Page 56: 오픈소스를 활용한 Batch_처리_플랫폼_공유

적용사례

B 서비스

Batch Master

Slave SlaveSlave Slave

Standby

Page 57: 오픈소스를 활용한 Batch_처리_플랫폼_공유

적용사례

B 서비스

Batch Master Standby

Batch Master Standby

Batch Master Standby

Page 58: 오픈소스를 활용한 Batch_처리_플랫폼_공유

적용사례

C 서비스

Batch Master

Slave SlaveSlave Slave

Standby

Hudson

Web-Server

WebServer 를 먼저 배포하고 ,

Hudson 에서 WebServer 를실행하는 방법

Hudson

Web-Server

Hudson

Web-Server

Hudson

Web-Server

Page 59: 오픈소스를 활용한 Batch_처리_플랫폼_공유

QnA

Page 60: 오픈소스를 활용한 Batch_처리_플랫폼_공유

Thank YouEnd of Document