2021. 6. 20. 22:15 용어 관련

DeadLock, Live Lock

반응형

동기화 기법과 관련하여 Thread가 Lock이 걸리는 경우는 두가지가 존재한다.

 

Dead lock과 Live lock 두가지이다.

 

Dead lock [ Process 간에도 발생 가능. ]

 - Thread A가 A Resource를 획득 후 Thread B가 B Resource 를 획득.

 - 그 후 Thread A가 B Resource를 요청

 - 그 후 Thread B가 B Resource 해제를 하기전에 A Resource를 요청

 - 서로 물고 물리는 광계가 되며 Thread A, B 모두 Resource를 얻지 못한다.

 - 두 Thread가 Lock 경쟁을 하므로 다음 작업 진행 불가.

 

Live lock [ Process 간에도 발생 가능. ]

 -Thread A가 Resource A를 획득

 - Thread A가 Resource A를 획득한 후 시간이 오래걸리는 작업을 진행

 - 혹은 Thread A가 작업 종료 시 Resource A를 반환하지 않은 경우

 - Thread B가 Resource A에 대하여 요청을 한 후 계속 대기하는 경우가 발생한다.

 

Dead lock 방지

 - Resource의 할당과 해제순서를 잘 지킨다.

 - 주기적으로 Deadlock 상태를 확인한다.

 

Live lock 방지

 - Resource  점유에 대한 시간 제한을 둔다.

 - 가능한 임계영역을 작게 구성한다.

반응형

'용어 관련' 카테고리의 다른 글

Process에 대해서  (0) 2023.12.13
proxy server , reverse proxy server  (0) 2021.07.18
Zero Trust Model  (0) 2021.07.18
SPOF란  (0) 2021.06.20
데드 레커닝[Dead reckoning] 이란?  (0) 2019.08.30
Posted by Sweetmeats_boy
반응형

Process란 운영체제로부터 자원을 할당받은 작업의 단위이다.

 

Thread는 Process의 자원을 이용하는 실행 흐름의 단위이다.

 

CPU 역시 Thread 단위로 점유하며 한개의 Process안에 여러개의 Thread가 존재 할 수 있다.

 

같은 Process에 속한 Thread들은 Process의 code, data, heap영역을 공유하며

 

이로 인해 context switching 시 다른 process의 thread가 cpu를 점유할때에 비하여

 

같은 Process에 속한 Thread가 CPU를 점유 시 레지스터에 복사하는 비용이 적어 더 효율적이다.

 

각각의 Thread는 고유의 Stack 영역을 지닌다.

 

이러한 특징 때문에 Process에 속한 특정 Thread가 code, data, heap 영역에서 문제를 발생시킬 경우

 

관련 Thread들이 모두 영향을 받는다.

반응형

'Server' 카테고리의 다른 글

Convoying 이란?  (0) 2021.06.25
Lock Free 알고리즘에 대하여  (0) 2021.06.25
동기화 기법들  (0) 2021.06.20
Socket 처리 방법들 : IOCP와 ASIO 방식 등등  (0) 2021.06.20
서버 Socket 설정하는 방법들  (0) 2019.09.06
Posted by Sweetmeats_boy

2021. 6. 20. 21:57 Server

동기화 기법들

반응형

Server Programmer 들에게 동기화란 매우 민감하며 중요한 주제이다.

 

동기화 기법이란 Thread들에게 특정 Resource에 대한 접근 권한을 주는 기법이다.

 

각각의 동기화 기법들의 종류, 간단한 설명을 알아보자.

 

Lock 

 - 가장 기본적인 동기화 기법이며 critical section을 활용하여 동기화를 한다.

 

Mutex

 - 단 하나의 Thread 접근을 허용한다. [모든 프로세서에서 접근 가능.]

 - 이름을 지정하여 여러 Process가 접근 가능.

 

Shemaphore

 - 지정된 갯수만큼의 Thread 접근을 허가한다. [갯수 지정가능한 Mutex 느낌]

 -> 임계영역에 진입 시 lock, 임계영역 탈출 후 unlock을 하여 접근횟수를 관리한다.

 - Mutex처럼 이름을 통해 접근이 가능.

 

