Table of Contents
Singleton 패턴 이해
Singleton 패턴은 단일 인스턴스에 클래스를 제한하는 창조적인 디자인 패턴으로 글로벌 액세스 포인트를 제공하면서. "Gang of Four"책에서 첫 번째 포화, 그것은 소프트웨어 시스템에 공유 리소스를 관리하기위한 코너스톤이되었다. 패턴은 구성 데이터가 의도적으로 글로벌이기 때문에 구성 관리에 특히 잘 적합하며 응용 프로그램의 모든 부분에서 일관성 유지해야합니다. 단일 인스턴스를 강제로 단일 인스턴스를 처리함으로써, Singleton 패턴은 무해한 행동과 행동을 거부 할 수있는 여러 가지 구성 구성 구성 구성 요소를 생성하는 것을 방지합니다.
단일톤의 주요 특성은 개인 구성 요소, 예를 검색하는 정적 방법, 그리고 concurrency의 주의적 취급을 포함한다. 단일 스레드 환경에서, 간단한 게으른 초기화 작품, 하지만 배포 및 멀티 스레드 시스템은 이중 검사 잠금, 정적 초기화기, 또는 자바의 또는 C#의 와 같은 언어 별 구성을 사용하여 더 강력한 메커니즘을 필요로한다. 이 기능은 특정 작업을 수행 할 수 있거나, 특정 작업을 수행 할 수 있습니다.
Distributed Systems의 구성 관리 역할
이 웹 사이트는 귀하가 웹 사이트를 탐색하는 동안 귀하의 경험을 향상시키기 위해 쿠키를 사용합니다. 이 쿠키들 중에서 필요에 따라 분류 된 쿠키는 웹 사이트의 기본적인 기능을 수행하는 데 필수적이므로 브라우저에 저장됩니다. 또한이 웹 사이트의 사용 방식을 분석하고 이해하는 데 도움이되는 제 3 자 쿠키를 사용합니다. 이 쿠키는 귀하의 동의하에 만 브라우저에 저장됩니다. 이러한 쿠키를 거부 할 수도 있습니다. 이러한 쿠키 중 일부를 선택 해제하면 검색 환경에 영향을 미칠 수 있습니다.
분산 구성의 도전
이 웹 사이트는 귀하가 웹 사이트를 탐색하는 동안 귀하의 경험을 향상시키기 위해 쿠키를 사용합니다. 이 쿠키들 중에서 필요에 따라 분류 된 쿠키는 웹 사이트의 기본적인 기능을 수행하는 데 필수적이므로 브라우저에 저장됩니다. 또한이 웹 사이트의 사용 방식을 분석하고 이해하는 데 도움이되는 제 3 자 쿠키를 사용합니다. 이 쿠키는 귀하의 동의하에 만 브라우저에 저장됩니다. 이러한 쿠키를 거부 할 수도 있습니다. 이러한 쿠키 중 일부를 선택 해제하면 검색 환경에 영향을 미칠 수 있습니다.
Singleton Pattern을 구성 관리에 적용
단일톤을 구성 관리하기 위해 일반적으로 강력한 소스 (파일, 데이터베이스 또는 외부 서비스와 같은)에서 구성을로드하는 클래스를 포함하고 메모리에 캐시합니다. 동일한 프로세스 내에서 모든 모듈 및 서비스는 정적 메소드를 호출하고, 모든 참조를 동일한 데이터를 보장합니다. 이 중앙화는 업데이트 단순화 될 때 단일톤 인스턴스만 새로워지고, 모든 소비자는 단일톤 메커니즘을 자동으로 새로운 가치를 얻을 수 있습니다.
객체 중심 언어에서, 구현은 종종 다음과 같습니다.
- Private constructor 을 통하여 직접적인 순간을 방지합니다.
- Static readonly Lazy<ConfigManager>] 필드 (C#에서) 또는 volatile static 인스턴스 더블 체크 잠금 (Java에서).
- Public static property 는 Single 인스턴스를 반환합니다.
- LoadConfiguration() 메소드는 첫 번째 액세스 중입니다.
Singleton의 실 안전
스레드 안전은 여러 스레드 또는 동기화 작업이 동시에 구성에 액세스 할 수 있기 때문에 중요합니다. 가장 간단한 스레드 안전 패턴은 CLR (Common Language Runtime) 또는 JVM 보증이 한 번만 실행되도록 정적 초기화하는 것입니다. 감소 된 잠금 오버 헤드와 함께 게으른 초기화의 경우, .NET의 클래스는 내장 스레드 안전 래퍼를 제공합니다. Java에서 단일 실화에 대한 안전은 안전에 대한 안전에 대한 신뢰성을 보장하는 것입니다. (보안의 안전은 안전에 대한 안전에 대한 안전은 안전에 대한 안전에 대한 안전에 대한 신뢰성을 보장합니다.)
고급 고려 사항 : 분산 된 싱글 톤 및 외부 상점
단일 애플리케이션 내에서 고전적인 통합 처리 단일 톤은 완벽하게 작동하지만 분산 시스템은 종종 일반적인 구성을 공유하기 위해 여러 프로세스 또는 서비스를 필요로합니다. 이러한 경우, 단일 톤 패턴은 노드의 접근을 조정하는 분산 단층에 확장 될 수 있습니다. 이것은 일반적으로 등, Consul, 또는 ZooKeeper와 같은 외부 구성 저장소를 사용하여 로컬 캐시와 결합됩니다. 로컬 인스턴스는 프로세스 당 단일 톤으로 작동하며 외부 저장소는 크로스 프로세스 일관성을 보장합니다. 리더 선거 알고리즘은 때때로 노드를 저장하는 데 사용됩니다.
Cloud-Native 구성 관리
쿠버네티스와 같은 현대 클라우드 기반 플랫폼은 ConfigMaps 및 Secrets를 통해 외부 구성 관리가 구현되었습니다. 그러나 애플리케이션 레벨 싱글톤은 이러한 값을 캐싱하고 유형의 검증된 인터페이스를 제공합니다. 예를 들어, .NET microservice는 Options pattern]를 Singleton-registered configuration snapshot으로 사용하여 를 사용하여 주기적으로 새로 고침하는 것이 특징입니다. 이 단일톤 등록 구성 스냅샷을 사용하여 단일톤 등록한 구성의 단일톤 등록식 통합 기능을 결합합니다.
신뢰할 수있는 소스에 외부 링크는 깊은 이해 할 수 있습니다 : [[FLT :0]] Singleton Pattern[FLT :1]]에 대한 위키 페디아 기사는 고체 개요를 제공합니다, 그러나 [[FLT :2]]Martin Fowler의 구성 서버의 토론[FLT :3]] 배포 된 컨텍스트에 정교한. 실제 구현 가이드의 경우, [FLT : 4] .NET[FLT : 5]]] 옵션에 구성에 마이크로 소프트 문서.
실제 사례 및 모범 사례
단일 시스템의 구성 관리자에 의존하는 많은 엔지니어링 시스템. 대규모 전자 상거래 플랫폼에서 단일 구성 서비스 (배출 된 키 값 저장소에 의해 백업)는 기능 플래그와 A / B 테스트 매개 변수를 제어하는 데 사용됩니다. 단일 톤 패턴은 클라이언트 라이브러리에 적용되어이 구성을로드하고 메모리에서 캐시합니다. 새로운 빌드가 배포되면 클라이언트 라이브러리는 중앙 서비스에서 캐시를 새로 고침하고 모든 서버 인스턴스를 보장하는 것은 단일 도구에 사용됩니다. 이 도구는 단일 도구와 같은 단일 도구로 사용됩니다. 단일 도구는 단일 도구로 단일 도구로 사용됩니다. 단일 시스템의 구성 도구는 단일 도구로 단일 도구로, 단일 도구로 단일 도구로 구성되어 있습니다.
Singleton Configuration Managers에 대한 모범 사례
- Validate configuration eagerly 를 시작으로 오류를 조기에 잡으려고 합니다. 지연된 실패는 catastrophic일 수 있습니다.
- ]Support 동적 재로드 재시작을 필요로 하지 않고; 외부 저장소에서 이벤트 구동 알림을 사용합니다.
- 구성에서 세분화한 비밀 관리자(예: HashiCorp Vault)를 사용하여 단일톤으로 환경변수 또는 보안 산을 통해 주입합니다.
- Log 구성 변경 감사성과 디버깅을 위한; 타임스탬프와 변경의 소스를 포함하여.
- ]은 단 하나톤을 정적 클래스보다는 싱글톤 수명을 사용하여 구성 저장소를 모방하여]]을 테스트합니다.
잠재적 인 Pitfalls 및 Them을 방지하는 방법
단일 톤 패턴은 종종 어려운 단위 테스트를 만드는 글로벌 상태를 소개하기 위해 비판됩니다. 파일 시스템 또는 네트워크에서 읽는 구성은 완전히 어려운 것을 막기 위해 어렵습니다. 이 문제를 시작하려면 의존성 변환과 같은 패턴을 채택하십시오. 인터페이스 을 정의하고 단일 톤 클래스로 구현하고 IoC 컨테이너를 단일 톤으로 등록하십시오. 테스트는 다음 모의 구현을 거부 할 수 있습니다. 또 다른 pitfall은 잠금 장치에서 실행되는 성능입니다. 이 스냅은 단일 톤 클래스를 사용하여 분리 할 수 없습니다. 이 스냅은 단일 톤으로 교체 할 수 없습니다.
마지막으로, 모든 공유 리소스에 대한 싱글 톤을 사용하는 유혹을 피하십시오. 패턴을 초과하면 구성 요소가 단단하게 결합 된 모놀리식 디자인에 이어질 수 있습니다. 구성과 같은 진정한 글로벌을위한 싱글 톤을 예약하십시오. 종종 변경하거나 범위 (예 : 사용자 또는 per-request), 공장 또는 프로토 타입과 같은 다른 패턴이 더 적합합니다.
관련 기사
단일톤 패턴은 분산 엔지니어링 시스템에서 일관된 구성 관리 보장을위한 강력한 도구입니다. 구성 데이터에 대한 액세스를 중앙화함으로써, 그것은 업데이트 단순화, 리소스 효율성을 촉진합니다. 그러나, 그것의 응용 프로그램은 분산 된 환경의 현실에 적응해야합니다 : 스레드 안전, 외부 구성 상점 및 테스트 가능성. 관리와 함께 구현할 때 immutable 스냅 샷, 의존성 주입 및 이벤트 구동 재로드 - 단일 톤 패턴은 클라우드 기반을 구축하고, 통합 및 통합을 위해 다양한 구성 요소와 함께 통합 할 수 있습니다. 이 시스템은 클라우드 기반을 구축하고, 통합 및 통합을 통해 다양한 아키텍처를 통합하고, 통합 할 수 있습니다.