클라우드 네이티브는 기술(마이크로서비스, 민첩한 인프라)과 관리(DevOps, 지속적 전달, 콘웨이 법칙, 재구성 등)를 모두 포함하는 아이디어 모음입니다. 클라우드 네이티브는 클라우드 기술과 기업 관리 방법의 모음입니다.
1.2 CNCF
클라우드 네이티브 기술은 조직이 퍼블릭 클라우드, 프라이빗 클라우드, 하이브리드 클라우드와 같은 새로운 동적 환경에서 탄력적으로 확장 가능한 애플리케이션을 구축하고 실행할 수 있도록 지원합니다.
클라우드 네이티브의 대표적인 기술로는 컨테이너, 서비스 메시, 마이크로서비스, 불변 인프라, 선언적 API 등이 있습니다. 이러한 기술을 사용하면 내결함성이 있고 관리 및 관찰이 쉬운 느슨하게 결합된 시스템을 구축할 수 있습니다.
안정적인 자동화와 클라우드 네이티브 기술이 결합되어 엔지니어는 시스템에 대해 빈번하고 예측 가능한 주요 변경을 쉽게 수행할 수 있습니다.
2. 기술적 특성
2.1 마이크로서비스 아키텍처:
클라우드 네이티브는 마이크로서비스 아키텍처를 사용하여 애플리케이션을 구축하고 애플리케이션을 여러 개의 작고 독립적이며 독립적으로 배포 가능한 서비스로 분할하는 것을 옹호하며, 각각은 특정 비즈니스 기능을 해결하는 데 중점을 둡니다. 이를 통해 애플리케이션 확장성, 유연성 및 유지 관리성이 향상됩니다.
2.2 컨테이너화된 배포:
클라우드 네이티브 애플리케이션은 일반적으로 Docker와 같은 컨테이너 기술을 사용하여 배포됩니다. Docker는 애플리케이션과 해당 종속성을 컨테이너 이미지로 패키징하여 플랫폼 간 이식 가능하고 일관된 배포를 가능하게 합니다. 또한 컨테이너화는 격리 및 리소스 활용의 이점을 제공하여 애플리케이션을 보다 효율적으로 실행할 수 있도록 해줍니다.
2.3 동적 오케스트레이션 및 자동화된 관리:
클라우드 네이티브화는 자동화된 도구 및 플랫폼(예: Kubernetes)을 사용하여 애플리케이션을 동적으로 조정 및 관리하고, 컨테이너 배포, 확장, 업그레이드 및 모니터링과 같은 작업을 자동으로 관리하고, 애플리케이션 유연성과 안정성을 개선하고, 수작업의 복잡성을 줄이는 것을 강조합니다. .
2.4 탄력적 확장:
클라우드 네이티브를 사용하면 자동화된 컨테이너 조정 및 서비스 검색을 통해 애플리케이션을 탄력적으로 확장할 수 있으며, 컨테이너 인스턴스를 동적으로 추가하거나 제거하여 다양한 로드 변경에 적응하고 애플리케이션 성능 및 리소스 활용도를 향상시킬 수 있습니다.
2.5 지속적인 전달 및 배포:
클라우드 네이티브화는 CI/CD(지속적 통합 및 지속적인 전달) 방법을 사용하여 애플리케이션을 신속하게 제공하고 배포할 것을 권장합니다. 자동화된 빌드, 테스트 및 배포 프로세스를 통해 애플리케이션 업데이트를 프로덕션 환경에 빠르고 안정적으로 적용할 수 있습니다. 출판의 위험과 시간 비용.
세 가지 기술 스택
3.1 컨테이너화
컨테이너 엔진: 예를 들어 Docker는 애플리케이션과 해당 종속성을 표준화된 컨테이너 이미지로 패키징하는 오픈 소스 애플리케이션 컨테이너 엔진입니다. 컨테이너 이미지는 Docker를 지원하는 모든 환경에서 실행될 수 있으므로 개발, 테스트 및 프로덕션 환경 전반에서 애플리케이션 일관성이 보장됩니다.
컨테이너 런타임: Containerd 또는 runc와 같은 컨테이너 생성, 시작, 중지, 삭제 및 기타 작업은 물론 호스트 리소스와의 상호 작용을 포함하여 컨테이너의 수명 주기 관리를 담당합니다.
컨테이너 오케스트레이션: 예를 들어 Kubernetes(K8s)는 현재 가장 널리 사용되는 컨테이너 오케스트레이션 플랫폼입니다. 이는 자동화된 컨테이너 배포, 예약, 확장 및 축소, 로드 밸런싱, 롤링 업그레이드 및 자가 복구를 위한 강력한 API 및 도구 세트를 제공합니다. , 서비스 검색, 구성 관리 및 기타 작업.
3.2 마이크로서비스 아키텍처
마이크로서비스: 대규모 모놀리식 애플리케이션을 작고 독립적인 서비스 세트로 분해합니다. 각 서비스는 단일 비즈니스 기능에 중점을 두고 API를 통해 상호 작용합니다. 마이크로서비스는 경량 통신 메커니즘(예: RESTful API, gRPC 등)을 통해 서로 협력하여 개발 속도를 높이고 결합을 줄이며 시스템의 확장성과 내결함성을 향상시키는 데 도움이 됩니다.
3.3 서비스 간 통신
RESTful API: HTTP 프로토콜과 다양한 메소드(GET, POST, PUT, DELETE 등)를 기반으로 인터페이스는 리소스 중심 아키텍처 스타일로 설계되었으며 마이크로서비스 간 상호작용에 널리 사용됩니다.
gRPC: Google이 개발한 고성능 범용 RPC(원격 프로시저 호출) 프레임워크는 HTTP/2 프로토콜 및 프로토콜 버퍼 직렬화 프로토콜을 기반으로 하며 고성능 및 효율성 요구 사항이 있는 시나리오에 적합합니다.
메시지 대기열: RabbitMQ, Apache Kafka, Amazon SQS 등과 같은 비동기 통신 미들웨어는 서비스를 분리하고 최대 부하를 처리하며 이벤트 기반 아키텍처를 구현하는 데 사용됩니다.
3.4 서비스 메시
서비스 메시 기술: Istio, Linkerd, Envoy 등은 서비스 사이에 위치하며 투명한 인프라 계층으로 서비스 간의 네트워크 통신, 라우팅, 보안, 관찰 가능성 및 기타 기능을 담당합니다. 서비스 메시는 서비스 간 통신의 복잡성을 추상화하므로 개발자가 애플리케이션 코드에서 이러한 기능을 구현할 필요가 없습니다.
3.5 지속적인 통합 및 지속적인 배포(CI/CD)
CI/CD 도구: Jenkins, GitLab CI/CD, GitHub Actions, Azure DevOps 등은 소프트웨어 개발의 빌드, 테스트, 패키징, 릴리스 및 배포 프로세스를 자동화하는 데 사용됩니다. CI/CD 방식은 반복 주기를 단축하고, 소프트웨어 품질을 향상시키며, 수동 개입으로 인한 오류를 줄이는 데 도움이 됩니다.
3.6 선언적 인프라
선언적 구성: YAML 또는 JSON 형식 구성 파일을 사용하여 Kubernetes의 YAML 매니페스트와 같은 애플리케이션 배포의 대상 상태를 설명합니다. 개발자는 원하는 상태를 정의하기만 하면 시스템이 이 상태를 달성하는 방법을 자동으로 처리합니다.
IaC(코드형 인프라) 관리 도구: Terraform, CloudFormation 등과 같은 클라우드 플랫폼 전반의 인프라 관리에 사용되어 인프라의 버전 제어, 자동화된 배포 및 일관성 관리를 달성합니다.
3.7 DevOps 도구 체인
로그 집계: ELK Stack(Elasticsearch, Logstash, Kibana), Splunk, Datadog 등은 로그 데이터를 수집, 구문 분석, 저장, 검색, 분석 및 시각화하는 데 사용됩니다.
감시 장치: Prometheus, Grafana, New Relic, Dynatrace 등은 시스템 및 애플리케이션 성능 모니터링을 제공합니다.
오류 추적: Sentry, Bugsnag, Rollbar 등은 애플리케이션 런타임 중 예외 및 오류를 캡처, 분석 및 관리하는 데 사용됩니다.
카오스 엔지니어링: Chaos Monkey, Chaos Toolkit 등은 프로덕션 환경에 결함을 사전에 도입하여 비정상적인 조건에서 시스템 성능 및 복구 기능을 테스트합니다.
3.8 서버리스 컴퓨팅(서버리스)
서버리스 서비스: 개발자가 기본 서버의 운영 및 유지 관리에 신경 쓰지 않고 코드 조각(함수)을 작성하고 실행할 수 있도록 하는 AWS Lambda, Google Cloud Functions, Azure Functions 등은 함수가 필요할 때만 실행되고 비용이 청구됩니다. 트리거됩니다.
네 가지 응용 시나리오
클라우드 네이티브 기술은 다음을 포함하되 이에 국한되지 않는 다양한 분야에서 광범위한 응용 가능성을 가지고 있습니다.
대규모 인터넷 애플리케이션: 고가용성, 고성능 및 확장성이 뛰어난 인터넷 애플리케이션을 구축합니다.
금융 비즈니스: 금융 비즈니스 애플리케이션의 신뢰성과 보안을 향상시키기 위해 안전하고 신뢰할 수 있으며 효율적인 애플리케이션 개발 및 배포 방법을 제공합니다.
인공 지능 및 빅 데이터: AI 및 빅 데이터 애플리케이션을 위한 효율적이고 확장 가능하며 탄력적인 애플리케이션 개발 및 배포 방법을 제공합니다.
사물 인터넷: 대규모 센서 데이터를 처리하고, 신속한 배포와 탄력적인 확장을 달성하며, 사물 인터넷 애플리케이션의 안정성과 유지 관리성을 향상합니다.
블록체인: 블록체인 애플리케이션을 위한 효율적이고 확장 가능하며 탄력적인 애플리케이션 개발 및 배포 방법을 제공합니다.