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

13,897
-1

Published on

JCO 2011 발표

Published in: Technology
0 Comments
55 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
13,897
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
306
Comments
0
Likes
55
Embeds 0
No embeds

No notes for slide

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

  1. 1. 오픈 소스를 활용한 Batch처리 플랫폼 공유<br />사람과 사람, 오늘과 내일, 네트워크와 네트워크가 연결되는 세상, <br />NHN이 만들어 갑니다<br />NHN 김용환 <br />knight1128@gmail.com<br />
  2. 2. OVERVIEW<br />배경<br />Batch 처리 플랫폼 선택<br />Spring Batch 소개<br />Hudson 소개<br />적용사례<br />
  3. 3. 발표자 소개<br />
  4. 4. 배경<br />Batch 처리 플랫폼 선택<br />Spring Batch 소개<br />Hudson 소개<br />적용사례<br />
  5. 5. 배경<br />사용자의 추가적인 개입 없이 서비스를 지원하는 프로그램 또는 서비스<br />Front-End<br />Back-End<br />
  6. 6. 배경<br />Batch 처리 플랫폼은<br />Back-end 서비스 중 <br />중요한 솔루션 중 하나<br />
  7. 7. 배경<br />용어 정리 <br />JOB<br />JOB<br />JOB<br />JOB<br />JOB<br />JOB<br />JOB<br />JOB<br />Batch Job <br />Batch 처리 플랫폼<br />Failover<br />Log<br />UI(Dashboard)<br />Monitoring& Alert<br />Scheduler<br />LoadBalancing<br />Batch Job : 시스템 사용자가 주기적으로 또는특정시간에 <br />자동으로 실행되도록 하는 프로그램<br />Batch 처리 플랫폼 : Batch Job을 실행하는 기반 프로그램 <br />
  8. 8. 배경<br />웹 서비스의 Batch Job 특징<br /><ul><li>특정 시간에 동작해야 한다.
  9. 9. 대부분 DB나 파일처리이다.
  10. 10. 성능을 위해서 java 이외의 언어로 해결할 수 있다.
  11. 11. 특정 시간 안으로 끝내야 하는 것은 거의 없다.
  12. 12. 초기 개발 외에는 유지보수는 거의 하지 않는다.
  13. 13. 잘해도 티 안 나고, 장애 발생하면 욕먹는다.
  14. 14. 개발자의 성격이 드러나는 경우가 많다.
  15. 15. 인수인계 할 때 빠트리는 경우가 많다.</li></li></ul><li>배경<br />기존 Batch 시스템/플랫폼<br /><ul><li> Linux 의crontab이용한 Shell Script
  16. 16. Web framework위에 Web Call 호출 방식
  17. 17. Web framework위에 Quartz 이용
  18. 18. 자체 Framework / 플랫폼 개발</li></ul>- 일반적인 Batch<br />- 서비스만의 특수한 상황을 해결<br /><ul><li> Legacy (c, c++, php, python, perl, java)
  19. 19. Spring Batch </li></li></ul><li>배경<br />장애 발생 케이스<br /><ul><li>개발 환경이 존재하지 않음
  20. 20. 테스트 못함(syntax 문제나 예측 불가능)
  21. 21. 중복 실행
  22. 22. 잘못 만든 쿼리 문제
  23. 23. 코드 오류
  24. 24. 서비스 DB연결에 대한 Timeout
  25. 25. 서버 장애
  26. 26. API 연동 장애
  27. 27. Memory Leak
  28. 28. Batch 에 대한 정상 실행 여부에 대한 모니터링이 쉽지 않다. </li></li></ul><li>배경<br />장애 발생을 최소화하고, 장애 발생시에 장애 파악을 빨리하자<br /><ul><li> Test Case를 이용, 사전에 문제를 예방
  29. 29. Batch Job 실행 후, 문제 발생시 SMS/메일 알림
  30. 30. 테스트 환경을 쉽게 재현</li></li></ul><li>배경<br />Scalability 이슈,<br />서비스가 성장함에 따라Batch Job이 복잡해지고 양이 많아져 <br />서버 성능이 많이 저하되면서 실패율이 높아짐<br />JOB<br />JOB<br />JOB<br />JOB<br />JOB<br />JOB<br />JOB<br />JOB<br />JOB<br />JOB<br />JOB<br />Time<br />
  31. 31. 배경<br />Load<br />Balancing<br />Failover<br />확장성/ 안정성/<br />생산성 / 유지보수성<br />확보<br />
  32. 32. 배경<br />Batch 처리플랫폼 요구사항 (1)<br /><ul><li> Scheduler
  33. 33. 쓸만한 UI
  34. 34. Dashboard 를 통해 관리자 확인</li></ul>- Batch Job 리스트<br />- 다음 실행 시간을 확인<br /><ul><li> Job 실패에 대한 SMS/Mail 알림
  35. 35. Web에서의 Log 정보 확인
  36. 36. API 존재
  37. 37. Batch Job Framework 와도 연동 가능성 </li></li></ul><li>배경<br />Batch 처리 플랫폼 요구사항 (2)<br /><ul><li>Load balancing 기능
  38. 38. Fail over / Fail back 기능
  39. 39. 확장 가능한 플러그인 지원
  40. 40. 믿을만한 오픈 소스 기반
  41. 41. 이해하기 쉽고 양질의문서
  42. 42. Retry 가능
  43. 43. 기존에 사용하던 C, C++, shell script, Python, </li></ul>Perl 언어로 만들어진 Legacy Batch Job 실행가능<br /><ul><li>운영하기 쉬워야 함
  44. 44. 노드확장성</li></li></ul><li>배경<br />Batch 처리플랫폼을 새로 개발할까?<br />Controller<br />Executor<br />Executor<br />※공짜로 쓸만한 Batch 처리 플랫폼은 거의 없음<br />
  45. 45. 배경<br />2008년도 : Spring Batch 1 -> Spring Batch 2많은 변화 (구조개선, 안정화)<br />2010년도 : NHN 사내에 Batch 고도화 TF 결성<br /><ul><li>Batch 처리를 위한 가이드 문서 (java를 포함한 여러 Language)
  46. 46. Spring Batch Job을 잘 사용할 수 있는 Hudson 플러그인 개발</li></li></ul><li>배경<br />Batch 처리 플랫폼 선택<br />Spring Batch 소개<br />Hudson 소개<br />적용사례<br />
  47. 47. Batch처리 플랫폼 선택<br />서비스 부서에서 사용하는 Batch 처리 사례 및쓸만한 오픈 소스 확인<br />Linux/crontab<br />Python/<br />Perl/PHP/C/C++<br />Shell Script<br />Hadoop<br />Spring Batch<br />GridGain<br />Hudson<br />SSH/RSH<br />Rsync<br />Common<br />java<br />Custom<br />Admin<br />Quartz<br />MQ<br />내부 <br />솔루션<br />Spring Batch Admin<br />Control-Tier<br />
  48. 48. Batch처리 플랫폼 선택<br />Batch Job이 성격이 너무 다양하기 때문에다양한 해결 방법은 당연<br />다만, java 개발자가 처음쓰기에 괜찮은..<br /> Batch Job을 쉽게 개발할 수 있는..<br />유지보수가 편한..<br />서로 공유할 수 있는..괜찮은 Batch Job Framework와 Batch 처리 플랫폼이 있으면 좋겠다<br />
  49. 49. Batch처리 플랫폼 선택<br />Spring Source의<br />Spring Batch Admin <br /><ul><li>Inspect Jobs
  50. 50. Launch Job
  51. 51. Inspect Executions
  52. 52. Stop an Execution</li></ul>▶ 기능이 많지 않음<br />
  53. 53. Batch처리 플랫폼 선택<br />Hudson <br />▶쓸만한 기능이 많음<br />
  54. 54. Batch처리 플랫폼 선택<br />
  55. 55. 배경<br />Batch 처리 플랫폼 선택<br />Spring Batch 소개<br />Hudson 소개<br />적용사례<br />
  56. 56. Spring Batch 소개<br />History<br />SpringSource와 컨설팅 회사 Accenture가 협업해서 <br />개발한 Framework<br />실제 개발 사례를 바탕으로 표준화된 API를 개발<br />1.0 Release (2008.2)<br />2.1.8.Release (2011.6.1)<br />
  57. 57. Spring Batch 소개<br />Concept<br />“bash$ java CommandLineJobRunner endOfDayJob.xml endOfDayschedule.date(date)=2011/06/19”<br />Shell Script<br />JMS<br />File<br />DB<br />CommandLineJobRunner<br />BO<br />JMS<br />File<br />DB<br />문서 참조<br />http://static.springsource.org/spring-batch/reference/html/domain.html<br />
  58. 58. Spring Batch 소개<br />Concept<br />
  59. 59. Spring Batch 소개<br />Concept<br />
  60. 60. Spring Batch 소개<br />Job example<br /><job id="ioSampleJob"><br /> <step name="step1"><br /> <tasklet><br /> <chunk reader="fooReader" processor=“fooProcessor" writer="foobarWriter“ commit-interval="10“/><br /> </tasklet><br /> </step><br /></job><br />
  61. 61. Spring Batch 소개<br />Job example<br /><job><br /> <step name="gamesLoad" next="playerLoad"/><br /> <step name="playerLoad"><br /> <next on="*" to="summarize"/><br /> <next on="FAILED" to=“error"/><br /> </step><br /> <step name=“error"/><br /> <step name="summarize"/><br /></job><br />
  62. 62. Spring Batch 소개<br />내부 구조<br />Job, JobParamter, Step, <br />StepExecution, JobRepository<br />ItemWriter, IteamReader,<br />ItemProcessor<br />JdbcTemplate<br />
  63. 63. Spring Batch 소개<br />장점<br /><ul><li> Batch 개념을 명확히 할 수 있어 좋음</li></ul> Job, Step, Reader, Writer, Processor<br /><ul><li> Job Repository를 통해 job 실행 상태 확인
  64. 64. Skip, Retry, Restart 가능
  65. 65. Commit Interval 지정
  66. 66. Scalability 제공 (remote chunking, partitioning)
  67. 67. 순차및 병렬실행 가능
  68. 68. Spring Framework를 같이 연동해서 사용 편리
  69. 69. AOP (보안, 로깅,트랜잭션)처리
  70. 70. 좋은 Utility Class가 많음
  71. 71. Document와 Forum 게시판에서 좋은 정보</li></ul>http://static.springsource.org/spring-batch/reference/html/index.html<br />
  72. 72. Spring Batch 소개<br />고려사항<br /><ul><li> 코드양은 줄어드는 만큼, 개념이해 필수
  73. 73. 아직도 Spring Batch는 진화 중</li></ul>API는 조금씩 변경되고 있으며, Reference Document 에 설명이 적거나 <br />예제가 없는 경우에는 계속 변경되고 있다는 암시적인 의미<br /><ul><li> 여러 개의 Spring Batch Job들이 하나의 JobRepository를 사용할 때, </li></ul> Job이 동시에 실행되지 않도록 하거나 Job과 JobRepository의 관계는 <br /> 1 : 1로 하는 것이 좋음 (채번시 트랜잭션이슈)<br /><ul><li> Spring-batch는 동일한 Job Repository내에서 동일한 Job name과</li></ul>Job Parameter로 Job Instance를 생성할 수 없음<br />
  74. 74. 배경<br />Batch 처리 플랫폼 선택<br />Spring Batch 소개<br />Hudson 소개<br />적용사례<br />
  75. 75. Hudson 소개<br />특징<br /><ul><li> Continuous Integration 서버
  76. 76. 주기또는코드 커밋마다 개발한 소스을 한번에 통합 빌드 하여 코드 오류를 발견시켜줌
  77. 77. 정적 분석과 연동</li></li></ul><li>Hudson 소개<br />오픈 소스 중 Batch 처리 플랫폼 요구사항에 가장 근접<br /><ul><li>Load balancing 기능
  78. 78. Fail over / Fail back 기능
  79. 79. 확장 가능한 플러그인 지원
  80. 80. 믿을만한 오픈 소스 기반
  81. 81. 이해하기 쉽고 양질의문서
  82. 82. Retry 가능
  83. 83. 기존에 사용하던 C, C++, shell </li></ul>script, Python, Perl 언어로 만들어진 Legacy Batch Job 실행가능<br /><ul><li>운영이 쉬워야 함
  84. 84. 노드확장성
  85. 85. Scheduler
  86. 86. 쓸만한 UI
  87. 87. Dashboard 를 통해 관리자 확인</li></ul>- Batch Job 리스트<br />- 다음 실행 시간을 확인<br /><ul><li> Job 실패에 대한 SMS/Mail 알림
  88. 88. Web에서의 Log 정보 확인
  89. 89. API 존재
  90. 90. Batch Job Framework 와 연동가능성 </li></li></ul><li>Hudson 소개<br />Batch 처리 플랫폼<br />Hudson<br />Spring Batch<br />JOB<br />JOB<br />
  91. 91. Hudson 소개<br />구성<br />Job<br />실행<br />Job<br />실행<br />Job<br />실행<br />Rsync<br />Batch Platform <br />(master)<br />Standby<br />Batch Platform<br />(master)<br />Batch Platform <br />(master)<br />Job<br />실행<br />SSH<br />SSH<br />Rsync<br />Job<br />실행<br />Job<br />실행<br />Batch Platform <br />(standalone)<br />Job<br />실행<br />Job<br />실행<br />slave<br />(backup)<br />Slave<br />Slave<br />Slave<br />Slave<br />단독<br />설정 백업<br />확장 구조<br />확장-백업 구조<br />
  92. 92. Hudson 소개<br />Batch 운영 플랫폼<br />Spring Batch Job<br />C/C++, ….<br />JOB <br />JOB <br />JOB <br />JOB <br />Hudson<br />Job Repository DB<br />Tomcat <br />Java VM<br />plugin<br />Spring Batch<br />Dashboard Plugin<br />
  93. 93. Hudson 소개<br />BatchJob 운영을 위한 플러그인 개발<br />
  94. 94. Hudson 소개<br />Hudson UI – Slave지정<br />최대<br />동작 가능한 ▶<br />Job 개수 지정<br />
  95. 95. Hudson 소개<br />Hudson UI<br />로그 확인<br />실행 여부<br />
  96. 96. Hudson 소개<br />Hudson UI – Job 기본 설정<br />실행 스크립트<br />Scheduler (cron)<br />
  97. 97. Hudson 소개<br />Hudson API<br />▼ job 상세 정보<br />▼ 제어<br />http://1.1.1.1/hudson/restart<br />http://1.1.1.1/hudson/job/myjob/config.xml<br />▼ job 리스트<br />▼ 마지막으로 job이실행했던 정보<br />http://1.1.1.1/hudson/job/myjob/lastBuild/api/xml<br />http://1.1.1.1/hudson/api/xml<br />
  98. 98. Hudson 소개<br />Hudson UI – Dashborad(자체 개발)<br />1<br />2<br />Spring Batch Job 실행통계 - Job RepositoryDB로부터 정보 얻어옴 <br /> - 특정 기간 동안의 전체 실행 개수 대비실패율을 확인 - Refresh 기능<br />Cron정보을바탕으로 다음 실행시간을 예측<br />1<br />2<br />
  99. 99. Hudson 소개<br />Hudson UI – Spring Job Dashborad(자체 개발)<br />▼ Job Repository 정보 확인<br />
  100. 100. Hudson 소개<br />Hudson UI – Spring Job Time Table (자체 개발)<br />▲ 실행 주기, 얼마나 소요되는지 확인<br />
  101. 101. Hudson 소개<br />Hudson UI – Job 실행 시간 지연 & Job 실패 시 SMS/Mail 알림 (자체 개발) <br />
  102. 102. Hudson 소개<br />Hudson UI – Job Repository 등록 및 로그 삭제 <br />(자체 개발) <br />Job Repository DB 정보Job Repository DB 로그 삭제 (table constraint 염두)<br />
  103. 103. Hudson 소개<br />장점<br /><ul><li> 실행 로그
  104. 104. Plug in 개발 및 활용 Dashboard UI, 모니터링 …
  105. 105. 확장 가능한 Plugin을 이용하여 Customization
  106. 106. 노드확장 가능 (Scalability)
  107. 107. 배포서버와의 API 연동
  108. 108. 문서 참조 내용이 많음
  109. 109. Load balancing 기능
  110. 110. 간단한 Fail over 기능</li></li></ul><li>Hudson 소개<br />고려사항<br /><ul><li> UI에 익숙해 질 필요 (메뉴 구성, Build)
  111. 111. 빌드파일 개수는 최소화
  112. 112. cron형태로 분 단위 Schedule됨</li></ul>정확한 시간에 동작한다는 보장은 없으나, 부하가 적으면 그 시간에 맞추어 동작 (정확한 시간에 동작되도록 Plug in테스트 중)<br /><ul><li> Governance 버전 사용
  113. 113. Job 배포 이슈</li></li></ul><li>Hudson 소개<br />고려사항<br />Hudson은 최근에는 현재 Oracle의 Hudson과 오픈 소스 진영의 Jenkins로 나눠졌다. <br />계속해서 지켜볼 필요가 있다.<br />
  114. 114. 배경<br />Batch 처리 플랫폼 선택<br />Spring Batch 소개<br />Hudson 소개<br />적용사례<br />
  115. 115. 적용사례<br />A 서비스<br />Batch Master <br />Slave<br />Slave<br />Slave<br />Slave<br />
  116. 116. 적용사례<br />A-1 서비스<br />Batch Master <br />Slave<br />Slave<br />Slave<br />Slave<br />NAS<br />
  117. 117. 적용사례<br />B서비스<br />Standby<br />Batch Master <br />Slave<br />Slave<br />Slave<br />Slave<br />
  118. 118. 적용사례<br />B서비스<br />Standby<br />Batch Master <br />Standby<br />Batch Master <br />Standby<br />Batch Master <br />
  119. 119. 적용사례<br />C 서비스<br />WebServer를 먼저 배포하고,<br />Hudson에서 WebServer를<br />실행하는 방법<br />Standby<br />Batch Master <br />Slave<br />Slave<br />Slave<br />Slave<br />Hudson<br />Hudson<br />Hudson<br />Hudson<br />WebServer<br />WebServer<br />WebServer<br />WebServer<br />
  120. 120. QnA<br />
  121. 121. Thank You<br />End of Document<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×