이 기사는 QCon 글로벌 소프트웨어 개발 컨퍼런스에서 Volcano Engine의 수석 R&D 엔지니어인 Shao Wei가 한 연설을 바탕으로 작성되었습니다. 연사 │ Shao Wei 연설 시간 │ 2023년 5월 QCon 광저우
1.배경
Byte는 2016년부터 서비스를 클라우드 기반 서비스로 전환하기 시작했습니다. 현재 Byte의 서비스 시스템에는 주로 4가지 범주가 포함됩니다. 기존 마이크로서비스 는 대부분 Golang을 기반으로 하는 RPC 웹 서비스입니다. 프로모션 검색 서비스는 성능이 더 뛰어난 기존 C++ 서비스입니다. 요구 사항 외에도 기계 학습, 빅 데이터 및 다양한 스토리지 서비스 도 있습니다 .
클라우드 네이티브 이후 해결해야 할 핵심 문제는 일반적인 온라인 서비스의 리소스 사용량을 예로 들어 클러스터의 리소스 활용 효율성을 어떻게 향상시킬 것인가이며, 진한 파란색 부분은 비즈니스에서 실제로 사용하는 리소스의 양입니다. , 하늘색 부분은 사업영역에서 제공하는 보안 버퍼로, 완충 영역을 늘려도 사업체에서 신청했지만 사용하지 못한 자원이 여전히 많이 남아있습니다. 따라서 최적화의 초점은 아키텍처 관점에서 이러한 사용되지 않는 리소스를 최대한 활용하는 것입니다.
자원 관리 계획
Byte는 내부적으로 다음을 포함하여 여러 가지 유형의 리소스 관리 솔루션을 시도했습니다.
- 자원 운영: 정기적으로 기업의 자원 활용 현황을 지원하고 자원 활용 관리를 촉진합니다. 문제는 운영 및 유지 관리 부담이 크고 활용 문제를 해결할 수 없다는 것입니다.
- 동적 초과 예약: 시스템 측에서 비즈니스 리소스의 양을 평가하고 할당량을 사전에 줄입니다. 문제는 초과 예약 전략이 반드시 정확하지 않고 실행 위험으로 이어질 수 있다는 것입니다.
- 동적 확장: 문제는 온라인 서비스만 확장 대상으로 삼을 경우 온라인 서비스의 트래픽 최고점과 최저점이 비슷하기 때문에 하루 종일 활용도를 완전히 향상시킬 수 없다는 것입니다.
따라서 결국 Byte는 동일한 노드에서 온라인과 오프라인을 동시에 실행하는 하이브리드 배포를 채택하고 온라인과 오프라인 리소스 간의 상호 보완적인 특성을 최대한 활용하여 더 나은 리소스 활용도를 달성할 수 있을 것으로 기대합니다. 즉, 2차 판매는 온라인으로 이루어집니다. 미사용 자원은 오프라인 작업량으로 잘 채워져 하루 종일 높은 수준의 자원 활용 효율을 유지할 수 있습니다.
2. 바이트 하이브리드 배포 개발 내역
Byte Cloud가 기본화됨에 따라 우리는 비즈니스 요구 사항과 다양한 단계의 기술적 특성을 기반으로 적절한 하이브리드 배포 솔루션을 선택하고 그 과정에서 하이브리드 시스템을 계속 반복합니다.
2.1 1단계: 오프라인 시분할 혼합
첫 번째 단계에는 주로 온라인 및 오프라인 시분할 하이브리드 배포가 포함됩니다.
- 온라인: 이 단계에서 우리는 온라인 서비스 탄력성 플랫폼을 구축했습니다. 사용자는 비즈니스 지표를 기반으로 수평적 확장 규칙을 구성할 수 있습니다. 예를 들어 이른 아침에 비즈니스 트래픽이 감소하고 비즈니스가 사전에 일부 인스턴스를 축소하는 경우 시스템은 리소스를 수행합니다. 인스턴스 축소를 기준으로 빙 패킹을 수행하면 전체 시스템이 해제됩니다.
- 오프라인의 경우: 이 단계에서 오프라인 서비스는 대량의 현물형 자원을 확보할 수 있으며 공급이 불안정하기 때문에 동시에 비용에 대해 일정한 할인을 받을 수 있습니다. 온라인의 경우 사용하지 않는 자원을 오프라인에 판매할 수 있습니다. 비용에 대해 특정 리베이트를 얻습니다.
이 솔루션의 장점은 복잡한 단일 기계 측면 격리 메커니즘이 필요하지 않으며 기술 구현이 상대적으로 낮다는 것입니다. 그러나 다음과 같은 몇 가지 문제도 있습니다.
- 변환 효율이 높지 않으며 빙 패킹 과정에서 조각화와 같은 문제가 발생할 수 있습니다.
- 오프라인 경험도 좋지 않을 수 있습니다. 온라인 트래픽이 가끔씩 변동되면 오프라인 사용자가 강제로 종료되어 리소스 변동이 심해질 수 있습니다.
- 이로 인해 비즈니스에 인스턴스 변경이 발생하게 됩니다. 실제 운영에서 비즈니스는 일반적으로 상대적으로 보수적인 탄력적 정책을 구성하므로 리소스 개선에 대한 상한이 낮습니다.
2.2 2단계: Kubernetes/YARN 공동 배포
위의 문제를 해결하기 위해 2단계로 진입하여 하나의 노드에서 오프라인과 온라인을 동시에 실행해 보았습니다.
온라인 부분은 이전에 Kubernetes를 기반으로 기본적으로 변환되었으므로 대부분의 오프라인 작업은 여전히 YARN을 기반으로 실행됩니다. 하이브리드 배포를 촉진하기 위해 단일 시스템에 타사 구성 요소를 도입하여 온라인과 오프라인으로 조정되는 리소스의 양을 결정하고 동시에 Kubelet 또는 Node Manager와 같은 독립형 구성 요소와 연결합니다. 온라인 및 오프라인 워크로드는 노드에 예약되고 노드에 의해 조정됩니다. 조정 구성 요소는 두 워크로드에 대한 리소스 할당을 비동기적으로 업데이트합니다.
이 계획을 통해 코로케이션 역량의 예비 축적을 완료하고 타당성을 검증할 수 있지만 여전히 몇 가지 문제가 있습니다.
- 두 시스템은 비동기식으로 실행되므로 오프라인 컨테이너는 관리 및 제어만 우회할 수 있으며 경합이 발생하고 중간 링크에서 너무 많은 리소스 손실이 발생합니다.
- 오프라인 작업 부하를 간단하게 추상화하므로 복잡한 QoS 요구 사항을 설명할 수 없습니다.
- 오프라인 메타데이터의 단편화로 인해 극단적인 최적화가 어려워지고 글로벌 스케줄링 최적화를 달성할 수 없습니다.
2.3 3단계: 통합 예약 및 오프라인 혼합 배포
두 번째 단계의 문제를 해결하기 위해 세 번째 단계에서는 통합 오프라인 하이브리드 배포를 완전히 실현했습니다.
오프라인 작업을 클라우드 네이티브로 만들어 동일한 인프라에서 작업을 예약하고 리소스를 관리할 수 있습니다. 이 시스템에서 최상위 계층은 다중 클러스터 리소스 관리를 실현하기 위한 통합 리소스 연합입니다. 단일 클러스터에는 중앙 통합 스케줄러와 독립형 통합 리소스 관리자가 함께 작동하여 오프라인 통합 리소스 관리 기능을 달성합니다. .
이 아키텍처에서 Katalyst는 핵심 리소스 관리 및 제어 계층 역할을 하며 단일 머신 측에서 실시간 리소스 할당 및 추정을 구현하는 역할을 담당합니다.
- 추상화 표준화: 오프라인 메타데이터를 개방하고 QoS 추상화를 더욱 복잡하고 풍부하게 만들고 비즈니스 성능 요구 사항을 더 잘 충족시킵니다.
- 관리 및 제어 동기화: 관리 및 제어 정책은 시작 후 리소스 조정의 비동기 수정을 방지하기 위해 컨테이너가 시작될 때 발행되며 정책의 무료 확장을 지원합니다.
- 지능형 전략: 서비스 초상화를 구축하면 리소스 수요를 미리 감지하고 보다 스마트한 리소스 관리 및 제어 전략을 구현할 수 있습니다.
- 운영 및 유지보수 자동화 : 통합 납품을 통해 운영 및 유지보수 자동화 및 표준화가 이루어집니다.
3. 카탈리스트 시스템 소개
Katalyst는 원래 촉매를 의미하는 영어 단어 Catalyst에서 파생되었습니다. 첫 글자가 K로 변경되었습니다. 이는 시스템이 Kubernetes 시스템에서 실행되는 모든 로드에 대해 보다 강력한 자동화된 리소스 관리 기능을 제공할 수 있음을 의미합니다.
3.1 Katalyst 시스템 개요
Katalyst 시스템은 대략 다음과 같은 4개 계층으로 나뉩니다.
- 최상위 표준 API는 사용자를 위해 다양한 QoS 수준을 추상화하고 풍부한 리소스 표현 기능을 제공합니다.
- 중앙 계층은 통합 일정 관리, 리소스 추천, 서비스 초상화 구축과 같은 기본 기능을 담당합니다.
- 독립형 레이어에는 자체 개발한 데이터 모니터링 시스템과 실시간 할당 및 리소스 동적 조정을 담당하는 리소스 할당자가 포함됩니다.
- 맨 아래 계층은 바이트 맞춤형 커널로, 커널 패치와 기본 격리 메커니즘을 강화하여 오프라인으로 실행할 때 단일 시스템 성능 문제를 해결합니다.
3.2 추상적인 표준화: QoS 클래스
Katalyst QoS는 거시적 관점과 미시적 관점 모두에서 해석될 수 있습니다.
- 거시적 수준에서 Katalyst는 CPU의 기본 차원을 기반으로 표준 QoS 수준을 정의합니다. 특히 QoS를 독점, 공유, 재활용 및 주요 시스템 구성 요소용으로 예약된 시스템 유형의 네 가지 범주로 나눕니다.
- 미시적 관점에서 Katalyst의 최종 기대치는 어떤 종류의 워크로드이든 하드 커팅을 통해 클러스터를 격리할 필요 없이 동일한 노드의 풀에서 실행될 수 있어 더 나은 리소스 트래픽 효율성과 리소스 활용도를 달성할 수 있다는 것입니다. 능률.
QoS를 기반으로 Katalyst는 CPU 코어 외에 다른 리소스 요구 사항을 표현하기 위한 풍부한 확장 기능 향상도 제공합니다.
- QoS 향상: NUMA/네트워크 카드 바인딩, 네트워크 카드 대역폭 할당, IO 가중치 등과 같은 다차원 리소스에 대한 비즈니스 요구 사항의 확장된 표현입니다.
- Pod 향상: CPU 스케줄링 지연이 비즈니스 성능에 미치는 영향 등 다양한 시스템 지표로 비즈니스 민감도 표현을 확장합니다.
- 노드 향상: 기본 TopologyPolicy를 확장하여 여러 리소스 차원에서 마이크로 토폴로지의 결합된 요구 사항을 표현합니다.
3.3 관리 및 제어 동기화: QoS 자원 관리자
K8s 시스템에서 동기식 관리 및 제어 기능을 달성하기 위해 CRI 레이어 삽입, OCI 레이어 및 Kubelet 레이어의 세 가지 후크 방법이 있습니다. 결국 Katalyst는 Kubelet 측에서 관리 및 제어를 구현하기로 결정했습니다. 기본 장치 관리자와 동일한 수준에서 QoS 리소스 관리자를 구현하는 경우 이 프로그램의 장점은 다음과 같습니다.
- 승인 단계에서 차단을 구현하여 후속 단계에서 제어를 달성하기 위해 은밀한 조치에 의존할 필요가 없습니다.
- Kubelet과 메타데이터를 연결하고, 표준 인터페이스를 통해 단일 머신 마이크로토폴로지 정보를 노드 CRD에 보고하고, 스케줄러로 도킹을 실현합니다.
- 이 프레임워크를 기반으로 플러그형 플러그인을 유연하게 구현하여 맞춤형 관리 및 제어 요구 사항을 충족할 수 있습니다.
3.4 지능형 전략: 서비스 초상화 및 리소스 추정
일반적으로 서비스 P99 지연 또는 다운스트림 오류율과 같은 서비스 초상화를 구축하기 위해 비즈니스 지표를 사용하도록 선택하는 것이 더 직관적입니다. 그러나 몇 가지 문제도 있습니다. 예를 들어, 시스템 지표와 비교하면 일반적으로 비즈니스 지표를 얻는 것이 더 어렵습니다. 기업은 일반적으로 여러 프레임워크를 통합하고, 그들이 생성하는 비즈니스 지표의 의미가 정확히 동일하지 않습니다. 이러한 지표에 대한 의존도가 높으면 전체 통제 구현이 매우 복잡해집니다.
따라서 최종 리소스 제어 또는 서비스 초상화는 비즈니스 지표가 아닌 시스템 지표를 기반으로 하기를 바랍니다. 가장 중요한 것은 비즈니스가 가장 관심을 갖는 시스템 지표를 찾는 방법입니다. 우리의 접근 방식은 일련의 오프라인을 사용하는 것입니다. 비즈니스 지표를 발견하는 파이프라인. 예를 들어, 그림의 서비스에 대해 핵심 비즈니스 지표는 P99 지연이며, 분석을 통해 가장 높은 상관 관계를 보이는 시스템 지표는 CPU 스케줄링 지연에 접근하도록 지속적으로 조정해 나갈 것입니다. CPU 스케줄링을 최대한 지연시키는 것이 목표입니다.
서비스 초상화를 기반으로 Katalyst는 CPU, 메모리, 디스크 및 네트워크에 대한 풍부한 격리 메커니즘을 제공하고 더 강력한 성능 요구 사항을 제공하기 위해 필요한 경우 커널을 사용자 정의합니다. 그러나 다양한 비즈니스 시나리오 및 유형에 대해 이러한 수단이 반드시 적용되는 것은 아닙니다. 격리는 목적보다는 수단에 가깝다는 점을 강조해야 합니다. 비즈니스를 수행하는 과정에서 특정 요구 사항과 시나리오에 따라 다양한 격리 솔루션을 선택해야 합니다.
3.5 운영 및 유지관리 자동화: 다차원적 동적 구성 관리
모든 리소스가 리소스 풀 시스템에 있기를 바라지만 대규모 프로덕션 환경에서는 모든 노드를 클러스터에 배치하는 것이 불가능합니다. 또한 클러스터에는 CPU와 GPU 시스템이 모두 있을 수 있습니다. 공유되지만 노드 수준에서 특정 격리가 필요하므로 그레이스케일 확인을 위해 노드 차원 구성을 수정해야 하는 경우가 많아 동일한 노드에서 실행되는 다양한 서비스의 SLO에 차이가 발생합니다.
이러한 문제를 해결하려면 비즈니스 배포 중에 다양한 노드 구성이 서비스에 미치는 영향을 고려해야 합니다. 이를 위해 Katalyst는 자동화된 방법을 통해 다양한 노드의 성능과 구성을 평가하고 이러한 결과를 기반으로 서비스에 가장 적합한 노드를 선택하는 표준 제공을 위한 동적 구성 관리 기능을 제공합니다.
4. Katalyst 코로케이션 적용 및 사례 분석
이 섹션에서는 Byte의 내부 사례를 기반으로 몇 가지 모범 사례를 공유하겠습니다.
4.1 활용효과
Katalyst 구현 효과 측면에서 Byte의 내부 비즈니스 관행에 따르면 단일 클러스터에서 분기별 주기 동안 리소스를 상대적으로 높은 상태로 유지할 수 있으며, 리소스 활용도 매일 다양한 시간대에서 상대적으로 높은 수준을 나타냅니다. 안정적인 배포; 동시에 클러스터에 있는 대부분의 시스템 활용도 상대적으로 집중되어 있으며 하이브리드 배포 시스템은 모든 노드에서 비교적 안정적으로 실행됩니다.
자원 예측 알고리즘 | 재생 자원 비율 | 일별 평균 CPU 사용률 | 일일 최고 CPU 사용률 |
---|---|---|---|
활용 고정 버퍼 | 0.26 | 0.33 | 0.58 |
k-평균 클러스터링 알고리즘 | 0.35 | 0.48 | 0.6 |
시스템 표시기 PID 알고리즘 | 0.39 | 0.54 | 0.66 |
시스템 지표 모델 추정 + PID 알고리즘 | 0.42 | 0.57 | 0.67 |
4.2 연습: 오프라인 무의미한 액세스
3단계에 진입한 후에는 오프라인에서 클라우드 네이티브 전환을 수행해야 합니다. 변환에는 두 가지 주요 방법이 있는데, 하나는 이미 K8s 시스템에 있는 서비스를 위한 것이고, 다른 하나는 서비스가 Kubernetes 시스템에 직접 연결된 경우입니다. , 프레임워크의 완전한 변화는 비즈니스에 매우 큰 비용이 들며 이론적으로 모든 비즈니스에 대한 롤링 업그레이드로 이어질 것입니다. 이는 분명히 이상적인 상태는 아닙니다.
이 문제를 해결하기 위해 Byte는 Yodel의 글루 레이어를 참조합니다. 즉, 비즈니스 액세스는 여전히 표준 Yarn API를 사용하지만 이 글루 레이어에서는 기본 K8s 의미론과 인터페이스하고 사용자의 리소스 요청을 추상화합니다. Pod 또는 컨테이너 설명과 같은 것입니다. 이 방법을 통해 우리는 하위 수준에서 보다 성숙한 K8s 기술을 사용하여 리소스를 관리하고 오프라인 클라우드 기반 전환을 달성하는 동시에 비즈니스 안정성을 보장할 수 있습니다.
4.3 실습: 자원 운영 거버넌스
코로케이션 프로세스 동안 우리는 빅 데이터 및 교육 프레임워크를 조정 및 변환하고 다양한 재시도, 체크포인트 및 등급 지정을 수행하여 이러한 빅 데이터 및 교육 작업을 전체 코로케이션 리소스 풀로 축소한 후 사용 경험은 그리 나쁘지 않습니다.
동시에 자원 상품, 비즈니스 분류, 운영 거버넌스, 시스템 할당량 관리에 대한 완전한 기본 기능을 갖추어야 합니다. 운영이 제대로 이루어지지 않으면 특정 피크 기간에는 가동률이 매우 높지만, 다른 기간에는 자원 격차가 커서 가동률이 기대에 미치지 못할 수 있습니다.
4.4 실습: 자원 효율성 향상 극대화
서비스 초상화를 구축할 때 관리 및 통제를 위해 시스템 지표를 사용합니다. 그러나 오프라인 분석을 기반으로 하는 정적 시스템 지표는 비즈니스 측면의 변화를 실시간으로 따라잡을 수 없습니다. 정적 값을 조정할 시간입니다.
이를 위해 Katalyst는 시스템 측정항목을 미세 조정하는 모델을 도입합니다. 예를 들어, CPU 스케줄링 지연이 x밀리초일 수 있다고 생각하고 일정 시간이 지난 후 모델을 통해 비즈니스 목표 지연이 y밀리초일 수 있다고 계산하면 목표 값을 동적으로 조정하여 더 나은 평가를 수행할 수 있습니다. 사업 실적.
예를 들어 아래 그림에서 정적 시스템 대상이 규제에 완전히 사용되는 경우 비즈니스 P99는 심각한 변동 상태에 있게 됩니다. 극단적인 상태로 비즈니스에 더 가까워지도록 모델 도입 후 저녁 피크 시간대에 허용할 수 있는 금액은 비즈니스 지연이 더욱 안정적이 되어 비즈니스 성과를 비교적 안정적인 수준으로 평준화할 수 있음을 알 수 있습니다. 하루 종일 자원 혜택을 받으세요.
4.5 연습: 단일 머신 문제 해결
코로케이션을 추진하는 과정에서 마이크로토폴로지 관리에 대한 다양한 온·오프라인 성능 이슈와 수요가 계속해서 발생하게 될 것입니다. 예를 들어, 처음에는 모든 머신이 cgroup V1을 기반으로 관리되고 제어되었습니다. 그러나 V1의 구조로 인해 시스템은 이 문제를 해결하기 위해 매우 깊은 디렉토리 트리를 탐색하고 많은 커널 모드 CPU를 소비해야 합니다. , 우리는 전체 클러스터의 노드를 cgroup V1으로 전환하고 있습니다. cgroup V2 아키텍처를 사용하면 프로모션 검색과 같은 서비스에 대한 리소스를 보다 효율적으로 격리하고 모니터링할 수 있으며, 보다 극단적인 성능을 추구하려면 보다 복잡한 친화성을 구현해야 합니다. 소켓/NUMA 수준의 반친화성 전략 등 이러한 고급 리소스 관리 요구 사항은 Katalyst에서 더 잘 실현될 수 있습니다.
5 요약 및 전망
Katalyst는 공식적으로 오픈 소스로 출시되었으며 v0.3.0 버전을 출시했으며 계속해서 반복에 더 많은 에너지를 투자할 것입니다. 커뮤니티는 리소스 격리, 트래픽 프로파일링, 예약 전략, 탄력적 전략, 이기종 장치 관리 등에 대한 기능과 시스템 향상을 구축할 것입니다. , 누구나 이 프로젝트에 관심을 갖고 참여하고 피드백을 제공할 수 있습니다.
동료 치킨 "오픈 소스" deepin-IDE 및 마침내 부트스트랩을 달성했습니다! 좋은 친구, Tencent는 Switch를 "생각하는 학습 기계"로 전환했습니다. Tencent Cloud의 4월 8일 실패 검토 및 상황 설명 RustDesk 원격 데스크톱 시작 재구성 웹 클라이언트 WeChat의 SQLite 기반 오픈 소스 터미널 데이터베이스 WCDB의 주요 업그레이드 TIOBE 4월 목록: PHP 사상 최저치로 떨어졌고 FFmpeg의 아버지인 Fabrice Bellard는 오디오 압축 도구인 TSAC를 출시했으며 Google은 대규모 코드 모델인 CodeGemma를 출시했습니다 . 오픈소스라서 너무 좋아요 - 오픈소스 사진 및 포스터 편집기 도구컨퍼런스 연설 영상: Katalyst: Bytedance Cloud 기본 비용 최적화 사례 QCon 광저우 2023 |