728x90
728x90
resourceVersion 개념쿠버네티스는 최적화 된 Concurrency 를 달성하기 위해 resourcVersion 개념을 사용하며, 모든 쿠버네티스 리소스는 메타데이터에 resourceVersion 이라는 필드를 갖는다. 다시 말해, resourceVersion 은 클라이언트가 kubernetes 오브젝트가 변경된 시점을 확인하는 데 사용할 수 있는 내부 버전을 식별하는 문자열이다. 동작etcd 의 record 가 업데이트 될 때, 이전에 저장된 value 와 비교하여 크로스 체크를 하는데, 만약 매치되지 않은 value 일 경우 409 status code 를 반환하며, object 가 수정될 경우 API 서버에 의해 resourceVersion 이 변경된다. 만약 PUT 작업(리소스 변경 시)..
http.Servemux & http.HandleFunc ServeMux는 HTTP 요청 멀티플렉서이다. 여기서 멀티플렉서는 라우터, 컨트롤러랑 동일한 뜻을 갖고 있다고 보면 된다. 수신되는 각 요청의 URL 을 등록된 패턴과 비교하고, URL과 가장 일치하는 패턴의 핸들러를 호출한다. MVC 패턴의 Controller 역할이라고 보면 된다. 또한 ServeMux는 URL Request Path 와 Host Header 를 임의로 처리하는데, 포트 번호를 제거하거나 반복되는 슬래시가 포함된 요청을 동등하고 깔끔한 URL로 리다이렉션한다. 아래는 server.go 에 작성된 http 패키지 코드이다. // DefaultServeMux is the default ServeMux used by Serve. ..
Redis에서 데이터를 저장할 때 메모리가 부족할 경우 "eviction"이 발생할 수 있다.Eviction은 Redis가 메모리를 확보하기 위해 일부 데이터를 제거하는 프로세스를 의미하고, 일반적으로 이러한 eviction은 다음과 같은 이유로 발생할 수 있다..메모리 한계 도달: Redis는 메모리가 가득 차면 eviction 정책을 트리거하여 데이터를 삭제한다. 이때 Redis는 설정된 eviction 정책에 따라 어떤 데이터를 삭제할지 결정한다.maxmemory 설정: Redis에서는 메모리 사용량을 제한하는 maxmemory 옵션이 있고, 이 옵션을 설정하면 Redis는 설정된 한계에 도달했을 때 eviction을 수행하여 메모리 사용량을 제한한다.expire 설정: 데이터가 만료되면(설정된 T..
jvm heap memory java -XX:InitialRAMPercentage=60.0 -XX:MaxRAMPercentage=60.0 -jar myapp.jar java heapsize 를 할당받은 메모리의 60% 로 설정 java -XX:+PrintFlagsFinal -version | grep HeapSize 리눅스에서 자바 max 힙사이즈 크기 확인 자바 애플리케이션의 최대 힙 메모리 크기를 퍼센테이지로 가져갈 때 몇 퍼센트를 가져가는 것이 좋은지 여부는 애플리케이션의 특성에 따라 다릅니다. 일반적으로 애플리케이션이 사용하는 메모리 크기의 60~70%를 최대 힙 메모리 크기로 설정하는 것이 좋다. 이렇게 하면 애플리케이션이 충분한 메모리를 사용할 수 있으면서도 메모리 부족 오류가 발생할 가능성을..
SGP VPC CNI 는 노드(instance)의 ENI 와 연결된 보안 그룹을 사용한다. 즉, Node 에 띄워지는 모든 Pod 들은 Node 의 보안 그룹을 사용하게 된다. 이 말은 Node 보안 그룹을 Pod 가 사용하기 때문에 불필요한 리소스에 접근을 할 수 있게 된다. 그러나 Security Group for Pods 를 사용하면 개별 Pod 에 Security Group 을 사용할 수 있게 된다. VPC CNI 에서 ENABLE_POD_ENI=true 를 설정하면 vpc cni 애드온이 각 클러스터의 노드에 vpc.amazonaws.com/has-trunk-attached=true Lable 을 추가한다. “aws-k8s-trunk-eni” 라는 trunk interface 를 생성하여 노드에..
redis redis, memcached network exceeded 가 발생할 경우 latency 가 밀린다. worker 가 일을 다하고 있어서, 과부하 상태가 된다.(php의 경우 fpm 을 max 까지 사용) redis memory 가 꽉 찼을 경우 어떤 일이 발생? eviction 발생 ⇒ 키가 버려짐(LRU 방식) swap memory 를 많이 사용하게 됨(why? 사용 가능한 메모리가 적기 때문) 어떤 키를 제거할까? ⇒ get cmd 를 오랫동안 하지 않는 key, set cmd 한지 오래된 key?, ttl, key expire 등… 전략은 다양하다.