kakao의 오픈소스 Ep3 – HBase Region Inspector

2016-03-11 KENNETH 0

kakao의 오픈소스 Ep3 – HBase Region Inspector “카카오의 오픈소스를 소개합니다” 세번째는 jg.choi와 동료들이 개발한 HBase Region Inspector입니다. HBase Region Inspector는 HBase의 여러 리젼에 분산된 데이터를 시각적으로 보여주는 실용적인 도구입니다. 카카오에서도 대규모 HBase 클러스터 운영에 큰 도움이 되고 있는 유용한 소프트웨어입니다. 특히 Clojure 와 React으로 작성되어 Clojure를 공부하려는 개발자들에게 유용할 것입니다. HBase 카카오의 많은 서비스는 대용량의 데이터를 저장하고 서비스하기 위해 Apache HBase 를 사용하고 있습니다. HBase 는 이미 잘 알려져 있으니 긴 설명이 필요하진 않을 것 같은데요. 간단히 한 문장으로 요약하자면 HBase 는 데이터를 여러 서버에 분산 저장하고 처리하는 Hadoop 기반의 분산 데이터 저장소입니다. Region: 데이터 분산의 단위 분산 데이터 저장소이니 당연히 데이터가 여러 서버에 잘 분산 되어 있어야 scalable 한 성능을 얻을 수 있죠. HBase 는 각 테이블 데이터를 여러 구간으로 나누는데 – RDBMS 의 range partitioning 과 동일한 방식 – 이렇게 나눈 각 구간의 데이터를 리젼 (region) 이라 부르고 [ more… ]

Redis의 SCAN은 어떻게 동작하는가?

2016-03-11 KENNETH 0

Redis의 SCAN은 어떻게 동작하는가? Redis의 기능 중에 쓰면 안되지만, 그 단맛에 끌려 어쩔 수 없이 치게 되는 명령이 KEYS입니다. KEYS를 쓰는 순간, Redis는 이 명령을 처리하기 위해서 멈춰버립니다. 특히 트래픽이 많은 서버는 이 KEYS 명령 하나 때문에 많은 장애를 내게 됩니다. 그런데 어느 순간(!) Redis에 SCAN이라는 명령이 생겼습니다. KEYS의 단점을 없애면서도, 느리지 않은 SCAN, 어떻게 그것이 가능할까요? 이 글에서는 단순한 SCAN의 사용법을 넘어, 소스 코드를 통해 동작 원리까지 알아보겠습니다. SCAN/SSCAN/ZSCAN/HSCAN 명령 대부분의 Redis 명령처럼 SCAN도 네가지 변형이 있습니다. SCAN은 전체 key 목록에서, SSCAN은 set 안에서, ZSCAN은 sorted set 안에서, HSCAN은 hash 안에서 키를 가져오는 명령입니다: SCAN cursor [MATCH pattern] [COUNT count] SSCAN key cursor [MATCH pattern] [COUNT count] ZSCAN key cursor [MATCH pattern] [COUNT count] HSCAN key cursor [MATCH pattern] [COUNT count] cursor 값을 0으로 지정한 SCAN/SSCAN/ZSCAN/HSCAN 명령으로 순회가 시작되고, 이어지는 순회에 사용할 cursor 값과, 지정한 패턴(pattern)과 일치하는 키를 최대 [ more… ]

Monad Programming with Scala Future

2016-03-03 KENNETH 0

Monad Programming with Scala Future 함수형 언어에 대해서 공부를 하다보면 언제나 Monad라는 녀석을 마주치게 됩니다. Category Theory의 수학적인 개념이 바탕이 되어 있는 Monad를 접하면 어렵고 난해해서, 많은 사람들이 Monad를 학습하는 과정에서 함수형 언어를 포기합니다. 하지만 Monad라는 장벽을 넘어서고 나면, 아니 조금만 이해하고 나면 함수형 언어를 개발하는데 있어서의 이해도와 생산성이 급속도로 높아지게 됩니다. Learning Curves (for different programming languages)라는 글에 보면 여러 언어의 학습과정에서 나타다는 다양한 특징을 그래프로 보여줍니다. 그 중에 Haskell의 경우 Monad의 대한 이해 과정을 거치기 전과 후가 확연하게 차이가 나는 것을 볼 수 있습니다. 이 글에서는, 필자가 Monad를 이해하기 위해 겪었던 방황 – 혼돈, 의문, 좌절 – 과 적응, 마침내 갖고놀기에 이르는 과정을 소개하고, Scala의 Future를 이용한 예제를 통해 Monad에 한발짝 다가가 보려고 합니다. Monad 방황기 Monad 공부의 시작은 늘 그랬듯이 구글링을 통한 검색이었습니다. 구글의 페이지 랭크 알고리즘이 추천해주는 링크를 따라서 생각없이 위키피디아의 Monad (category theory)로 첫 문을 [ more… ]

