8. 회원: 개발자 3명
- 서울 Region에 Zone 이 두개니까 이중화를 하자.
- WAS2개
- DBMulti-AZ
9. 회원: 팀원 4명
- 비동기 작업
- 이메일 발송이나 시간이 오래 걸리는 작업은 비동기로 하자.
- Celery 를 인스턴스에서 같이 돌리자.
- Queue는 Rabbit MQ를 쓰려고 하는데, 이중화랑 Failover가 어렵네.
- Session 때문에 Redis 쓸꺼니까 Redis에 Queue 역할도 주자.
- Redis Failover는 Sentinel 로 하자.
- WAS2개,Redis2개
- DBMulti-AZ
11. 회원: 팀원 6명
- DB 분리
- Main DB는 소중하니까 Slave를 붙이자.
- DB req는 가능하면 Slave로 가도록 개발하자.
- Log 데이터나 읽은 기록 데이터는 서비스와 무관하니까 죽더라도 혼자 죽
으라고 DB를 분리하자.
- 물론 Log, 읽기 기록은 장애가 있어도 서비스 이용에 차질이 없도록 개발하
자.
- WAS2개,Redis2개
- MainDBMulti-AZ,MainDBSlave1개,LogDB,ReadingDB
13. 회원: 사내 10명
- 뷰어서버
- 뷰어 테스트를 위해 뷰어 서버를 추가하자.
- 기존의 리디북스 서버를 가져와서 개조하자.
- 부하가 별로 없을것 같긴 한데 다른 언어니까 따로 서버를 두자.
- 객체 저장
- 책파일 과 미디어(이미지, 동영상) 저장을 S3에 하자.
- 책파일은 중요하니까 미디어와 Bucket을 분리 하자.
- WAS2개,ViewWAS 2개,Redis2개
- MainDBMulti-AZ,MainDBSlave1개,LogDB,ReadingDB
- S3
20. 회원: 1만명
- 조회 전용 DB
- DB가 자꾸 죽네.
- 운영, 재무팀에서 서비스 분석을 위해 엄청난 Query를 날리고 있네.
- DB인스턴스가 여러개라서 분석이 불편하네.
- 조회 전용 DB를 만들어서 서비스와 분리 하고 모든 DB를 Replication하자.
- WAS2개,Worker1개,Staging1개,ViewWAS2개,Redis2개
- MainDBMulti-AZ,MainDBSlave1개,LogDB,ReadingDB,ReadDB
- S3,CloudFront,CloudWatch
22. 회원: 5만명
- 뷰어서버 개선
- 설날에 차례지내다가 뷰어 서버 죽었네.
- 가끔 가끔 뷰어 서버 죽네.
- 만화 서비스 해야 하는데 이대로 가면 안되겠네.
- 책파일은 불변이니까 뷰어서버가 파싱한 데이터를 S3에 저장하고 CDN
태우자.
- 인증 기능은 CloudFront의 Private contents(signed-cookies) 기능을 사용
하자.
- WAS2개,Worker1개,Staging1개,ViewWAS2개,Redis2개
- MainDBMulti-AZ,MainDBSlave1개,LogDB,ReadingDB,ReadDB
- S3,CloudFront,CloudWatch
26. 회원: 20만명
- 이미지 최적화
- 이미지 다운로드가 가끔 느린게 있네.
- 헉! 30MB짜리 썸네일(?)이다.
- 운영팀에서 압축하고 올린다고 했지만, 실수 할 수 있으니 따로 해주자.
- 모든 이미지를 미리 변환하지 말고, 필요할 때 적절하게 변형할 수 있도록 하자.
- 이럴때 Lambda를 쓰면 최고.
- WAS8개,Worker2개,Staging2개,ViewWAS2개,로그수집기
- MainDBMulti-AZ,MainDBSlave2개,LogDB,ReadingDB,ReadDB
- S3,CloudFront,CloudWatch,ElasticCache,SNS
- Lambda,API Gateway
30. 회원: 100만명 되기 전에 할일
- 밤에 사람 안오니까, 혹은 엄청나게 올 수 있으니 Auto
scailing
- 배포가 더 쉬워져야 하니까 Front & Backend 나누고 Docker!
- 회원수 증가로 DB 데이터가 더 쌓기 전에 Sharding 준비
- 개발자님 모시기
31. 정리를 하자면
- 이중화 및 Auto-failover 는 필수 입니다.
- RDS를 쓴다면 Multi-AZ 꼭 사용하세요.
- AWS에서 제공하는 서비스들은 따로 구축하지 말고 사용하세
요.
- 가능하면 Serverless로 구성하세요.