Tota l’evidència
AWSNext.jsCloudFrontSSG

Quatre setmanes per a Xangai: una app d’esdeveniment servida a través del Gran Tallafoc

Per a un gran esdeveniment internacional d’esports de motor a Xangai, teníem quatre setmanes per lliurar una app web on els participants, tant generals com VIP, poguessin consultar les seves agendes. Allotjar-la a la Xina continental era impossible en aquest termini, així que la vam servir des d’AWS a Hong Kong, a través de CloudFront i travessant el Gran Tallafoc. Es va posar en marxa a temps, l’equip del client a la Xina no va notar cap latència afegida i la factura d’AWS del mes es va quedar en un sol dígit.

Allotjar a la Xina continentalEl que vam lliurar
Requisits previsRegistre ICP i un compte d’AWS ChinaLa configuració d’AWS que ja tenia el client
Hi cap en quatre setmanesNoSí
OrigenUna regió de la Xina continentalS3 a Hong Kong (ap-east-1)
Camí fins als usuarisEs queda dins de la XinaTravessa el Gran Tallafoc
Servidors per operarDepèn de l’stackCap: cada pàgina és un fitxer estàtic
Factura mensual d’AWS—Un sol dígit

Context

L’app en si semblava senzilla: un conjunt de pàgines d’agenda, unes per a tots els participants i unes altres per als VIP. Els problemes eren al voltant. L’esdeveniment era a Xangai, faltaven quatre setmanes i les vacances de l’Any Nou xinès començaven la setmana següent.

Quatre setmanes fins a la posada en marxa: l’Any Nou xinès va ocupar la segona setmana, així que les proves des de dins de la Xina es van fer les setmanes tres i quatre

El nostre client opera a la Xina, però no hi havia temps per completar el registre ICP, obligatori per als serveis d’internet allotjats a la Xina continental. A més, el client volia fer servir AWS, i les regions d’AWS a la Xina continental requereixen un compte d’AWS China independent. Tampoc no hi havia temps per aconseguir-lo.

Restriccions

  • Quatre setmanes, una de festiva. Durant l’Any Nou xinès, l’equip del client a la Xina no estava disponible per fer proves.
  • Sense registre ICP. Qualsevol cosa allotjada a la Xina continental, inclosos els punts de presència d’una CDN allà, quedava descartada.
  • Sense compte d’AWS China. El client volia AWS, així que comptàvem amb les regions globals d’AWS.
  • Accés fiable des de la Xina continental. Cada petició travessaria el Gran Tallafoc, que pot afegir latència i perdre trànsit de manera imprevisible.
  • Agendes que canvien durant l’esdeveniment. El client volia retirar l’agenda de cada dia un cop acabat.

Les opcions

OpcióRequereix ICPRequereix compte d’AWS ChinaHi cap en quatre setmanesVeredicte
Regions d’AWS China (Pequín, Ningxia)SíSíNoDescartada
Un altre proveïdor a la Xina continentalSíNoNoDescartada: ICP, i el client volia AWS
AWS fora de la Xina continental, a propNoNoSíEscollida, amb el Gran Tallafoc pel mig

Continuar amb AWS fora de la Xina continental resolia d’una vegada els problemes del compte i de la normativa. El preu era que l’app arribaria als usuaris a través del Gran Tallafoc, així que la resta del disseny va consistir a fer aquest pas tan curt, lleuger i poc freqüent com fos possible.

Arquitectura

Camí de lliurament: un export estàtic de Next.js pujat a S3 a Hong Kong i servit per CloudFront als assistents de la Xina continental a través del Gran Tallafoc
  • Build: Next.js amb generació de llocs estàtics. Tota l’app es construeix per endavant, així que cada pàgina és un fitxer.
  • Origen: un bucket S3 a la regió d’AWS de Hong Kong (ap-east-1), tan a prop de la Xina continental com permetia la nostra configuració.
  • Edge: CloudFront davant del bucket. La xarxa global de CloudFront no té punts de presència a la Xina continental, així que els assistents reben el contingut des d’edges propers fora d’aquesta.
  • Compte: un compte d’AWS dedicat, amb AWS Business Support contractat per a l’esdeveniment.

Decisions clau i compromisos

Generació de llocs estàtics amb Next.js