Event

 - 신호, 비신호 두 가지의 상태가 가능하다. [Manual mode, Auto reset mode]

 - 임계영역 탈출 시 자동으로 비신호상태로 바꿔주는 Auto Reset 여부를 설정이 가능하다.

 - 임계영역 진입 시 Non signaled 상태에서 signaled 상태로 변경한다.

 - 타 Thread 들은 signaled 상태인 event에 접근 시 대기한다.

 - Auto Reset Event 가 아닌 경우 임계 영역을 탈출 한 후 Signal 상태로 계속 존재한다.

  -> ResetEvent를 통해서 Non signaled 상태로 변경해줘야함.

 - 보통 Event의 경우 Thread간의 실행순서를 지켜야 하는 경우 많이 사용한다.

 

Atomic

 - 특정 int형 변수에 대한 접근을 제한하는 기법

 - Interlock을 통해서 Increase, Decrease, Compare 가 일반적으 로 사용된다.

 

반응형
Posted by Sweetmeats_boy

2021. 6. 20. 21:36 용어 관련

SPOF란

반응형

Single point of failure의 약자.

 

여러 요소 중 특정 system이 공장난 경우 전체 시스템이 멈춰버리는 경우를 의미

 

. Mobile Game의 경우 Mapping DB가 고장나 User의 계정 정보를 찾지 못하는 경우

. App 구동 시 version 확인을 못하여 Game 실행이 안되는 경우.

. Game Logic 중 무한 포문 혹은 dead lock에 걸리는 경우.

반응형

'용어 관련' 카테고리의 다른 글

Process에 대해서  (0) 2023.12.13
proxy server , reverse proxy server  (0) 2021.07.18
Zero Trust Model  (0) 2021.07.18
DeadLock, Live Lock  (0) 2021.06.20
데드 레커닝[Dead reckoning] 이란?  (0) 2019.08.30
Posted by Sweetmeats_boy
반응형

Winsock 관련하여 Socket을 처리하는 방법들을 여러가지가 있다. 

그중 대표적인 몆가지 방법들에 대해서 개념적으로 알아보자.

 

우선 소켓의 처리방식은 Proactor / Reactor 방식으로 구분된다.

. Proactor : 이벤트가 발생 시 특정 함수를 호출하는 방식

 -> 밑의 ASIO, IOCP 방식이 해당

. Reactor : loop를 돌면서 이벤트가 발생했는지 일일히 확인하는 방식

 -> Select , epoll 방식

 

 

Select 방식

. SingleThread 기반의 다중 I/O 처리 방법

. 송신, 수신, 예외 이벤트가 발생한 소켓들을 관리하는 3가지의 "Set"으로 구분한다.

. 각각의 Set을 매 순간 확인하여 해당 이벤트가 발생한 소켓을 목록으로 얻어온다.

. 소켓목록을 순회하며 송신, 수신, 예외에 따른 처리를 수행한다.

. 단, 최대 관리할 수 있는 소켓의 갯수는 1024개로 제한된다.

 

epoll 방식

. Select 방식의 단점을 보완한 리눅스에서 사용이 가능한 I/O 방식

. Select와 같은 동기형 통지방식을 따르며 FD_SET을 운영체제가 직접 관리한다.

. non blocking, blocking을 설정이 가능하다.

 

IOCP 방식

. c++ 게임 서버 개발자라면 필히 공부해야 하는 것.

. In/Out Completion  Port의 약자

. 기본적으로 Overlapped I/O Callback 방식을 따른다.

. IOCP 내부의 Thread Pool을 사용하여 소켓의 송수신을 관리한다.

. 따라서 적은 수의 Thread 로 소켓관리가 가능하며, 별도의 Thread 생성, 제거를 할 필요가 없음.

 -> Callback 함수들을 해당 Thread들을 통해 호출한다.

 . 주의할 점으론 I/O가 완료된 Overllaped 구조체에 접근해야 한다는 것이다.

 -> I/O 가 미완료된 Handle에 접근하면 안됨.

 