그래, 가끔 "Vim에서" GitHub을 보자!

2016-03-03 KENNETH 0

그래, 가끔 "Vim에서" GitHub을 보자! vimrc 건드리기 좋은 목요일입니다. ;) 기술 블로그 담당자가 글을 내놓으라고 닥달하니, 예전에 만들었던 플러그인이나 한번 꺼내볼까 합니다: https://github.com/junegunn/vim-github-dashboard Vim 상에서 GitHub API를 이용해 dashboard 페이지를 보여주는 플러그인입니다. 왜 멀쩡한 브라우저를 놔두고 이런 짓을 한 것이냐 물으신다면 … 그것 참 좋은 질문이네요. Vimscript 만 가지고는 API 결과를 받아오는 것이 불가능하므로 Ruby interface를 이용합니다만 (:help ruby) OS X 의 시스템 디폴트 Vim 에서 기본적으로 지원하기 때문에 사용하시는데 문제는 없을 겁니다. 제공하는 커맨드는 다음과 같습니다. GHDashboard[!] [user] 특정 유저의 dashboard 화면 GHActivity[!] [user|repo] 특정 유저 혹은 repository 의 활동 내역 Public GitHub 의 경우 조회만 하는 경우는 인증이 필요 없기 때문에 느낌표를 붙여서 실행하시면 되겠습니다. :GHD! junegunn CTRL-N / CTRL-P 로 링크 사이를 이동할 수 있고, Enter key 나 o를 누르면 해당 페이지가 브라우저에서 열립니다. 매번 본인의 ID 를 입력하는 것이 번거롭다면 다음과 같은 설정을 vimrc 에 추가하세요. [ more… ]

kakao의 오픈소스 Ep2 – MRTE(MySQL Realtime Traffic Emulator)

2016-02-16 KENNETH 0

kakao의 오픈소스 Ep2 – MRTE(MySQL Realtime Traffic Emulator) “카카오의 오픈소스를 소개합니다” 두번째는 matt.lee와 동료들이 개발한 MySQL Realtime Traffic Emulator(MRTE)입니다. MRTE는 실서비스용 MySQL 서버의 트래픽을 수집하는 MRTE-Collector와, 수집한 데이터를 테스트용 MySQL 서버에서 재현하는 MRTE-Player 두 개의 툴로 구성되어 있습니다. 카카오에서도 효율적인 MySQL 운영에 큰 도움이 되고 있는 유용한 소프트웨어입니다. 특히 MRTE-Collector는 Go로 작성되어 Go로 네트웍 프로그래밍을 하려는 개발자들에게 유용할 것입니다. MySQL 서버를 사용하면서, 가끔씩 실 서비스용 MySQL 서버(Production mysql server)로 유입되는 쿼리들을 똑같이 흉내낼 수 없을까 하는 생각들을 많이 했습니다. 실 서비스용 MySQL 서버에서는 MySQL 시스템 변수 하나도 조정해보기 어려운 경우가 많고, 때로는 업그레이드나 통합 또는 하드웨어 테스트를 하는 경우에는 이런 도구들이 절실했죠. 이를 위해서 MRTE (MySQL Real Traffic Emulator) 도구를 생각하기 시작했는데, 조금만 고민해보니 사실 이는 그다지 어려운 일이 아니었다. 여기에서는 MRTE에 대한 간략한 아키텍쳐와 사용법을 간단히 소개하도록 하겠습니다. MRTE는 크게 유저 트래픽을 수집하는 MRTE-Collector와 수집된 SQL을 재현하는 MRTE-Player로 구성되어 [ more… ]