최신 인프라 업그레이드를 통해 얻은 4가지 교훈
게시 됨: 2022-05-04인프라 업그레이드. 특히 우리와 같은 SaaS 회사의 일반적인 작업이죠?
음, 우리의 최신 버전은 약간의 변형을 추가한 일반적인 소프트웨어 업그레이드가 아니었습니다.
주요 목표는 소프트웨어를 최신 버전으로 업그레이드하는 것이지만 이번에는 고객이 허용 목록에 추가해야 하는 IP 수를 줄이고 데이터베이스 중복성을 달성하는 두 가지 단계를 프로젝트에 추가했습니다.
그리고 대부분의 업데이트가 순조롭게 진행되었지만 그 과정에서 일부 서비스 중단도 경험했습니다.
다음 줄에서는 업그레이드를 수행한 이유, 진행 방식 및 가장 큰 학습 내용이 앞으로 나아가고 있는 내용에 대한 비하인드 스토리 정보를 공유할 것입니다.
바로 들어가 봅시다!
업그레이드를 처음 수행한 이유와 포함된 사항
우리는 우리가 가진 책임과 NitroPack이 고객 비즈니스의 성공에서 하는 역할을 이해합니다. 그렇기 때문에 최적의 성능, 최고의 보안 표준 및 연중무휴 서비스 안정성을 보장하는 것이 중요합니다.
인프라를 정기적으로 업그레이드하는 것은 이 모든 것을 보장하는 많은 방법 중 하나입니다. 그리고 앞서 언급했듯이 이 특정 업그레이드에는 세 부분이 있습니다.
1. 최신 안정 버전으로 소프트웨어 업데이트
클라우드 기반 솔루션으로서 NitroPack이 100,000개 이상의 클라이언트 사이트에 대해 수행하는 모든 최적화는 당사 인프라에서 수행됩니다. 현재 100개 이상의 서버를 사용하여 서비스를 실행하고 있습니다. 이 업데이트를 통해 서버 집합을 조정하는 소프트웨어를 최신 안정 버전으로 업그레이드해야 했습니다.
2. 고객이 허용 목록에 추가해야 하는 IP 수 줄이기
간단히 말해서, 우리의 IP 허용 목록 프로세스는 사용자 친화적이지 않았습니다.
업데이트 전에 클라이언트는 NitroPack의 발신 트래픽(요청)을 클라이언트 사이트로 제공하는 40개 이상의 IP 주소를 허용 목록에 추가해야 했습니다. 게다가 이러한 IP는 고정되지 않았습니다. 즉, 서버 중 하나가 사용 중지되면 새 서버에 다른 IP 주소가 표시됩니다.
새로운 IP를 생성하는 이 프로세스에서는 NitroPack이 성공적으로 사이트를 최적화할 수 있도록 고객이 수십 개의 새 주소를 정기적으로 허용 목록에 추가해야 했습니다.
업데이트 후 고객은 변경되지 않는 고정 IP 3개만 허용 목록에 추가해야 합니다.
3. 데이터베이스 중복성 달성
오랫동안 우리는 NitroPack의 웹사이트와 대시보드의 전반적인 성능을 향상시키고 서비스 보안을 강화할 수 있기 때문에 데이터베이스 중복성을 달성하기를 원했습니다. 또한 이 업데이트를 통해 다운타임 없이 향후 데이터베이스 업그레이드를 수행할 수 있습니다.
이러한 목표를 염두에 두고 우리는 프로세스를 두 단계로 나누었고 두 단계 사이에 하루를 남겨 충분한 휴식을 취했습니다.
1단계: (11월 4일): IP 수 줄이기
2단계: (11월 6일): 데이터베이스 이중화 및 서버 소프트웨어 업데이트
그러나 모든 것이 우리의 기대대로 되지는 않았습니다.
계획대로 되지 않은 것
철저한 준비에도 불구하고 세 가지 업데이트 모두에서 예상치 못한 문제에 직면했습니다. 다음은 일어난 일입니다.
문제 #1: IP 업데이트 프로세스 중 연결 문제
11월 4일에 NitroPack의 나가는 트래픽에 대한 IP 주소 수를 줄이는 것을 목표로 예비 서비스 업데이트를 수행할 예정이었습니다.
Т그 초기 릴리스에는 일부 경우에 서비스에서 나가는 연결을 생성할 수 없는 내부 소프트웨어 버그가 있었습니다. 불행히도 이 문제는 인프라에서 최대 트래픽 상황이 발생한 경우에만 나타났습니다. 그렇기 때문에 초기 테스트 동안 스테이징 환경에서 문제를 감지하지 못했습니다. 연결 문제로 인해 NitroPack이 나가는 최적화를 안정적으로 수행하지 못했고 일부 고객은 몇 시간 동안 서비스 불안정을 경험했습니다.
좋은 소식은 개발 팀이 HTTP 클라이언트의 소프트웨어를 업데이트하여 문제를 즉시 완화할 수 있었다는 것입니다.

