SlideShare uma empresa Scribd logo
1 de 93
Baixar para ler offline
글로벌 게임플랫폼에서
무정지 무점검 서버 개발과 운영 사례
김태현 ) ( &
. ) ((. . (. (
오타
년 월 일 장애 당시 화면
장애 당시 화면 대부분의 서비스가 상태로 표시되어있다
장애난 서비스들 년 월 일 ( 장애
손실규모
https://www.foxbusiness.com/markets/amazon-finds-the-cause-of-its-outage-a-typo
“54 of the internet's top 100 retailers saw website performance slow by 20% or more.
…”
“The AWS outage cost companies in the S&P 500 index $150 million, according to Cye
nce Inc., …
장애를 줄이려면
더 좋은 방법은 없을까
이 발표는
발표자 소개
• Blizzard 클래식팀에서 서버개발 (Sr. SW Engineer)
• 최근까지 Nexon America에서 Sr. Manager, DevOps &
Technology 담당
• NDC 2011,12,17년 우수발표 선정
• 1998년에 머신비전 프로그래머로 커리어 시작 후
• 여러 벤처기업과 NHN, SK컴즈 등에서 온라인 어플개발,
게임서버개발 등 담당
.. 의 어떤 게임들은 년이 넘는 역사를 가지고 있습니다
클래식팀의 목표는 이런 블리자드 게임들을 게임팬들이 현대적 컴퓨터 환경
에서 계속 즐길 수 있도록 하는 것입니다
0 ,(.. )
NCS
년 이상된 게임을 현대적 환경에서 지속하기위한 기술적인 어려움을 극복하고자
라고 불리는 새로운 서버스택을 개발 새로운 기능 추가와 관리가 쉽도록 하였
습니다
. .
Datastore
Client Game Proxy
Rabbit MQ
Web API
모든 서버 간의 통신은 를 통해 이루어지며 서버 종류는 역할별로
나뉘어져 있고 이중화 되어 을 이룹니다
. ,
서버코드는 이 사용되며 네트웍 비동기 엔진은 /+ ++/ & 기반
데이터베이스로 & 을 사용합니다
. .
은 과 을 사용합니다
는 /. / 로 , / 되며 인프라는 / . 위에서 으로 구
현되어 있습니다 최근 . 로 / / 중입니다
모니터링은 이라는 자체 제작 시스템을 사용합니다 은
. 기반의 모니터링 인벤토리 툴이며 서버와 직접 통신이 가능한 특징이 있
습니다
데이터 분석을 위한 는 을 활용합니다
여기까지 사용 기술 소개
무정지 무장애를 어렵게 하는 다섯 가지 문제와 해결방법
소개로
무정지 무점검을 어렵게 하는 것들 첫번째
버전
버전
무정지 무점검을 어렵게 하는 것
패치
• 바이너리 교체를 해야 해서
• 로직 재시작을 해야해서
• 새 데이터 로드를 해야해서
• 하위 호환이 안되어서
V2v1
서버에 패치를 적용하기 위해 서버를 내리는 경우가 많습니다
무정지 무점검을 어렵게 하는 것 패치
일반적인 패치 적용 방식
v1
v1
v1
점검이 시작되면
무정지 무점검을 어렵게 하는 것 패치
일반적인 패치 적용 방식
모든 서버를 중지하고
무정지 무점검을 어렵게 하는 것 패치
일반적인 패치 적용 방식
v2
v2
v2
새 버전의 서버로 업데이트 한 뒤
무정지 무점검을 어렵게 하는 것 패치
일반적인 패치 적용방식
v2
v2
v2
서버를 다시 띄웁니다
무정지 무점검을 어렵게 하는 것 패치
& 의 접근방법
v1
v1
v1
저희가 정지 없이 서버 패치를 한 방법은
무정지 무점검을 어렵게 하는 것 패치
& -) ( ) 의 접근방법
v2
v2
v2
Site B
v1
v1
v1
새 버전으로 준비된 서버들을 미리 준비하고
무정지 무점검을 어렵게 하는 것 & 패치
.) - ( ) 의 접근방법
v2
v2
v2
Site B
기존 서버로의 추가 유입을 막고 )-
새 버전 서버로 유입되도록 바꿉니다 -
무정지 무점검을 어렵게 하는 것 패치
. 의 접근방법
v2
v2
v2
Site B
과 (.- . 을 계속하여
두 개의 ) . 를 뒤집는 & 방식으로
서비스의 중단 없이 패치를 적용합니다
무정지 무점검을 어렵게 하는 것 패치
& - 의 접근방법
v2
v2
v2
Site A
v1
v1
v1
. 이 완료되면 모든 접속이 새 로 붙게 되며 기존
는 됩니다
무정지 무점검을 어렵게 하는 것 패치
& & 의 접근방법 장점
v2
v2
v2
Site A
v1
v1
v1
• . - 마다 완전히 서버를 지우고 & - 을 통해
완전히 새로 서버를 만들기 때문에 항상 클린한 서버를
만들 수 있고 또 하드웨어의 이동도 쉽습니다
• 필요하면 이전 사이트로 롤백이 쉽습니다
• 문제가 있을 때 서비스에 지장없이 조사 가능합니다
무정지 무점검을 어렵게 하는 것 패치
&& 을 가능하게 한 네 가지 기술
1. VM
2. 하위호환 API 시스템
3. 클린로컬
4. CD/CI 자동화
무정지 무점검을 어렵게 하는 것 패치
기술 & )- ( . Site A
& 기반 곧 컨테이너 기반 이므로
새로운 사이트를 만들기가 용이하고
대기 자원 낭비를 줄일 수 있습니다
무정지 무점검을 어렵게 하는 것 & 패치
기술 하위호환 & 시스템
로의 요청은 & 로 이루어지며
모든 요청 처리가 하위 호환 되도록
버전별 & 가 존재합니다 따라서
, .. - 중에도 서비스는 무정지로 동작합니
다
v2
v2
v2
Site B
v1
v1
v1
무정지 무점검을 어렵게 하는 것 패치
기술 클린 로컬
호스트에 설정파일을 두지 않고 로그 파일은 자동으로 수집됩니다
무정지 무점검을 어렵게 하는 것 패치
기술& () ( . 4
빌드가 끝나면 자동으로 플랫폼별 패키지가 만들어집니
다
배포는 원클릭으로 실행되며 ,/4 4
- / 업데이트 체크 테스트 완료 단계로
사람의 개입 없이 모두 자동으로 진행됩니다
무정지 무점검을 어렵게 하는 것
설정을...
무정지 무점검을 어렵게 하는 것
설정변경 재시작 없이 설정값을 바꿀 수 없는
경우
설정 변경을 적용하기 위해 서버를 재시작해야합니다
무정지 무점검을 어렵게 하는 것 설정변경
변경된 설정을 적용하려 서버를 재시작하는 경우
설정 파일이 변경되면 대분의 경우 서버는 설정 파일을 다시 읽기 위해 재시작을
합니다
무정지 무점검을 어렵게 하는 것 설정변경
변경된 설정을 적용하려 서버를 재시작하는 경우
설정이 변할 경우 올바른 동작을 보장할 수 없어
서버를 리로드 하기 위해 서버를 먼저 종료합니다
무정지 무점검을 어렵게 하는 것 설정변경
변경된 설정을 적용하려 서버를 재시작하는 경우
서버를 다시 시작하면서 새로운 설정을 읽고
로직을 새로 시작합니다
무정지 무점검을 어렵게 하는 것 설정변경
설정변경 최악의 시나리오
일부 서버의 설정을 바꾸더라도 전체 서버를 재시작해야 하는 경우도 존재합
니다
대표적으로 다음과 같은 경우입니다
• 서버추가나 삭제로 서버 구성이 변할 경우
• 모든 서버가 같은 설정파일을 공유할 경우
무정지 무점검을 어렵게 하는 것 설정변경
& 소개
설정파일이 로컬에 존재하지 않습니다
무정지 무점검을 어렵게 하는 것 설정변경
& 소개
설정이 변경된 후 명령을 서버에 보내면
Flush
Flush
Flush
무정지 무점검을 어렵게 하는 것 설정변경
소개
서버는 - & 서버에 있는 - & 파일들을 읽어오고
config.server
무정지 무점검을 어렵게 하는 것 설정변경
& 소개
코드를 실행하여 설정 내용을 업데이트 한 뒤 바뀐 설정으로 동작합니
다
이를 가능하게 하기 위해
설정은 & -. 프로토콜을
이용해서 동작 관련 자료구조를을
정의했습니다
무정지 무점검을 어렵게 하는 것 설정변경
& 소개
특정 설정 파일의 선택적 & 도 가능합니다
무정지 무점검을 어렵게 하는 것 설정변경
& 소개
특정 서버만 선택적 업데이트도 역시 가능합니다
무정지 무점검을 어렵게 하는 것 설정변경
& 소개
//------------------------------------------------------------------------------
Void MatchMakerUtilImpl::FlushSeason(const blz::function<void(bool)>& callback)
{
m_loader.LoadConfigAsync([=](bool res)
{
if (res)
{
auto config = m_loader.GetConfig<classic::protocol::config::Seasons>("matchmaker_seasons.pb");
if (config)
{
m_seasonsByProgramId.clear();
for (auto& s : config->season())
{
auto& map = m_seasonsByProgramId[programId];
auto& info = map[s.id()];
auto& bucketInfo = s.bucket_info();
. . .
}
코드의 예
무정지 무점검을 어렵게 하는 것 설정변경
& 소개
설정의 예
#Season 1
season {
id: 1
start_time_epoch: 1501607149
igr_multi: 1
}
#Season 2
season {
id: 2
start_time_epoch: 1532467800
igr_multi: 2
bucket_info {
bucket : 0
cut_off : 0
award_product_id : 12345
}
bucket_info {
bucket : 1
cut_off : 100
award_product_id : 23456
}
무정지 무점검을 어렵게 하는 것
사라진 전 개발자. 계획안된 변경.
그 값을 바꿔야 한다.
바꿨어야 했어…
무정지 무점검을 어렵게 하는 것
상수 변경
코드를 짜다보면 반드시 상수가 만들어집니다
무정지 무점검을 어렵게 하는 것 상수변경
상수 변경이 점검 유발
만약 상수 값을 바꾸려고 하면 코드 변경과 재배포가 필요해집니다
따라서 점검을 요하는 경우가 많습니다
2
무정지 무점검을 어렵게 하는 것 상수변경
& 소개
시스템은 서비스 외부에서 정지 없이 상수 값을 실시간으로 수정가능하게
합니다
2
무정지 무점검을 어렵게 하는 것 상수변경
- . . , 소개
- 시스템은 - 시스템의 일부입니다
- 시스템은 작동중인 서비스에 등록된 함수를 실시간 & 로 호출하고 값
을 얻어올 수 있게 하고 이를 툴을 통해 할 수 있습니다 따라서 개발자 뿐만
아니라 프로듀서 누구든 쉽게 값을 바꾸거나 값을 얻어올 수 있습니다
get, set …
무정지 무점검을 어렵게 하는 것 상수변경
& 소개
노출할 함수를 다음과 같이 코드에서 등록할 수 있습니다 모두 비동기로 호출
됩니다
query.RegisterCB([=](const Arg argv[], size_t argc, blz::shared_ptr<Query::Result> result)
{
QueryConnectionsList(argv, argc, result);
}, "web.connections.list", "Show connected clients", "query");
void WebServer::QueryConnectionsList(const Arg argv[], size_t argc, blz::shared_ptr<Query::Result> result)
{
static const char* s_columns[] =
{
"Id,40",
"Address,120",
};
result->Format("Web Connections", s_columns);
…
}
무정지 무점검을 어렵게 하는 것 상수변경
& 소개
시스템은 & 시스템에 정의된 & 함수를 이용해 값을 설정합니다
Set min = 1
무정지 무점검을 어렵게 하는 것 상수변경
& 소개
시스템으로 변경될 상수는
코드에서는 다음과 같이 등록하도록 구현되어 있습니다
Var::Setting<Time::Tick> m_varChatRequestTimeoutInterval;
Var::Setting<blz::string> m_varMessageOfTheDay;
Var::Setting<u32> m_varMaxHashSize;
Var::Setting<bool> m_varNewbie;
Var::ReadOnly<u8> m_level;
Var::Statistic<u64> m_varConnectCount;
, m_varMessageOfTheDay("Rpc.Chat.MessageOfTheDay", "", "Add MOTD for a game version: [ProgramId]
|[Version]|[Message]")
, m_varConnectCount("JournalClient.ConnectCount", 0)
무정지 무점검을 어렵게 하는 것
무정지 무점검을 어렵게 하는 것 &( 스케일링
스케일링
서비스 규모의 변경에 따라 서버의 규모도 증가합니다
예 ) - .
무정지 무점검을 어렵게 하는 것 스케일링
스케일링으로 인한 점검
만약 서버 구성과 관련한 설정이 존재할 경우
무정지 무점검을 어렵게 하는 것
스케일링으로 인한 점검
서버 구성을 업데이트 하기 위해 설정이 바뀌고 서버의 점검을 유발할 수 있습
니다
무정지 무점검을 어렵게 하는 것 스케일링
스케일링으로 인한 점검
서버 구성을 업데이트 하기 위해 설정이 바뀌고 서버의 점검을 유발할 수 있습
니다
무정지 무점검을 어렵게 하는 것 스케일링
스케일링으로 인한 점검
서버가 늘어날 경우 서버 간의 새로운 연결이 필요한 경우도 있습니다
그럴 때 새로운 접속을 받아들이기 위해 서버를 재시작 하기도 합니다
무정지 무점검을 어렵게 하는 것 스케일링
설정에 서버구성을 두지 않음
& 에는 서버 구성 관련 설정이 기본적으로 존재하지 않고 만에하나 있더라
도 - - -. ,으로 서버 재시작 없이 수정가능합니다
무정지 무점검을 어렵게 하는 것 스케일링
&를 통한 서버 통신으로 직접연결 설정 불필요
는 서버간의 통신을 &를 통하도록 하여 서버간 직접 통신이 필요 없기
때문에
스케일링이 되더라도 서버를 재시작 할 필요가 없도록 되어있습니다
무정지 무점검을 어렵게 하는 것
무정지 무점검을 어렵게 하는 것
장애
장애는 피할 수 없습니다 장애에 견디고 복구 가능한지가 중요합니다
무정지 무점검을 어렵게 하는 것 장애
& & 구현
모든 서비스는 & & 프로토콜을 구현하고 있습니다
& & 이 실패할 경우를 모니터링하여 장애를 감지합니다
무정지 무점검을 어렵게 하는 것 장애
& & 코드 예
auto healthCheck = [&](blz::string& meta)
{
return rabbitMq.IsReady() && s.IsReady() && igrSettings.IgrEnabled();
};
무정지 무점검을 어렵게 하는 것 장애
&에서 이중화
그리고 를 피하기 위해 동종 서비스들은 개념적으로 & 에 담겨 있습니다
장애 감지시 & 에서 제거됩니다
제거되더라도 풀의 다른 서비스들은 계속 서비스가 가능합니다
무정지 무점검을 어렵게 하는 것 장애
서버 종류별
그리고 서비스 종류별로 을 두고 있습니다
무정지 무점검을 어렵게 하는 것 장애
원인 모를 장애시의 대처 방식
만약 예상치 못한 이유로 서비스 전체나 상당부분이 불안정한 경우가 발생한
다면
무정지 무점검을 어렵게 하는 것 & 장애
원인 모를 장애시의 대처 방식
이 때는 . ( ) 을 해서 고치는데 시간을 쓰기 보다는
서버를 다시 배포합니다 배포를 하면 ( 가 교체 - 되도록 되어 있습니
다
Deactivated
Activated
무정지 무점검을 위한 & 의 &
의 다양한 형태
조직으로서의 DevOps
개발 방법론의 DevOps
문화로서의 DevOps
의 소개
문화로서의 DevOps
역할
SDE
LiveOps
SDE
SRE
LiveOps
SDE
SRE
SDE
SRE
CD/CI
개발 모니터링
조사수정
엔지니어가 모든 역할을 다 합니다
& & 방법론 문화
• 누구나 코드를 수정할 수 있습니다.
• 코드는 Github의 Pull Request, Approval 을 통해 머지됩니다.
• Review & Approval 할 사람을 선택할 수 있습니다.
• 브랜치 전략은 Gitflow를 따르고 있습니다.
• 장애 사항은 모두에게 공유됩니다.
• 장애 대응할 사람이 Passive 하게 정해지지 않습니다. Active하게 담
당합니다. (누가 시키지 않고, 각자 자신이 할 수 있는/잘하는 일을
스스로 맡아서 합니다.)
• QA, 프로듀서, 엔지니어가 아닌 사람도 쉬운 방법을 통해 시스템을
수정할 수 있습니다.
• 실수를 피하거나 두려워 하지 않고 제대로 개선하는 쪽을 선호합
니다.
배포 파이프라인
빌드
Dev
배포
Site flip
Dev
Test
Prod
배포
Low
pop
Site flip
Live
Test
High
pop site
flip
테스트 서버 운영 전략
• No test build. 모든 빌드는 라이브를 염두한다.
• 테섭과 라이브의 배포 방식이 같다.
• 테섭의 운영 방식도 라이브와 같다.
• 여러개의 테스트 환경을 갖고 있고 필요시 생성한다.
• Dev, PTR, Prod 로 나뉜다.
Classic 팀이 무정지&무점검을 위해 접근한 방법은
무정지, 무점검 서비스
요약
• CD/CI 자동화로 소프트웨어 변경의 어려움과 배포 리스크 제
거
• 클라우드를 이용해 인프라 자동화
• DevOps 문화로 분업화되었던 소프트웨어 생명주기를 압축 단순화.
• Flush, Var, Query System, Site Flipping 기술 개발
무정지, 무점검 서비스
DevOps의 미래에 대해 생각해 볼 것 들
개발자
사용자
개발자는 서비스할 코드를 에 등록하고
사용자는 등록된 코드를 리모트로 실행합니다
Serverless
마치 소프트웨어와 하드웨어가 분리되었듯
로 하나의 거대한 지구 컴퓨터와
소프트웨어가 분리
서버리스로 가면서 서버 장애에 대한 부담도 클라
우드로 넘어가고 있음
개발자 부담
IDC 호스팅 부담
클라우드 호스팅 부담
그리고
이미지출처 : Microsoft
손정의
“아웃풋쪽이라 할 수 있는 클라우드 측도 매우 중요합니다. 클라우드
측에서는 GPU의 능력을 중심으로 지금부터 2030년까지는 단일 칩
당 연산 능력이 약 200배가 될 것으로 예상하고 있습니다.
물론 이는 원칩당 능력이지만, 그 칩의 수도 클라우드 측에 점점 늘어
가고, 게다가 클라우드 측의 AI칩과 인풋 측의 ARM칩이 매우 고속으
로 5G, 6G, 7G로 통신합니다. 그러면 AI의 진화라는 것은 무서운 기
세로, 지금부터 2차 곡선으로 뻗어 나간다는 것입니다.”
기사 출처 : http://www.hellodd.com/?md=news&mt=view&pid=65594
2018년 7월19일 소프트뱅크 월드2018 행사 발표 내용 중
시대의 개발 모습은
• 메인보드, 모바일 기기에 CPU처럼 AI 칩이 탑재된다면?
• AI 툴킷이 대중화 되고 누구나 쉽게 AI 라이브러리를 쓸 수 있
다면?
• AI와 AI를 연결하는 새로운 네트워크 플랫폼이 생긴다면?
• AI를 이용한 정보공격&변조에 대비해야 한다면?
• …
그리고 시대의
정보 서비스를 개발하고 운영하는 이들의 역할은 무엇일까?
• 더 하기 쉬워지는 DevOps
• 서비스 개발자의 Ops 부담/업무량 감소가 가져올 변화
• 인프라 호스팅의 개발, 운영 부담/업무량 증가가 가져올
변화
• AI 툴킷/모듈/서비스를 이용한 응용서비스 개발과 배포
&& 라는 새로운 세상
감사합니다
연락 : thkim.cdecl@gmail.com

Mais conteúdo relacionado

Mais procurados

쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...Amazon Web Services Korea
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Dronix
 
ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기Yungon Park
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기Kiyoung Moon
 
게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP AdvSeungmo Koo
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCHo Gyu Lee
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)Heungsub Lee
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advanceDaeMyung Kang
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직Hoyoung Choi
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)Brian Hong
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기Chanwoong Kim
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Esun Kim
 
NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기Hoyoung Choi
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 

Mais procurados (20)

쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기
 
ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
 
게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABC
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advance
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 

Semelhante a 글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례

대규모 인프라 환경 전환을 위한 AWS CloudEndure 실시간 클라우드 전환 기술 - 이창익:: AWS | AWS 클라우드 마이그레이...
대규모 인프라 환경 전환을 위한 AWS CloudEndure 실시간 클라우드 전환 기술 - 이창익:: AWS | AWS 클라우드 마이그레이...대규모 인프라 환경 전환을 위한 AWS CloudEndure 실시간 클라우드 전환 기술 - 이창익:: AWS | AWS 클라우드 마이그레이...
대규모 인프라 환경 전환을 위한 AWS CloudEndure 실시간 클라우드 전환 기술 - 이창익:: AWS | AWS 클라우드 마이그레이...Amazon Web Services Korea
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debuggingJongwon Han
 
Internet Scale Service Arichitecture
Internet Scale Service ArichitectureInternet Scale Service Arichitecture
Internet Scale Service ArichitectureDaeMyung Kang
 
Build Team Foundation Architecture
Build Team Foundation ArchitectureBuild Team Foundation Architecture
Build Team Foundation Architecture준일 엄
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재Hankyo
 
Oracle Container Cloud Service & Docker Overview
Oracle Container Cloud Service & Docker OverviewOracle Container Cloud Service & Docker Overview
Oracle Container Cloud Service & Docker OverviewTaewan Kim
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live세준 김
 
[네이버클라우드플랫폼 온라인 교육 시리즈] 네이버클라우드플랫폼 CLI 소개 및 활용
[네이버클라우드플랫폼 온라인 교육 시리즈] 네이버클라우드플랫폼 CLI 소개 및 활용[네이버클라우드플랫폼 온라인 교육 시리즈] 네이버클라우드플랫폼 CLI 소개 및 활용
[네이버클라우드플랫폼 온라인 교육 시리즈] 네이버클라우드플랫폼 CLI 소개 및 활용NAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
AWS Summit Seoul 2015 - AWS를 통한 게임 운영의 정석
AWS Summit Seoul 2015 - AWS를 통한 게임 운영의 정석AWS Summit Seoul 2015 - AWS를 통한 게임 운영의 정석
AWS Summit Seoul 2015 - AWS를 통한 게임 운영의 정석Amazon Web Services Korea
 
Infra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and TerraformInfra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and TerraformInho Kang
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트Chanwoong Kim
 
oVirt installation guide_v4.3
oVirt installation guide_v4.3oVirt installation guide_v4.3
oVirt installation guide_v4.3CheolHee Han
 
Amazon Connect를 이용한 outbound call 서비스 개발하기
Amazon Connect를 이용한 outbound call 서비스 개발하기Amazon Connect를 이용한 outbound call 서비스 개발하기
Amazon Connect를 이용한 outbound call 서비스 개발하기창훈 현
 
Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례Opennaru, inc.
 
ALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsTaeyoung Kim
 
Giip bp-giip connectivity1703
Giip bp-giip connectivity1703Giip bp-giip connectivity1703
Giip bp-giip connectivity1703Lowy Shin
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드Jeongsang Baek
 

Semelhante a 글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례 (20)

대규모 인프라 환경 전환을 위한 AWS CloudEndure 실시간 클라우드 전환 기술 - 이창익:: AWS | AWS 클라우드 마이그레이...
대규모 인프라 환경 전환을 위한 AWS CloudEndure 실시간 클라우드 전환 기술 - 이창익:: AWS | AWS 클라우드 마이그레이...대규모 인프라 환경 전환을 위한 AWS CloudEndure 실시간 클라우드 전환 기술 - 이창익:: AWS | AWS 클라우드 마이그레이...
대규모 인프라 환경 전환을 위한 AWS CloudEndure 실시간 클라우드 전환 기술 - 이창익:: AWS | AWS 클라우드 마이그레이...
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging
 
Internet Scale Service Arichitecture
Internet Scale Service ArichitectureInternet Scale Service Arichitecture
Internet Scale Service Arichitecture
 
Build Team Foundation Architecture
Build Team Foundation ArchitectureBuild Team Foundation Architecture
Build Team Foundation Architecture
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
 
Oracle Container Cloud Service & Docker Overview
Oracle Container Cloud Service & Docker OverviewOracle Container Cloud Service & Docker Overview
Oracle Container Cloud Service & Docker Overview
 
201702-Oracle Container Cloud Service
201702-Oracle Container Cloud Service201702-Oracle Container Cloud Service
201702-Oracle Container Cloud Service
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live
 
[네이버클라우드플랫폼 온라인 교육 시리즈] 네이버클라우드플랫폼 CLI 소개 및 활용
[네이버클라우드플랫폼 온라인 교육 시리즈] 네이버클라우드플랫폼 CLI 소개 및 활용[네이버클라우드플랫폼 온라인 교육 시리즈] 네이버클라우드플랫폼 CLI 소개 및 활용
[네이버클라우드플랫폼 온라인 교육 시리즈] 네이버클라우드플랫폼 CLI 소개 및 활용
 
AWS Summit Seoul 2015 - AWS를 통한 게임 운영의 정석
AWS Summit Seoul 2015 - AWS를 통한 게임 운영의 정석AWS Summit Seoul 2015 - AWS를 통한 게임 운영의 정석
AWS Summit Seoul 2015 - AWS를 통한 게임 운영의 정석
 
Infra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and TerraformInfra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and Terraform
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
개발자를 위한 네이버 클라우드 플랫폼ㅣNAVER CLOUD PLATFORM for Developers
개발자를 위한 네이버 클라우드 플랫폼ㅣNAVER CLOUD PLATFORM for Developers 개발자를 위한 네이버 클라우드 플랫폼ㅣNAVER CLOUD PLATFORM for Developers
개발자를 위한 네이버 클라우드 플랫폼ㅣNAVER CLOUD PLATFORM for Developers
 
Scalable webservice
Scalable webserviceScalable webservice
Scalable webservice
 
oVirt installation guide_v4.3
oVirt installation guide_v4.3oVirt installation guide_v4.3
oVirt installation guide_v4.3
 
Amazon Connect를 이용한 outbound call 서비스 개발하기
Amazon Connect를 이용한 outbound call 서비스 개발하기Amazon Connect를 이용한 outbound call 서비스 개발하기
Amazon Connect를 이용한 outbound call 서비스 개발하기
 
Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례
 
ALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOps
 
Giip bp-giip connectivity1703
Giip bp-giip connectivity1703Giip bp-giip connectivity1703
Giip bp-giip connectivity1703
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
 

Mais de if kakao

바닥부터 시작하는 Vue 테스트와 리팩토링
바닥부터 시작하는 Vue 테스트와 리팩토링바닥부터 시작하는 Vue 테스트와 리팩토링
바닥부터 시작하는 Vue 테스트와 리팩토링if kakao
 
카카오커머스를 지탱하는 Angular
카카오커머스를 지탱하는 Angular카카오커머스를 지탱하는 Angular
카카오커머스를 지탱하는 Angularif kakao
 
프렌즈타임 웹앱 삽질기
프렌즈타임 웹앱 삽질기프렌즈타임 웹앱 삽질기
프렌즈타임 웹앱 삽질기if kakao
 
카프카 기반의 대규모 모니터링 플랫폼 개발이야기
카프카 기반의 대규모 모니터링 플랫폼 개발이야기카프카 기반의 대규모 모니터링 플랫폼 개발이야기
카프카 기반의 대규모 모니터링 플랫폼 개발이야기if kakao
 
TOROS N2 - lightweight approximate Nearest Neighbor library
TOROS N2 - lightweight approximate Nearest Neighbor libraryTOROS N2 - lightweight approximate Nearest Neighbor library
TOROS N2 - lightweight approximate Nearest Neighbor libraryif kakao
 
딥러닝을 이용한 얼굴 인식
딥러닝을 이용한 얼굴 인식딥러닝을 이용한 얼굴 인식
딥러닝을 이용한 얼굴 인식if kakao
 
딥러닝을 활용한 뉴스 메타 태깅
딥러닝을 활용한 뉴스 메타 태깅딥러닝을 활용한 뉴스 메타 태깅
딥러닝을 활용한 뉴스 메타 태깅if kakao
 
눈으로 듣는 음악 추천 시스템
눈으로 듣는 음악 추천 시스템눈으로 듣는 음악 추천 시스템
눈으로 듣는 음악 추천 시스템if kakao
 
Keynote / 2018
Keynote / 2018Keynote / 2018
Keynote / 2018if kakao
 
카카오 봇 플랫폼 소개
카카오 봇 플랫폼 소개카카오 봇 플랫폼 소개
카카오 봇 플랫폼 소개if kakao
 
다음웹툰의 UX(Animation, Transition, Custom View)
다음웹툰의 UX(Animation, Transition, Custom View)다음웹툰의 UX(Animation, Transition, Custom View)
다음웹툰의 UX(Animation, Transition, Custom View)if kakao
 
모바일 게임플랫폼과 인프라 구축 경험기
모바일 게임플랫폼과 인프라 구축 경험기모바일 게임플랫폼과 인프라 구축 경험기
모바일 게임플랫폼과 인프라 구축 경험기if kakao
 
카카오뱅크 모바일앱 개발 이야기
카카오뱅크 모바일앱 개발 이야기카카오뱅크 모바일앱 개발 이야기
카카오뱅크 모바일앱 개발 이야기if kakao
 
다음 모바일 첫 화면 개선기
다음 모바일 첫 화면 개선기다음 모바일 첫 화면 개선기
다음 모바일 첫 화면 개선기if kakao
 
액티브X 없는 블록체인 기반 PKI 시스템
액티브X 없는 블록체인 기반 PKI 시스템액티브X 없는 블록체인 기반 PKI 시스템
액티브X 없는 블록체인 기반 PKI 시스템if kakao
 
Klaytn: Service-Oriented Enterprise-Grade Public Blockchain Platform
Klaytn: Service-Oriented Enterprise-Grade Public Blockchain PlatformKlaytn: Service-Oriented Enterprise-Grade Public Blockchain Platform
Klaytn: Service-Oriented Enterprise-Grade Public Blockchain Platformif kakao
 
Kakao Cloud Native Platform, 9rum
Kakao Cloud Native Platform, 9rumKakao Cloud Native Platform, 9rum
Kakao Cloud Native Platform, 9rumif kakao
 
카프카, 산전수전 노하우
카프카, 산전수전 노하우카프카, 산전수전 노하우
카프카, 산전수전 노하우if kakao
 
스프링5 웹플럭스와 테스트 전략
스프링5 웹플럭스와 테스트 전략스프링5 웹플럭스와 테스트 전략
스프링5 웹플럭스와 테스트 전략if kakao
 
카카오톡의 서버사이드 코틀린
카카오톡의 서버사이드 코틀린카카오톡의 서버사이드 코틀린
카카오톡의 서버사이드 코틀린if kakao
 

Mais de if kakao (20)

바닥부터 시작하는 Vue 테스트와 리팩토링
바닥부터 시작하는 Vue 테스트와 리팩토링바닥부터 시작하는 Vue 테스트와 리팩토링
바닥부터 시작하는 Vue 테스트와 리팩토링
 
카카오커머스를 지탱하는 Angular
카카오커머스를 지탱하는 Angular카카오커머스를 지탱하는 Angular
카카오커머스를 지탱하는 Angular
 
프렌즈타임 웹앱 삽질기
프렌즈타임 웹앱 삽질기프렌즈타임 웹앱 삽질기
프렌즈타임 웹앱 삽질기
 
카프카 기반의 대규모 모니터링 플랫폼 개발이야기
카프카 기반의 대규모 모니터링 플랫폼 개발이야기카프카 기반의 대규모 모니터링 플랫폼 개발이야기
카프카 기반의 대규모 모니터링 플랫폼 개발이야기
 
TOROS N2 - lightweight approximate Nearest Neighbor library
TOROS N2 - lightweight approximate Nearest Neighbor libraryTOROS N2 - lightweight approximate Nearest Neighbor library
TOROS N2 - lightweight approximate Nearest Neighbor library
 
딥러닝을 이용한 얼굴 인식
딥러닝을 이용한 얼굴 인식딥러닝을 이용한 얼굴 인식
딥러닝을 이용한 얼굴 인식
 
딥러닝을 활용한 뉴스 메타 태깅
딥러닝을 활용한 뉴스 메타 태깅딥러닝을 활용한 뉴스 메타 태깅
딥러닝을 활용한 뉴스 메타 태깅
 
눈으로 듣는 음악 추천 시스템
눈으로 듣는 음악 추천 시스템눈으로 듣는 음악 추천 시스템
눈으로 듣는 음악 추천 시스템
 
Keynote / 2018
Keynote / 2018Keynote / 2018
Keynote / 2018
 
카카오 봇 플랫폼 소개
카카오 봇 플랫폼 소개카카오 봇 플랫폼 소개
카카오 봇 플랫폼 소개
 
다음웹툰의 UX(Animation, Transition, Custom View)
다음웹툰의 UX(Animation, Transition, Custom View)다음웹툰의 UX(Animation, Transition, Custom View)
다음웹툰의 UX(Animation, Transition, Custom View)
 
모바일 게임플랫폼과 인프라 구축 경험기
모바일 게임플랫폼과 인프라 구축 경험기모바일 게임플랫폼과 인프라 구축 경험기
모바일 게임플랫폼과 인프라 구축 경험기
 
카카오뱅크 모바일앱 개발 이야기
카카오뱅크 모바일앱 개발 이야기카카오뱅크 모바일앱 개발 이야기
카카오뱅크 모바일앱 개발 이야기
 
다음 모바일 첫 화면 개선기
다음 모바일 첫 화면 개선기다음 모바일 첫 화면 개선기
다음 모바일 첫 화면 개선기
 
액티브X 없는 블록체인 기반 PKI 시스템
액티브X 없는 블록체인 기반 PKI 시스템액티브X 없는 블록체인 기반 PKI 시스템
액티브X 없는 블록체인 기반 PKI 시스템
 
Klaytn: Service-Oriented Enterprise-Grade Public Blockchain Platform
Klaytn: Service-Oriented Enterprise-Grade Public Blockchain PlatformKlaytn: Service-Oriented Enterprise-Grade Public Blockchain Platform
Klaytn: Service-Oriented Enterprise-Grade Public Blockchain Platform
 
Kakao Cloud Native Platform, 9rum
Kakao Cloud Native Platform, 9rumKakao Cloud Native Platform, 9rum
Kakao Cloud Native Platform, 9rum
 
카프카, 산전수전 노하우
카프카, 산전수전 노하우카프카, 산전수전 노하우
카프카, 산전수전 노하우
 
스프링5 웹플럭스와 테스트 전략
스프링5 웹플럭스와 테스트 전략스프링5 웹플럭스와 테스트 전략
스프링5 웹플럭스와 테스트 전략
 
카카오톡의 서버사이드 코틀린
카카오톡의 서버사이드 코틀린카카오톡의 서버사이드 코틀린
카카오톡의 서버사이드 코틀린
 

글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례

  • 1. 글로벌 게임플랫폼에서 무정지 무점검 서버 개발과 운영 사례 김태현 ) ( & . ) ((. . (. (
  • 3. 년 월 일 장애 당시 화면 장애 당시 화면 대부분의 서비스가 상태로 표시되어있다
  • 4. 장애난 서비스들 년 월 일 ( 장애
  • 5. 손실규모 https://www.foxbusiness.com/markets/amazon-finds-the-cause-of-its-outage-a-typo “54 of the internet's top 100 retailers saw website performance slow by 20% or more. …” “The AWS outage cost companies in the S&P 500 index $150 million, according to Cye nce Inc., …
  • 9. 발표자 소개 • Blizzard 클래식팀에서 서버개발 (Sr. SW Engineer) • 최근까지 Nexon America에서 Sr. Manager, DevOps & Technology 담당 • NDC 2011,12,17년 우수발표 선정 • 1998년에 머신비전 프로그래머로 커리어 시작 후 • 여러 벤처기업과 NHN, SK컴즈 등에서 온라인 어플개발, 게임서버개발 등 담당
  • 10. .. 의 어떤 게임들은 년이 넘는 역사를 가지고 있습니다 클래식팀의 목표는 이런 블리자드 게임들을 게임팬들이 현대적 컴퓨터 환경 에서 계속 즐길 수 있도록 하는 것입니다
  • 11. 0 ,(.. ) NCS 년 이상된 게임을 현대적 환경에서 지속하기위한 기술적인 어려움을 극복하고자 라고 불리는 새로운 서버스택을 개발 새로운 기능 추가와 관리가 쉽도록 하였 습니다
  • 12. . . Datastore Client Game Proxy Rabbit MQ Web API 모든 서버 간의 통신은 를 통해 이루어지며 서버 종류는 역할별로 나뉘어져 있고 이중화 되어 을 이룹니다
  • 13. . , 서버코드는 이 사용되며 네트웍 비동기 엔진은 /+ ++/ & 기반 데이터베이스로 & 을 사용합니다
  • 14. . . 은 과 을 사용합니다
  • 15. 는 /. / 로 , / 되며 인프라는 / . 위에서 으로 구 현되어 있습니다 최근 . 로 / / 중입니다
  • 16. 모니터링은 이라는 자체 제작 시스템을 사용합니다 은 . 기반의 모니터링 인벤토리 툴이며 서버와 직접 통신이 가능한 특징이 있 습니다
  • 17. 데이터 분석을 위한 는 을 활용합니다
  • 18. 여기까지 사용 기술 소개 무정지 무장애를 어렵게 하는 다섯 가지 문제와 해결방법 소개로
  • 19. 무정지 무점검을 어렵게 하는 것들 첫번째 버전 버전
  • 20. 무정지 무점검을 어렵게 하는 것 패치 • 바이너리 교체를 해야 해서 • 로직 재시작을 해야해서 • 새 데이터 로드를 해야해서 • 하위 호환이 안되어서 V2v1 서버에 패치를 적용하기 위해 서버를 내리는 경우가 많습니다
  • 21. 무정지 무점검을 어렵게 하는 것 패치 일반적인 패치 적용 방식 v1 v1 v1 점검이 시작되면
  • 22. 무정지 무점검을 어렵게 하는 것 패치 일반적인 패치 적용 방식 모든 서버를 중지하고
  • 23. 무정지 무점검을 어렵게 하는 것 패치 일반적인 패치 적용 방식 v2 v2 v2 새 버전의 서버로 업데이트 한 뒤
  • 24. 무정지 무점검을 어렵게 하는 것 패치 일반적인 패치 적용방식 v2 v2 v2 서버를 다시 띄웁니다
  • 25. 무정지 무점검을 어렵게 하는 것 패치 & 의 접근방법 v1 v1 v1 저희가 정지 없이 서버 패치를 한 방법은
  • 26. 무정지 무점검을 어렵게 하는 것 패치 & -) ( ) 의 접근방법 v2 v2 v2 Site B v1 v1 v1 새 버전으로 준비된 서버들을 미리 준비하고
  • 27. 무정지 무점검을 어렵게 하는 것 & 패치 .) - ( ) 의 접근방법 v2 v2 v2 Site B 기존 서버로의 추가 유입을 막고 )- 새 버전 서버로 유입되도록 바꿉니다 -
  • 28. 무정지 무점검을 어렵게 하는 것 패치 . 의 접근방법 v2 v2 v2 Site B 과 (.- . 을 계속하여 두 개의 ) . 를 뒤집는 & 방식으로 서비스의 중단 없이 패치를 적용합니다
  • 29. 무정지 무점검을 어렵게 하는 것 패치 & - 의 접근방법 v2 v2 v2 Site A v1 v1 v1 . 이 완료되면 모든 접속이 새 로 붙게 되며 기존 는 됩니다
  • 30. 무정지 무점검을 어렵게 하는 것 패치 & & 의 접근방법 장점 v2 v2 v2 Site A v1 v1 v1 • . - 마다 완전히 서버를 지우고 & - 을 통해 완전히 새로 서버를 만들기 때문에 항상 클린한 서버를 만들 수 있고 또 하드웨어의 이동도 쉽습니다 • 필요하면 이전 사이트로 롤백이 쉽습니다 • 문제가 있을 때 서비스에 지장없이 조사 가능합니다
  • 31. 무정지 무점검을 어렵게 하는 것 패치 && 을 가능하게 한 네 가지 기술 1. VM 2. 하위호환 API 시스템 3. 클린로컬 4. CD/CI 자동화
  • 32. 무정지 무점검을 어렵게 하는 것 패치 기술 & )- ( . Site A & 기반 곧 컨테이너 기반 이므로 새로운 사이트를 만들기가 용이하고 대기 자원 낭비를 줄일 수 있습니다
  • 33. 무정지 무점검을 어렵게 하는 것 & 패치 기술 하위호환 & 시스템 로의 요청은 & 로 이루어지며 모든 요청 처리가 하위 호환 되도록 버전별 & 가 존재합니다 따라서 , .. - 중에도 서비스는 무정지로 동작합니 다 v2 v2 v2 Site B v1 v1 v1
  • 34. 무정지 무점검을 어렵게 하는 것 패치 기술 클린 로컬 호스트에 설정파일을 두지 않고 로그 파일은 자동으로 수집됩니다
  • 35. 무정지 무점검을 어렵게 하는 것 패치 기술& () ( . 4 빌드가 끝나면 자동으로 플랫폼별 패키지가 만들어집니 다 배포는 원클릭으로 실행되며 ,/4 4 - / 업데이트 체크 테스트 완료 단계로 사람의 개입 없이 모두 자동으로 진행됩니다
  • 36. 무정지 무점검을 어렵게 하는 것 설정을...
  • 37. 무정지 무점검을 어렵게 하는 것 설정변경 재시작 없이 설정값을 바꿀 수 없는 경우 설정 변경을 적용하기 위해 서버를 재시작해야합니다
  • 38. 무정지 무점검을 어렵게 하는 것 설정변경 변경된 설정을 적용하려 서버를 재시작하는 경우 설정 파일이 변경되면 대분의 경우 서버는 설정 파일을 다시 읽기 위해 재시작을 합니다
  • 39. 무정지 무점검을 어렵게 하는 것 설정변경 변경된 설정을 적용하려 서버를 재시작하는 경우 설정이 변할 경우 올바른 동작을 보장할 수 없어 서버를 리로드 하기 위해 서버를 먼저 종료합니다
  • 40. 무정지 무점검을 어렵게 하는 것 설정변경 변경된 설정을 적용하려 서버를 재시작하는 경우 서버를 다시 시작하면서 새로운 설정을 읽고 로직을 새로 시작합니다
  • 41. 무정지 무점검을 어렵게 하는 것 설정변경 설정변경 최악의 시나리오 일부 서버의 설정을 바꾸더라도 전체 서버를 재시작해야 하는 경우도 존재합 니다 대표적으로 다음과 같은 경우입니다 • 서버추가나 삭제로 서버 구성이 변할 경우 • 모든 서버가 같은 설정파일을 공유할 경우
  • 42. 무정지 무점검을 어렵게 하는 것 설정변경 & 소개 설정파일이 로컬에 존재하지 않습니다
  • 43. 무정지 무점검을 어렵게 하는 것 설정변경 & 소개 설정이 변경된 후 명령을 서버에 보내면 Flush Flush Flush
  • 44. 무정지 무점검을 어렵게 하는 것 설정변경 소개 서버는 - & 서버에 있는 - & 파일들을 읽어오고 config.server
  • 45. 무정지 무점검을 어렵게 하는 것 설정변경 & 소개 코드를 실행하여 설정 내용을 업데이트 한 뒤 바뀐 설정으로 동작합니 다 이를 가능하게 하기 위해 설정은 & -. 프로토콜을 이용해서 동작 관련 자료구조를을 정의했습니다
  • 46. 무정지 무점검을 어렵게 하는 것 설정변경 & 소개 특정 설정 파일의 선택적 & 도 가능합니다
  • 47. 무정지 무점검을 어렵게 하는 것 설정변경 & 소개 특정 서버만 선택적 업데이트도 역시 가능합니다
  • 48. 무정지 무점검을 어렵게 하는 것 설정변경 & 소개 //------------------------------------------------------------------------------ Void MatchMakerUtilImpl::FlushSeason(const blz::function<void(bool)>& callback) { m_loader.LoadConfigAsync([=](bool res) { if (res) { auto config = m_loader.GetConfig<classic::protocol::config::Seasons>("matchmaker_seasons.pb"); if (config) { m_seasonsByProgramId.clear(); for (auto& s : config->season()) { auto& map = m_seasonsByProgramId[programId]; auto& info = map[s.id()]; auto& bucketInfo = s.bucket_info(); . . . } 코드의 예
  • 49. 무정지 무점검을 어렵게 하는 것 설정변경 & 소개 설정의 예 #Season 1 season { id: 1 start_time_epoch: 1501607149 igr_multi: 1 } #Season 2 season { id: 2 start_time_epoch: 1532467800 igr_multi: 2 bucket_info { bucket : 0 cut_off : 0 award_product_id : 12345 } bucket_info { bucket : 1 cut_off : 100 award_product_id : 23456 }
  • 50. 무정지 무점검을 어렵게 하는 것 사라진 전 개발자. 계획안된 변경. 그 값을 바꿔야 한다. 바꿨어야 했어…
  • 51. 무정지 무점검을 어렵게 하는 것 상수 변경 코드를 짜다보면 반드시 상수가 만들어집니다
  • 52. 무정지 무점검을 어렵게 하는 것 상수변경 상수 변경이 점검 유발 만약 상수 값을 바꾸려고 하면 코드 변경과 재배포가 필요해집니다 따라서 점검을 요하는 경우가 많습니다 2
  • 53. 무정지 무점검을 어렵게 하는 것 상수변경 & 소개 시스템은 서비스 외부에서 정지 없이 상수 값을 실시간으로 수정가능하게 합니다 2
  • 54. 무정지 무점검을 어렵게 하는 것 상수변경 - . . , 소개 - 시스템은 - 시스템의 일부입니다 - 시스템은 작동중인 서비스에 등록된 함수를 실시간 & 로 호출하고 값 을 얻어올 수 있게 하고 이를 툴을 통해 할 수 있습니다 따라서 개발자 뿐만 아니라 프로듀서 누구든 쉽게 값을 바꾸거나 값을 얻어올 수 있습니다 get, set …
  • 55. 무정지 무점검을 어렵게 하는 것 상수변경 & 소개 노출할 함수를 다음과 같이 코드에서 등록할 수 있습니다 모두 비동기로 호출 됩니다 query.RegisterCB([=](const Arg argv[], size_t argc, blz::shared_ptr<Query::Result> result) { QueryConnectionsList(argv, argc, result); }, "web.connections.list", "Show connected clients", "query"); void WebServer::QueryConnectionsList(const Arg argv[], size_t argc, blz::shared_ptr<Query::Result> result) { static const char* s_columns[] = { "Id,40", "Address,120", }; result->Format("Web Connections", s_columns); … }
  • 56. 무정지 무점검을 어렵게 하는 것 상수변경 & 소개 시스템은 & 시스템에 정의된 & 함수를 이용해 값을 설정합니다 Set min = 1
  • 57. 무정지 무점검을 어렵게 하는 것 상수변경 & 소개 시스템으로 변경될 상수는 코드에서는 다음과 같이 등록하도록 구현되어 있습니다 Var::Setting<Time::Tick> m_varChatRequestTimeoutInterval; Var::Setting<blz::string> m_varMessageOfTheDay; Var::Setting<u32> m_varMaxHashSize; Var::Setting<bool> m_varNewbie; Var::ReadOnly<u8> m_level; Var::Statistic<u64> m_varConnectCount; , m_varMessageOfTheDay("Rpc.Chat.MessageOfTheDay", "", "Add MOTD for a game version: [ProgramId] |[Version]|[Message]") , m_varConnectCount("JournalClient.ConnectCount", 0)
  • 59. 무정지 무점검을 어렵게 하는 것 &( 스케일링 스케일링 서비스 규모의 변경에 따라 서버의 규모도 증가합니다 예 ) - .
  • 60. 무정지 무점검을 어렵게 하는 것 스케일링 스케일링으로 인한 점검 만약 서버 구성과 관련한 설정이 존재할 경우
  • 61. 무정지 무점검을 어렵게 하는 것 스케일링으로 인한 점검 서버 구성을 업데이트 하기 위해 설정이 바뀌고 서버의 점검을 유발할 수 있습 니다
  • 62. 무정지 무점검을 어렵게 하는 것 스케일링 스케일링으로 인한 점검 서버 구성을 업데이트 하기 위해 설정이 바뀌고 서버의 점검을 유발할 수 있습 니다
  • 63. 무정지 무점검을 어렵게 하는 것 스케일링 스케일링으로 인한 점검 서버가 늘어날 경우 서버 간의 새로운 연결이 필요한 경우도 있습니다 그럴 때 새로운 접속을 받아들이기 위해 서버를 재시작 하기도 합니다
  • 64. 무정지 무점검을 어렵게 하는 것 스케일링 설정에 서버구성을 두지 않음 & 에는 서버 구성 관련 설정이 기본적으로 존재하지 않고 만에하나 있더라 도 - - -. ,으로 서버 재시작 없이 수정가능합니다
  • 65. 무정지 무점검을 어렵게 하는 것 스케일링 &를 통한 서버 통신으로 직접연결 설정 불필요 는 서버간의 통신을 &를 통하도록 하여 서버간 직접 통신이 필요 없기 때문에 스케일링이 되더라도 서버를 재시작 할 필요가 없도록 되어있습니다
  • 67. 무정지 무점검을 어렵게 하는 것 장애 장애는 피할 수 없습니다 장애에 견디고 복구 가능한지가 중요합니다
  • 68. 무정지 무점검을 어렵게 하는 것 장애 & & 구현 모든 서비스는 & & 프로토콜을 구현하고 있습니다 & & 이 실패할 경우를 모니터링하여 장애를 감지합니다
  • 69. 무정지 무점검을 어렵게 하는 것 장애 & & 코드 예 auto healthCheck = [&](blz::string& meta) { return rabbitMq.IsReady() && s.IsReady() && igrSettings.IgrEnabled(); };
  • 70. 무정지 무점검을 어렵게 하는 것 장애 &에서 이중화 그리고 를 피하기 위해 동종 서비스들은 개념적으로 & 에 담겨 있습니다 장애 감지시 & 에서 제거됩니다 제거되더라도 풀의 다른 서비스들은 계속 서비스가 가능합니다
  • 71. 무정지 무점검을 어렵게 하는 것 장애 서버 종류별 그리고 서비스 종류별로 을 두고 있습니다
  • 72. 무정지 무점검을 어렵게 하는 것 장애 원인 모를 장애시의 대처 방식 만약 예상치 못한 이유로 서비스 전체나 상당부분이 불안정한 경우가 발생한 다면
  • 73. 무정지 무점검을 어렵게 하는 것 & 장애 원인 모를 장애시의 대처 방식 이 때는 . ( ) 을 해서 고치는데 시간을 쓰기 보다는 서버를 다시 배포합니다 배포를 하면 ( 가 교체 - 되도록 되어 있습니 다 Deactivated Activated
  • 75. 의 다양한 형태 조직으로서의 DevOps 개발 방법론의 DevOps 문화로서의 DevOps
  • 78. & & 방법론 문화 • 누구나 코드를 수정할 수 있습니다. • 코드는 Github의 Pull Request, Approval 을 통해 머지됩니다. • Review & Approval 할 사람을 선택할 수 있습니다. • 브랜치 전략은 Gitflow를 따르고 있습니다. • 장애 사항은 모두에게 공유됩니다. • 장애 대응할 사람이 Passive 하게 정해지지 않습니다. Active하게 담 당합니다. (누가 시키지 않고, 각자 자신이 할 수 있는/잘하는 일을 스스로 맡아서 합니다.) • QA, 프로듀서, 엔지니어가 아닌 사람도 쉬운 방법을 통해 시스템을 수정할 수 있습니다. • 실수를 피하거나 두려워 하지 않고 제대로 개선하는 쪽을 선호합 니다.
  • 80. 테스트 서버 운영 전략 • No test build. 모든 빌드는 라이브를 염두한다. • 테섭과 라이브의 배포 방식이 같다. • 테섭의 운영 방식도 라이브와 같다. • 여러개의 테스트 환경을 갖고 있고 필요시 생성한다. • Dev, PTR, Prod 로 나뉜다.
  • 81. Classic 팀이 무정지&무점검을 위해 접근한 방법은 무정지, 무점검 서비스
  • 82. 요약 • CD/CI 자동화로 소프트웨어 변경의 어려움과 배포 리스크 제 거 • 클라우드를 이용해 인프라 자동화 • DevOps 문화로 분업화되었던 소프트웨어 생명주기를 압축 단순화. • Flush, Var, Query System, Site Flipping 기술 개발 무정지, 무점검 서비스
  • 83. DevOps의 미래에 대해 생각해 볼 것 들
  • 84. 개발자 사용자 개발자는 서비스할 코드를 에 등록하고 사용자는 등록된 코드를 리모트로 실행합니다 Serverless
  • 86. 로 하나의 거대한 지구 컴퓨터와 소프트웨어가 분리
  • 87. 서버리스로 가면서 서버 장애에 대한 부담도 클라 우드로 넘어가고 있음 개발자 부담 IDC 호스팅 부담 클라우드 호스팅 부담
  • 89. 손정의 “아웃풋쪽이라 할 수 있는 클라우드 측도 매우 중요합니다. 클라우드 측에서는 GPU의 능력을 중심으로 지금부터 2030년까지는 단일 칩 당 연산 능력이 약 200배가 될 것으로 예상하고 있습니다. 물론 이는 원칩당 능력이지만, 그 칩의 수도 클라우드 측에 점점 늘어 가고, 게다가 클라우드 측의 AI칩과 인풋 측의 ARM칩이 매우 고속으 로 5G, 6G, 7G로 통신합니다. 그러면 AI의 진화라는 것은 무서운 기 세로, 지금부터 2차 곡선으로 뻗어 나간다는 것입니다.” 기사 출처 : http://www.hellodd.com/?md=news&mt=view&pid=65594 2018년 7월19일 소프트뱅크 월드2018 행사 발표 내용 중
  • 90. 시대의 개발 모습은 • 메인보드, 모바일 기기에 CPU처럼 AI 칩이 탑재된다면? • AI 툴킷이 대중화 되고 누구나 쉽게 AI 라이브러리를 쓸 수 있 다면? • AI와 AI를 연결하는 새로운 네트워크 플랫폼이 생긴다면? • AI를 이용한 정보공격&변조에 대비해야 한다면? • …
  • 91. 그리고 시대의 정보 서비스를 개발하고 운영하는 이들의 역할은 무엇일까? • 더 하기 쉬워지는 DevOps • 서비스 개발자의 Ops 부담/업무량 감소가 가져올 변화 • 인프라 호스팅의 개발, 운영 부담/업무량 증가가 가져올 변화 • AI 툴킷/모듈/서비스를 이용한 응용서비스 개발과 배포