2023/10/05

업데이트: 10월 4일 서비스 중단, 대대적인 마이그레이션, 인프라 개선

미 동부 일광절약 시간대 EDT 기준으로 10월 4일 오전 4시부터 6시 30분까지 Evernote는 서비스 중단을 겪었습니다. 오전 9시 30분까지는 모든 로그인 사용자가 앱을 정상적으로 사용할 수 있었습니다. 악의적인 행동을 제한하기 위해 저희는 하나의 계정에서 할 수 있는 로그인 시도 횟수를 일시적으로 제한했습니다. 10월 5일 오전 11시 30분 현재 로그인 시도 제한은 사라졌습니다.

이러한 조치의 결과로, 일부 Evernote 고객은 Evernote에 로그인할 수 없거나, 변경 사항을 동기화할 수 없거나, 전반적으로 응답이 없고 느린 제품을 경험하는 등의 문제를 겪으셨을 수 있습니다.

왜 이런 일이 일어났을까요?

특별히 중요한(그리고 까다로운) 마이그레이션

로그인, 신규 등록, 사용자 프로필 정보 관리를 담당하는 대규모의 데이터베이스를 Monolith라고 알려진 Evernote의 레거시 백엔드 인프라에서 새로운 시스템으로 옮기면서 서비스 중단이 촉발되었습니다.

지난 몇 개월 동안 저희는 백엔드 인프라의 수많은 요소를 좀 더 현대적이고 안정적인 시스템으로 이전했습니다. 어제(10월 4일) Monolith 데이터의 최종 마이그레이션을 수행했습니다. 이 마지막 작업을 완료함으로써 이제 전체 시스템을 새로운 인프라로 이전하는 작업을 마치고 마침내 Evernote의 백엔드 기반을 훨씬 더 건전한 상태로 만들 수 있게 되었습니다.

Monolith에서 벗어나 좀 더 분산된 인프라로 넘어가는 것은 Evernote 팀이 오랫동안 염두에 두었던 목표였고, 몇 달 전 저희는 드디어 이 어렵고도 꼭 필요한 작업에 착수했습니다.

Monolith라는 이름이 친숙하게 들린다면 그것은 제가 얼마 전 Evernote의 흔들림 없는 미래를 만들어가는 일에 관해 이야기하면서 언급했기 때문일 것입니다. 기본적으로 Monolith는 Evernote 내에서 수많은 항목을 저장하고 동기화할 수 있는 대규모의 단일형 Java Enterprise Edition 애플리케이션입니다. Monolith는 매우 무겁고 관리하기 어려우며 수년에 걸쳐 상당한 기술적 문제를 축적해 왔습니다.

이번 마이그레이션은 현재까지 저희가 수행한 것 중 가장 규모가 크고 기술적으로 까다로우며 동시에 가장 중요한 Monolith 마이그레이션이었습니다. 이로써 저희는 앞으로 더욱 빠르고 효과적으로 기능을 개선할 수 있는 엄청난 잠재력을 갖추게 되었습니다.


서비스 중단에 대한 심층 분석

서비스 차질을 최소화하기 위해 저희는 미국 시간으로 10월 4일 오전 3시 30분에 데이터베이스 마이그레이션을 계획했습니다. 하지만 마이그레이션을 마치고 클라이언트를 재연결하자, Monolith가 평소보다 높은 작업 요청을 처리하지 못했습니다. 안타깝게도 전체 시스템을 다시 시작하고 서서히 트래픽을 재개하는 수밖에 없었습니다.

다음은 상황의 개요입니다(모든 시간은 미 동부 일광절약 시간대 EDT 기준):

10월 4일

오전 3시 30분

  • 팀이 계획대로 마이그레이션을 시작했습니다.