문제 #2: 데이터베이스 백업이 예상보다 오래 걸림
11월 6일에 데이터베이스 이중화 작업을 시작했을 때 계획보다 훨씬 오래 걸릴 것이라는 사실을 빨리 알게 되었습니다. 이로 인해 우리는 하루 뒤에 서버 소프트웨어 업그레이드를 추진해야 했습니다.
그러나 그것은 좋은 의도를 염두에 둔 것이었습니다. 우리는 문제 없이 중복성을 수행할 수 있도록 처음부터 데이터베이스를 백업할 때 매우 신중하고 싶었습니다.
문제 #3: 서버 오류로 인해 소프트웨어 업그레이드 프로세스가 느려짐
11월 7일에 서버 소프트웨어 업그레이드 배포를 시작했을 때 소수(1% 미만)의 서버에서 예기치 않은 오류가 발생하여 궁극적으로 업데이트 배포를 방해하고 전체 프로세스 속도가 느려졌습니다. 우리 스스로 문제를 해결할 방법이 없었고, 우리는 그것을 우리의 서버 제공자에게 에스컬레이션할 수 밖에 없었습니다.
작은 딸꾹질처럼 보이지만 작업의 규모를 고려할 때 이 예기치 않은 오류로 인해 NitroPack 클라이언트의 작은 부분(2% 미만)이 간헐적으로 짧은 서비스 다운타임을 경험했습니다.
문제 #4: 예기치 않은 502 CDN 오류로 인해 서비스가 불안정해짐
업그레이드가 완료되었다고 생각했을 때 모니터링 시스템에서 HTTP 상태 코드 502와 함께 빈번한 CDN 오류 발생을 등록하기 시작했습니다.
불행히도 이 오류는 모든 클라이언트에 영향을 주어 며칠 동안 CDN 리소스 전달이 불안정해졌습니다. 문제를 조사한 후 서비스 불안정을 영구적으로 수정하는 소프트웨어 업데이트를 발행했습니다.
NitroPack의 모든 것이 제대로 작동하면 이 인프라 업그레이드를 통해 얻은 교훈을 바탕으로 향후 개선할 수 있는 점에 대해 회고하는 회의를 했습니다.
동일한 문제가 미래에 다시 발생하지 않도록 하기 위해 취하는 조치
전반적으로 우리는 전체 업그레이드가 어떻게 진행되었는지 자랑스럽게 생각합니다. 우리는 때때로 서비스 불안정을 경험했지만 통제된 방식이었고 전체 클라이언트 기반에 대한 전체 서비스의 다운타임을 성공적으로 피했습니다.
그러나 우리는 등을 토닥이고 무엇이 옳았는지에 전적으로 집중한다고 해서 우리가 회사와 서비스로 앞으로 나아가지 못한다는 것을 알고 있습니다.
그렇기 때문에 향후 업그레이드를 더욱 효율적으로 수행하기 위해 구현할 개선 사항을 알리고자 합니다. 주요 사항은 다음과 같습니다.
스트레스 테스트 가능 스테이징 환경
이를 통해 수만 건의 요청이 있는 대용량 상황에서만 발생하는 오류를 감지할 수 있습니다. 예를 들어, HTTP 클라이언트 및 재사용 가능한 연결 문제를 미리 식별하는 데 도움이 되었을 것이고 중단 없이 IP 업데이트를 실행할 수 있었을 것입니다.
더 나은 모니터링 및 경고 시스템
이 업그레이드 중에 발생한 문제를 기반으로 모니터링과 경고가 모두 부족한 영역을 식별할 수 있었습니다. 좋은 소식은 이 두 영역에 대해 이미 두 가지를 모두 구성했다는 것입니다.
더 나은 팀 간 협업 및 더 적극적인 고객 커뮤니케이션
업그레이드에 관련된 다양한 팀이 서로 이상적으로 동기화되지 않았기 때문에 기존 고객에게 업그레이드 진행 상황을 사전 예방적이고 시기적절하게 전달하지 못했다고 생각합니다. 우리는 status.nitropack.io 페이지를 가지고 있어서 모든 사람들이 업그레이드로 인해 무슨 일이 일어나고 있는지 확인할 수 있었지만 그것만으로는 충분하지 않았습니다.
다음 번에는 소셜 미디어, 이메일, 대시보드, 웹사이트 등 가능한 한 많은 채널을 통해 업그레이드 진행 상황을 알려드리겠습니다!
서버 제공업체와의 더 나은 조정
향후 업데이트를 위해 서비스 제공업체와 더 나은 조정을 통해 예상치 못한 문제에 대한 적시 솔루션을 제공하기 위해 노력할 것입니다. 이는 예상치 못한 서버 오류를 보다 효율적으로 처리하는 데 도움이 됩니다.
끝으로 고객 여러분의 인내와 이해에 감사드립니다. 귀하의 신뢰는 서비스를 지속적으로 개선하는 원동력입니다.
