본문 바로가기

분류 전체보기

고가용성 페어 (바이너리 스타 패턴) 바이너리 스타 패턴은 Primary 백업에 대응하는 2개의 서버를 이용하여 신뢰성을 높입니다. 어떤 시점에서는 한 개의 서버 (Active)가 클라이언트로부터의 접속을 입력 받으며, 또 한편(비 Active)은 아무것도 하지 않습니다. 하지만 이 2개의 서버는 서로 감시하고 있습니다. 네트워크 상에서 Active서버가 접근할 수 없게 되면 곧바로 비 Active서버가 Active 서버의 역활을 이어 받습니다. 바이너리 스타 패턴은 다음과 같이 설계되어 있습니다. 단순한 고가용성 솔루션을 제공한다 간단히 이해할 수 있어서 쉽게 사용할 수 있을 것. 필요한 경우에만 Fail-Over한다 바이너리 스타 패턴에서는 이하의 패턴으로 Fail-Over가 발생합니다. Primary 서버에 치명적인 문제 (폭발, 화재.. 더보기
Volume과 PersistentVolume과 PersistentVolumeClaim의 차이 PersistentVolumeClaim 리소스는 영속화 영역을 이용하기 위한 리소스입니다. Config&Storage 리소스의 한 종류인 PersistentVolumeClaim을 설명하기 전에 Volume과 PersistentVolume, PersistentVolumeClaim의 차이를 이해 할 필요가 있습니다. Volume은 미리 준비된 이용가능한 볼륨 (호스트의 영역/NFS/iSCSI/Ceph) 등을 매니페스트로 직접 지정하여 이용가능하게 하는 것입니다. 때문에 이용자가 Kubernetes 상에서 신규로 볼륨을 작성한다거나, 기존의 볼륨을 제거한다거나 하는 조작을 실행할 수 없습니다. 또한 매니패스트에서 Volume 리소스를 작성한다거나 하는 처리도 실행할 수 없습니다. 그래서 PersistentVo.. 더보기
2. Namespace 에 의한 가상 클러스터의 분리 Kubernetes에는 Namespace라고 불리는 가상적인 Kubernetes 클러스터 분리기능이 있습니다. 완전한 분리 레벨은 아니기 때문에 사용처는 한계가 있지만, 1개의 Kubernetes 클러스터를 여러 팀에서 사용한다거나, 프로덕션 환경 / 스테이징 환경 / 개발 환경 등과 같이 환경 마다 분할한다거나 할 수 있습니다. 초기 상태에서는 하기의 3개의 Namespace가 작성되어 있습니다. kube-SystemKubernetes 클러스터의 컴포넌트와 애드온이 디플로이된 Namespacekube-public모든 유저가 이용할 수 있는 ConfigMap 등을 배치하는 Namespacedefault기본 Namespace kube-system은 관습적으로 Kubernetes Dashboard라고 하는 .. 더보기
1. 쿠버네티스와 리소스 쿠버네티스에서는 「리소스」를 등록하는 것으로 컨테이너의 실행과 로드밸런서의 작성을 비동기로 실행됩니다. 쿠버네티스가 취급하는 리소스의 종류는 여러가지가 있으며, 하기의 표에서 API Reference가 공개되어 있습니다. 또한 리소스는 크게 나누어 다음의 5종류가 있습니다. 종류 개요 Workloads 리소스 컨테이너의 실행에 관한 리소스 Discovery & Load Balance 리소스 컨테이너를 외부에 노출하기 위한 엔드 포인트를 제공하는 리소스 Config & Storage 리소스 설정 / 기밀정보 / Persistent Volume 등에 관한 리소스 Cluster 리소스 보안 및 쿼타(Quota) 등에 관한 리소스 Metadata 리소스 클러스터 내의 다른 리소스를 조작하기 위한 리소스 이 가운.. 더보기
클라이언트 라이브러리: C Binding 바인딩Zookeeper 클라이언트 라이브러리는 Java와 C, 두 가지의 언어를 공식 지원한다. C 바인딩C 바인딩에는 싱글 쓰레드와 멀티 쓰레드의 라이브러리가 있습니다. 이 중 가장 사용하기 쉬운 것은 멀티 쓰레드 라이브러리이며, Java API와 거의 비슷합니다. 멀티 쓰레드 라이브러리는 IO 쓰레드와 이벤트 디스패치 쓰레드를 생성하여 접속의 유지와 콜백을 처리합니다. 싱글 쓰레드 라이브러리에서는 멀티 쓰레드 라이브러리에서 사용하는 이벤트 루프를 공개하는 것으로 ZooKeeper를 이벤트 구동 어플리케이션으로 사용할 수 있습니다. 패키지에는 zookeeper_st와 zookeeper_mt, 두 개의 공유 라이브러리가 포함되어 있습니다. 전자는 어플리케이션의 이벤트 루프에 짜넣기 위한 비동기 API와 .. 더보기
타입 추론(Deducing Types) 1부 본 글은 O'Reilly 사의 "Effective Modern C++"의 샘플 문서를 번역한 내용입니다. 샘플문서는 공식 홈페이지에서 다운로드 받을 수 있으며, 법적인 문제가 발생할 경우 이 글은 언제든지 사라질 수 있습니다. C++ 98의 타입 추론 규칙은 한 종류밖에 없었습니다. 바로 함수 템플릿 입니다. C++ 11 에서는 이 규칙에 약간의 변경을 더해 auto 에 의한 추론규칙, decltype 에 의한 추론 규칙, 이 두가지를 추가했습니다. 나아가 C++ 14에서는 auto와 decltype의 적용가능한 범위를 확장했습니다. 타입을 추론할 수 있는 범위가 증가하면서 명백하거나, 또는 이미 언급된 타입들을 한 문자씩 정확히 입력해야 하는 고충으로부터 프로그래머를 해방할 수 있습니다. 소스 코드의 .. 더보기
1. 57개의 CDP(Cloud Design Pattern) 일반적으로 클라우드에서 사용되는 패턴은 다음과 같이 9개의 카테고리에서 57개의 패턴으로 나눌 수 있다. 기본 패턴Snapshot, Stamp, Scale Up, Scale Out, Ondemand Disk가용성 향상 패턴Multi-Server, Multi-Datacenter, Floating IP, Deep Health Check, Routing-Based HA동적 컨텐츠의 처리 패턴Clone Server, NFS Sharing, NFS Replica, State Sharing, URL Rewriting, Rewrite Proxy, Cache Proxy, Scheduled Scale Out, IP Pooling정적 컨텐츠의 처리 패턴Web Storage, Direct Hosting, Private Di.. 더보기
Threading in C# 4.락 (Lock) M본 글은 Threading in C# - Getting Started 의 내용을 번역한 내용입니다.4. 락 (Lock) 개요독점 락은 어떤 코드 블럭에 대해 항상 하나의 쓰레드만이 실행될 것을 보장하기 위해 사용됩니다. 가장 주요한 독점 락으로서는 Lock과 Mutex가 있습니다. 이 두 개 중에서는 Lock쪽이 가장 빠르게 사용할 수 있으며 간단합니다. 하지만 Mutex는 다른 프로세서에서 동작하는 어플리케이션 간에 독점 락을 거는 것이 가능합니다. 이 장에서는 우선 Lock의 사용 방법부터 시작해서 그 후에 Mutex와 Semaphores(비독점 락)에 대해서 설명합니다. 나중에 reader/writer locks에 대해서 설명합니다. .NET 4.0부터는 상당히 높은 고부하적인 병렬처리 상태에서의.. 더보기
Threading in C# 3.동기화 처리의 기초 본 글은 Threading in C# - Getting Started 의 내용을 번역한 내용입니다.3. 동기화 처리의 기초 동기처리지금까지 Task를 사용하여 쓰레드를 기동하는 방법과 메인 쓰레드와 백그라운드 쓰레드 간에 데이터를 주고 받는 방법을 설명했었습니다. 또한 지역 변수가 어떻게 쓰레드 마다 분리되어 있는지, 또한 참조형이 어떻게 해서 쓰레드 간에 공유되는 지도 설명했으며, 공유된 변수에 대해서의 처리도 설명했었습니다. 다음은 동기에 대해서 설명합니다. 동기를 사용하면 복수의 쓰레드로부터의 조작을 조절하여 예측 가능한 결과를 도출하는 것이 가능합니다. 동기 처리는 공유된 같은 데이터에 관해 복수의 쓰레드로부터 접근할 경우에 특히 중요합니다. 동기를 사용한다고 한다면 이러한 문제에 대해서 상당히 .. 더보기
Threading in C# 2.쓰레드의 개념(2) 본 글은 Threading in C# - Getting Started 의 내용을 번역한 내용입니다.지난 번 쓰레드의 개념 (1)에 이어 설명합니다. 2. 쓰레드의 개념(2) 쓰레드의 우선 순위쓰레드의 우선 순위에 따라 쓰레드가 다른 쓰레드와 비교해서 상대적으로 얼마나 CPU 시간을 취득할 것인지를 결정합니다. 쓰레드 우선 순위에는 아래의 값 중 하나를 지정합니다. enum ThreadPriority { Lowest, BelowNormal, Normal, AboveNormal, Highest } 이 값은 복수의 쓰레드가 동시에 실행되고 있는 경우에만 의미를 갖습니다. 쓰레드의 우선 순위를 변경하는 것에는 신중해야 합니다. 우선 순위의 변경에 의해 다른 쓰레드의 동작에 악영향을 미칠 가능성이 있습니다. 쓰레.. 더보기