We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
어떤 구간이 병목지점이 될지 고민하기
→ 과제 4번 이슈의 지하철역 정보 리스트 조회 API를 TPS 1000으로 테스트 했을 때 트랜잭션 과정에서 병목 발생 (성능테스트 참고)
스케일 아웃하는 서버 수 혹은 스케일 업을 어떤 스펙으로 등 어떻게 트래픽을 받아볼 수 있을지 고민하기
Scale Up - 기존 서버의 성능을 향상시키는 방법
Scale Out - 서버의 수를 늘리는 방법
Scale Up
Scale Out
→ 현재 휘피 서버는 AWS의 EC2 t2.micro 인스턴스 하나를 사용하고 있음
AWS의 EC2 t2.micro
Scale Up 적용 시
t2.micro
Scale Out 적용 시
TPS - Transaction Per Second의 약자로, 1초 동안 발생하는 트랜잭션의 개수를 말함
동시에 여러 요청을 효율적으로 처리하기 위해서는 톰캣의 worker thread와 DB connection 수에 대해 고민을 해보아야 함
Tomcat
//application.yml server: tomcat: threads: max: 200 # 생성할 수 있는 thread의 총 개수 min-spare: 10 # 항상 활성화 되어있는(idle) thread의 개수 accept-count: 100 # 작업 큐의 사이즈 max-connections: 8192 # 수립 가능한 connection의 총 개수 connection-timeout : 20000 # timeout 판단 기준 시간, 20초
그러나 자바의 스레드 풀과 비교 시 알아야 하는 점이 2가지 존재
Max-Connections
connector
connection
thread
Accept-Count
server.tomcat.threads.max
server.tomcat.threads.min-spare
server.tomcat.max-connections
server.tomcat.accept-count
server.tomcat.connection-timeout
→ max-connections > max thread - 모든 연결이 즉시 처리되는 것은 아니라서 보통 max-connections 를 더 크게 해놓음
max-connections > max thread
spring boot 3.2.7 (현재 사용 버전)의 내장 tomcat은 10.x 버전을 사용하는데, tomcat 8.x 버전 이상부터는 **Non-blocking I/O**를 지원함
Non-blocking I/O
**Non-blocking I/O**에서는 최대 Thread 개수 보다 적거나 같은 수의 connections를 설정하면 비효율적인 설정이 될 수 있음
→ NIO 기반의 Connector는 하나의 Connection이 하나의 스레드를 할당받는 BIO Connector에 비해 Selector를 활용해 Socket를 관리하므로 더 적은 스레드를 사용함 (Poller라는 별도의 스레드가 커넥션 처리)
Connector
DB Connection Pool
Hikari CP
connection pooling을 제공하는 JDBC DataSource의 구현체
다른 connection pooling 보다 가장 빠름 (기술 최적화, 간결한 설계)
Connection Pool
Spring boot 2.0 버전부터 Hikari를 사용해 spring-boot-starter-data-jpa, spring-boot-starter-jdbc에 의존성이 포함되어 있음
spring-boot-starter-data-jpa
spring-boot-starter-jdbc
Hikari CP wiki의 DeadLock을 피하기 위한 풀 크기 계산 공식은 다음과 같음
$$ PoolSize = Tn * (Cm - 1) + 1 $$
The text was updated successfully, but these errors were encountered:
No branches or pull requests
서버 3차 과제 3번
🍰우리 서비스가 TPS 1000 이 된다 가정하고, 톰캣, 스프링 설정 값 고민해보기
어떤 구간이 병목지점이 될지 고민하기
→ 과제 4번 이슈의 지하철역 정보 리스트 조회 API를 TPS 1000으로 테스트 했을 때 트랜잭션 과정에서 병목 발생 (성능테스트 참고)
스케일 아웃하는 서버 수 혹은 스케일 업을 어떤 스펙으로 등 어떻게 트래픽을 받아볼 수 있을지 고민하기
Scale Up - 기존 서버의 성능을 향상시키는 방법
Scale Out - 서버의 수를 늘리는 방법
Scale Up
Scale Out
→ 현재 휘피 서버는
AWS의 EC2 t2.micro
인스턴스 하나를 사용하고 있음Scale Up 적용 시
t2.micro
에서 만약 TPS 1000이 주기적이고 짧은 시간 동안만 높은 성능이 요구된다면 t3.medium 혹은 t3.large 같은 인스턴스를 사용하면 됨Scale Out 적용 시
TPS - Transaction Per Second의 약자로, 1초 동안 발생하는 트랜잭션의 개수를 말함
동시에 여러 요청을 효율적으로 처리하기 위해서는 톰캣의 worker thread와 DB connection 수에 대해 고민을 해보아야 함
Tomcat
그러나 자바의 스레드 풀과 비교 시 알아야 하는 점이 2가지 존재
Max-Connections
(큐로 구현)connector
가connection
생성 → 스레드 풀의thread
에 연결Accept-Count
server.tomcat.threads.max
: Thread Pool에서 사용할 최대 스레드 개수, 기본값은 200server.tomcat.threads.min-spare
: Thread Pool에서 최소한으로 유지할 Thread 개수, 기본값은 10server.tomcat.max-connections
: 동시에 처리할 수 있는 최대 Connection 개수, 기본값은 8192 (서버가 처리 가능한 동시 요청 처리 개수라고 볼 수 있음)server.tomcat.accept-count
: max-connections 이상의 요청이 들어왔을 때 사용하는 요청 대기열 큐의 사이즈, 기본값은 100server.tomcat.connection-timeout
: 클라이언트가 서버에 요청을 보내기 전까지 소켓 연결을 유지하는 최대 시간→
max-connections > max thread
- 모든 연결이 즉시 처리되는 것은 아니라서 보통 max-connections 를 더 크게 해놓음spring boot 3.2.7 (현재 사용 버전)의 내장 tomcat은 10.x 버전을 사용하는데, tomcat 8.x 버전 이상부터는 **
Non-blocking I/O
**를 지원함**
Non-blocking I/O
**에서는 최대 Thread 개수 보다 적거나 같은 수의 connections를 설정하면 비효율적인 설정이 될 수 있음→ NIO 기반의
Connector
는 하나의 Connection이 하나의 스레드를 할당받는 BIO Connector에 비해 Selector를 활용해 Socket를 관리하므로 더 적은 스레드를 사용함 (Poller라는 별도의 스레드가 커넥션 처리)DB Connection Pool
Hikari CP
connection pooling을 제공하는 JDBC DataSource의 구현체
다른 connection pooling 보다 가장 빠름 (기술 최적화, 간결한 설계)
Connection Pool
Spring boot 2.0 버전부터 Hikari를 사용해
spring-boot-starter-data-jpa
,spring-boot-starter-jdbc
에 의존성이 포함되어 있음Hikari CP wiki의 DeadLock을 피하기 위한 풀 크기 계산 공식은 다음과 같음
The text was updated successfully, but these errors were encountered: