>백엔드 개발 >Golang >파이프라인 개념

파이프라인 개념

王林
王林원래의
2024-07-17 17:24:071297검색

저자가 가장 이해하기 쉬운 정의는 동시에 실행되는 여러 프로세스이며, 각 프로세스는 서로 관련된 일련의 프로세스 단계의 일부입니다.

비유는 다음과 같습니다. 백업할 데이터베이스가 많은 일상적인 데이터베이스 자동 백업의 프로세스 흐름을 상상해 보세요. 백업 자체에는 쉘 스크립트가 아닌 go 프로그램을 사용합니다. 대략적으로 수행될 일련의 프로세스 단계는 다음과 같습니다.

  1. 백업해야 하는 모든 데이터베이스의 데이터 목록과 액세스 주소 및 자격 증명이 필요합니다.
  2. 백업 프로세스는 순차적으로(db1 이후, 완료, db2 계속, db3 계속 등) 또는 병렬로(db1, db2, db3 등 백업 프로세스와 다른 프로세스가 동시에 실행됨) 실행됩니다.
  3. 각 데이터베이스 백업 프로세스에서는 여러 프로세스가 수행됩니다

아. 데이터베이스에서 덤프 작업을 수행하면 출력은 폴더에 저장된 많은 파일 형식입니다.
B. 그런 다음 덤프 파일은 .zip 또는 .tar .gz 형식(예:)으로 보관됩니다
C. 아카이브 파일은 AWS S3 등의 백업 서버로 전송됩니다.

위의 경우를 염두에 두고 여러 데이터베이스에 대한 백업 과정을 병렬로 수행하는 것이 성능 측면에서 더 나을 수도 있습니다. 저자도 이에 동의합니다.

그리고 세 가지 프로세스(A, B, C)를 동시 프로세스로 만들어 각 데이터베이스 백업 프로세스 A, B, C에 대한 프로세스를 동시에 실행하면 I/O가 더 효율적이 되십시오. 나중에 프로세스 A, B, C 사이에서 실행은 순차적으로 유지됩니다(순차적으로 실행해야 하기 때문입니다. 예를 들어 B가 먼저 실행되고 A가 다음에 실행되는 경우는 허용되지 않습니다). 그러나 프로세스 A의 실행을 담당할 고루틴은 완료되었습니다. 실행 B(프로세스 A의 다음 단계)와 다른 프로세스(다른 데이터베이스)의 실행을 계속할 수 있습니다. 병렬로. 따라서 A를 처리하는 고루틴은 유휴 상태가 되지 않습니다.

다음 시각화에 주목해주세요. 열은 동시에 실행되는 고루틴을 나타냅니다. 하지만 세 개의 고루틴은 일련의 프로세스이므로 프로세스는 항상 순차적이고 행은 시퀀스를 나타냅니다.

Image description

Go에서는 일반적으로 실행되는 고루틴 형태의 프로세스가 동시적이지만 흐름에서는 순차적이어야 하므로 이를 파이프라인이라고 부르므로 지금은 파이프라인 A가 프로세스의 고루틴이라고 가정하겠습니다. A, 파이프라인 B는 고루틴 B 등입니다.

표의 이해를 돕기 위해 순차적 설명을 따라주세요.

  1. 순서 1: 파이프라인 A는 db1에서 덤프 프로세스를 수행합니다. 동시에 파이프라인 B와 C는 유휴 상태입니다. 2.Sequence2: db1 더미 프로세스가 완료된 후 다음 단계, 즉 파이프라인 B가 수행하는 db1 데이터 덤프 수집 프로세스로 진행합니다. 동시에 파이프라인 A는 db2 덤프 프로세스를 수행합니다. 파이프라인 C는 아직 유휴 상태입니다.
  2. 시퀀스 3: 파이프라인 A가 db3 덤프 프로세스를 실행 중입니다. 동시에 파이프라인 B는 db1 아카이브가 아직 완료되지 않아 덤프된 db2 아카이브 프로세스를 아직 실행하지 않았습니다. 파이프라인이 아직 유휴 상태입니다.
  3. 순서 4: db1 아카이브 프로세스가 완료된 후 다음 단계, 즉 아카이브를 백업 서버로 전송하는 프로세스로 진행합니다. 이 프로세스는 파이프라인 C에서 처리됩니다. 동시에 파이프라인 B는 db2 실행을 시작합니다. 데이터 덤프 보관 및 파이프라인 A 덤핑
  4. ... 등등.

이 예에서는 파이프라인 A에 고루틴이 하나만 있고, 파이프라인 B에도 고루틴이 하나 있고, 파이프라인 C에도 있다고 가정합니다. 그러나 실제로 구현에서는 각 파이프라인에 대해 많은 고루틴이 있을 수 있습니다(파이프라인 A에는 많은 고루틴, 파이프라인 B에 대한 많은 고루틴, 파이프라인 C에 대한 많은 고루틴).

제 글이 설명이 되기를 바랍니다. 확실하지 않더라도 LAN 소스로 인터넷이 열려있습니다.

위 내용은 파이프라인 개념의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.