2022-12-27

Sean Kim·2023년 1월 3일
0

TIL

목록 보기
1/17

유닉스 도메인 소켓

Go 언어를 활용한 네트워크 프로그래밍 책을 보고 배움

  • 동일한 네트워크 노드 내에서 각기 다른 서비스들이 통신할 수 있도록 함
  • 예를들어 하나의 시스템 환경에서 API 서버와 데이터베이스 어플리케이션을 동시에 구동시킬 때, API에서 통신 대상 경로를 localhost:3306으로 지정하는 경우도 있지만, 유닉스 도메인 소켓을 통해 통신할 수 도 있음.
  • 네트워크 소켓는 IP 주소와 포트 번호로 목적지를 결정하지만, 유닉스 도메인 소켓은 파일 시스템을 이용하여 패킷의 목적지 주소를 결정. 즉 ==파일시스템 내의 특정 파일이 네트워크 소켓의 IP와 포트번호가 하는 역할을 대신 하는 것==
  • 네트워크 스택을 지나지 않기 때문에, 트래픽 라우팅에 대한 오버헤드가 존재하지 않아 효율적 (유닉스 도메인 소켓은 OSI Layer 를 지나지 않음)
  • 패킷 파편화나 패킷 순서를 걱정할 필요가 없음 (OSI Layer를 지나지 않으니)
  • 당연히 노드간 통신에는 사용할 수 없다.

사용

  • 파일의 소유권을 가지고 있어야 함
    chown seankim /path/to/socket/file
  • 660권한 부여해야함
    chmod 660 /path/to/socket/file

소켓 타입

타입설명
스트리밍소켓TCP 처럼 동작
데이터그램 소켓UDP 처럼 동작
시퀀스 패킷 소켓두개 합친느낌

예시 (소켓으로 로컬환경의 db와 통신)

func main() {  
	db, err := sql.Open("mysql", "username:password@unix(/path/to/socket)/database") 
	if err != nil { 
		panic(err) 
	} 
	defer db.Close() 
	
	var count int 
	err = db.QueryRow("SELECT COUNT(*) FROM users").Scan(&count) 
	if err != nil { 
		panic(err) 
	} 
	
	fmt.Println("Number of users:", count) 
}

만약 내가 분산 키값 저장소를 설계한다면..

가상면접 사례로 배우는 대규모 시스템 설계 기초 책을 보고 배움

  • Consistency (일관성)
    어떤 노드에 접속했느냐에 관계없이 언제나 같은 데이터를 보게 되어야 함
  • Availability (가용성)
    일부 노드에 장애가 발생하더라도 응답을 받을 수 있어야 함
  • Partition Tolerance theorem (파티션 감내)
    파티션이 생기더라도 시스템은 계속 동작해야함
    (파티션: 두 노드 사이에 발생한 통신장애)

  • 이상적 상태는 C, A, P 모두 충족된 상태
  • 하지만 현실적으로 3가지 다 충족시키기 어려움. 네트워크는 불안정하기 때문에 파티션이 생길 수 밖에 없기 때문
  • 가용성을 살리려면 일관성이 저해되고, 일관성을 살리려면 가용성이 저해될 수 밖에...
    - 은행권에서는 일관성이 중요하기 때문에 차라리 파티션이 생기면 가용성을 포기한다.
profile
이것저것 해보고있습니다.

0개의 댓글