ASIO 방식

. Boost lib에 존재하는 방식.

. 아마도 C++ 20에 들어갈 예정이라고 한다...

. Asynchronous IO의 약자.

반응형

'Server' 카테고리의 다른 글

Process와 Thread의 차이점  (0) 2021.06.20
동기화 기법들  (0) 2021.06.20
서버 Socket 설정하는 방법들  (0) 2019.09.06
게임 서버에서의 Log 구성  (0) 2019.09.04
게임 서버에서의 Log의 분류  (0) 2019.09.04
Posted by Sweetmeats_boy
반응형

간단하게 OSI 7계층과 TCP/IP 4계층에 대해서 알아보자.

 

7계층 : 물 - 데 - 네 - 전 - 세 - 표 - 어 

위처럼 외우면 편하다.

 

물리계층

 - 전기 신호를 아날로그 신호로 변경한 후 전송, 수신한 아날로그 신호를 전기 신호로 변환.

 

데이터 링크 계층

 - MAC주소

 - Frame 단위로 전송하며 header/payload 로 구성된다.

 - EtherNet을 통한 LAN 구성

 

네트워크 계층

 - WAN 구성.

 - IP주소로 구분, IPv4, IPv6로 나뉨

 - 라우터를 통한 패킷 전달.

 - host 간의 논리적 통신 담당.

 

전송계층 

 - TCP/IP Protocol

 - Application간의 논리적 통신을 담당.

 

세션 계층

 - 사용자 위주의 논리적인 연결 서비스 제공

 

어플리케이션 계층

 - 최상위 계층으로 사용자의 응용 서비스가 돌아간다.

 - SMTP, FTP 등등 

 

원론적으로는 위의 7계층이지만 때에 따라 4계층으로 구분하기도 한다.

TCP/IP 4계층의 경우 OSI 참조 모델을 상업적이고 실무적으로 이용할 수 있게 단순화 한 모델이다.

. 네 - 인 - 전 - 어

 

네트워크 계층

 - 실제 Data인 Frame 전송을 담당.

 - EtherNet 구축

 

인터넷 계층

 - Data 전송을 위한 논리적인 주소 및 경로 지정하며 Packet 전송을 담당

 - IP, ARP 등

 

전송계층

 - host간의 자료를 송,수신하며, Segment 전송을 담당

 - TCP/UDP와 port번호를 관리

 

어플리케이션 계층

 - Application간의 data 송수신을 담당

 - P2P, FTP, SMTP, DNS 등등

 

 

7계층과 4계층의 대응관계

. 물리계층 + 데이터 전송계층 => 네트워크 계층

. 네트워크 계층 => 인터넷 계층

. 전송 계층 => 전송계층

. 세션 계층 + 표현계층 + 어플리케이션 계층 => 어플리케이션 계층

반응형

'Network' 카테고리의 다른 글

