셀(Cell)에 속성 클레임하기
셀(Cell)에 속성 클레임하기에 대해 설명합니다.
Feature flag 이 기능이 적용되려면 cells 와 피처 플래그 Feature.enabled?(:cells_unique_claims) 모두 활성화되어야 합니다. 또한 개별 모델 클레임은 모델별 피처 플래그로 제어됩니다. 전체 목록은 피처 플래그 를 참조하세요. 속성 클레임이 필요한 이유 # 일부 속성은 전체 클러스터에서 전역적으로 고유해야 합니다. 예를 들어, 라우팅 목적으로 특정 URL 또는 식별자가 최대 하나의 셀에 속하도록 보장하여 해당 셀로 라우팅할 수 있어야 합니다. 각 셀은 자체 데이터베이스를 가지고 있으며, 다른 데이터베이스에 걸쳐 고유 제약을 강제할 수 없습니다. 따라서, 이러한 속성이 고유하도록 클러스터 전체 데이터베이스가 필요합니다. 이러한 속성에 대해, 속성이 특정 셀에 속한다는 것을 클레임하기 위해 토폴로지 서비스와 통신합니다. 한번 클레임되면 다른 셀은 동일한 속성을 클레임할 수 없습니다. 클레임할 속성 결정 # 속성이 다음에 해당하는지 고려하세요: 라우팅에 사용되는가? URL에 사용되는가? REST API에 사용되는가? GraphQL API에 사용되는가? 로그인에 사용되는가? 롤아웃 라이프사이클 # 새 속성을 클레임하려면 두 단계가 필요합니다. 각 단계에는 자체 피처 플래그가 있으며 각각 고유한 목적을 제공합니다. 1단계: 라이브 요청 클레임 # 모델에 Cells::Claimable 컨선(concern)을 추가하고 모델별 피처 플래그를 생성합니다. 활성화되면 Rails after_save 및 before_destroy 콜백이 모든 생성, 업데이트, 삭제에 대해 토폴로지 서비스에서 속성을 클레임하고 해제합니다. 이 단계는 새 쓰기만 처리합니다. 데이터베이스의 기존 레코드는 2단계까지 클레임되지 않습니다. 모델 구성 방법에 대한 자세한 내용은 속성 클레임 방법 을 참조하세요. Note Cells::Claimable 컨선은 ActiveRecord 콜백에 의존합니다. delete_all , insert_all , upsert_all 또는 원시 SQL을 사용하는 코드 경로는 이러한 콜백을 우회합니다. 이러한 코드 경로의 경우 데이터베이스 트랜잭션 외부에서 클레임을 처리하기 위해 Cells::BulkClaimsWorker 를 사용합니다. 자세한 내용과 기존 패턴은 ActiveRecord를 우회하는 코드 경로에 대한 벌크 클레임 을 참조하세요. 2단계: 백필 및 검증 # 검증 워커 피처 플래그( cells_claims_verification_worker_<model_name> )를 활성화하여 검증 서비스를 시작합니다. 첫 실행 시 서비스는 모델의 모든 로컬 레코드를 스캔하고, 토폴로지 서비스에서 일치하는 클레임을 찾지 못하면 클레임을 생성합니다. 이것이 기존 데이터의 백필 역할을 합니다. 백필이 완료된 후 검증 서비스는 크론 스케줄에서 계속 실행됩니다. 로컬 레코드와 토폴로지 서비스 클레임을 조정하여 누락된 클레임, 고아 클레임 또는 변경된 값과 같은 드리프트를 감지하고 수정합니다. 검증에 대한 자세한 내용은
