#gdc12 #review Developing Imperfect Software: How to Prepare for Production Pipeline Failure

downtime을 줄이려는 노력이 보이는 발표. assert는 고려해봐야겠다. undo/redo 데이터를 luna server에 저장한 게 인상적.

downtime

/pnotes/assets/2016-08-27-gdc12-developing-imperfect-software-how-to-prepare-for-production-pipeline-failure-00.jpg

  • 기다리는 사람 수를 곱해줘야 한다.
  • 당연하지만 잊기 쉬운 사항. 명심.

engine data

/pnotes/assets/2016-08-27-gdc12-developing-imperfect-software-how-to-prepare-for-production-pipeline-failure-01.jpg

  • engine data 정의
  • game 바이너리에 의해 메모리에 올라가는 data

engine data format

load-n-go

  • 읽을 포맷을 struct로 정의하고 사이즈만큼 읽어서 변수에 바인딩
  • CPU overhead가 적지만, data와 code 종속성이 강하다
  • 버전이 바뀔 때마다 골치

read-n-build

  • data 요소를 하나하나 읽는 방식
  • CPU overhead가 크다
  • 호환성이 장점

structured binary

/pnotes/assets/2016-08-27-gdc12-developing-imperfect-software-how-to-prepare-for-production-pipeline-failure-02.jpg

  • read-n-build의 호환성 장점을 취함
  • load-n-go의 binary block loading 장점 취함

전략

  • version number가 같다면 load-n-go처럼 동작
  • version number가 다르다면 read-n-build처럼 동작
    • serialize가 필요한 구조체마다 DDL(Data Definition Language)이 만든 .h, .cpp 사용

assertion

/pnotes/assets/2016-08-27-gdc12-developing-imperfect-software-how-to-prepare-for-production-pipeline-failure-03.jpg

  • assert와 if를 따로 항상 짝을 맞춰 코드를 짜는데, true, false를 리턴하게 ASSERT 매크로를 만드는 것도 좋은 생각
    • debug에만 assert 내용이 활성화된다는 코딩 관습으로는 헷갈려 보이지만 assert와 if 짝을 강제해 얻는 이득이 더 커 보인다.

/pnotes/assets/2016-08-27-gdc12-developing-imperfect-software-how-to-prepare-for-production-pipeline-failure-04.jpg

  • skip이 가능한 assert는 절대 고쳐지지 않는다. 옳소
  • 그래서 crash report와는 별개로 assert report도 쌓는다
  • local에 먼저 쌓고 비동기로 서버에 전송(MongoDB 사용)

client/server tools architecture

/pnotes/assets/2016-08-27-gdc12-developing-imperfect-software-how-to-prepare-for-production-pipeline-failure-05.jpg

  • luna server는 local
  • editor crash에 독립
  • undo/redo를 luna server에 저장한 게 인상적

see also

발표


크리에이티브 커먼즈 라이선스
Feedback plz <3 @ohyecloudy, ohyecloudy@gmail.com
|