Engineering Data Management에서 Scalable API를 위한 성장 필요

엔지니어링 데이터 관리 시스템은 기가 바이트에서 하룻밤에 테라 바이트로 성장할 수있는 데이터 세트를 처리합니다. 조직은 더 많은 센서, 시뮬레이션 실행 및 협업 디자인 파일을 추가하여 이 데이터를 제공하는 API는 대기 시간 또는 다운 타임없이 스케일을 유지해야합니다. 건축 선택 해제하지 않고도 잘 설계 된 API는로드 하에서 crumble, 프로젝트 지연 및 좌절 사용자를 유발합니다.

이 문서는 빠르고 신뢰할 수 있고 엔지니어링 데이터 볼륨 및 요청률 증가로 유지되는 API를 구축하기 위해 상세한 청사진을 제공합니다. 우리는 핵심 건축 원칙, 프로토콜 선택, 데이터베이스 확장성, 규모 보안 및 관찰성을 다룹니다.

엔지니어링 데이터 Context에 대한 확장성 이해

확장성은 더 많은 사용자를 처리하는 것에 대해 아닙니다. 엔지니어링 데이터 시스템에서 더 큰 파일 업로드, 더 복잡한 공간 또는 시간 시리즈 쿼리, 동시 시뮬레이션 결과 검색 및 외부 도구와의 통합을 지원하는 것을 의미합니다. 확장 가능한 API는 수직 성장 (더 강력한 서버) 및 수평 성장 (많은 서버에서 부하 분산)을 수용해야합니다. 이전에는 하드 제한이 있으며, 클라우드 중립 관행과 후속 조정이 있습니다.

엔지니어링 데이터는 종종 바이너리 파일 (CAD 모델, 포인트 클라우드), 구조 메타 데이터 (BOMs, 개정 역사) 및 실시간 원격 측정을 포함합니다. 각 유형은 다른 성능 요구 사항을 부과합니다. 리소스 별 엔드 포인트 디자인 및 캐싱 전략을 통해 이러한 변형에 대한 확장 가능한 API 디자인 계정.

Scalable APIs를 위한 핵심 디자인 원리

모듈 및 Microservices

단일 API보다 더 많은 기능을 쉽게 사용할 수 있습니다. 예를 들어 파일 저장, 메타데이터 쿼리, 사용자 인증 및 워크플로우 오케스트라션에 대한 별도의 서비스. 이 팀은 각 팀이 병목을 경험하는 서비스만 스케일링할 수 있습니다. 쿠버네티스와 같은 컨테이너 오케스트라션을 사용하여 서비스당 스케일링을 관리합니다.

모듈성도 간단하게 버전화: 전체 API를 중복하지 않고 하나의 서비스를 업데이트할 수 있습니다. 그러나 네트워크를 오버헤드를 증가시키는 과도한 미세 서비스를 방지합니다. 엔지니어링 도메인 (예 : 문서 서비스, 시뮬레이션 서비스) 주변의 공해에 대한 대기.

수평 확장을위한 무상

로드밸런서 뒤에 API 서버를 추가하려면 각 요청은 자체 유지되어야 합니다. 서버에서 세션 상태를 저장하지 마십시오. 대신 필요한 모든 사용자 컨텍스트를 운반하는 토큰 기반 인증 (JWT)을 사용하십시오. 상태는 피크로드 중에 새로운 인스턴스를 회전하고 트래픽 하위 사이드가 있을 때 종료합니다. 엔지니어링 데이터의 경우, 상태는 서버가 동일한 리소스에 대해 사용자간에 다르게 캐싱을 단순화합니다.

효율적인 데이터 처리: 질, 필터링, 캐싱

엔지니어링 데이터셋은 엄청난 수 있습니다. 항상 데이터 변경으로 안정된 결과를 위한 커서 기반 pagination을 사용하여 목록 엔드포인트를 파게 합니다. 서버 측 필터를 적용하여 전송 제한적 행을 방지합니다. 예를 들어, 와 같은 쿼리 매개 변수를 지원합니다.

캐싱은 필수적입니다. HTTP 캐싱 헤더 ([, ]) 및 Redis 또는 Varnish와 같은 역 프록시를 자주 액세스 메타데이터에 구현합니다. 파일 내용에 대해서는 CDN을 사용합니다. 그러나 엔지니어링 데이터는 종종 엄격한 일관성이 요구 (예 : 개정 잠금); 트랜잭션 경계를 존중하는 캐시 무효 전략을 사용합니다.

