-
kakao의 오픈소스 Ep5 - Almighty Data Transmitter
“카카오의 오픈소스를 소개합니다” 두번째는 gordon.hahn과 동료들이 개발한 ADT - Almighty Data Trasmitter입니다. ADT는 샤드 구성이나 사딩 규칙이 바뀔 때 샤드를 재분배하는 용도로 만들기 시작했지만, MySQL에서 데이터를 수집하여 다른 MySQL로 데이터를 전송하는 - CDC와 ETL이 결합된 - 만능 데이터 전송 도구로 변모하고 있습니다. ADT는 그 자체로도 유용한 소프트웨어 도구지만, MySQL 기반의 CDC/ETL 시스템을 구축하기 위한 좋은 시작점이 될 것 입니다. ADT는 무엇을 위한 툴인가요? ADT는 MySQL의 데이터를 수집하여 사용자가 원하는 형태로 가공하거나 다른 DB에 적재할 수...
-
Asynchronous Programming and Monad Transformers in Scala
자바와 스프링으로 웹서버를 개발하고 있다면 아래와 같이 HTTP 프로그래밍을 했을것이라 생각이 됩니다. // ItemApiController.java import ... @RestController @RequestMapping("/api/items") public class ItemApiController { @Autowired RestTemplate restTemplate; @RequestMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) public ItemDto getItem(@PathVariable Long id) { // 응답이 올때 까지 thread는 대기하게 된다. return restTemplate.getForObject("http://remote/fetch/item/" + id, ItemDto.class); } } 익숙한 이상할것이 없는 동기화 프로그래밍 코드입니다. 동기화 방식은 아래와 같은 장점을 가지고 있습니다. 프로그래밍하기 간편하고 순차적으로 실행되기 때문에 상대적으로 개발하기 쉽습니다. Multi thread 환경을...
-
루빅스(RUBICS) - kakao의 실시간 추천 시스템
루빅스는 실시간으로 사용자 반응을 분석하여 콘텐츠를 추천하는 카카오의 추천 시스템입니다. 2015년 5월에 다음 포털 뉴스 서비스의 일부 사용자를 대상으로 뉴스 기사를 추천하기 시작했고, 한달 뒤인 6월부터 전체 사용자에게 확대 적용했습니다. 현재는 다음 뉴스 뿐 아니라 카카오톡 채널 등 다양한 콘텐츠 서비스에서 루빅스의 추천 서비스를 사용하고 있습니다. 다음 뉴스에 루빅스를 적용한 후에 나타난 긍정적인 효과와 지표 상승에 관한 이야기는 이전에 몇 차례 다룬 적이 있습니다.(관련 글 참고) 이번 글에서는 루빅스가 실시간 추천 시스템으로서 어떤 특징을 가지고...
-
Weekly Links #2 - 2016년 4월 넷째주
Weekly Links에서는 지난 한 주, 카카오의 기술 블로그 담당자가 구독하는 기술 뉴스레터들에서 “인간의 눈”으로 선별한 링크들을 짧은 코멘트와 함께 공유합니다. 포함된 뉴스레터 목록은 awesome-tech-newsletters에서 확인하실 수 있습니다. 2016년 4월 넷째주 추천 링크 Node.js v6 출시 V8엔진을 5.0으로 업데이트해서 ES6 문법의 93%를 지원한다는 군요. v5와 v6로의 변경사항이 꽤 길지만, 눈에 띄는 것은 없습니다. 물론 기존 v4은 2017년 4월까지 계속 지원(LTS; Long Term Support). #### 윈도10 속 우분투 배시 링크는 지디넷의 요약 기사구요, 영어 원문은 매우 길기...
-
CLOSE_WAIT & TIME_WAIT 최종 분석
트래픽이 많은 웹 서비스를 운영하다보면 CPU는 여유가 있지만 웹서버가 응답을 제대로 처리하지 못하고 먹통이 되는 경우를 종종 보게 됩니다. 여러가지 이유가 있겠지만, 이 글에서는 가장 대표적인 경우인 CLOSE_WAIT 상태를 재현하고 원인과 문제점 그리고 해결책을 알아봅니다. 나아가 TIME_WAIT의 동작 과정을 직접 만든 예제와 리눅스 커널 소스를 통해 확인하고, 인터넷에 퍼진 낡은 그래서 더이상 유효하지 않은 정보들을 바로 잡습니다. Part I. CLOSE_WAIT CLOSE_WAIT로 인한 서버 행업 현상 서버 부하 테스트 과정 중 일정 시간이 경과하면 점점 더...