SmugMug operează două platforme foto online foarte mari, SmugMug și Flickr, permițând mai mult de 100 de milioane de clienți să stocheze, să caute, să partajeze și să vândă în siguranță zeci de miliarde de fotografii. Clienții care încărcau și căutează decenii de fotografii au ajutat să transforme căutarea într-o infrastructură critică, crescând constant de când SmugMug a folosit prima dată Amazon CloudSearch în 2012, urmat de Serviciul Amazon OpenSearch din 2018, după ce a atins miliarde de documente și terabytes de stocare de căutare.
Aici, Lee Shepherd, inginer al personalului SmugMug, împărtășește arhitectura de căutare a lui SmugMug, folosită pentru a publica, completa și reflecta traficul live în mai multe clustere. SmugMug folosește aceste conducte pentru a compara, valida și migra către noi configurații, inclusiv instanțe r6gd.2xlarge bazate pe Graviton de la i3.2xlarge, împreună cu testarea Amazon OpenSearch Serverless. Acoperim trei conducte utilizate pentru publicare, completare și interogare fără a introduce modele de trafic nerealiste și fără niciun impact asupra serviciilor de producție.
Există două piese arhitecturale principale critice pentru proces:
- O sursă durabilă de adevăr pentru datele de index. Este cea mai bună practică și parte a strategiei noastre de rezervă pentru a avea un magazin durabil dincolo de indexul OpenSearch și Amazon DynamoDB oferă scalabilitate și integrare cu AWS Lambdas care simplifică o mare parte a procesului. Folosim DynamoDB pentru alte servicii care nu sunt de căutare, așa că aceasta a fost o potrivire naturală.
- O funcție Lambda pentru publicarea datelor din sursa adevărului în OpenSearch. Folosind aliasuri de funcție ajută la rularea mai multor configurații ale aceleiași funcții Lambda în același timp și este cheia pentru menținerea datelor sincronizate.
Editare
Canalul de publicare este determinat de evenimente precum un utilizator care introduce cuvinte cheie sau subtitrări, încărcări noi sau detectarea etichetelor prin Amazon Rekognition. Aceste evenimente sunt procesate, combinând date de la câteva alte magazine de active, cum ar fi Ediția compatibilă Amazon Aurora MySQL și Serviciul Amazon de stocare simplă (Amazon S3), înainte de a scrie un singur articol în DynamoDB.
Scrierea în DynamoDB invocă o funcție de publicare Lambda, prin intermediul Adaptor DynamoDB Streams Kinesis, care preia un lot de articole actualizate din DynamoDB și le indexează în OpenSearch. Există și alte beneficii ale utilizării adaptorului DynamoDB Streams Kinesis, cum ar fi reducerea numărului de Lambda simultane necesare.
Funcția Lambda de publicare utilizează variabile de mediu pentru a determina domeniul și indexul OpenSearch pe care să se publice. Un alias de producție este configurat pentru a scrie în domeniul OpenSearch de producție, în afara tabelului DynamoDB sau a fluxului Kinesis
La testarea noilor configurații sau la migrare, un alias de migrare este configurat să scrie în noul domeniu OpenSearch, dar să folosească același declanșator ca și aliasul de producție. Acest lucru permite indexarea duală a datelor către ambele domenii ale serviciului OpenSearch simultan.
Iată un exemplu de schema tabelului DynamoDB:
Valoarea „LastUpdated” este utilizată ca versiune a documentului la indexare, permițând OpenSearch să respingă orice actualizări nerespectate.
Umplere
Acum că modificările sunt publicate pentru ambele domenii, noul domeniu (index) trebuie completat cu date istorice. Pentru a completa un index nou creat, o combinație de Serviciul de coadă simplă Amazon (Amazon SQS) și se folosește DynamoDB. Un script populează o coadă SQS cu mesaje care conțin instrucțiuni pentru scanare paralelă un segment al tabelului DynamoDB.
Coada SQS lansează o funcție Lambda care citește instrucțiunile mesajului, preia un lot de articole din segmentul corespunzător al tabelului DynamoDB și le scrie într-un index OpenSearch. Mesajele noi sunt scrise în coada SQS pentru a urmări progresul prin segment. După finalizarea segmentului, nu mai sunt scrise mesaje în coada SQS și procesul se oprește singur.
Concurența este determinată de numărul de segmente, cu controale suplimentare oferite de scalarea concurenței Lambda. SmugMug este capabil să indexeze mai mult de 1 miliard de documente pe oră în configurația OpenSearch, în timp ce nu are impact asupra domeniului de producție.
Un script bazat pe NodeJS AWS-SDK este utilizat pentru a genera coada SQS. Iată un fragment din opțiunile scriptului de configurare SQS:
Împreună cu formatul mesajului SQS rezultat:
Oglindire
În sfârșit, al nostru interogare de căutare în oglindă rezultatele rulează prin trimiterea unei interogări OpenSearch la o coadă SQS, în plus față de domeniul nostru de producție. Coada SQS lansează o funcție Lambda care redă interogarea în domeniul replica. Rezultatele căutării din aceste solicitări nu sunt trimise niciunui utilizator, dar permit replicarea sarcinii de producție pe serviciul OpenSearch testat fără impact asupra sistemelor de producție sau clienților.
Concluzie
Atunci când evaluăm un nou domeniu sau configurație OpenSearch, principalele metrici care ne interesează sunt performanța latenței interogărilor, și anume latențele luate (latențe pe timp) și cel mai important latențe pentru căutare. În trecerea noastră la Graviton R6gd, am văzut latențe P40-P50 cu aproximativ 99% mai mici, împreună cu câștiguri similare în utilizarea procesorului în comparație cu i3 (ignorând costurile mai mici ale Graviton). Un alt beneficiu binevenit a fost presiunea memoriei JVM mai previzibilă și mai monitorabilă cu modificările de colectare a gunoiului de la adăugarea lui G1GC pe R6gd și alte instanțe noi.
Folosind această conductă, testăm și OpenSearch Serverless și găsim cele mai bune cazuri de utilizare. Suntem încântați de acest serviciu și intenționăm pe deplin să avem în timp o arhitectură complet fără server. Rămâneți pe fază pentru rezultate.
Despre Autori
Lee Shepherd este inginer software SmugMug Staff
Aydn Bekirov este un manager de cont principal al Amazon Web Services
- Distribuție de conținut bazat pe SEO și PR. Amplifică-te astăzi.
- PlatoData.Network Vertical Generative Ai. Împuterniciți-vă. Accesați Aici.
- PlatoAiStream. Web3 Intelligence. Cunoștințe amplificate. Accesați Aici.
- PlatoESG. carbon, CleanTech, Energie, Mediu inconjurator, Solar, Managementul deșeurilor. Accesați Aici.
- PlatoHealth. Biotehnologie și Inteligență pentru studii clinice. Accesați Aici.
- Sursa: https://aws.amazon.com/blogs/big-data/smugmugs-durable-search-pipelines-for-amazon-opensearch-service/
- :este
- :nu
- 1
- 100
- 12
- 14
- 20
- 2012
- 2018
- 40
- 7
- 9
- a
- Capabil
- Despre Noi
- Cont
- adăugat
- plus
- Suplimentar
- După
- permite
- Permiterea
- de-a lungul
- de asemenea
- Amazon
- Amazon Web Services
- an
- și
- O alta
- Orice
- arhitectural
- arhitectură
- SUNT
- AS
- activ
- At
- Auroră
- AWS
- Backup
- bazat
- BE
- înainte
- fiind
- Benchmark
- beneficia
- Beneficiile
- CEL MAI BUN
- Dincolo de
- Miliard
- miliarde
- atât
- dar
- by
- legende
- Modificări
- colectare
- combinaţie
- combinând
- comparație
- compatibil
- finalizeaza
- concurent
- Configuraţie
- configurat
- conţine
- controale
- Corespunzător
- Cheltuieli
- acoperi
- Procesor
- a creat
- critic
- Infrastructura critică
- clienţii care
- de date
- zeci de ani
- Detectare
- Determina
- determinat
- document
- documente
- domeniu
- domenii
- condus
- fiecare
- permite
- permițând
- Punct final
- inginer
- intrarea
- în întregime
- Mediu inconjurator
- Eter (ETH)
- evaluarea
- evenimente
- exemplu
- excitat
- puțini
- Domenii
- descoperire
- First
- potrivi
- a urmat
- Pentru
- format
- din
- complet
- funcţie
- câștig
- În creştere
- Avea
- înălțime
- a ajutat
- ajută
- istoric
- oră
- HTML
- http
- HTTPS
- i
- i3
- ID
- Impactul
- important
- in
- Inclusiv
- index
- indexurile
- Infrastructură
- cazuri
- instrucțiuni
- integrare
- intenţionează
- interesat
- în
- introducerea
- invocă
- articole
- repetare
- ESTE
- în sine
- jpg
- A pastra
- păstrare
- Cheie
- Cuvinte cheie
- Etichetă
- mare
- Latență
- lansează
- Sub vânt
- ca
- trăi
- încărca
- Lot
- LOWER
- Principal
- Memorie
- mesaj
- mesaje
- Metrici
- migra
- Migrarea
- migrațiune
- milion
- milioane de clienți
- oglindă
- mai mult
- cele mai multe
- muta
- multiplu
- MySQL
- nume
- și anume
- Natural
- nevoilor
- Nou
- recent
- următor
- Nu.
- număr
- of
- de pe
- on
- on-line
- opereaza
- Opţiuni
- opteazã
- or
- Altele
- al nostru
- Paralel
- parte
- modele
- pentru
- la sută
- performanță
- Fotografii
- piese
- conducte
- Platforme
- Plato
- Informații despre date Platon
- PlatoData
- predictibil
- presiune
- precedent
- Principal
- proces
- prelucrate
- producere
- Progres
- prevăzut
- furnizează
- publica
- publicat
- Editare
- ajungând
- reducerea
- răspunde
- cereri de
- necesar
- rezultând
- REZULTATE
- Alerga
- în siguranță
- acelaşi
- văzut
- scalabilitate
- scalare
- scenariu
- Caută
- căutare
- sămânţă
- segment
- segmente
- vinde
- trimitere
- trimis
- serverless
- serviciu
- Servicii
- Distribuie
- Acțiuni
- asemănător
- simplu
- simultan
- întrucât
- singur
- fragment
- So
- Software
- Sursă
- Personal
- şedere
- în mod constant
- opriri
- depozitare
- stoca
- magazine
- Strategie
- fluxuri
- astfel de
- sisteme
- tabel
- ia
- Tehnic
- zeci
- test
- Testarea
- decât
- acea
- Sursa
- lor
- Lor
- Acolo.
- Acestea
- acest
- trei
- Prin
- timp
- la
- a luat
- urmări
- trafic
- declanşa
- Adevăr
- ÎNTORCĂ
- Două
- în
- actualizat
- actualizări
- Se încarcă
- URL-ul
- Folosire
- utilizare
- utilizare-cazuri
- utilizat
- Utilizator
- utilizări
- folosind
- VALIDA
- valoare
- versiune
- foarte
- a fost
- we
- web
- servicii web
- bun venit
- Ce
- cand
- în timp ce
- cu
- fără
- scrie
- scris
- scris
- zephyrnet
- zero