kakao의 오픈소스 Ep7 – CMUX: CLI에 날개를 달자!

2017-07-12 KENNETH 0

kakao의 오픈소스 Ep7 – CMUX: CLI에 날개를 달자! “카카오의 오픈소스를 소개합니다” 일곱 번째는 jon.kwon과 동료들이 개발한 CMUX입니다. CMUX는 Cloudera Manager 기반의 하둡 클러스터를 관리하는데 필요한 대화형 커멘드라인 인터페이스 도구들을 제공합니다. CMUX의 아이디어를 참고해 보세요. 여러분의 커멘드라인에 날개를 달 수 있을 것입니다. 카카오의 하둡 엔지니어링 파트에서는 CMUX를 이렇게 사용합니다. 수천 대의 하둡 클러스터의 정보를 빠르게 검색하여 필요한 정보를 조회하기도 하고, 특정 조건으로 검색한 노드에 SSH 로그인하여 병렬 작업을 하거나, 특정 조건으로 검색한 관리자 웹페이지를 열어보기도 합니다. 특정 조건으로 검색한 노드에만 명령어를 실행할 수도 있습니다. 필요하면 외부 툴을 실행할 수도 있죠. 조금만 여유가 있다면 Rolling restart role처럼 아주 복잡한 유지 보수 작업이나 배치 작업을 만들어서 사용할 수도 있습니다. 지금부터 이런 것들을 가능하게 한 CMUX의 아이디어를 소개해 드리겠습니다. CMUX의 작업 흐름 CMUX는 크게 4단계의 작업 흐름으로 구성된 명령어 집합입니다. 입력 단계 입력 소스는 파일, 파이프라인, API 등 여러분이 상상할 수 있는 다양한 형태가 [ more… ]

No Image

오픈소스 간단 리뷰 – nomad : 가벼운 스케쥴러, 강력한 성능

2017-01-25 KENNETH 0

오픈소스 간단 리뷰 – nomad : 가벼운 스케쥴러, 강력한 성능 Introduction 서비스 스케줄러는 클러스터 내의 컴퓨팅 리소스를 관리하고 사용자 애플리케이션을 어느 호스트에서 서비스할지 결정하는 시스템 소프트웨어입니다. 컨테이너 스케줄러로는 kubernetes나 docker swarm등이 있으며, 하둡 스케줄러로는 YARN이 많이 사용됩니다. 이 글에서는 이러한 스케줄러 중 하나인 nomad를 소개합니다. nomad는 vagrant, consul, packer등의 시스템 소프트웨어로 유명한 hashicorp사의 오픈소스 소프트웨어로, 자사의 consul과 vault를 각각 service discovery와 secure storage에 사용합니다. hashicorp사는 자사의 웹페이지에서 nomad를 통해 5000개 호스트에 100만 개 컨테이너를 5분 만에 배포한 사례를 소개하고 있습니다.(Nomad Million Container Challenge) Why? Kubernetes는 CNCF(Cloud Native Computing Foundation)에서 개발을 주도하고 있으며, 현재 가장 인기있는 container orchestrator로서 안정성과 성능이 뛰어납니다. (최근 오픈소스화된 cite도 Kubernetes를 사용합니다.) 하지만 설계의 특성상 몇가지 단점들이 있습니다. Kubernetes의 특징 중 하나는 전체 시스템을 “직접” 관리하는 것입니다. 이러한 설계로 인해 Kubernetes에서 pluggable하게 설계하지 않은 기능은 재컴파일하지 않는 이상 구현하기 어려운데요, 예를 들면 cloud provider 추가, volume type [ more… ]

No Image

대규모 분산 스토리지(Kage)의 발전과정

2017-01-12 KENNETH 0

