PHP 편집자 Strawberry는 kubernetes 연산자를 개발하기 위해 golang 사용을 탐색할 때 "개체가 수정되었습니다"라는 일반적인 오류에 직면했습니다. 이 오류는 일반적으로 여러 고루틴이 동시에 동일한 객체를 수정하여 데이터 불일치 또는 경쟁 조건이 발생할 때 발생합니다. 이 기사에서는 개발자가 유사한 문제를 더 잘 이해하고 처리할 수 있도록 이 오류의 원인과 해결 방법을 살펴보겠습니다.
문제 내용
k8s 연산자에 "개체가 수정되었습니다" 오류가 나타납니다
으아악이 오류에 대해 많은 논의가 있습니다. 주된 대답은 "이 문제는 업데이트하려고 할 때 개체의 이전 버전이 있기 때문에 발생합니다."입니다. 하지만 몇 가지 질문이 있습니다. 내 교환원의 일부 시나리오에서는 단일 "좌표" 호출 중에 포드의 주석을 2번 업데이트해야 합니다. 물론 "개체가 수정되었습니다"라는 오류가 자주 발생합니다.
질문: 'r.Get()' 및 'r.Update()'가 개체를 가져오거나 업데이트하는 위치를 알고 싶습니다. 로컬 캐시 또는 API 서버에서?
1: 'r.Get()'은 '캐시'에서 개체를 가져오고 'r.Update()'는 개체를 캐시로 업데이트하는 것 같아요. 맞나요? 그렇다면 왜 이 오류가 발생합니까? 운영자 이외의 이유로 Pod 개체가 변경되면 현재 "조정" 중에 내 Pod 개체를 업데이트할 수 없나요? (캐시된 객체는 로컬이므로 이미 API 서버와 동기화되지 않았습니다.) 최신 객체를 얻기 위해 때때로 "재시도"하는 이유는 무엇입니까?
으아악2: 'r.Get()'이 API 서버에서 객체를 가져오는 것이고 'r.Update()'도 API 서버를 업데이트하는 것입니다. 객체 업데이트를 다시 시도해야 하는 이유는 무엇입니까?
해결 방법
Kubernetes 컨트롤러에서 r.Get() 및 r.Update()를 사용하는 경우 API 서버와의 상호 작용에는 로컬 캐시와 API 서버 자체가 모두 포함됩니다.
r.Get()
:
r.Get() 함수는 객체가 존재하는 경우 로컬 캐시에서 객체를 검색하고, 그렇지 않으면 API 서버에서 객체를 가져옵니다. 개체가 로컬 캐시에 있으면 즉시 반환됩니다. 그렇지 않은 경우 API 서버에 객체를 요청하고, 획득한 객체를 이후 사용을 위해 로컬 캐시에 저장합니다. r.업데이트():
r.Update()
함수는 로컬 캐시 및 API 서버의 개체를 업데이트합니다.
객체가 원래 검색된 이후 로컬 캐시에서 수정된 경우 API 서버에 대한 업데이트 작업이 "충돌" 오류와 함께 실패할 수 있습니다. 이는 캐시에 있는 개체의 버전이 API 서버의 버전과 일치하지 않을 때 발생합니다. 이는 다른 사람이 그 동안 개체를 수정했음을 나타냅니다.
이를 처리하는 전략이 있습니다 -
-
乐观并发控制(OCC):
- 이전 버전과 일치하도록 업데이트되었습니다. -
retry
-
위 내용은 k8s 연산자에서 golang 오류 '개체가 수정되었습니다'의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

InterfacesandPolymorphismingoEnhancecodereusabilitableandabledaysainability.

theinitfunctionorunsautomically weconitializepackages 및 seteptheenvironment.ituplopgortingupglobalvariables, andperformingone-timesetupstasksacrossanypackage

인터페이스 조합은 기능을 작고 집중된 인터페이스로 분류하여 GO 프로그래밍에서 복잡한 추상화를 구축합니다. 1) 독자, 작가 및 더 가까운 인터페이스를 정의하십시오. 2) 이러한 인터페이스를 결합하여 파일 및 네트워크 스트림과 같은 복잡한 유형을 만듭니다. 3) ProcessData 함수를 사용하여 이러한 결합 된 인터페이스를 처리하는 방법을 보여줍니다. 이 접근법은 코드 유연성, 테스트 가능성 및 재사용 성을 향상 시키지만 과도한 조각화 및 조합 복잡성을 피하기 위해주의를 기울여야합니다.

inittectionsingoareautomaticallyCalledBeforeMainForeChalledBectOnforTeForTupButcomewithChalleds

기사는 이동 중에지도를 통한 반복, 안전한 관행, 항목 수정 및 대규모지도에 대한 성능 고려 사항에 중점을 둡니다.

이 기사에서는 크기, 메모리 할당, 기능 통과 및 사용 시나리오에 중점을 둔 배열과 슬라이스의 차이점에 대해 설명합니다. 배열은 고정 크기, 스택-할당되며 슬라이스는 역동적이며 종종 힙 할당되며 유연합니다.

이 기사에서는 리터럴 사용, Make Function, 기존 배열 또는 슬라이스를 포함하여 GO에서 슬라이스를 작성하고 초기화하는 것에 대해 설명합니다. 또한 슬라이스 구문과 슬라이스 길이와 용량을 결정합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

WebStorm Mac 버전
유용한 JavaScript 개발 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구