오전 4시

  • 마이그레이션 완료 후 클라이언트가 재연결을 시도하자 서버가 들어오는 요청 수를 버거워했습니다.
  • Monolith가 증가한 수요를 감당하지 못했습니다.
  • 저희는 즉각 클라이언트 요청을 일시적으로 차단하고 서버를 다시 시작하기로 했으며, 이로써 서비스 중단이 발생했습니다
  • 이 기간 중 고객은 다음과 같은 문제를 겪었을 수 있습니다:
    - 느리고 응답 없는 앱 내 경험
    - 동기화 상태가 매끄럽지 않거나 동기화가 일시적으로 중단되었다는 오류 메시지가 뜨면서 노트를 동기화할 수 없음
    - (로그인하지 않은 경우) 429 오류(요청 횟수가 너무 많음)가 뜨거나 Evernote를 일시적으로 사용할 수 없다는 메시지가 뜨면서 Evernote에 로그인할 수 없음

오전 6시 30분

  • 서버가 다시 시작되자 클라이언트 재연결을 허용했고 노트 저장 기능을 우선시했습니다
  • 이 시점에 일부 사용자들은 Evernote 기능이 정상화된 것을 확인하기 시작했습니다.
  • 이후 3시간 동안 저희는 Evernote의 핵심 기능이 대부분 복원될 때까지 체계적으로 서서히 트래픽을 늘렸습니다.

오전 9시 30분

  • 모든 로그인 사용자가 앱을 정상적으로 사용할 수 있게 되었습니다
  • 시스템 보호를 위해 하나의 계정에서 할 수 있는 로그인 시도 횟수를 일시적으로 제한했습니다
    - 이것은 당사 시스템을 공격해 시스템의 안정성이나 고객 데이터의 보안을 위협하는 잠재적 행위를 막기 위한 조치였습니다.
    - 안타깝게도 이 호출 제한은 악의적 사용자뿐 아니라 정당한 사용자에게도 똑같이 적용됩니다. 이에 따라, 일부 사용자들이 Evernote 로그인에 어려움을 겪었을 수 있습니다.


10월 5일

오전 11시 30분

  • 악용자 호출 제한을 도입하고 전역 호출 제한을 정상 수준으로 돌려놓았습니다.
  • 서비스 중단 전과 비교해 Evernote의 성능에 긍정적인 변화가 나타나 마이그레이션이 의도한 효과를 내고 있음을 확인했습니다
    - 데이터베이스 마이그레이션 전에 비해 전반적인 대기 시간이 짧아졌습니다.
    - 데이터베이스 마이그레이션 전에 비해 실시간 편집 오류율이 떨어졌습니다.

이 무렵 서비스 중단이 끝나고 마이그레이션이 완료된 것으로 여겨집니다 여전히 로그인 또는 동기화 문제를 겪고 계신 경우, 저희 팀에 연락해 직접 도움을 받으시기 바랍니다.

미래를 위한 더 나은 프로세스

이번 사건을 계기로 저희는 서비스 중단 전후에 발생한 모든 이벤트를 철저하게 돌아보면서 향후 프로세스를 개선해나갈 예정입니다. 기술적인 측면뿐 아니라 커뮤니케이션에도 초점을 맞출 것입니다. 저희는 고객과의 커뮤니케이션에 훨씬 더 효과적이고 시의 적절하게 대응했어야 했습니다.

특히, 이러한 상황 발생 시 status.evernote.com을 통해 즉각 상태를 업데이트해 드리겠습니다. 저희는 (문제가 시작되고 몇 시간이 흐른) 10월 4일 오전 10시 30분까지 그 페이지를 업데이트하지 않았으며, 혼란을 느낀 다수의 고객들이 웹사이트에서 추가 정보를 찾지 못한 채 문제를 겪고 나서 저희에게 연락을 주셨습니다. 이 점에 대해 깊이 사과드립니다.

서비스 중단은 결코 기분 좋은 일이 아닙니다. 저희가 해결 방법을 찾는 동안 참을성 있게 기다려 주셔서 감사드립니다. 이 경우, Evernote의 미래를 만들어가는 긍정적인 작업의 부수적인 여파로 서비스 중단이 발생했습니다. 조만간 그러한 (긍정적인!) 소식을 더 많이 공유해드릴 수 있기 바랍니다.

- Federico Simionato 올림