SmugMug는 두 개의 매우 큰 온라인 사진 플랫폼을 운영하고 있습니다. SmugMug 및 플리커 (Flickr), 100억 명 이상의 고객이 수백억 장의 사진을 안전하게 저장, 검색, 공유 및 판매할 수 있도록 지원합니다. 수십 년간의 사진을 업로드하고 검색하는 고객은 검색을 중요한 인프라로 전환하는 데 도움이 되었으며 SmugMug가 처음 사용된 이후 꾸준히 성장했습니다. 아마존 클라우드서치 2012 년에 이어 아마존 오픈서치 서비스 2018년부터 수십억 개의 문서와 테라바이트의 검색 저장 공간을 확보했습니다.
여기서 SmugMug 직원 엔지니어인 Lee Shepherd는 실시간 트래픽을 여러 클러스터에 게시, 백필 및 미러링하는 데 사용되는 SmugMug의 검색 아키텍처를 공유합니다. SmugMug는 이러한 파이프라인을 사용하여 테스트와 함께 i6xlarge의 Graviton 기반 r2gd.3.2xlarge 인스턴스를 포함한 새로운 구성을 벤치마킹, 검증 및 마이그레이션합니다. Amazon OpenSearch 서버리스. 우리는 급증하는 비현실적인 트래픽 패턴을 도입하지 않고 프로덕션 서비스에 영향을 주지 않고 게시, 채우기 및 쿼리에 사용되는 세 가지 파이프라인을 다룹니다.
프로세스에 중요한 두 가지 주요 아키텍처 부분이 있습니다.
- 인덱스 데이터에 대한 지속 가능한 정보 소스입니다. 모범 사례입니다 OpenSearch 인덱스 이상의 내구성 있는 저장소를 확보하는 백업 전략의 일부입니다. 아마존 DynamoDB 확장성과 통합을 제공합니다. AWS 람다 이는 많은 프로세스를 단순화합니다. 우리는 다른 비검색 서비스에 DynamoDB를 사용하므로 이는 자연스러운 선택이었습니다.
- 정보 소스의 데이터를 OpenSearch에 게시하기 위한 Lambda 함수입니다. 사용 함수 별칭 동일한 Lambda 함수의 여러 구성을 동시에 실행하는 데 도움이 되며 데이터를 동기화 상태로 유지하는 데 핵심입니다.
출판
게시 파이프라인은 사용자가 키워드나 캡션을 입력하거나 새 업로드를 입력하거나 라벨 감지와 같은 이벤트를 통해 구동됩니다. 아마존 인식. 이러한 이벤트는 다음과 같은 몇 가지 다른 자산 저장소의 데이터를 결합하여 처리됩니다. Amazon Aurora MySQL 호환 에디션 및 Amazon Simple Storage Service(Amazon S3), DynamoDB에 단일 항목을 쓰기 전에.
DynamoDB에 쓰면 다음을 통해 Lambda 게시 기능이 호출됩니다. DynamoDB 스트림 Kinesis 어댑터, DynamoDB에서 업데이트된 항목 일괄 처리를 가져와 OpenSearch에 인덱싱합니다. DynamoDB Streams Kinesis 어댑터를 사용하면 필요한 동시 Lambda 수를 줄이는 등의 다른 이점도 있습니다.
게시 Lambda 함수는 환경 변수를 사용하여 게시할 OpenSearch 도메인과 인덱스를 결정합니다. 프로덕션 별칭은 DynamoDB 테이블 또는 Kinesis Stream 외부의 프로덕션 OpenSearch 도메인에 쓰도록 구성됩니다.
새 구성을 테스트하거나 마이그레이션할 때 마이그레이션 별칭은 새 OpenSearch 도메인에 쓰도록 구성되지만 프로덕션 별칭과 동일한 트리거를 사용합니다. 이를 통해 두 OpenSearch 서비스 도메인에 동시에 데이터를 이중 인덱싱할 수 있습니다.
다음은 DynamoDB 테이블 스키마의 예입니다.
'LastUpdated' 값은 인덱싱 시 문서 버전으로 사용되므로 OpenSearch는 순서가 잘못된 모든 업데이트를 거부할 수 있습니다.
되메우기
이제 변경 사항이 두 도메인 모두에 게시되므로 새 도메인(색인)을 기록 데이터로 다시 채워야 합니다. 새로 생성된 인덱스를 백필하려면 다음 조합을 사용하세요. Amazon Simple Queue Service(Amazon SQS) DynamoDB가 사용됩니다. 스크립트는 다음에 대한 지침이 포함된 메시지로 SQS 대기열을 채웁니다. 병렬 스캐닝 DynamoDB 테이블의 세그먼트.
SQS 대기열은 메시지 지침을 읽고, DynamoDB 테이블의 해당 세그먼트에서 항목 배치를 가져와서 OpenSearch 인덱스에 쓰는 Lambda 함수를 시작합니다. 세그먼트의 진행 상황을 추적하기 위해 새 메시지가 SQS 대기열에 기록됩니다. 세그먼트가 완료된 후에는 더 이상 SQS 대기열에 메시지가 기록되지 않으며 프로세스가 자체적으로 중지됩니다.
동시성은 세그먼트 수에 따라 결정되며 Lambda 동시성 조정에서 제공되는 추가 제어 기능을 사용합니다. SmugMug는 OpenSearch 구성에서 시간당 1억 개 이상의 문서를 색인화하는 동시에 프로덕션 도메인에 전혀 영향을 미치지 않을 수 있습니다.
NodeJS AWS-SDK 기반 스크립트는 SQS 대기열을 시드하는 데 사용됩니다. 다음은 SQS 구성 스크립트 옵션의 일부입니다.
결과 SQS 메시지의 형식과 함께:
미러링
마지막으로 우리의 미러링된 검색어 결과는 프로덕션 도메인 외에도 SQS 대기열에 OpenSearch 쿼리를 보내 실행됩니다. SQS 대기열은 복제본 도메인에 대한 쿼리를 재생하는 Lambda 함수를 시작합니다. 이러한 요청의 검색 결과는 어떤 사용자에게도 전송되지 않지만 프로덕션 시스템이나 고객에게 영향을 주지 않고 테스트 중인 OpenSearch 서비스에서 프로덕션 로드를 복제할 수 있습니다.
결론
새로운 OpenSearch 도메인 또는 구성을 평가할 때 우리가 관심을 갖는 주요 지표는 쿼리 대기 시간 성능, 즉 걸린 대기 시간(시간당 대기 시간)과 가장 중요한 검색 대기 시간입니다. Graviton R6gd로 전환하면서 P40-P50 지연 시간이 약 99% 감소했으며 CPU 사용량도 i3에 비해 비슷한 수준으로 향상되었습니다(Graviton의 저렴한 비용 무시). 또 다른 환영받는 이점은 R1gd 및 기타 새로운 인스턴스에 G6GC를 추가함으로써 가비지 수집 변경으로 인해 JVM 메모리 압력이 더욱 예측 가능하고 모니터링 가능하다는 것입니다.
또한 이 파이프라인을 사용하여 OpenSearch Serverless를 테스트하고 최상의 사용 사례를 찾고 있습니다. 우리는 해당 서비스에 대해 매우 기쁘게 생각하며 시간이 지나면 완전히 서버리스 아키텍처를 갖추려고 합니다. 결과를 계속 지켜봐 주시기 바랍니다.
저자에 관하여
리 셰퍼드 SmugMug 직원 소프트웨어 엔지니어입니다
아이든 베키로프 Amazon Web Services 수석 기술 계정 관리자입니다.
- SEO 기반 콘텐츠 및 PR 배포. 오늘 증폭하십시오.
- PlatoData.Network 수직 생성 Ai. 자신에게 권한을 부여하십시오. 여기에서 액세스하십시오.
- PlatoAiStream. 웹3 인텔리전스. 지식 증폭. 여기에서 액세스하십시오.
- 플라톤ESG. 탄소, 클린테크, 에너지, 환경, 태양광, 폐기물 관리. 여기에서 액세스하십시오.
- PlatoHealth. 생명 공학 및 임상 시험 인텔리전스. 여기에서 액세스하십시오.
- 출처: https://aws.amazon.com/blogs/big-data/smugmugs-durable-search-pipelines-for-amazon-opensearch-service/
- :이다
- :아니
- 1
- 100
- 12
- 14
- 20
- 2012
- 2018
- 40
- 7
- 9
- a
- 할 수 있는
- 소개
- 계정
- 추가
- 또한
- 추가
- 후
- 수
- 허용
- 따라
- 또한
- 아마존
- Amazon Web Services
- an
- 및
- 다른
- 어떤
- 건축
- 아키텍처
- 있군요
- AS
- 유산
- At
- 오로라
- AWS
- 백업
- 기반으로
- BE
- 전에
- 존재
- 기준
- 이익
- 혜택
- BEST
- 그 너머
- 억원
- 수십억
- 두
- 비자 면제 프로그램에 해당하는 국가의 시민권을 가지고 있지만
- by
- 자막
- 변경
- 수집
- 결합
- 결합
- 비교
- 호환
- 완료
- 병발 사정
- 구성
- 구성
- 포함하는
- 컨트롤
- 동
- 비용
- 엄호
- CPU
- 만든
- 임계
- 중요 인프라
- 고객
- 데이터
- 수십 년
- Detection System
- 결정
- 결정된
- 문서
- 서류
- 도메인
- 도메인
- 구동
- 마다
- 수
- 가능
- 종점
- 기사
- 입력
- 전적으로
- 환경
- 에테르 (ETH)
- 평가
- 이벤트
- 예
- 흥분한
- 를
- Fields
- 발견
- 먼저,
- 맞게
- 다음에
- 럭셔리
- 체재
- 에
- 충분히
- 기능
- 이익
- 성장하는
- 있다
- 신장
- 도움
- 도움이
- 역사적인
- 시간
- HTML
- HTTP
- HTTPS
- i
- i3
- ID
- 영향
- 중요하게
- in
- 포함
- 색인
- 색인
- 인프라
- 인스턴스
- 명령
- 완성
- 의도
- 관심있는
- 으로
- 소개
- 호출
- 항목
- 되풀이
- 그
- 그 자체
- JPG
- 유지
- 유지
- 키
- 키워드
- 라벨
- 넓은
- 숨어 있음
- 시작
- 바람이 불어가는 쪽
- 처럼
- 살고있다
- 하중
- 롯
- 절감
- 본관
- 메모리
- 메시지
- 메시지
- 통계
- 이전
- 이주하는
- 이주
- 백만
- 백만 고객
- 거울
- 배우기
- 가장
- 움직임
- 여러
- MySQL의
- name
- 즉
- 자연의
- 요구
- 신제품
- 새로운
- 다음 것
- 아니
- 번호
- of
- 오프
- on
- 온라인
- 운영
- 옵션
- 옵트
- or
- 기타
- 우리의
- 평행
- 부품
- 패턴
- 용
- 퍼센트
- 성능
- 사진
- 사진
- 개
- 관로
- 플랫폼
- 플라톤
- 플라톤 데이터 인텔리전스
- 플라토데이터
- 예측 가능
- 압박
- 너무 이른
- 교장
- 방법
- 처리
- 생산
- 진행
- 제공
- 제공
- 게시
- 출판
- 출판
- 에 도달
- 감소
- 대답
- 요청
- 필수
- 결과
- 결과
- 달리기
- 안전하게
- 같은
- 본
- 확장성
- 스케일링
- 스크립트
- 검색
- 수색
- 씨
- 분절
- 세그먼트
- 팔다
- 전송
- 전송
- 서버리스
- 서비스
- 서비스
- 공유
- 공유
- 비슷한
- 단순, 간단, 편리
- 동시에
- 이후
- 단일
- 단편
- So
- 소프트웨어
- 출처
- 직원
- 유지
- 꾸준히
- 중지
- 저장
- 저장
- 상점
- 전략
- 스트림
- 이러한
- 시스템은
- 테이블
- 소요
- 테크니컬
- 수십
- test
- 지원
- 보다
- 그
- XNUMXD덴탈의
- 소스
- 그들의
- 그들
- 그곳에.
- Bowman의
- 이
- 세
- 을 통하여
- 시간
- 에
- 했다
- 선로
- 교통
- 트리거
- 진실
- 회전
- 두
- 아래에
- 업데이트
- 업데이트
- 업로드
- URL
- 용법
- 사용
- 사용 사례
- 익숙한
- 사용자
- 사용
- 사용
- 유효 기간
- 가치
- 버전
- 대단히
- 였다
- we
- 웹
- 웹 서비스
- 환영
- 뭐
- 언제
- 동안
- 과
- 없이
- 쓰다
- 쓰기
- 쓴
- 제퍼 넷
- 제로