Github 엔지니어가 플랫폼 문제를 해결하는 방법
여가 시간에는 Gundam Universe에서 상징적 인 mechas를 구축하는 모델 키트 인 Gundam 모델을 만드는 것을 좋아합니다. 소프트웨어 엔지니어링과 어떤 관련이 있는지 궁금 할 것입니다. 제품 엔지니어는 이러한 키트를 가져 와서 건담 자체를 구축하는 엔지니어로 볼 수 있습니다. 그들은 모든 조각을 활용하고 수집하거나 놀리는 재미있는 제품을 만들 수 있습니다!
반면에 플랫폼 엔지니어는 클리퍼 및 파일과 같은 키트를 구축하는 데 필요한 도구를 제공하고 모든 사람이 최종 제품을 볼 수 있도록 멋진 디스플레이를 구축 할 수도 있습니다. 그들은 그것을 건설하는 사람은 건담을 물리적으로 구축하지 않더라도 필요한 모든 도구를 가지고 있는지 확인합니다.

약 1 년 전, Github의 저의 팀은 인프라 조직으로 이사하여 새로운 역할과 책임 영역 (AOR)을 물려 받았습니다. 이전에 팀은 환경에 걸쳐 새로운 배포보기 구축과 같은 외부 고객 문제를 해결했습니다. 여기에는 각 산업 내에서 문제를 해결하기 위해 Github에 의존하는 사용자와 상호 작용하는 것이 포함되었습니다. 플랫폼 엔지니어링 팀으로서의 새로운 고객은 내부우리의 책임은 우리가 이전에했던 제품 중심의 엔지니어링 작업과 다르게 만듭니다.
키트를 구축하기보다는 Gundam 예로 돌아가서 키트의 구성 요소를 구축 할 책임이 있습니다. 이 변경에 적응하면 코드 테스트 및 문제 해결에 대한 접근 방식을 다시 생각해야했습니다.
제품 엔지니어링 또는 플랫폼 측면에서 작업하든 플랫폼 문제를 해결하기위한 몇 가지 모범 사례가 있습니다.
도메인 이해
문제를 해결하기 전에 가장 중요한 단계 중 하나는 도메인을 이해하는 것입니다. “도메인”은 팀 및 플랫폼 조직이 운영하는 비즈니스 및 기술 주제 영역입니다. 이를 위해서는 기술적 인 용어와 이러한 시스템이 빠르고 신뢰할 수있는 솔루션을 제공하기 위해 어떻게 상호 작용하는지에 대한 이해를 얻어야합니다. 속도를 높이는 방법은 다음과 같습니다.
- 이웃과 대화하십시오 : 주제에 대한 지식과 경험이 더 많은 팀과의 핸드 오버 회의를 마련하십시오. 이 회의는 용어에 대한 질문을하고 팀이 다룰 문제에 대한 더 깊은 이해를 얻을 수있는 기회를 제공합니다.
- 오래된 문제 조사 : 부실하거나 여전히 지속적인 문제의 백 로그가있는 경우 시스템의 현재 한계와 개선을위한 잠재적 영역을 더 잘 이해할 수 있습니다.
- 문서 읽기 : 문서는 시스템의 작동 방식을 이해하는 데 도움이되는 지식의 금광입니다.
플랫폼 별 기술에 대한 개념을 브리징합니다
앞의 조언은 제품 및 플랫폼 팀 모두에게 적용 가능한 일반적인 지침을 제공하지만 플랫폼 팀 (기초 계층 역할을하는 플랫폼 팀)은보다 심층적 인 이해가 필요합니다.
- 네트워크: 네트워크 기초를 이해하는 것은 모든 엔지니어, 네트워크 운영에 직접 관여하지 않은 사람들에게도 중요합니다. 여기에는 TCP, UDP 및 L4로드 밸런싱과 같은 개념과 DIG와 같은 디버깅 도구가 포함됩니다. 네트워크 트래픽이 플랫폼에 어떤 영향을 미치는지 이해하려면 이러한 영역에 대한 확실한 파악이 필수적입니다.
- 운영 체제 및 하드웨어 : 적절한 가상 머신 (VMS) 또는 물리적 하드웨어를 선택하는 것은 확장 성과 비용 관리 모두에 필수적입니다. 특정 응용 프로그램에 대한 정보를 잘 선택하려면 두 가지를 강력하게 이해해야합니다. 이는 기계에 적합한 운영 체제를 선택하는 것과 밀접한 관련이 있으며, 이는 취약성이있는 시스템이나 수명이 가까워지는 시스템을 피하는 데 중요합니다.
- 코드 (IAC)로서의 인프라 : Terraform, Ansible 및 Consul과 같은 자동화 도구가 점점 필수화되고 있습니다. 이러한 도구의 숙련도는 인프라 프로비저닝 및 수정 중에 인적 오류를 크게 줄이면서 필수가되고 있습니다.
- 분산 시스템: 특히 분산 시스템에서 플랫폼 문제를 다루려면 실패가 불가피하다는 깊은 이해가 필요합니다. 결과적으로, 장애 조치 및 복구 메커니즘과 같은 사전 사전 솔루션을 사용하는 것은 시스템 신뢰성을 보존하고 불리한 사용자 경험을 방지하는 데 중요합니다. 이에 대한 최적의 접근법은 전적으로 특정 문제와 원하는 시스템 동작에 달려 있습니다.
지식 공유
교훈과 아이디어를 공유함으로써 엔지니어는 획기적인 관점을 도입하여 돌파구와 혁신으로 이어질 수 있습니다. 프로젝트 나 솔루션이 왜 작동했는지 또는 작동하지 않았는지 이해하고 이러한 결과를 공유하는 데 시간을 내면 앞으로 사용할 수있는 새로운 관점이 제공됩니다.
지식 공유가 중요한 세 가지 이유는 다음과 같습니다.
- 팀워크는 꿈을 이루게합니다. 공동 작업은 종종 더 빠른 문제 해결을 초래하고 새로운 솔루션 혁신을 촉진합니다. 엔지니어는 서로 배우고 기존 아이디어를 확장 할 수있는 기회를 갖기 때문입니다.
- 지식을 잃어 버립니다: 배운 교훈을 공유하지 않으면 팀이나 조직에서 정보가 전파되는 것을 방지합니다. 엔지니어가 회사를 떠나거나 단순히 사용할 수없는 경우 문제가됩니다.
- 고객 성공을 향상시킵니다. 엔지니어로서 우리의 솔루션은 고객에게 효과적으로 서비스를 제공해야합니다. 배운 지식과 교훈을 공유함으로써 우리는 팀이 신뢰할 수 있고 확장 가능하며 안전한 플랫폼을 구축하도록 도울 수있어 고객의 요구와 기대를 충족시키는 더 나은 제품을 만들 수 있습니다!
그러나 충격 반경과 테스트 프로세스와 관련하여 제품 엔지니어링과 인프라 엔지니어링간에 큰 차이가 나타나기 시작합니다.
충격 반경
플랫폼이 시스템의 기본 빌딩 블록이기 때문에 모든 변경 (작은 또는 큰)은 광범위한 제품에 영향을 줄 수 있습니다. 우리 팀은 수많은 제품에 영향을 미치는 기본 서비스 인 DNS에 대한 책임이 있습니다. 이 서비스에 대한 사소한 변경조차도 광범위한 영향을 미쳐서 사이트 전체의 컨텐츠에 대한 액세스를 방해하고 Github 페이지에서 Github Copilot에 이르는 제품에 영향을 줄 수 있습니다.
- 반경 이해 : 또는 다운 스트림 의존성을 이해합니다. 당사 서비스에 의존하는 팀과의 직접 커뮤니케이션은 제안 된 변경이 다른 서비스에 어떤 영향을 미칠 수 있는지에 대한 귀중한 통찰력을 제공합니다.
- 사후 : 우리 플랫폼과 관련된 과거 사건을보고“이 사건의 영향은 무엇입니까?”, 우리는 어떤 변화 또는 실패가 소개되었는지, 플랫폼에서 어떻게 중요한 역할을했는지, 그리고 그것이 어떻게 고정되었는지에 대해 더 많은 맥락을 형성 할 수 있습니다.
- 모니터링 및 원격 측정 : 중요하고 빠르게 소화 가능한 매체에 중요한 모니터링 및 로그인하여 시스템의 일반적인 건강을 제공하십시오. 예를 들어 SAM (Single Availability Metric) 일 수 있습니다. 단일 대시 보드를 신속하게 볼 수있는 기능을 통해 엔지니어는 문제의 소스를 신속하게 정확하게 정확하게 정확하게 지적하고 상세한 모니터 또는 로그 메시지를 검색하고 해석하는 것과 비교하여 디버깅 및 입사 완화 프로세스를 간소화 할 수 있습니다.
테스트 변경
분산 환경의 변화를 테스트하는 것은 특히 DNS와 같은 서비스의 경우 어려울 수 있습니다. 이 문제를 해결하는 데 중요한 단계는 모든 변경 사항을 구현하고 평가할 수있는 “실제”기계로 테스트 사이트를 사용하는 것입니다.
- 코드 (IAC)로서의 인프라 : Terraform 또는 Ansible과 같은 도구를 사용하는 경우 프로비저닝 및 비비 분할 기계와 같은 기본 작업을 테스트하는 것이 중요합니다. 기계를 다시 제공 해야하는 상황이 있습니다. 이 경우 기계가 실수로 삭제되지 않았으며 필요한 경우 새 제품을 만들 수있는 기능을 유지하고자합니다.
- 엔드 투 엔드 (E2E) : 일부 네트워크 트래픽을 이러한 서버로 지시하십시오. 그런 다음 팀은 호스트 동작과 직접 상호 작용하여 호스트 동작을 관찰하거나 소수의 트래픽을 전환하여 기능을 평가할 수 있습니다.
- 자기 치유: 우리는 플랫폼의 예기치 않은 하중에서 복구하는 기능을 테스트하고 사용자에게 영향을 미치기 전에 병목 현상을 식별하려고합니다. 병목 현상 또는 버그의 조기 식별은 플랫폼의 건강을 유지하는 데 중요합니다.
테스트가 완료되면 호스트별로 변경 사항이 이상적으로 구현됩니다. 이 접근법은 개별 기계 롤백을 허용하고 영향을받지 않는 호스트에 적용되는 것을 방지합니다.
기억해야 할 것
플랫폼 엔지니어링은 어려울 수 있습니다. GitHub가 작동하는 시스템은 복잡하며 많은 서비스와 이동 부품이 있습니다. 그러나 모든 것이 함께 모이는 것을 보는 것만 큼 좋은 것은 없습니다. 우리 엔지니어링 팀이 플랫폼이 원활하게 운영되고 팀이 더 빠르고 안정적으로 배송 할 수있을 때 우리 엔지니어링 팀이 무대 뒤에서하는 모든 노력은 실제로 Github가 모든 개발자의 본거지가 될 수 있습니다.
더 깊이 다이빙하고 싶습니까? 인프라 관련 블로그 게시물을 확인하십시오.
작성자가 작성했습니다
Post Comment