caffeine-library / release-everything

'Release의 모든 것'을 읽는 스터디
3 stars 0 forks source link

[keyword] 4장 - 안정성 안티 패턴 #9

Closed kth990303 closed 8 months ago

kth990303 commented 9 months ago

주제

4장 - 안정성 안티 패턴'을 읽고 내용을 요약하거나,
중요✨ 하다고 생각하는 키워드 및 관련 설명을 코멘트로 달아주세요

연관 챕터

7


@caffeine-library/readers-release-everything

kth990303 commented 9 months ago

전체 애플리케이션에 대한 99.999% 신뢰성은 이제 충분하지 않다. 이 수준의 신뢰성이라면 매일 수천 명의 사용자가 실망하게 될 것이다. (p.70)

99.999% 라는 비율은 되게 높아보이는데, 절대적인 양으로 따지면 생각보다 수가 많다는 생각이 들어 경각심이 들더라고요. '새벽 시간대에 잠깐 API 레이턴시가 튀는 정도는 괜찮겠지?', '가끔 커넥션타임아웃 뜨는데 괜찮겠지? 백로그로 넘겨도 되겠지?' 와 같은 안일함은, 규모가 커질수록 일일이 챙기기 힘든데, 아이러니하게도 규모가 커질수록 위험할 수 있어서 정말 어려운 것 같습니다. (채용공고 우대사항에 괜히 대용량 트래픽 유경험자 라고 적혀있는게 아니구나 싶기도 하고요? ㅠㅠ)


~ 방화벽의 데이터베이스 쪽 트래픽이 전혀 없다는 것은 매우 중요한 단서였다.(p.80) 하지만 방화벽은 'ICMP 목적지 도달 불가'라는 메시지도 없이 이 패킷들을 계속 버리기만 했다.(p.82) 오라클에는 종료된 연결을 찾아내는 DCD(dead connection detection)란 기능이 있어서 클라이언트가 급작스럽게 작동이 중지되었는지 찾아낼 수 있다.(p.83)

DB 에 트래픽이 없는 건에 대해, DB 인스턴스가 죽은 것도 아니고 애플리케이션도 잘 돌아가고, 애플리케이션 재시작하면 다시 잘 살아나고... 엄청 멘탈 나갔을 듯한데, 트래픽이 없는 것을 보고 진입점포인트 (방화벽) 이슈를 예리하게 캐치해내고, 해결책 또한 방화벽 재설정 같은게 아닌 DCD 설정으로 처리한 게 인상깊었습니다.

약간 유사한 사례라 생각되는 포스팅: https://pat98.tistory.com/788

확실히 아는게 많을수록 시선도 넓어지고 처리 능력도 좋아지는 것 같다는 생각이 들음과 동시에, 악의적인 의도를 고려하여 ICMP reset 을 전송하지 않은 근거있는 행동이 오히려 이러한 결과를 초래했다는 것이 한편으론 무섭네요.

문제를 이해하려면 해당 문제가 드러난 추상화 수준에서 한두 단계를 파고 들어가 실체를 밝혀내는 방법을 알아야 한다.(p.84) 처럼, 한두 단계를 파고 들어가지 않으면 멘탈나가고 발만 동동 굴렀을 것 같습니다.


서버 하나가 작동을 멈추면 [그림 4-9]와 같이 분산된다. 남은 7개의 서버는 각각 총 부하의 14.3% 정도를 처리해야 한다. 각 서버는 전체 부하의 1.8% 정도만 추가로 처리하면 되지만 기존보다 부하가 15% 가량 증가하는 꼴이다. (p.89)

CPU Utilization 이 한 서버당 90% 이상일 때 경고를 띄우는게 아닌, 훨씬 낮은 수치에서 경고를 띄우고 알람을 보내는 이유라고 생각이 드네요. 사내에서 CPU Utilization이라든지, 메모리가 몇 % 쯤일 때 알람을 보내주는지 얘기 나눠봐도 좋을 거 같아 적어봤습니다!


JasonYoo1995 commented 9 months ago

서론

4.1 통합 지점

4.1.1 소켓 기반 프로토콜

4.1.2 오전 5시 문제

4.1.3 HTTP 프로토콜

4.1.4 업체 제공 API 라이브러리

4.1.5 통합 지점 문제 대응책

요점 정리

4.2 연쇄 반응

4.4.1 트래픽

4.4.2 지나친 서비스 비용

4.4.3 불쾌한 사용자

4.4.4 해로운 사용자

4.5 블록된 스레드

4.5.1 블록 지점 파악

4.5.2 라이브러리

4.6 자기 부정 공격

4.6.1 자기 부정 회피

4.7 척도 효과

4.7.1 지점 간 통신

4.7.2 공유 자원

4.8 처리 능력 불균형

4.8.1 처리 능력 테스트

4.9 도그파일 (Dogpile)

4.10 지렛대 원리

4.10.1 전면 장애 증폭

4.10.2 제어와 안전 장치

4.11 응답 지연

4.12 제한 없는 결과

4.12.1 검은 월요일

binchoo commented 9 months ago

버그가 있는 애플리케이션 규모를 자동으로 조정하다가 엄청난 비용을 지출하는 일이 흔하기 때문이다. (p. 96) 관련하여 재미있는 트러블 슈팅 경험이 있어서 공유드리겠습니다.

정확히는 '어플리케이션 문제' + 'EC2 AutoScaling group 구성시 약간의 실수'로 인해 EBS 비용이 엄청나게 증가할 수 있는 사안입니다.