Open janeljs opened 6 months ago
1. Cassandra
2. 왜 많은 쓰기 연산에 유리?
3. 왜 많은 데이터 보관에 유리?
AWS에서도 Application Load Balancer를 사용하면, 해당 컨테이너를 draining / unused 상태로 변경한 뒤 타겟 그룹에서 제외한다. 그 후 해당 컨테이너에 필요한 시그널(TERM & KILL)을 보낸다. 만약 컨테이너에 시그널에 따른 핸들링이 설정되어 있으면 그에 따른 작업을 수행할 것!
import sun.misc.Signal;
import sun.misc.SignalHandler;
public class ExampleSignalHandler {
public static void main(String... args) throws InterruptedException {
final long start = System.nanoTime();
Signal.handle(new Signal("TERM"), new SignalHandler() {
public void handle(Signal sig) {
System.out.format("\nProgram execution took %f seconds\n", (System.nanoTime() - start) / 1e9f);
System.exit(0);
}
});
int counter = 0;
while(true) {
System.out.println(counter++);
Thread.sleep(500);
}
}
}
우리 팀 코드에도 SIGNAL을 핸들링하는 코드가 있는데... n2c에서 이를 사용할 때 주의할 점은 무엇일까?
1. 알고 갈 것 - k8s Container Lifecycle Hook
팟의 종료와 관련해서 PreStop
이라는 라이프사이클 훅이 존재한다.
terminationGracePeriodSeconds의
의 카운트는 훅이 실행되기 전에 시작되어, 핸들러의 결과에 상관없이 컨테이너가 파드의 그레이스 종료 기간 내에 결국 종료되도록 한다.파드의 종료 문서 참고하면 더 자세한 프로세스 나옴!!
2. n2c yobi 4719번 포스트
Terminating
에 들어가면 service endpoint에서 제외되기 때문에 추가적인 트래픽은 들어가지 않습니다.terminationGracePeriodSeconds
의 값(기본 값 30초)이 preStop에 걸리는 시간 + SIGTERM을 처리하는 시간보다 길어야 합니다.3. n2c yobi 11910번 포스트 n2c 에서는 cpu/memory 사용량이 매우 높은 노드의 부하를 낮추기 위해 부하 높은 노드의 pod 을 다른 노드로 이전하는 작업을 백그라운드로 실행하고 있고, 그 과정에서 pod 이 재시작될 수 있다.
SIGKILL
로 강제 종료SIGTERM
없이 SIGKILL
만 전달된다.왜 저 상황에서 카산드라가 유리한지 궁금했는데 한비형이 이미 너무 잘 정리해줬다 👍👍
모든 사용자에게 채널을 하나씩 부여해서 서버를 사용하고, 설계를 단순화하는게 감명 깊엇다.
임의 사용자를 지오 해시를 이용해서 다루는 방법에 대해서는 이해를 함 그럼 기존 설계 + 임의 사용자 추천도 추가된다면 기존 해시링을 이용한 펍/섭 채널과 지오해시에 따른 펍/섭 채널을 두 대 이용하는 것...? 혹은 지오해시에 따른 펍/섭 채널에서 기존 해시링 이용한 펍/섭 채널처럼 구독(친구) 관계도 다 처리하고 + 임의 사용자까지 처리하는 것...? 후자가 맞겠죠...?
오버 프로비저닝(over provisioning)
얼랭 (erlang)
지선
p.41
p. 44
p.47, p. 62-63
p.48, p.57
p. 60