대규모 분산 스토리지(Kage)의 발전과정 Overview 대부분의 초기 스타트업은 컨텐츠를 저장할 저장소에 대한 별다른 고민을 하지 않습니다. 여유가 있다면 NAS 장비를 구매해서 사용하고, 아니라면 NFS와 RAID를 구성해서 사용하게 됩니다. 하지만 서비스가 점점 커짐에 따라 하루 동안 저장되는 컨텐츠의 용량이 커지고, 네트워크 트래픽과 디스크 I/O가 증가하면서 NFS, NAS로는 유지가 불가능한 상황에 처하게 됩니다. 구글(GFS, 2003)1과 페이스북(Haystack, 2011)2도 비슷한 상황을 겪었고 자체적으로 스토리지 시스템을 만들어 서비스를 유지시키는 데 성공하였습니다. 카카오 역시 초창기엔 카카오톡에서 주고받는 이미지와 동영상들을 모두 NAS에 저장하는 방식을 채택하였지만 이용자 수와 트래픽이 늘어남에 따라 더 이상 감당할 수 없게 되었고, 이에 확장이 용이하고 빠른 응답속도와 높은 신뢰성을 가지는 대규모 분산 스토리지 시스템을 구축하게 되었습니다. 그리하여 탄생하게 된 것이 바로 KAGE(KAkao storaGE)입니다. Introduction of Kage 현재 카카오톡, 카카오스토리를 포함해 카카오의 다양한 서비스를 지탱하고 있는 Kage의 주요 특징은 아래와 같습니다. 한 데이터를 3벌씩 3서버에 나누어 저장 데이터 저장 시 커다란 청크 파일 하나에 [ more… ]

RxJS – Daum영화에 적용하다

2017-01-09 KENNETH 0

RxJS – Daum영화에 적용하다 2016년 개편된 Daum영화 프론트엔드 개발에는 ReactiveX의 JavaScript 라이브러리 RxJS 4를 사용했습니다. ReactiveX는 ReactiveX Introduction에서 callback의 문제점에 도움을 주는 것으로 소개가 되어 있습니다. 웹에서는 Angular 2에 RxJS 5가 쓰이며 관심을 받았고, Android app개발에서도 RxJava가 여러 곳에 쓰이며 관심을 받고 있습니다. 적용 당시 IE 브라우저 버전 대응 문제와 RxJS 5가 Beta 였던 이유로 RxJS 4를 적용했습니다. RxJS는 프론트엔드의 여러 이벤트들에 대한 비동기 처리에 도움을 주지만, 수많은 operator들과 함수형 프로그래밍 패러다임에 대한 이해를 해야 해서 어려움이 있었는데요. 예를 들어 함수형 프로그래밍 패러다임에 맞게 외부 변수를 참조하지 않고 적절한 함수의 합성을 생각해야 하는 점이었습니다. 그렇다면 ReactiveX가 무엇인지 간략히 먼저 소개하고, RxJS를 Daum영화에는 어떻게 적용했는지 각 기능별 코드를 중심으로 소개하겠습니다. 이해를 돕기 위해 코드를 간소화 한 점이 있으며, 실제 적용 코드와 큰 흐름에서는 같도록 했음을 알려드립니다. ReactiveX http://reactivex.io/intro.html ReactiveX의 Introduction을 보면 여러 item들을 비동기로 받기 위한 방식이고 Observer pattern을 사용한다고 나와 [ more… ]

No Image

kakao의 오픈소스 Ep6 – Cite

2016-12-26 KENNETH 0

kakao의 오픈소스 Ep6 – Cite “카카오의 오픈소스를 소개합니다” 여섯번째는 niko.bellic이 개발한 Cite입니다. Cite는 Container as a Service(CaaS)로서 소스코드를 빌드하고 배포하며 운영하는 일련의 과정을 자동화하는 웹 서비스입니다. Introduction Cite는 google kubernetes기반 CaaS(Container as a Service)입니다. Kubernetes는 최근 Container Orchestrator로 각광받고 있지만 설치와 운영이 복잡하기 때문에 익혀서 사용하기 위해서는 많은 시간과 노력을 필요로 합니다. Cite는 이러한 어려움을 줄이기 위해 Kubernetes Cluster를 사전에 생성하고 실제 서비스 담당 개발자가 Kubernetes Cluster로 서비스 배포/롤백 등을 할 수 있도록 Kubernetes와 GitHub을 연동하였습니다. Why Cite? Fast IT 더 빠르게 서비스를 생성/배포/롤백합니다. 가능한 모든 부분을 자동화! 빠르게 확장(horizontal/vertical scaling)할 수 있습니다. Efficient IT 더 적은 하드웨어로 더 많은 서비스를 수행합니다. 서비스 개발자와 SE의 인프라 관리 비용을 줄입니다. Workflow Cite에서의 서비스 배포는 아래의 흐름을 따릅니다. Cite: 서비스 생성 Cite->Kubernetes: kubernetes namespace 생성 note left of Kubernetes: github org => kubernetes namespace Cite->GitHub: github webhook 생성 Cite->GitHub: repository에 collaborator 추가 [ more… ]