{"id":"IL-0292","org":"Google Cloud","date":"2017-11-06","docs":["https://cloud.google.com/datastore/docs/best-practices#designing_for_scale"],"title":{"en":"App Engine Memcache was down in all regions for 1 hour 50 minutes when its global datacenter mapping could not be read","ko":"App Engine Memcache 가 글로벌 설정을 읽지 못해 모든 리전에서 1시간 50분 동안 멈췄다"},"domain":["gcp","database"],"impact":{"scope":"App Engine Memcache unavailable in all regions; all HTTP requests and App Engine API calls failed on Managed VMs; higher Datastore latency and errors for some customers","users":"All projects using Memcache","region":"All regions"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":null,"related":[],"sources":[{"url":"https://status.cloud.google.com/incident/appengine/17007","kind":"official-status","archived":"https://web.archive.org/web/20261103101316/https://status.cloud.google.com/incident/appengine/17007"}],"summary":{"en":"App Engine Memcache needs a globally consistent view of the datacenter that currently serves each application, so that it stays strongly consistent when traffic fails over to another datacenter. The configuration that maps applications to datacenters is stored in a global database. After a configuration update, the database entity that holds this configuration became unavailable for both reads and writes. Memcache treats the configuration as invalid if it cannot be refreshed within 20 seconds, so when clients could not fetch it, Memcache stopped working in every region from 12:33 to 14:23 US/Pacific, 1 hour and 50 minutes.\n\nAn attempt at 12:59 to roll back the latest configuration change failed, because the rollback was itself an update to the configuration in the same global database. At 14:21 engineers managed to update the configuration by sending the update request with a long enough deadline, which made all replicas of the database synchronise and let clients read the mapping again. The status page later put full recovery for all projects at 15:30. As a temporary mitigation Google reduced the number of readers of the global configuration, which avoids the contention during writes that had led to the unavailability, and started work to regionalise the configuration to limit the blast radius of similar failures.","ko":"App Engine Memcache 는 트래픽이 다른 데이터센터로 넘어갈 때도 강한 일관성을 지켜야 한다. 그래서 애플리케이션마다 지금 어느 데이터센터가 서비스하는지를 모든 곳에서 같은 값으로 봐야 한다. 애플리케이션과 데이터센터의 매핑 설정은 글로벌 데이터베이스에 있다. 2017-11-06 설정 업데이트 뒤 이 설정을 담은 엔티티를 읽을 수도 쓸 수도 없게 됐다. Memcache 는 20초 안에 설정을 새로 읽지 못하면 그 설정을 유효하지 않다고 보도록 만들어져 있다. 그래서 클라이언트가 설정을 가져오지 못하자 Memcache 가 멈췄다. 글로벌 설정을 읽는 쪽이 많아 쓰기 때 경합이 생긴 것이 엔티티를 쓸 수 없게 만든 원인이었다.\n\nGoogle 은 12:34 에 자동 알림을 받았다. 엔지니어는 최근 변경을 찾아 12:59 에 설정 파일의 마지막 변경을 되돌리려 했지만, 이 롤백도 글로벌 데이터베이스의 설정을 고쳐야 해서 실패했다. 14:21 에 데드라인을 충분히 길게 준 업데이트 요청으로 설정을 고치자 데이터베이스의 모든 복제본이 동기화되고 클라이언트가 매핑 설정을 읽을 수 있게 됐다. Memcache 는 12:33 부터 14:23 까지 모든 리전에서 멈춰 있었다. 그동안 일부 고객은 Memcache 대신 몰린 Datastore 요청 때문에 지연과 오류를 겪었고, Managed VMs 고객은 모든 HTTP 요청과 App Engine API 호출이 실패했다. 복구 뒤에도 몰린 트래픽으로 Datastore 부하가 올랐다. 엔지니어가 Memcache 로 보내는 트래픽을 천천히 늘렸고, 15:30 에 모든 프로젝트에서 문제가 해결됐다. 임시 완화로 글로벌 설정을 읽는 쪽의 수를 줄였고, 이 설정을 리전 단위로 나누는 작업을 진행하고 있다."},"trigger":{"en":"A configuration update, after which the database entity holding the mapping of applications to datacenters could no longer be read or written.","ko":"설정 업데이트 뒤 애플리케이션과 데이터센터의 매핑 설정을 담은 글로벌 데이터베이스의 엔티티를 읽을 수도 쓸 수도 없게 됐다."},"severity":"unknown","symptoms":["service-unavailable","database-overloaded","high-latency","high-error-rate"],"timeline":{"detected_after":"1m","resolved_after":"1h 50m"},"date_kind":"incident","detection":{"en":"Google received an automated alert at 12:34 US/Pacific, one minute after the start.","ko":"Google 은 장애가 시작된 1분 뒤인 12:34 US/Pacific 에 자동 알림을 받았다."},"components":["cache","database"],"root_cause":"config-change","remediation":[{"text":{"en":"Sent the configuration update with a long enough deadline, which synchronised the database replicas and let clients read the mapping","ko":"14:21 에 데드라인을 충분히 길게 준 업데이트 요청으로 설정을 고쳤다. 데이터베이스의 모든 복제본이 동기화되고 클라이언트가 매핑 설정을 다시 읽을 수 있게 됐다."}},{"text":{"en":"Ramped Memcache traffic back up gradually while the error rate fell","ko":"Memcache 로 보내는 트래픽을 천천히 다시 늘렸고 오류율이 줄어들었다."}}],"action_items":[{"text":{"en":"Reduce the number of readers of the global configuration to avoid contention during writes","ko":"임시 완화로 글로벌 설정을 읽는 쪽의 수를 줄여 쓰기 때 경합이 생기지 않게 한다."}},{"text":{"en":"Regionalise the configuration to limit the blast radius of similar failures","ko":"이 설정을 리전 단위로 나눠 비슷한 실패가 번지는 범위를 줄인다."}}],"contributing":["revert-did-not-restore","blast-radius-too-wide"],"recurrence_of":null,"symptoms_text":{"en":"From 12:33 US/Pacific on 6 November 2017, the App Engine Memcache service was unavailable to applications in all regions. Google received an automated alert at 12:34, and the status page said all projects using Memcache were affected.\n\nWhile Memcache was down, some customers saw higher Datastore latency and errors. Google attributes these to applications sending surges of Datastore operations while Memcache was unavailable, which can cause contention or hotspotting on particular entities or key ranges. Customers on Managed VMs saw every HTTP request and App Engine API call fail, while App Engine Flexible Environment, the successor to Managed VMs, was not affected.\n\nEngineers first looked for recent changes and at 12:59 tried to revert the latest change to the configuration file, but the rollback needed a write to the same global database, and that write also failed. When Memcache came back at 14:23, a surge of traffic raised the load on Datastore servers; some US applications saw higher get latency until 14:31 and higher put latency until 15:04, and Memcache traffic was ramped up gradually while the error rate fell.","ko":"2017-11-06 12:33 US/Pacific 부터 App Engine Memcache 를 모든 리전의 애플리케이션에서 쓸 수 없었다. Google 은 12:34 에 자동 알림을 받았고, 상태 페이지는 Memcache 를 쓰는 모든 프로젝트가 영향을 받는다고 알렸다.\n\nMemcache 가 멈춘 동안 일부 고객은 Datastore 지연과 오류가 늘었다. Memcache 가 실패한 애플리케이션이 특정 엔티티나 키 범위로 Datastore 작업을 몰아 보내면 Datastore 에서 경합이나 핫스팟이 생길 수 있었다.\n\nManaged VMs 를 쓰는 고객은 장애 내내 모든 HTTP 요청과 App Engine API 호출이 실패했다. 후속 제품인 App Engine Flexible Environment 는 영향을 받지 않았다.\n\n장애가 끝난 14:23 에는 트래픽이 몰리며 Datastore 서버 부하가 올랐다. 미국의 일부 애플리케이션은 14:23 부터 14:31 까지 get 지연이, 14:23 부터 15:04 까지 put 지연이 늘었다. 상태 페이지는 Memcache 로 보내는 트래픽을 천천히 늘리고 있고 오류율이 줄고 있다고 알렸고, 15:30 에 모든 프로젝트에서 해결됐다고 알렸다.\n\n엔지니어는 평소 절차대로 최근 변경부터 찾았고 12:59 에 설정 파일의 마지막 변경을 되돌리려 했다. 이 롤백도 글로벌 데이터베이스의 설정을 고쳐야 해서 똑같이 실패했다."},"updated_at":"2026-11-14T12:33:54.693130Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0292","org_slug":"google-cloud"}