적재 Balancing 전략

여러 API 인스턴스를 통해 수신 요청을 분산시킵니다. 레이어 7 로드밸런서 (예: NGINX, AWS ALB)를 사용하여 HTTP 헤더와 경로 또는 클라이언트에 따라 읽을 수 있습니다. 웹소켓 연결에 필요한 실시간 시뮬레이션 데이터, 로드밸런서가 끈끈한 세션을 지원하거나 대신 메시지 브로커 패턴을 사용합니다.

또한 글로벌 로드 밸런싱을 고려하여 DNS 기반 장애로 인해 각 요청에 대한 해양을 교차하지 않고 다른 지역에서 엔지니어링 팀을 제공 할 수 있습니다. 클라우드 제공 업체는 가장 가까운 건강 한 엔드 포인트로 트래픽을 경로를 제공하는 글로벌 가속기를 제공합니다.

비동기 처리 및 메시지 Queues

대형 CAD 파일이나 실행을 포함하여 긴 실행 작업은 API 응답을 차단하지 않아야 합니다. 이 작업을 메시지 큐 (RabbitMQ, Amazon SQS, 또는 Kafka)로 오프로드하십시오. API는 작업 ID로 를 반환하고 클라이언트는 상태 엔드포인트를 투표하거나 처리가 완료되면 webhook을받을 수 있습니다.

이 패턴은 API 응답을 유지하고 독립적으로 작업을 확장 할 수 있습니다. 엔지니어링 데이터, at-least-once 배송과 신뢰할 수있는 큐는 시뮬레이션 결과를 잃는 것을 방지하기 위해 중요합니다. 중복 이벤트를 안전하게 처리하는 데 idempotency 키를 사용합니다.

오른쪽 API 프로토콜 선택: REST vs. GraphQL

RESTful APIs는 예측 가능한 URL 패턴과 강력한 HTTP 캐싱 때문에 엔지니어링 리소스에 대한 CRUD 작업에 대한 견고한 선택을 유지합니다. 표준 상태 코드를 사용하여 성능 문제를 방지하기 위해 두 개 또는 세 가지 수준을 넘어 배열을 피하십시오. REST는 특히 파일 업로드 / 다운로드 ]를 위해 좋은 점은 내장 된 HTTP 콘텐츠 협상을 활용하기 때문에.

GraphQL은 복잡한 배열 쿼리에 유연성을 제공합니다. 예를 들어, 모든 문서, 팀 구성원 및 단일 요청에 최신 개정을 가진 프로젝트를 검색합니다. 많은 상호 관련 엔티티티를 가진 엔지니어링 시스템을 위해 GraphQL은 오버 페칭 및 언더 페칭을 줄일 수 있습니다. 그러나 캐싱은 더 복잡하고 비싼 쿼리 (채팅 비용 분석, 깊이 제한)에 대해 감시해야합니다. 쿼리 - 헤비티지 및 메타 데이터 파일에 대한 GraphQL을 고려하십시오.

RESTful API 디자인 원칙GraphQL 모범 사례에 대해 더 읽어 보세요.

Data Data를 통한 Data를 활용

Replicas 및 Sharding에 대해

데이터베이스는 종종 목입니다. 기본 쓰기 데이터베이스에서 백분율 분석 쿼리에 대한 읽기 복제를 사용합니다. 센서 판독의 수십억 개를 위해 시간마다 자동으로 데이터를 분할하는 TimescaleDB (InfluxDB, TimescaleDB)를 고려하십시오. 복잡한 관계와 메타 데이터를 위해 수평 스윙킹과 관계 데이터베이스는 애플리케이션 복잡성을 확장 할 수 있습니다. 수직 스케일링을 시작하고 복제하기 전에 복제를 추가하십시오.

Binary Data에 대한 콘텐츠 주소가 있는 스토리지

엔지니어링 파일이 크다; 객체 저장 (Amazon S3, Azure Blob)에 저장하고 데이터베이스에서 메타 데이터를 유지합니다. 이 파일을 deduplicate에 콘텐츠 삭제 저장을 사용하십시오. 각 파일은 해시를 가져 와서 여러 프로젝트에 의해 참조되는 경우에도 저장됩니다. 이것은 저장 비용을 줄이고 업로드 속도를 높입니다. API는 직접 다운로드를위한 사전 서명 된 URL을 반환하고 서버의 타격없이 전송을 스케일링 할 수 있습니다.

