ECS + Rails (Puma)가 DB의 최대 연결 수로 막혔을 때 계산

1705 단어 pumaRailsECS오로라
설명 할 수있는 기회가 있었기 때문에 마침내 메모하십시오.
잘못되면 알려주세요

최대 연결 수로 포장



DB에는 최대 연결 수라는 것이 있습니다.
연결할 수있는 최대 수입니다.
예를 들어 AWS의 Aurora라고 이 근처

어둠 속에 Rails를 스케일 아웃해도 결국이 DB의 최대 연결 수가 한계가되어 막혀 버리는 것이 있습니다.
그 정도 생각하고 스케일 해라라고 하는 츳코미는 두어 주세요…

설정



Puma 설정


puma.rb 이야기입니다.WEB_CONCURRENCY에서 작업자 수 ≒ (자식) 프로세스 수
ECS에서 사용하는 인스턴스의 리소스에 따라 설정해야하지만 이번에는 테스트이므로 2로 해 보겠습니까?
4라도 좋은 생각이 들지만
RAILS_MAX_THREADS에서 스레드 수의 상한을 설정할 수 있습니다.
Puma는 멀티 스레드이므로 ~ 운명이라고하지만 JRuby라든지가 아닌 일반 Ruby이므로 이것을 너무 늘려도 의미가 없습니다.
그렇다고는 해도 혜택을 받을 수 있는 부분도 없는 것도 없기 때문에, 8라든지 해 봅시다

연결 풀 설정



이번에는 database.yml 이야기입니다.
실은 디폴트라고 이것도 thread수와 같은 RAILS_MAX_THREADS를 보고 있으므로, 방금 설정한 8이 됩니다
글쎄, 의도적으로 이것을 스레드 수로 줄 필요는 없다고 생각합니다.

견적



그럼 실제로 계산해 보겠습니다.
예를 들어, ECS의 리소스는 2CPU라던가 1인스턴스 1타스크였다고 한다.

1 작업 = 2 Puma 작업자
1Puma 작업자 = 8 스레드 = 8 연결
1 작업 = 1 인스턴스 = 8 연결 x2 Puma 작업자 = 16 연결

DB에 대해, 1 태스크(1 인스턴스)가 최대로 16 커넥션 붙일 수 있다고 상정할 수 있습니다
처음의 링크라면, Aurora MySQL의 db.t2.medium는 디폴트 최대 90 커넥션이므로, 이 ECS 클러스터내에서 태스크를 오토스케일 시키면, 5 태스크(=최대 80 커넥션)까지 해 두는 것이 좋을 것이라고 하는 것 알았어

이상



부하가 높아져 오토스케일의 설정을 넣으려고 하면, 제대로 DB측의 접속수도 생각해 스케일 시키지 않으면 안 되는군요, 라고 하는 이야기였습니다

좋은 웹페이지 즐겨찾기