기술나눔

클라우드 네이티브

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

클라우드 네이티브

정의

현재 더 권위 있는 정의는 주로 Pivotal과 CNCF(Cloud Native Computing Foundation)에서 나왔습니다.

1.1 피보탈

  • 4가지 핵심 사항:
    DevOps持续交付微服务容器化
  • 6가지 특성:
    模块化(Modularity)可观测性(Observability)可部署性(Deployability)
    可测试性(Testability)可处理性(Disposability)可替换性(Replaceability)
  • 클라우드 네이티브는 기술(마이크로서비스, 민첩한 인프라)과 관리(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 및 빅 데이터 애플리케이션을 위한 효율적이고 확장 가능하며 탄력적인 애플리케이션 개발 및 배포 방법을 제공합니다.
  • 사물 인터넷: 대규모 센서 데이터를 처리하고, 신속한 배포와 탄력적인 확장을 달성하며, 사물 인터넷 애플리케이션의 안정성과 유지 관리성을 향상합니다.
  • 블록체인: 블록체인 애플리케이션을 위한 효율적이고 확장 가능하며 탄력적인 애플리케이션 개발 및 배포 방법을 제공합니다.

이것이 클라우드 네이티브에 관한 모든 것입니다. 읽어주셔서 감사합니다!