우리는 BWX 당 동기화 요청마다 5000개 이상의 작업 단위를 생성하는 대규모 커넥터 전략을 정의합니다.BWX에서 작업 단위는 파일 + 워크플로 단계 + 언어 쌍의 조합입니다. 따라서 5개의 파일, 2개의 워크플로 단계(번역 + 검토) 및 5개의 언어로 구성된 프로젝트는 50개의 작업 단위를 생성합니다. 이러한 변수들을 곱하면 5000개의 작업 단위를 초과하는 것이 얼마나 어렵지 않은지 알 수 있습니다. 모든 것을 단일 프로젝트에 집중하고 싶은 유혹이 있을 수 있지만, 대규모 커넥터의 경우 언어 쌍별로 프로젝트를 그룹화하는 것이 가장 좋은 방법임을 우리의 경험은 보여줍니다. 이는 단순히 프로젝트를 정의하는 방식의 문제가 아니라 더 깊게 연관되어 있습니다. 이 기사에서는 이 결정의 영향을 다음과 같은 측면에서 분석해 보겠습니다:
- 메시지 브로커링
- 문제 해결
- 위험 완화
- 대기/성능
- 자동화 가능성
- 관리 용이성
- 확장성
메시지 브로커링1) 대규모 커넥터와 함께 메시징이 기하급수적으로 증가합니다. 우리는 동기화 요청 당 100만 개 이상의 메시지를 생성하는 커넥터를 보았습니다. 이로 인해 서버 활동과 성능 문제가 발생하며, 이는 프로젝트를 로캘별로 분할하여 완화할 수 있습니다. 문제 해결2) 이는 직접적으로 위험 완화와 관련이 있습니다. 우리는 동기화 요청 당 1백만 개 이상의 메시지를 생성하는 커넥터를 본 적이 있습니다. 이로 인해 서버 활동과 성능 문제가 발생하며, 이는 프로젝트를 로케일별로 분할하여 완화할 수 있습니다. 문제 해결2) 이는 직접적으로 위험 완화와 관련이 있습니다. 그러나 로컬라이제이션에서는 종종 특정 로케일에 제한된 문제와 해당 파일 집합의 구문 분석, 분할 및 사전/사후 처리에 어떤 영향을 미치는지를 볼 수 있습니다. 로케일 간의 분리를 통해 로케일별로 특정한 정규식, 처리 규칙, 분할을 생성할 수 있으며, 전체 아키텍처에 대한 유연성을 제공합니다. 이로 인해 서버 활동과 성능 문제가 발생하여 프로젝트를 로케일별로 분할하여 문제를 완화할 수 있습니다. 문제 해결2) 이는 직접적으로 위험 완화와 관련이 있습니다. 그러나 로컬라이제이션에서는 종종 특정 로케일에 제한된 문제와 해당 파일 집합의 구문 분석, 분할 및 사전/사후 처리에 어떻게 영향을 미치는지를 볼 수 있습니다. 로케일 간의 분리로 인해 전체 아키텍처에 대한 유연성이 훨씬 더 제공되는 로케일별 정규식, 처리 규칙, 분할을 생성할 수 있습니다. 전체적으로 아키텍처에 대한 더 성숙하고 예측 가능한 동작 패턴에 도달하기 위해 로케일별로 작업할 수 있으므로 전체적으로 작동하는 수정 사항에 제한되지 않고 반복할 수 있습니다. 위험 완화3) 로케일별로 프로젝트를 분리함으로써 관리 위험을 완화할 수 있습니다. 특정 로케일에서 문제가 발생한다고 해도 전체 pull-request/배송 메커니즘이 손상되는 것은 아닙니다. 전체적으로 작동하는 수정 사항에 제한되어 작업하는 대신 로케일별로 반복하고 로케일에 기반하여 더 성숙하고 예측 가능한 동작 패턴에 도달할 수 있습니다. 리스크 완화3) 로케일별로 프로젝트를 분리함으로써 관리 리스크를 완화할 수 있습니다. 특정 로케일에서 문제가 발생한다고 해도 전체 pull-request/배송 메커니즘이 손상되는 것은 아닙니다. 로케일 간의 분리를 통해 로케일별로 특정한 정규식, 처리 규칙, 분할을 생성하여 전체 아키텍처에 대해 훨씬 더 유연성을 제공할 수 있습니다. 전체적으로 작동하는 고정된 수정사항으로 제한되지 않고 로케일에 따라 반복하고, 로케일을 기반으로 더 성숙하고 예측 가능한 동작 패턴에 도달할 수 있습니다. 리스크 완화3) 로케일 당 하나의 프로젝트로 프로젝트를 분리함으로써 관리 리스크를 완화할 수 있습니다. 특정 로케일에서 문제가 발생한다고 해도 전체 pull-request/배송 메커니즘이 손상되는 것은 아닙니다. 문제를 격리하고 자연스럽게 구획화할 수 있습니다. SOP 중에는 그렇게 보이지 않을 수 있지만 (그리고 항상 로컬라이제이션에서 예상치 못한 문제가 발생합니다), 짚집을 짓는 대신 벽돌집을 짓게 되어 감사할 것입니다. 대기열/성능4) 예를 들어 처리를 위해 150,000개의 요소를 줄세울 대신 15,000개의 요소를 10번 줄세울 수 있습니다. 이것은 SOP 중에는 중요하지 않아 보일 수 있지만 (그리고 항상 로컬라이제이션에서 예상치 못한 문제가 발생합니다), 짚집을 짓는 대신 벽돌집을 짓게 되어 감사할 것입니다. 대기열/성능4) 예를 들어 처리를 위해 15,000개의 요소를 10번 줄세울 수 있습니다. 다시 말하지만, 최종적으로는 동일한 150,000개의 요소를 처리해야 하기 때문에 큰 차이처럼 보이지 않을 수 있지만, 직렬로 처리하거나 병렬로 처리하거나 원하는 대로 기회적으로 처리할 수 있는 유연성을 가지는 것은 유연성과 성능 대역폭을 훨씬 더 제공합니다. 자동화 가능성5) 일반적으로 프로젝트 결정과 워크플로우는 로케일별로 비대칭적일 것입니다. SOP 중에는 그렇게 보이지 않을 수 있지만 예기치 않은 문제가 발생할 때 (그리고 항상 로컬라이제이션에서 발생합니다), 짚집 대신 벽돌집을 지은 것에 감사할 것입니다. 대기/성능4) 예를 들어 15만 개의 요소를 처리하기 위해 15,000개의 요소를 10번 줄세우는 대신, 15만 개의 요소를 한 번에 줄세울 수 있습니다. 다시 말하지만, 최종적으로 동일한 15만 개의 요소를 처리해야 하기 때문에 큰 차이처럼 보이지 않지만, 직렬로 처리하거나 병렬로 처리하거나 원하는 대로 기회적으로 처리할 수 있는 유연성을 가지는 것은 매우 유연성과 성능 대역폭을 제공합니다. 자동화 가능성5) 일반적으로 프로젝트 결정과 워크플로우는 로케일별로 비대칭적일 것입니다. 로케일별로 프로젝트를 분리하면 장기적으로 자동화 가능성에 대해 훨씬 더 큰 유연성을 가질 수 있습니다. 로케일별로 분리하면 매개변수와 데이터 세트가 완전히 다른 시나리오를 가질 수 있습니다. 모든 요소를 통합하는 것과는 달리. 관리6) 이것도 직관적이지 않습니다. 로케일별로 분리하면 매개변수와 데이터 세트가 완전히 다른 시나리오를 가질 수 있습니다. 관리6) 이것도 상반된 개념입니다. 로케일별로 프로젝트를 분리하면 자동화 잠재력에 대한 훨씬 큰 유연성을 얻을 수 있습니다. 로케일별로 분리하는 경우 모든 요소를 통합하는 것과는 달리 완전히 다른 매개변수 및 데이터 세트를 가질 수 있습니다. 관리6) 이것도 상반된 개념입니다. 일반적으로 통합은 더 나은 거버넌스를 위한 모범 사례입니다. 그러나 대규모 커넥터에서는 그 반대가 사실입니다. 하지만 대규모 커넥터에서는 그 반대가 사실입니다. 프로젝트는 일반적으로 로케일별로 필터링되어, 서로 다른 프로젝트 매니저가 프로젝트의 다른 부분을 더 쉽게 소유할 수 있으며, 보고서를 생성하기 위한 필터 사용을 줄이고 로케일별로 진행 상황을 추적하는 데 있어서 더 큰 단순성을 만들어줍니다. 확장성7) 대규모 커넥터에서는 모든 작업 단위를 하나의 프로젝트로 그룹화하여 확장하는 것이 간단히 관리할 수 없는 지점에 도달할 것입니다. 분리함으로써 장기적으로 확장하기 쉬운 프로그램의 기반을 마련하는 것을 기억하세요. 작업 단위와 메시지는 곱셈이 되는 것을 기억하세요. 로케일별로 분리함으로써 큰 곱셈 변수 중 하나를 제거하여 보다 쉽게 확장할 수 있게 됩니다.결론적으로, 통합이 더 좋다는 착각이 있습니다. 프로젝트 당 하나의 pull-request는 모두의 삶을 더 쉽게 만듭니다. 이는 작은 규모의 커넥터에는 유효하지만, 대규모 커넥터에서는 붕괴됩니다. 우리의 목표는 항상 우아하고 신뢰할 수 있는 솔루션을 클라이언트에게 제공하는 것이며, 대규모 상황에서는 분할 정복이 가장 좋은 방법임을 여러 차례 확인했습니다.
단일 프로젝트로 통합로케일별로 분리된 프로젝트전체 프로젝트는 0 또는 1의 상태를 가짐로케일별로 계층화된 상태로 구성됨단일 구문 분석, 필터링 및 정규식 프레임워크로 유연한 프레임워크로케일별로 단일 레인 큐잉 프로젝트당 유연한 큐잉 및 처리로 처리 분산로케일별로 프로젝트 내에서 필터링로케일별로 필터링 단계가 하나 줄어듦모든 영역에 걸친 자동화 규칙로케일별 자동화 매개변수 및 데이터위험 관점에서의 모든 에그를 하나의 바구니에 담음위험을 로케일별로 분산시킴분리 및 문제 해결이 복잡함문제 해결이 더 쉬워지도록 하나의 큰 변수가 줄어듦