Scale의 보안 및 액세스 제어

API 스케일로 공격 표면이 됩니다. 토큰 또는 IP 당 제한 비율을 구현하여 남용을 방지합니다. API 키 또는 OAuth 2.0 인증을 사용하십시오. 엔지니어링 데이터를 위해서는 역할 기반 액세스 제어 (RBAC)가 API 게이트웨이에 시행하여 각 서비스 내부에 중앙화 정책과 중복을 줄일 수 있습니다.

또한 바이너리 파일을 제공하는 엔드포인트를 보호합니다. 사전 서명된 URL을 생성하기 전에 사용자의 권한을 검증하고 짧은 만료 시간을 설정합니다. 모든 곳에서 HTTPS를 사용하고 TLS 1.2 이상을 시행하십시오. 내부 서비스에 대해 상호 TLS는 상호 서비스 통신을 확보 할 수 있습니다.

모니터링, 로깅 및 관찰성

측정할 수 없는 것을 스케일링할 수 없습니다. 요청 대기시간, 오류율 및 데이터베이스 연결 풀 사용 시 메트릭을 수집합니다. 여러 서비스 전반에 걸쳐 요청을 따르기 위해 분산된 추적(OpenTelemetry)을 사용하십시오. 로그 구조화된 데이터(JSON)를 연결하여 사용자, 프로젝트 또는 엔드포인트에 의한 오류를 검색할 수 있습니다.

p95 대기 시간 초과 임계값을 위한 경고를 설정합니다. 엔지니어링 데이터 시스템의 경우, 스토리지 전송 속도와 대기 시간도 모니터링합니다. 예를 들어, 새로운 버전의 서비스가 더 많은 캐시 미트를 유발할 경우, 사용자의 불만을 처리하기 전에 대기 시간 스파이크를 볼 수 있습니다.

관측성을 위한 OpenTelemetry에 대해 자세히 알아보세요.

실제 예제: 프로젝트 메타데이터 API 확장

엔지니어링 시스템은 최종 점 ]을 필요로 합니다. 우선, cursor pagination을 적용하여 타임 탬프 또는 UUID를 사용합니다. 파일 유형에 필터 매개 변수를 추가합니다. 수정이 드문 경우 5초 TTL로 설정된 결과를 캐시합니다. 엔드포인트가 초당 수천 번의 시간을 기록하면 복제를 추가하고 캐시에서 stale 데이터를 제공합니다.

문서 작성을 위해 비동기 패턴을 사용합니다 : 파일을 받아 객체 저장에서 저장 한 다음, 메타데이터 (크기, 체크섬, 엄밀)을 추출하는 배경 작업을 수행 한 다음 작업 ID를 반환합니다. 클라이언트는 전용 상태 엔드포인트를 투표 할 수 있습니다. 이것은 API를 빠르고 축소 할 수 있습니다.

마지막으로 OAuth 2.0 범위의 엔드포인트를 확보하십시오. 프로젝트 멤버만 목록 또는 문서를 만들 수 있습니다. 사용자 당 초당 100개의 요청의 비율 제한 및 감사 목적으로 모든 액세스 권한을 로그하십시오.

관련 기사

엔지니어링 데이터 관리를위한 확장 가능한 API 구축은 건축 패턴, 프로토콜, 데이터베이스 디자인 및 운영 관행의주의적인 고려 사항을 요구합니다. 모듈성, 무해한, 효율적인 데이터 처리, 로드 밸런싱 및 비동기 처리를 적용함으로써, 당신은 성장이 우아하게 처리하는 시스템을 만들 수 있습니다.

캐싱 및 데이터베이스 확장성이 일찍 시작되기 때문에 일반적인 병목입니다. 파일, 쿼리에 대한 GraphQL에 대한 각 사용 사례에 적합한 프로토콜을 선택하십시오. 그리고 모니터링 및 보안을 하루에 투자하십시오. 이러한 원칙으로 API는 데이터 볼륨 및 사용자 기대 증가로 신뢰할 수 있는 엔지니어링 팀을 제공합니다.

AWS Well-Architected Framework – 확장성 기둥]과 ]Azure 클라우드 디자인 패턴은 더 많은 지도를 제공합니다.