-
개발자를 위한 SSD (Coding for SSD) - Part 1 : 목차
Introduction 현재 개발중인 Key/Value Store가 SSD를 최적으로 사용하도록 하기 위해서는 SSD의 내부적인 특성이나 작동 방식에 대해서 정확한 이해가 필요했다. 인터넷에는 이미 많은 SSD 관련 자료들이 있지만, 대 부분은 부족하거나 잘못된 정보들이 많으며, 제대로 정리된 문서를 찾기는 쉽지 않았다. 결국 내 프로그램이 SSD를 최적으로 사용하도록 하기 위해서는 상당히 많은 문서들과 벤치마크 자료들을 찾고 살펴 봐야 했다. 내가 알게 된 사실들과 결론이, 다른 사람들에게도 많은 도움이 될 것이라는 생각을 하게 되었고 그래서 이미 온라인에 공개된 많은 정보들을...
-
kakao 기술 블로그가 GitHub Pages로 간 까닭은
kakao 기술 블로그는 올해 초 Ghost 블로깅 플랫폼을 사용해서 오픈했으나, 최근 GitHub Pages와 Jekyll으로 바뀌었습니다. 이 글에서는 kakao 기술 블로그를 GitHub Pages로 옮기면서 Jekyll에 위해 추가한 기능들 - 태그별 포스트 목록 페이지, 작성자별 포스트 목록 페이지, 사이트맵 - 을 소개합니다.
-
ADT 활용 예제1: MySQL Shard 데이터 재분배
샤딩의 한계 카카오의 많은 서비스들이 데이터베이스로써 MySQL을 사용합니다. 그리고 서비스 규모가 커지면 대용량 분산을 위해 샤딩을 합니다. 카카오에서 많이 사용하는 샤딩 방법으로 크게 두 가지 방식이 있습니다. range-based sharding modulus-based sharding 그러나 두 방법 모두 한계가 있습니다. Range 방식의 한계 특정 ID값을 기준으로, ID 범위에 따라 샤드를 나누는 방식입니다. ID값이 증가하는 추이를 보고서 새로운 샤드 추가가 쉽다는 장점이 있습니다. 반면에 디스크 사용량이나 쿼리 처리량의 밸런스가 많이 안 맞는 경우가 발생하기도 합니다. 아래 그림과 같이 User...
-
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 환경을...