Proxy Server 에 대하여  (0) 2021.07.18
HTTP Protocol  (0) 2021.06.20
load balancing  (0) 2020.08.27
OSI 7계층와 TCP/IP 4 계층  (0) 2020.08.27
Thrift에 대해서 [C# 한정]  (0) 2020.01.10
Posted by Sweetmeats_boy

2020. 10. 14. 22:30 DevOps

Docker 간단 명령어들.

반응형

우선 Docker는 docker 를 명령어 맨 앞에 붙인 후 입력 해야한다.

 -> 밑의 명령어들은 모두 docker 명령어 라고 가정.

 

search

 . Docker Hub를 통해서 이미지를 검색 시 사용

 -> ex : docker search ubuntu [리눅스 에서는 앞에 sudo를 붙여야 하는 듯?]

 

pull

 . Git과 유사하게 특정 Image를 다운받아 적용할 때 사용

 -> docker pull 이미지명:태그명 

 -> ex : docker pull ubuntu:latest

 -> docker pull 유저명/이미지명:태그로 특정 유저가 올린 이미지를 받을 수 있음.

 

image

 . 현재 받은 image들의 목록을 보여준다. 특정 이미지명으로 filtering이 가능

 . ex : docker image 또는 docker image 이미지명

 

run

 . docker image를 실행하여 container를 만들고 바로 실행한다.

 -> docker image 옵션 컨테이너명 실행할 이미지명 실행할 파일

 -> ex : docker image -i -t --name hello ubuntu /bin/bash

    -> ubuntu 이미지를 사용한 hello라는 이름의 container의 만든 후 /bin/bash 파일을 실행한다

 

create

 . docker image를 기반으로 컨테이너를 만든다.

 -> ex : docker create 옵션 이미지명:태그명

 

ps 

 . docker ps 옵션

 -> 모든 컨테이너의 목록을 출력한다.

 -> 옵션에 -a를 주면 정지된 컨테이너까지 조회한다.

 

start

 . 정지되어 있던 해당 컨테이너를 시작한다.

 -> ex : docker start 컨테이너명

 

stop 

 . 컨테이너를 정지한다.

 -> ex : docker stop 컨테이너명[혹은 컨테이너 id]

 

restart

 . docker restart 컨테이너명

 -> 특정 컨테이너를 재시작한다.

 

rename

 . 컨테이너의 이름을 변경한다.

 -> ex : docker rename 컨테이너명 새로운 이름

 

rm

 . 컨테이너를 제거한다.

 -> ex : docker rm 옵션 컨테이너명

 -> 만약 해당 컨테이너가 실행중이라면 종료 후 삭제해야함. 혹은 옵션으로 -f를 적용

 

rmi

 . 이미지를 삭제한다.

 -> ex : docker rmi 옵션 이미지명

 -> 옵션으로 -f 적용 시 컨테이너도 강제 삭제된다.

 

diff

 . 

 -> ex : docker diff 컨테이너명

 

-v

 . docker 의 버전을 확인

 -> ex : docker -v

 

참고

 . service docker restart : Docker 서비스를 재시작.

반응형

'DevOps' 카테고리의 다른 글

Docker에 대해서  (0) 2020.10.14
가상화의 종류와 각각의 특징  (0) 2020.10.14
Posted by Sweetmeats_boy

2020. 10. 14. 21:58 DevOps

Docker에 대해서

반응형

 

Docker에 대해서

 . 컨테이너형 가상화기술 기반의 오픈소스 가상화 플랫폼이다.

 . Docker는 반가상화 보다 좀 더 경량화 된 방식이다.

 . 하드웨어를 가상화하는 계층이 없기 때문에 메모리 접근, 파일시스템, 네트워크 속도가 가상머신보다 월등히 빠르다.

 . 마치 Git에서 관리하는 것과 같이 Docker Image를 관리한다.

 . Docker 자체는 특정 파일  실행 또는 스크립트를 위한 실행 환경을 의미한다.

 -> Docker Container : Docker Image를 실행한 상태 [작동중인 가상환경을 의미하는 듯?]

docker

 

Docker의 장점

 . 쉽고 빠른 실행환경 구축이 가능하다.

 -> 초기 개발환경을 이미지로 만든 후 활용

 . 가볍고 실행속도가 빠르다.

 -> 컨테이너는 일반 가상화보다 memory, storage 소모가 적다.

 . Docker Hub를 통해 검증된 Docker Image가 공유된다. 

 

Docker의 단점

 . Docker 개발 초기 오베헤드가 많을 수 있다

 -> 초반 환경 설정 시 시행착오를 겪거나 등등

 . 리눅스 편향적이다

 -> 제대로 활용하기 위해서는 linux 기반 OS에서 사용하는 것이 좋다.

 

Docker Base Image란?

 . Docker image 중 리눅스의 UserLand만 설치된 파일

 -> UserLand란 OS의 커널과 유저 영역중 유저영역에서 실행되는 프로그램 혹은 라이브러리를 의미한다.

 -> ex : nginx, Redis 등등이 포함된 이미지

 

Docker의 이미지 관리 방식

 . Docker는 Base Image 에서 변경된 점들을 기억한 후 실행시에 Base Image와 합쳐서 실행한다.

 . Image의 구별을 위한 ID는 16진수로 표기한다.

 

Docker의 이미지 구조

 . Docker는 바뀐부분만 생성한 뒤 부모 이미지를 계속 참고하는 방식으로 작동하는데 이 방식을 레이어라고 한다.

 

 

Union mount 

 . Docker의 이미지는 읽기전용이며 내용이 변경 될 시 쓰기 이미지를 생성한 뒤 내용을 기록하는 방식

 . 즉 복수의 파일을 하나의 파일 시스템으로 마운트 하는 기능.

 -> 두 파일 시스템에서 동일파일이 존재 시 최근 갱신된 내용을 적용한다.

 . Copy on Write 원칙대로 수행하기 때문에 원본은 유지된다.

 -> Copy on Write : 내용을 쓰기 전에 원본을 복사해두는 방식 

 

 

Union file system

 . Union mount를 지원하는 파일 시스템

 

 

 

반응형

'DevOps' 카테고리의 다른 글

Docker 간단 명령어들.  (0) 2020.10.14
가상화의 종류와 각각의 특징  (0) 2020.10.14
Posted by Sweetmeats_boy
반응형

우선 가상화란 무엇인가?

가상화란 host 컴퓨터에서 여러개의 os를 가동 시킬 수 있게 도와주는 소프트웨어 아키텍쳐로서

하드웨어의 기능을 에뮬레이팅하여 추상화 된 여러개의 게스트 os를 가동할 수 있는 기술을 의미한다.

 

가상화 기술의 장단점

 . 장점 : 시스템의 확장성 및 유연성 향상, 물리적인 비용 절감

 . 단점 : 성능면에서 다소 손해를 볼 수 있다. 

 

 

가상화의 종류

1. 호스트 OS형 가상화

2. 하이퍼 바이저형 가상화

3. 컨테이너형 가상화

 

 

호스트 가상화란?

 . 물리적인 하드웨어 -> Host OS -> 가상화 소프트 웨어 -> Guest OS 순으로 구성.

 . 호스트 OS형 가상화기술은 일반적으로 알려진 Virtual Box 같은 가상화 기술이다.

 

호스트 가상화의 장단점

 . 장점 : Host OS 위에 있는 가상화소프트웨어를 통해 GuestOS를 구동하기 때문에 운영체제 선택에 제약이 없다.

 . 단점 : 가상화 소프트웨어 위에 각 가상화 인스턴스마다 GuestOS를 지니므로 성능에서 손해를 본다.

 

하이퍼 바이저형 가상화란?

 . 물리적 하드웨어 -> 하이퍼 바이저 -> GuestOS 순으로 구성

 . 세부적으론 전가상화, 반가상화로 구분된다.

 -> 전가상화 : 하드웨어를 완전히 가상화 하는 방식.

 -> 반가상화 : 전가상화의 성능저하를 해결하기 위해 하드웨어를 완전히 가상화 하지는 않는 방식.

 

하이퍼 바이저란?

 . Host에서 다수의 OS를 실행하기 위한 가상 플랫폼 기술

 . 가상화 머신 모니터 또는 가상화 머신 매니저라고 한다. 

 -> Virtual Machine Monitor / Virtual Machine Manager : 약어로는 VMM

 . Guest OS에 가상 운영 플랫폼을 제공하며 Guest OS를 관리한다.

 

하이퍼 바이저형의 장단점

 . 장점 : 별도의 Host OS 없이 실행되므로 오버헤드가 적고, 효율적인 리소스 사용이 가능하다.

 . 단점 : 머신에 대한 관리 기능이 없기때문에 별도의 컴퓨터, 콘솔 등이 필요하다.

 

컨테이너형 가상화

 . 물리적 하드웨어 -> Host OS -> Dock Engine -> Dock Image

 . 타 가상화 방식과는 다르게 각 Guest는 커널을 공유하기 때문에 Guest OS를 갖지 않는다.

 . 각 Guest는 필요한 라이브러리나 실행 파일 등만 개별적으로 지닌다.

 

컨테이너형 가상화의 장단점

 . 장점 : 다른 가상화 방식보다 성능저하가 적고 빠르다.

 . 단점 : Docker Engine이 Host OS에 영향을 받기 때문에 종속적이다. 또한 컨테이너 별 커널구성이 불가능하다.

 -> ex : linux 컨테이너의 경우 OS에서 커널이 컨테이너를 관리하기 때문에 다른 OS에서는 작동 X

 

반응형

'DevOps' 카테고리의 다른 글

Docker 간단 명령어들.  (0) 2020.10.14
Docker에 대해서  (0) 2020.10.14
Posted by Sweetmeats_boy

2020. 8. 27. 21:05 Network

load balancing

반응형

로드 밸런싱이란 기본적으로 부하를 분산하는 것을 말한다.

 

로드밸런서의 종류는 크게 두가지로 나뉜다.

 . 운영체제 로드 밸런서

    -> 물리적인 프로세서간에 작업을 스케줄링을 통해서 분산 시킨다.

        -> ex : 멀티코어 프로세서

 . 네트워크 로드 밸런서

    -> 백엔드에서 네트워크 작업을 스케줄링을 통해 분산 시킨다.

 

 

네트워크 로드 밸런서

 . L2

    -> Mac 주소를 바탕으로 로드 밸런싱하는 방법

 . L3

    -> IP 주소를 바탕으로 로드 밸런싱하는 방법

 . L4

    -> 전송계층에서 로드 밸런싱하는 방법

    -> port 기반으로 스위칭을 지원하며 주로 라운드 로빈 방식을 사용한다.

 . L7

    -> 응용 계층에서 로드밸런싱을 하는 방법

 

load balancing 알고리즘

 . round robin

 . least connection

 . weighted least connections

 . faster response time

 . adaptive

 . fiexed, hashing 등등 여러 알고리즘이 존재.

 

 

Round robin (순차 방식)

 . 요청의 순서대로 각 서버에 균등하게 분배하는 방식

 . 서버 connection 수나 응답시간에 상관없이 모든 서버를 동일하게 처리한다.

 . 타 알고리즘에 비해 단순하여 속도가 가장 빠르다.

 

Least connecntion (최소 접속 방식)

 . 서버에 연결되어 있는 Connection 개수만 갖고 단순 비교하여 가장 적은 곳에 연결해준다.

 

Weighted Least Connections (가중치 최소 접속 방식)

 . 각 서버별 가중치를 정하고 가중치 대비 Connection 이 가장 적은곳에 연결해준다.

 

Fastest Response Time (응답 우선 방식)

 . 가장 빨리 응답하는 서버에 연결해준다.

 

Adaptive (최소 대기 방식)

 . Open 또는 Pending 상태인 Connection을 적게 지닌 서버로 연결시켜준다.

 

 

 

 

출처 및 참고 : https://medium.com/@pakss328/%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%84%9C%EB%9E%80-l4-l7-501fd904cf05

 

로드밸런서란?(L4, L7)

서버 부하 분산을 위해 로드밸런서를 이용한다. 근래들어 L7을 많이 이용하고 이전에 많이 사용하던 장치는 L4였다. 추상적으로만 알고 있던 L7과 L4에 대해 정리를 해보았다.

medium.com

 

https://nesoy.github.io/articles/2018-06/Load-Balancer

 

로드 밸런서(Load Balancer)란?

 

nesoy.github.io

ps : 위 두 출처에 다른 포스팅도 유용하니 추후에 공부 더 할 것.

반응형

'Network' 카테고리의 다른 글

HTTP Protocol  (0) 2021.06.20
OSI 7계층과 TCP/IP 4 계층  (0) 2021.06.20
OSI 7계층와 TCP/IP 4 계층  (0) 2020.08.27
Thrift에 대해서 [C# 한정]  (0) 2020.01.10
RabbitMQ에 대해서  (0) 2019.07.21
Posted by Sweetmeats_boy
이전버튼 1 2 3 4 5 6 7 8 ··· 10 이전버튼

블로그 이미지
Sweetmeats_boy

태그목록

Yesterday
Today
Total

달력

 « |  » 2024.11
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함