Vam recomanar la generació de llocs estàtics (SSG) amb Next.js, construint i desplegant l’app per endavant. Ens encanta SSG: redueix la càrrega operativa, facilita una memòria cau eficaç, millora el SEO i, en general, també el rendiment. Aquí, a més, volia dir que no hi havia cap servidor per mantenir viu a l’altra banda del Gran Tallafoc, ni res per escalar quan tot l’esdeveniment consultés l’agenda alhora.

  • Compromís: cada canvi és un desplegament. El contingut no pot canviar per petició, així que qualsevol actualització implica reconstruir o pujar fitxers. Per a unes agendes tancades per endavant, era un compromís fàcil d’acceptar.

Un resultat deliberadament lleuger

Vam limitar el nombre de recursos i vam reduir al màxim la mida de cadascun, sobretot la de les imatges. Cada byte i cada petició han de travessar el Gran Tallafoc, així que una pàgina més lleugera hi és una pàgina més ràpida, i amb menys probabilitats de quedar-se encallada per una connexió perduda.

També vam deixar fora de la pàgina els serveis de tercers. Les fonts, l’analítica i els scripts servits des de fora de la Xina sovint hi van lents o hi estan bloquejats, i una sola petició bloquejada pot retenir tota la pàgina.

Un origen a Hong Kong

CloudFront serveix la majoria de peticions des de la seva memòria cau, però cada fallada de memòria cau torna fins a l’origen. Posar el bucket a Hong Kong, tan a prop de la Xina continental com podíem, va mantenir curts aquests viatges.

  • Compromís: una regió opcional. Hong Kong s’ha d’activar al compte abans de poder-la fer servir. És un pas petit, però convé fer-lo aviat quan el termini és de quatre setmanes.

Una ruta per dia

Vam dissenyar l’agenda de cada dia com una ruta estàtica independent. Aquesta decisió va donar fruit durant l’esdeveniment, com s’explica més avall.

Business Support per a l’esdeveniment

Vam contractar AWS Business Support per al compte d’AWS dedicat, per tenir respostes més ràpides si alguna cosa fallava. Un període de prova generós va fer que la millora no augmentés el cost del projecte.

Proves a través del Gran Tallafoc

Durant les vacances, vam fer servir serveis de proves públics per confirmar que l’app era accessible des de la Xina continental i estimar la latència addicional. Quan l’equip del client a la Xina va tornar de l’Any Nou xinès, va provar l’app amb regularitat fins a la posada en marxa. Tots van coincidir que la latència afegida pel Gran Tallafoc era imperceptible.

Durant l’esdeveniment

L’esdeveniment es va celebrar de divendres a diumenge. A petició del client, un cop passada de sobres la mitjanit a Xangai, retiràvem l’agenda del dia que acabava d’acabar. Com que cada dia era una ruta independent, només havíem d’invalidar aquesta ruta a CloudFront. La resta de rutes continuaven a la memòria cau, així que l’actualització no va provocar ni una sola fallada de memòria cau enlloc més.

Una ruta per dia: cada nit només es retirava i s’invalidava la ruta del dia acabat, mentre els altres dies continuaven a la memòria cau

Resultats

MesuraResultat
Temps fins a la posada en marxaA temps: quatre setmanes, incloses les vacances de l’Any Nou xinès
Registre ICP o compte d’AWS ChinaNo va caldre cap dels dos
Latència afegida pel tallafocImperceptible, segons l’equip del client a la Xina
Servidors per operarCap
Actualitzacions diàries d’agendaUna invalidació de CloudFront cadascuna, sense més fallades de memòria cau
Factura d’AWS del mes de l’esdevenimentUn sol dígit

El cost ens va sorprendre fins i tot a nosaltres. Per a un projecte d’aquest perfil i un client final d’aquesta envergadura, la infraestructura va ser pràcticament gratuïta. És un bon recordatori que les decisions tècniques encertades poden reduir de manera dràstica els costos d’infraestructura.

Ens vam encarregar del desenvolupament de programari, el desplegament i la infraestructura al núvol. També vam estudiar com treballar dins de les restriccions del Gran Tallafoc i vam assessorar el nostre client i el client final sobre les opcions. El projecte es va lliurar amb èxit, i les valoracions del client, del client final i dels seus usuaris van ser molt positives.

Què faríem diferent

  • Monitorar des de dins de la Xina durant l’esdeveniment. Les proves des de dins de la Xina depenien de l’equip del client. Una comprovació sintètica des de xarxes de la Xina continental ens hauria donat la mateixa resposta a qualsevol hora.
  • Automatitzar la retirada diària. Una tasca programada que retiri el dia acabat i n’invalidi la ruta evitaria dependre que algú estigui despert passada la mitjanit a Xangai.
  • Començar el registre ICP igualment. Si l’esdeveniment torna l’any que ve, registrar-se ara faria que allotjar dins de la Xina continental fos una opció i no un desig.