어느날 우연히 스위처 소방수로 참여해서 2달 동안 수행한 일들을 공유합니다. 그 첫번재 이야기 ‘기본을 지키자’ 입니다.
전체를 리드하면서 업무를 진행해본 첫 경험이기도 했고, 유저가 증가하며 서비스되고 있는 프로젝트를 A to Z로 혼자 감당해본 첫 경험이기도 했습니다.
새로운 서버를 설계하고 개발하면서, 레거시 안정화 및 이슈 응대를 모두 병행하는게 쉬운 일은 아니었지만, 핑계대지 않고 하나하나 기본을 다져 보았습니다!
아직 갈길이 멀었지만, 성장해가는 아이오(스위처)의 소프트웨어 이야기를 하나씩 하나씩 풀어보려 합니다 ;)
어느날 우연히 스위처 소방수로 참여해서 2달 동안 수행한 일들을 공유합니다. 그 첫번재 이야기 ‘기본을 지키자’ 입니다.
전체를 리드하면서 업무를 진행해본 첫 경험이기도 했고, 유저가 증가하며 서비스되고 있는 프로젝트를 A to Z로 혼자 감당해본 첫 경험이기도 했습니다.
새로운 서버를 설계하고 개발하면서, 레거시 안정화 및 이슈 응대를 모두 병행하는게 쉬운 일은 아니었지만, 핑계대지 않고 하나하나 기본을 다져 보았습니다!
아직 갈길이 멀었지만, 성장해가는 아이오(스위처)의 소프트웨어 이야기를 하나씩 하나씩 풀어보려 합니다 ;)
목차
1. INTRODUCE
2. Platform
a. Northbound app & Interfaces
b. Controller Platform Services/Applications
i. Services & Applications
ii. Service Abstraction Layer/Core
c. Southbound Interfaces & Protocol Plugins
d. Data Plane Elements
3. ODL Multi Controller Distributed
4. Release Note
5. ODL & Tools Install
a. ODL install
b. Tool(Open vSwitch & Mininet) Install
6. ODL view
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [백발백준] : 백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇BOAZ Bigdata
데이터 엔지니어링 프로젝트를 진행한 백발백준 팀에서는 아래와 같은 프로젝트를 진행했습니다.
백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇
20기 유하준 한국외국어대학교 산업공학과
20기 안지완 중앙대학교 소프트웨어학과
20기 정태형 경기대학교 응용통계학과
20기 최윤서 숙명여자대학교 일반대학원 통계학과
엔터프라이즈 클라우드 마이그레이션 준비와 실행. 그리고, 클라우드 운영 모범 사례 공유-최지웅, 오픈소스컨설팅 CTO / 장진환, 스마일샤...Amazon Web Services Korea
클라우드 마이레이션은 단순한 업무의 환경 이전 차원을 넘어 미래를 준비하는 긴 여정의 출발점이기도 합니다. 또한, 클라우드 마이그레이션의 전략,기술 준비사항은 기존의 IT 운영 환경에 비례하여 매우 다양하며 복잡 합니다. 이번 세션에서는 AWS MSP 파트너사인 오픈소스 컨설팅, 스마일 샤크의 다양한 클라우드 마이그레이션 사례 및 운영 환경 최적화 사례를 기반으로 여러분들의 클라우드 여정에 도움을 드리고자 합니다.
지난 3년여간 비트라는 제품을 Python으로 개발하면서 얻게된 경험들을 나눕니다. 주로 기술적인 의사결정의 방법들과 실수들, 또 그런 실수들을 어떻게 수습하고 다듬어 왔는지 이야기 하고, 그런 과정들을 통해 비트라는 Python 프로젝트를 어떻게 개발하여 관리하는지를 다룰 예정입니다. 상세한 사례보다는 조금은 메타적인 이야기를 하여 가급적 많은 분들에게 도움이 되고자 하였습니다.
- 비교적 오랜시간 동안 많은 인원이 투입된 프로젝트가 어떻게 개발하고 머지하는지,
- 품질 관리를 왜 해야하고 또 어떻게 하는지,
- 적정한 기술을 선택함에 있어 어떻게 해야하는지
같은 부분을 상세하게 다룰 예정입니다.
김태현
Sr. SW Engineer. (Blizzard Entertainment)
---
글로벌 게임서비스의 무정지, 무점검 서버 개발과 운영의 사례를 소개
1. 무정지 무점검을 위해 적용된 서버 개발 기술들의 소개
2. 무정지 무점검 운영을 위한 서버의 구성과 DevOps 운용 소개
목차
1. INTRODUCE
2. Platform
a. Northbound app & Interfaces
b. Controller Platform Services/Applications
i. Services & Applications
ii. Service Abstraction Layer/Core
c. Southbound Interfaces & Protocol Plugins
d. Data Plane Elements
3. ODL Multi Controller Distributed
4. Release Note
5. ODL & Tools Install
a. ODL install
b. Tool(Open vSwitch & Mininet) Install
6. ODL view
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [백발백준] : 백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇BOAZ Bigdata
데이터 엔지니어링 프로젝트를 진행한 백발백준 팀에서는 아래와 같은 프로젝트를 진행했습니다.
백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇
20기 유하준 한국외국어대학교 산업공학과
20기 안지완 중앙대학교 소프트웨어학과
20기 정태형 경기대학교 응용통계학과
20기 최윤서 숙명여자대학교 일반대학원 통계학과
엔터프라이즈 클라우드 마이그레이션 준비와 실행. 그리고, 클라우드 운영 모범 사례 공유-최지웅, 오픈소스컨설팅 CTO / 장진환, 스마일샤...Amazon Web Services Korea
클라우드 마이레이션은 단순한 업무의 환경 이전 차원을 넘어 미래를 준비하는 긴 여정의 출발점이기도 합니다. 또한, 클라우드 마이그레이션의 전략,기술 준비사항은 기존의 IT 운영 환경에 비례하여 매우 다양하며 복잡 합니다. 이번 세션에서는 AWS MSP 파트너사인 오픈소스 컨설팅, 스마일 샤크의 다양한 클라우드 마이그레이션 사례 및 운영 환경 최적화 사례를 기반으로 여러분들의 클라우드 여정에 도움을 드리고자 합니다.
지난 3년여간 비트라는 제품을 Python으로 개발하면서 얻게된 경험들을 나눕니다. 주로 기술적인 의사결정의 방법들과 실수들, 또 그런 실수들을 어떻게 수습하고 다듬어 왔는지 이야기 하고, 그런 과정들을 통해 비트라는 Python 프로젝트를 어떻게 개발하여 관리하는지를 다룰 예정입니다. 상세한 사례보다는 조금은 메타적인 이야기를 하여 가급적 많은 분들에게 도움이 되고자 하였습니다.
- 비교적 오랜시간 동안 많은 인원이 투입된 프로젝트가 어떻게 개발하고 머지하는지,
- 품질 관리를 왜 해야하고 또 어떻게 하는지,
- 적정한 기술을 선택함에 있어 어떻게 해야하는지
같은 부분을 상세하게 다룰 예정입니다.
김태현
Sr. SW Engineer. (Blizzard Entertainment)
---
글로벌 게임서비스의 무정지, 무점검 서버 개발과 운영의 사례를 소개
1. 무정지 무점검을 위해 적용된 서버 개발 기술들의 소개
2. 무정지 무점검 운영을 위한 서버의 구성과 DevOps 운용 소개
2. EXTENDED SEOUL
Agenda
● 빅쿼리 도입 계기
● 빅쿼리 도입을 위한 과제들
● 데이터 파이프라인 구축을 위한 고민들
● Airflow 간단 소개
● Airflow 기반 데이터 파이프라인
● 여러가지 이슈들, 오픈소스 참여
● 마무리
3. EXTENDED SEOUL
2016년 12월 리니지2 레볼루션 오픈
기존 전체 처리량을 상회하는 수준의 데이터 유입
→ RDB 기반 단일 머신 환경에서의 집계가 어려운 상황
빠르게 구글 빅쿼리를 도입하여 문제 해결!
빅쿼리 도입 계기
4. EXTENDED SEOUL
빅쿼리 도입을 위한 과제들
국가 간 전송
● 보다 효율적인 전송 필요
대용량 마이그레이션
● 아웃바운드 트래픽 발생에 따라 처리 방식이 달라져야함
● 기존, IDC 내부에서만 데이터 이동 → 변경 후, 외부 서버로의 트래픽 발생
예상치 못한 빅쿼리 이슈들
● 빅쿼리 사용량 제한 정책
● 타입 호환성
5. EXTENDED SEOUL
넷마블 IDC - 구글 GCS 서버 압축 전송, 구글 GCS - BigQuery 로드
넷마블 IDC GCS 빅쿼리
빅쿼리 도입을 위한 과제들 : 국가 간 전송
gzip
6. EXTENDED SEOUL
데이터 세그먼트 별 분산/병렬 처리, 처리 스테이지 별 동시성 제어 (특히 동시 전송 수)
빅쿼리 도입을 위한 과제들 : 대용량 마이그레이션
7. EXTENDED SEOUL
빅쿼리 간헐적 실패 케이스 대응
● 빅쿼리 사용량 제한 정책에 의해 실패하는 케이스 대응
그 밖에..
● 기존 데이터 타입의 빅쿼리 호환성 고민 (호환성 관련 깨짐/누락)
● 빅쿼리 파티션 기능 부재에 따른 재처리 방식 고민
빅쿼리 도입을 위한 과제들 : 예상치 못한 빅쿼리 이슈들
8. EXTENDED SEOUL
기존에 크론 기반으로 ETL이 구성되어 있었으나 확장된 요구사항을 수용하기 어려움
데이터 파이프라인 구축을 위한 고민들 : ASIS
9. EXTENDED SEOUL
실행 순서 / 동시성 제어 / 처리 결과에 따른 분기 처리를 위해 스크립트를 구현하면?
→ 복잡해질 뿐더러 모니터링도 안되고, 관리하기도 어려움
→ 스케줄러를 이용하자! ( Avoid reinventing the wheel ! )
데이터 파이프라인 구축을 위한 고민들 : TOBE
10. EXTENDED SEOUL
전송 효율화를 위한 압축 절차 추가
● 새로운 절차가 추가될 때 유연하게 기존 코드를 연동
대용량 마이그레이션을위한 파이프라인 고도화
● 여러 장비에 분산 / 병렬 처리할 때 모니터링 및 컨트롤 가능
● 스테이지 별로 동시성을 제어하면서 각 파이프라인을 순차적으로 실행 가능
예상치 못한 빅쿼리 이슈들에 대한 처리 자동화
● 리턴 코드에 따라 그냥 재실행 해서 해소 가능
● 해소 불가인 경우 오퍼레이터에게알람
가볍지만 확장성 있는 Airflow
11. EXTENDED SEOUL
Airflow 간단 소개 : 컨셉
Airflow : 워크플로우 (일의 진행 과정/흐름) 관리 플랫폼
간단한 파이썬 프로그래밍을 통해 데이터 파이프라인을 구성 / 스케줄링 / 모니터링
18. EXTENDED SEOUL
기존에 크론으로 돌던 많은 스크립트들을 개발 소요 없이 스케줄러와 연동하고 싶음
● 크론으로 수행되던 커맨드 → Airflow 의 DAG 을 구성
● DAG 형식으로 여러 커맨드 간 의존성 및 특정 커맨드의 동시 수행 수 관리
Airflow 기반 데이터 파이프라인 : 크론 제거
19. EXTENDED SEOUL
과거 재처리를 기존 모듈로 파라미터만 변경하며 수행하고 싶음
● 커맨드에 datetime 파라미터 주입하는 기능 추가
● 스케줄러의 execution_date 값 기반으로 여러 과거 스케줄 자동 생성
Airflow 기반 데이터 파이프라인 : 태스크 자동 생성
20. EXTENDED SEOUL
많은 수의 재처리들 중 실패 발생을 쉽게 확인하고, 자동 대응할 수 있도록 하고 싶음
● return code 에 따라 재시도 하거나 특정 하위 태스크만을 수행함
● 실패 시 메시지 전송
Airflow 기반 데이터 파이프라인 : 분기 처리
{
...
branching: {
cmd: "blah", upstream: [run_this_first],
branch: { _0: branch_a, _1: branch_false}
},
branch_a: {cmd: "blah", upstream: [branching] },
branch_false: {cmd: "blah", upstream: [branching] },
...
}
21. EXTENDED SEOUL
기존 프로세스와의 오케스트레이션
● 트리거/센서 기능을 이용하여 여러 종류의 스케줄을 연동
Airflow 기반 데이터 파이프라인 : 오케스트레이션
sensor trigger
Other Schedules
22. EXTENDED SEOUL
유사한 코드를 반복적으로 작성하면 시간도 오래 걸리고 실수할 가능성도 있음
● 정말 최소한의 설정만 작성하고, 나머지는 자동으로 완성해주는 무언가가 필요 !
Airflow 기반 데이터 파이프라인 : 운영 효율화
23. EXTENDED SEOUL
Airflow 기반 데이터 파이프라인 : Task Builder
넷마블 데이터인프라팀운영 효율화를 위한 내부 프로젝트
● json 형식 (자체 포맷) 으로 정의된 스케줄을 읽어서 Airflow 스케줄을 자동 생성
25. EXTENDED SEOUL
여러가지 이슈들, 오픈소스 참여
버그
● Airflow 내부적인 버그들은 소스 분석 후 수정
**Appendix. Airflow Issues
성능 이슈
● Airflow 스케줄링 또는 웹 뷰 출력 단계에서의 지연 이슈 해소
특정 조건의 task instance 를 쿼리할 때 slow query 발생하는 부분 개선
사용성 이슈
● Airflow 에서 다소 직관적이지 않거나 운영 상 비효율적인 부분들도 수정
clear -f 실행 시 upstream_failed 는 처리되지 않는 이슈 해소
27. EXTENDED SEOUL
빅쿼리 대용량 마이그레이션 및 빅쿼리 오퍼레이션 연동 시 Airflow 사용을 검토해보자
Airflow 사용할 때 버그 또는 예상과 다른 행동에 대한 대응책을 마련하여 사용하자
Airflow 소스를 분석해보면 운영에 도움이 된다 !
마무리
29. EXTENDED SEOUL
빅쿼리 오퍼레이션이 지연되는 케이스 대응 필요
● job status 를 폴링하며, pending → running 으로 넘어가서 done 되는지 확실하게 처리할 것
빅쿼리 사용량 제한 정책에 따른 다양한 실패 케이스들
● https://cloud.google.com/bigquery/quotas
● https://cloud.google.com/bigquery/troubleshooting-errors
● slot limitation
● concurrent update limitation
○ Exceeded rate limits: too many table update operations for this table. For more
information, see https://cloud.google.com/bigquery/troubleshooting-errors
Appendix. Bigquery Issues
30. EXTENDED SEOUL
Update state deadlock issue :
아래 에러 메시지를 동반한 스케줄러 다운 / 태스크 실패
‘Deadlock found when trying to get lock; try restarting transaction’
1. change_state_for_tis_without_dagrun 과정에서 발생하면 스케줄러 다운
2. _check_and_change_state_before_execution 과정에서 발생하면 태스크 실패
Limbo task issue :
특정 태스크가 실패한 이후 downstream 노드들이 실행되지 않고 스케줄이 종료됨
Leaf-less backfill not working :
완료된 스케줄의 중간 노드만 clear 시 해당 노드가 실행되지 않고 종료됨
Stuck in queued state issue :
태스크가 queued 상태에서 running 으로 전환되지 않음
Appendix. Airflow Issues
31. EXTENDED SEOUL
Update state deadlock issue
● 발생 원인 :
○ 스케줄러, 워커, 매뉴얼 조작 간 race condition
○ 동일 task instance에 대한 상태 변경 시도가 발생할 수 있는 구조적 문제
(Appendix. Airflow Scheduler, Appendix. Airflow Worker 페이지 보라색 동그라미 참조)
● 1.8 버그로 확인됨
● 1.10에서도 해소 안됨 (커뮤니티 내에서 구조적 문제를 개선하고자 하고 있음)
● 우회 방법
○ 문제의 쿼리 코드에서 위 에러를 catch 하여 롤백 후 재시도하도록 소스 수정함
Appendix. Airflow Issues
32. EXTENDED SEOUL
Limbo task issue
● 발생 원인 :
○ cut vertex 노드가 실패하고, 해당 노드가 all_success 트리거 룰을 가진 child 만 가진 경우
스케줄러가 해당 스케줄을 종료시킴 (Appendix. Airflow Cut Vertex 페이지 참조)
● 1.8 버그로 확인됨
● 1.10에서 해소됨
● 우회 방법
○ cut vertex에 dependency가 없는 leaf에 대한 sensor 노드를 추가
(최종 노드가 완료될 때까지 스케줄 종료를 막음)
Appendix. Airflow Issues
33. EXTENDED SEOUL
Limbo task issue
● 발생 원인 :
○ cut vertex 노드가 실패하고, 해당 노드가 all_success 트리거 룰을 가진 child 만 가진 경우
스케줄러가 해당 스케줄을 종료시킴 (Appendix. Cut Vertex 페이지 참조)
● 1.8 버그로 확인됨
● 1.10에서 해소됨
● 우회 방법
○ cut vertex에 dependency가 없는 leaf에 대한 sensor 노드를 추가
(최종 노드가 완료될 때까지 스케줄 종료를 막음)
Appendix. Airflow Issues
34. EXTENDED SEOUL
Leaf-less backfill not working
● 발생 원인 :
○ 스케줄러가 runnable 한 leaf 노드가 없는 스케줄을 종료시킴
● 1.8 버그로 확인됨
● 1.10에서 해소됨
● 우회 방법
○ 재처리 하고자 하는 중간 노드에 leaf 인 child 노드를 추가한 후 clear
Appendix. Airflow Issues
35. EXTENDED SEOUL
Stuck in queued state issue
● 발생 원인 :
○ 스케줄러가 dag import 과정에서 timeout 으로 실패한 경우 이를 해소하지 않고 방치함
● 1.8 버그로 확인됨
● 1.9 이후로 해소됨
● 우회 방법
○ 설정 중 dagbag_import_timeout 값을 충분히 큰 값으로 지정해 줌
Appendix. Airflow Issues
40. EXTENDED SEOUL
Appendix. Airflow Cut Vertex
제거 시 그래프가 복수의 컴포넌트로 분리되는 지점의 노드
● 아래 예시의 L2_CUT_VERTEX, L4_CUT_VERTEX
● Cut Vertex 는 해당 지점의 upstream 과 downstream을 잇는 유일한 지점
1.8 버전 버그 발생 조건
● L2_CUT_VERTEX 에서 failed
● L3_A, L3_B, L3_C 모두 all_success 트리거 룰로 세팅 되어 있음
● 스케줄러는 L2_CUT_VERTEX 실패 시 이하 노드를 수행할 필요가 없다고 판단하여 스케줄을 종료시킴 (만약 L4_CUT_VERTEX 가 all_done 룰이라면 의도하지 않은 동작임)