ECS + Rails (Puma)가 DB의 최대 연결 수로 막혔을 때 계산
잘못되면 알려주세요
최대 연결 수로 포장
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측의 접속수도 생각해 스케일 시키지 않으면 안 되는군요, 라고 하는 이야기였습니다
Reference
이 문제에 관하여(ECS + Rails (Puma)가 DB의 최대 연결 수로 막혔을 때 계산), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ken11_/items/d99a2f5b64285b526ed5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)