아이단은 어디갔을까

순간 순간이 소중한 목적지

envoy와 x-forwarded-proto 헤더 이슈

2019-12-05 Server DevOps Aidan.bae
게임서버를 할땐 x-forwarded 헤더에 대해 깊게 다룰일이 없었는데 프론트단부터 거치는 프록시 서버들이 많은 시스템을 운영하다보니 접속 클라이언트의 정보가 담긴 x-forwarded 헤더를 공부할 기회가 생겼다. x-로 시작하는 헤더는 사용자가 임의로 정의한 헤더를 나타냅니다. 근데 nginx등 오픈소스들이 워낙 많이 쓰이다보니 사실상 표준이 된 케이스가 x-forwarded-* 시리즈임. x-forwarded-for, x-forwarded-proto, x-forwarded-host 위 삼총사는 de-facto standard 헤더로 사실상 표준이 되어버린 헤더임. 이 삼총사는 한세트 묶음으로 보통 전달되며 클라우드 업계에서도 표준으로 자리잡고있음. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Forwarded 예를들면 아래처럼 사용될 수 있습니다. Continue reading

istio debug를 위한 controlZ 활용

2019-11-30 Server DevOps Aidan.bae
istio의 mixer는 서비스에 대한 원격 분석등의 수집을 도와주는 유연한 모델이다. 서비스 옆에 붙어 있는 istio-proxy들의 수집되는 정보들을 mixer를 통해 파이프라이닝 할 수 있다. 그림처럼 adapter api를 사용하기 때문에 다양한 어댑터를 사용해 확장성과 유연성을 다 갖춘 모델이다. istio 믹서에 문제가 생긴다면 서비스에 대한 수집 정보들에 영향이 생길 수 있다. 그러므로 특정 서비스에 라우팅이 안되고 모니터링상 이슈가 없었다면 로그나 수집 데이터를 생성, 운반하는 믹서에 이슈가 있는지 확인해보아야한다. istio는 쿠버네티스 대시보드처럼 손쉽게 istio의 현재 상태와 스코프 기능을 제공하는 controlZ라는 서비스를 제공하고있다. Continue reading

MSA & kubernetes

2019-05-19 DevOps Server Aidan.bae
2016년 12월 발표자료이긴한데 MSA에 대한 이해가 한번에 되는 발표영상이다. 요즘 MSA에 대해 물어보는 동생들이 있어서 바로 추천해주는 영상! 인상적이었던 부분 인상적이었던 부분은 MSA와 팀모델에 대해 설명하는 부분이다. 컨웨이의 법칙 “소프트웨어의 구조는 그 소프트웨어를 만드는 팀의 구조와 일치한다.” ‘팀의 구조??’ 조대협님 왈: 개발 설계 백날 잘해봐야 소용없음 제대로된 팀 구조를 만드는 것이 설계 그다음은 알아서 됨 정말 크게 와닿는다. 게임즈에서는 서버팀이 혼자였기때문에 설계를 모노리틱하게 설계한 것도 있음. 하지만 서버팀이 인원이 늘었을 때도 모노리틱한 구조로 1인1프로젝트가 굉장히 불편했던 것은 맞다. Continue reading

Docker Container 내부 소켓 상태 확인 - nsenter와 netstat

도커로 서비스 개발을 하다보면 상태 확인을 위해 호스트 머신이 아닌 컨테이너에 접근해야하는 경우가 생긴다. 호스트 머신 한 대에 여러 docker 서비스가 떠있을 수 있기 때문이다. (내가 이용 중인 AWS(ECS)도 내가 띄운 서비스 이외에 로그수집기, executor등의 또다른 docker 컨테이너가 떠있다.) 그러므로 호스트 머신에서 netstat 명령어는 모든 도커 서비스의 소켓정보들을 보여주기때문에 특정 서비스에 대한 스코프기능이 지원되지 않는다. 도커를 조금 이용해본 개발자라면 쉽게 docker exec 명령어로 해당 컨테이너에 접근해 내부에서 소켓상태를 살펴보려할 것이다. Continue reading

CPU 캐시 이해하기

2019-04-22 Server DevOps Aidan.bae
CPU 캐시란? 컴퓨터 시스템의 성능을 향상 시키기 위해 주로 CPU칩 안에 포함되는 빠르고 작은 매우 비싼 메모리입니다. 프로그램에서 직접적으로 읽거나 쓸 수 없고 하드웨어의 메모리 관리 시스템이 내부적으로 제어합니다. 대부분의 프로그램은 한번 사용할 데이터를 다시 사용할 가능성이 높고, 그 주변의 데이터도 곧 사용할 가능성이 높은 데이터 지역성을 가지고 있다. 데이터 지역성을 활용하여 메인 메모리에 있는 데이터를 캐시 메모리에 불러와 두고, cpu가 필요한 데이터를 캐시에서 먼저 찾도록 하면 향상시킬수 있다. 여기서 포인트는 데이터의 지역성을 활용한다! Continue reading

tcmalloc

2019-04-16 Server Aidan.bae
go tune memory 발표자료를 보면서 구경한 파생 지식 tcmalloc 구글 공식 문서 http://goog-perftools.sourceforge.net/doc/tcmalloc.html 구글에서 만든 TCMalloc 보통 멀티 스레드 환경의 서버를 만들다보면 메모리 풀을 사용하게 된다. 메모리 풀의 이점: 빠른메모리할당 메모리 단편화 감소 하나의 거대한 메모리 풀을 사용하면 단순하게 malloc을 호출해서 메모리를 할당하는 것 보다 속도가 빠르다. 메모리 풀에 따라 다르겠지만 일반적으로 볼ㄸ ㅐ 처음 프로그래밍이 실행될 때 필요한 메모리를 통째로 잡아놓고 메모리가 필요한 경우에는 잡아놓은메모리 안에서 잘라서 주기 때문입니다. Continue reading

Golang 결제검증서버 구현 - Validator 디자인

Intro 결제 와 관련된 정보는 고객 입장에서도 회사 입장에서도 매우 중요한 정보이다. 타사(구글, 페이스북, 샘성)의 결제모듈을 활용한다면 그 절차 사이사이의 검증과 기록은 결제검증서버가 해야할 필수적인 부분- 이번에 페이스북으로 글로벌 게임서버 런칭을 진행하면서 페이스북 결제를 활용해 돈방석에 앉아보기로 팀방향이 결정되었고(제발~) 우리 서버팀은 그 돈방석의 영수증 역할을 할 결제검증서버를 구현하게되었다. 이전에 불확실성을 줄이기위해 방명록을 간단하게 만들어보면서 orm프레임워크, mariadb 등을 확인했었고 그 연장선에서 이번 검증서버 프로젝트는 xorm과 web framework는 gin을 활용하기로 했다. Point 결제 쪽에 자신감이 넘치는 팀장님이 명확한 로직을 제시해주었기때문에 코딩은 어렵지 않았다. Continue reading
Older posts