높은 가용성을 위한 tomcat 튜닝, 그리고 fail fast 시스템 # 링크 : https://medium.com/netflix-techblog/tuning-tomcat-for-a-high-throughput-fail-fast-system-e4d7b2fc163f 문제 상황 # netflix는 수많은 mid tier 시스템으로 구성되어 있는데, 이 서비스들중에 하나가 갑자기 어느순간 트래픽이 몰리면서, cpu가 올라가고 서버가 응답하지 않는 현상이 발생했다. 일반적인 상황에서는 cpu도 널널하고, 게다가 서비스 자체가 cpu 집약적이지도 않음에도 불구하고 이런 현상이 발생한 것이다. 왜 그런걸까? # 테스트를 해보니 일단 apache와 tomcat의 설정이 적절하지 않았다. 트래픽이 올라가는 시점에서 다수의 apache worker들과 tomcat thread들이 busy하게 되고, 이러한 스레드들의 context swtiching 비용으로 사실상 의미 있는 일을 하지 않는 상황에서도 cpu가 높게 올라가는 이슈가 발생했다. 해결은 어떻게? # 일단은 apache - tomcat 으로 구성된 시스템을 tomcat 단일 시스템으로 변경했다. 아무래도 apache를 제거하면 configuration 설정이 상대적으로 심플해질 수 있으니. (tomcat만 관리하면 되니까) 그렇다면 왜 tomcat thread는 그렇게 바쁘게 동작하게 된 것일까? 이것을 알려면 tomcat의 스레드 처리 모델을 알아야 한다. Tomcat 스레딩 모델의 이해 # high level에서의 처리 프로세스는 아래 그림을 참조한다. (외부 이미지 발췌) 여기서 acceptCount값은 OS단에서 클라이언트의 TCP 커넥션 갯수를 queueing 할 수 있는 갯수를 지정하는 것이다. 이것을 크게 잡았을 경우엔 트래픽이 몰릴 경우, OS상의 커넥션 큐를 금방 채우고 tomcat의 worker 스레드를 더 busy하게 만들며 더 몰릴 ...
Etsy(엣시) 서비스란? 엣시는 미국의 웹2.0을 기반으로 한 전자상거래 사이트이다. 당시 목수이자 웹 디자이너이었던 엣시의 창업자 로버트 칼린은 대표적 전자상거래 사이트인 이베이가 아닌 좀 더 특별한 웹 사이트에 그가 만든 목공예품을 등록하길 원했으며, 2005년 6월 18일에 소셜 네트워크 쇼핑몰 엣시를 구축 했다. 현재 엣시에는 핸드메이드 물건과 사진, 그림, 빈티지 제품 등을 판매 할 수 있고 약 150여개 국가에서 240만명의 유저들이 엣시를 이용하고 있다. 위키백과 Activity Feed Architecture 1. 주요 요소 1) Connections : 유저와 샵, 유저와 유저와의 관계 (node, edge, weight를 가지고 있음) 2) Activities : (Subject, verb, object)로 구성됨. ex) 찰스가 A물품에 좋아하기를 눌렀다. 2. 피드 생성 단계 1) Aggregation : Connection을 기반으로 Activities를 모아 유저별로 newsfeed를 구성 2) Display : newsfeed를 화면에 노출 3. Aggregation 1) affinity 기반으로 connection을 선출함. (다만 random도 어느정도 반영하여 affinity가 떨어지는 connection도 newsfeed 구성에 일부 활용) 2) 대부분의 유저들은 connection이 잘 구성되지 않는 경우가 많은데, 12개 정도의 connection을 임의로 선출하여 사용함. 3) 이후 Activity Set들을 구성 (메모리 자료구조 활용함), 이것들을 분류하고 중복은 제거하고 score (time decay function)를 생성하여, sort&merge함. 이것을 기존에 있던 newsfeed 중간중간에 껴넣는 작업을 진행, 그리고 해당 newsfeed가 일정 길이 이상...