오픈소스를 활용한 batch_처리_플랫폼_공유
DESCRIPTION
JCO 2011 발표TRANSCRIPT
사람과 사람 , 오늘과 내일 , 네트워크와 네트워크가 연결되는
세상 ,
NHN 이 만들어 갑니다
오픈 소스를 활용한 Batch 처리 플랫폼 공유
NHN 김용환 [email protected]
OVERVIEW
배경Batch 처리 플랫폼 선택Spring Batch 소개Hudson 소개적용사례
발표자 소개
배경Batch 처리 플랫폼 선택Spring Batch 소개Hudson 소개적용사례
사용자의 추가적인 개입 없이 서비스를 지원하는 프로그램
또는 서비스
Front-End Back-End
배경
배경
Batch 처리 플랫폼은
Back-end 서비스 중
중요한 솔루션 중 하나
배경
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 처리 플랫폼
용어 정리
배경
웹 서비스의 Batch Job 특징
• 특정 시간에 동작해야 한다 .• 대부분 DB 나 파일처리이다 .• 성능을 위해서 java 이외의 언어로 해결할 수 있다 .• 특정 시간 안으로 끝내야 하는 것은 거의 없다 .• 초기 개발 외에는 유지보수는 거의 하지 않는다 .
• 잘해도 티 안 나고 , 장애 발생하면 욕먹는다 .• 개발자의 성격이 드러나는 경우가 많다 .• 인수인계 할 때 빠트리는 경우가 많다 .
• Linux 의 crontab 이용한 Shell Script• Web framework 위에 Web Call 호출 방식• Web framework 위에 Quartz 이용• 자체 Framework / 플랫폼 개발
- 일반적인 Batch- 서비스만의 특수한 상황을 해결
• Legacy (c, c++, php, python, perl, java)• Spring Batch
배경
기존 Batch 시스템 / 플랫폼
배경
장애 발생 케이스
• 개발 환경이 존재하지 않음• 테스트 못함 (syntax 문제나 예측 불가능 )• 중복 실행• 잘못 만든 쿼리 문제 • 코드 오류• 서비스 DB 연결에 대한 Timeout• 서버 장애• API 연동 장애• Memory Leak
Þ Batch 에 대한 정상 실행 여부에 대한 모니터링이 쉽지 않다 .
배경
장애 발생을 최소화하고 , 장애 발생시에 장애 파악을 빨리 하자
• Test Case 를 이용 , 사전에 문제를 예방• Batch Job 실행 후 , 문제 발생시 SMS/ 메일 알림• 테스트 환경을 쉽게 재현
Time
Scalability 이슈 ,서비스가 성장함에 따라Batch Job 이 복잡해지고 양이 많아져 서버 성능이 많이 저하되면서 실패율이 높아짐
JOB
JOB
JOB
JOB
JOB
JOBJOB
JOB
JOB
JOB
JOB
배경
Batch 처리 플랫폼
운영 비용최소
FailoverFailback
Load balanc-ing
확장성 / 안정성 /생산성 /
유지보수성확보
Failover
LoadBalanc-
ing
배경
• Scheduler• 쓸만한 UI• Dashboard 를 통해 관리자 확인
- Batch Job 리스트- 다음 실행 시간을 확인
• Job 실패에 대한 SMS/Mail 알림• Web 에서의 Log 정보 확인 • API 존재• Batch Job Framework 와도 연동 가능성
Batch 처리 플랫폼 요구사항 (1)
배경
• Load balancing 기능• Fail over / Fail back 기능• 확장 가능한 플러그인 지원• 믿을만한 오픈 소스 기반• 이해하기 쉽고 양질의 문서• Retry 가능• 기존에 사용하던 C, C++, shell script, Python, Perl 언어로 만들어진 Legacy Batch Job 실행가능• 운영하기 쉬워야 함• 노드 확장성
Batch 처리 플랫폼 요구사항 (2)
배경
배경
Batch 처리 플랫폼을 새로 개발할까 ?
Controller
Executor Executor
※ 공짜로 쓸만한 Batch 처리 플랫폼은 거의 없음
2008 년도 : Spring Batch 1 -> Spring Batch 2 많은 변화 ( 구조개선 , 안정화 )
2010 년도 : NHN 사내에 Batch 고도화 TF 결성
배경
• Batch 처리를 위한 가이드 문서 (java 를 포함한 여러 Language)• Spring Batch Job 을 잘 사용할 수 있는 Hudson 플러그인 개발
배경Batch 처리 플랫폼 선택Spring Batch 소개Hudson 소개적용사례
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
Batch 처리 플랫폼 선택
Batch Job 이 성격이 너무 다양하기 때문에다양한 해결 방법은 당연
다만 , java 개발자가 처음쓰기에 괜찮은 ..
Batch Job 을 쉽게 개발할 수 있는 ..
유지보수가 편한 ..
서로 공유할 수 있는 ..
괜찮은 Batch Job Framework 와 Batch 처리 플랫폼이 있으면 좋겠다
Batch 처리 플랫폼 선택
Spring Source 의Spring Batch Admin • Inspect Jobs• Launch Job• Inspect Executions• Stop an Execution
▶ 기능이 많지 않음
Batch 처리 플랫폼 선택
Hudson ▶ 쓸만한 기능이 많음
Hudson
JOB
Batch 처리
플랫폼
Batch 처리 플랫폼 선택
배경Batch 처리 플랫폼 선택Spring Batch 소개Hudson 소개적용사례
Spring Batch 소개
SpringSource 와 컨설팅 회사 Accenture 가 협업해서 개발한 Framework
실제 개발 사례를 바탕으로 표준화된 API 를 개발
1.0 Release (2008.2)
2.1.8.Release (2011.6.1)
His-tory
문서 참조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 소개
Concept
Spring Batch 소개
Concept
Spring 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 소개
<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 소개
내부 구조Job, JobParamter, Step, StepExecution, JobRepository
ItemWriter, IteamReader,ItemProcessor
JdbcTemplate
Spring 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 소개
• 코드양은 줄어드는 만큼 , 개념 이해 필수• 아직도 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 소개
배경Batch 처리 플랫폼 선택Spring Batch 소개Hudson 소개적용사례
Hudson 소개
• Continuous Integration 서버• 주기 또는 코드 커밋마다 개발한 소스을 한번에 통합 빌드 하여 코드 오류를 발견시켜줌• 정적 분석과 연동
특징
• 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 소개
JOBHudson Spring
BatchJOB
Batch 처리 플랫폼
Hudson 소개
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실행
Java VM
Tomcat
Hudson
JOB JOB JOB JOB
Spring Batch Job
Spring BatchDashboard Plugin
plugin
Job Repository DB
C/C++, ….
Batch 운영 플랫폼
Hudson 소개
Spring batch Dash-board
Short Message / Mail 알림
Batch Job 수행 지연 / 미실행 감시
Job Reposi-
toryjob 실행
log삭제
HudsonPlugins
Batch Job 운영을 위한 플러그인 개발
Hudson 소개
Hudson UI – Slave 지정
Hudson 소개
최대동작 가능한 ▶Job 개수 지정
실행 여부
Hudson UI
로그 확인
Hudson 소개
Hudson UI – Job 기본 설정
실행 스크립트
Scheduler (cron)
Hudson 소개
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 소개
Hudson UI – Dashborad ( 자체 개발 )
Spring Batch Job 실행 통계 - Job Repository DB 로부터 정보 얻어옴 - 특정 기간 동안의 전체 실행 개수 대비 실패율을 확인 - Refresh 기능Cron 정보을 바탕으로 다음 실행시간을 예측
Hudson 소개
1
2
1
2
Hudson UI – Spring Job Dashborad ( 자체 개발 )
▼ Job Repository 정보 확인
Hudson 소개
Hudson UI – Spring Job Time Table ( 자체 개발 )
▲ 실행 주기 , 얼마나 소요되는지 확인
Hudson 소개
Hudson UI – Job 실행 시간 지연 & Job 실패 시 SMS/Mail 알림 ( 자체 개발 )
Hudson 소개
Hudson UI – Job Repository 등록 및 로그 삭제 ( 자체 개발 )
Job Repository DB 정보Job Repository DB 로그 삭제 (table constraint 염두 )
Hudson 소개
장점
• 실행 로그• Plug in 개발 및 활용 Dashboard UI, 모니터링 … • 확장 가능한 Plugin 을 이용하여 Customization
• 노드 확장 가능 (Scalability)
• 배포서버와의 API 연동 • 문서 참조 내용이 많음• Load balancing 기능• 간단한 Fail over 기능
Hudson 소개
고려사항
• UI 에 익숙해 질 필요 ( 메뉴 구성 , Build)• 빌드 파일 개수는 최소화• cron 형태로 분 단위 Schedule 됨 정확한 시간에 동작한다는 보장은 없으나 ,
부하가 적으면 그 시간에 맞추어 동작 ( 정확한 시간에 동작되도록 Plug in 테스트 중 )• Governance 버전 사용• Job 배포 이슈
Hudson 소개
고려사항
Hudson 은 최근에는 현재 Oracle 의 Hudson 과 오픈 소스 진영의 Jenkins 로 나눠졌다 .
계속해서 지켜볼 필요가 있다 .
Hudson 소개
배경Batch 처리 플랫폼 선택Spring Batch 소개Hudson 소개적용사례
적용사례
A 서비스
Batch Master
Slave SlaveSlave Slave
적용사례
A-1 서비스
Batch Master
Slave SlaveSlave Slave
NAS
적용사례
B 서비스
Batch Master
Slave SlaveSlave Slave
Standby
적용사례
B 서비스
Batch Master Standby
Batch Master Standby
Batch Master Standby
적용사례
C 서비스
Batch Master
Slave SlaveSlave Slave
Standby
Hudson
Web-Server
WebServer 를 먼저 배포하고 ,
Hudson 에서 WebServer 를실행하는 방법
Hudson
Web-Server
Hudson
Web-Server
Hudson
Web-Server
QnA
Thank YouEnd of Document