Per chi sviluppa web app, raggiungere gli utenti in Cina impone una logica completamente diversa. Le illustrerò un percorso pratico per arrivare a soluzioni sufficientemente efficaci.
Ha una web app con una portata globale, ma non davvero globale: le mancano ancora quegli 1,4 miliardi di consumatori cinesi. Non si tratta semplicemente di un'altra geolocalizzazione. Servire la Cina è un viaggio nell'ignoto, persino per il tecnologo più esperto. Le leggi cinesi, le normative e il Great Firewall rappresentano una barriera molto alta per le aziende non cinesi.
Una realtà difficile da accettare quando ci si è costruiti una carriera trovando una scappatoia per ogni ostacolo. Eppure le regole sono reali, vengono applicate e si fanno sempre più severe. Il suo sito web, la connessione di rete o il server cloud possono essere disattivati in qualsiasi momento per una violazione, senza alcuna spiegazione e senza una via concreta per fare ricorso.

Un ostacolo ineludibile
Come affrontarlo, dunque? L'approccio fortemente promosso dal sistema normativo cinese è il seguente:
i clienti cinesi vanno serviti esclusivamente da una società di proprietà cinese e registrata in Cina, con team DevOps cinesi in uffici cinesi, su un cloud provider cinese, con un database separato in Cina, integrato solo in modo blando, se non addirittura per nulla, con i sistemi non cinesi.
Detto questo, vediamo i passi da compiere per portare la sua app oltre il Great Firewall.
Nota: non otterrà una soluzione affidabile e veloce come quella a cui è abituato, ma anche pochi accorgimenti spesso bastano a soddisfare i requisiti di base.
Costruire un front-end compatibile con la Cina
Può partire bene con ottimizzazioni mirate al solo codice front-end, senza dover distribuire nulla in Cina. Le descriverò una combinazione di tecniche specifiche pensate per gestire il Great Firewall, insieme a quelle standard che già conosce.
Capisca cosa la sta rallentando
Il Great Firewall rallenta e interrompe in modo irregolare alcuni domini non cinesi per gli utenti cinesi. In particolare, i siti con contenuti generati dagli utenti vengono colpiti duramente: il caricamento di un singolo utente può avere conseguenze sull'intero sito. Una sola immagine da Imgur, ad esempio, può richiedere dai 60 ai 90 secondi per caricarsi. Allo stesso modo, caricare JavaScript da domini SaaS — soprattutto da aziende grandi al punto da attirare l'attenzione negativa del Firewall, come Stripe — può essere estremamente lento. Questa lentezza intermittente è più difficile da diagnosticare e da risolvere rispetto a un blocco netto, che si potrebbe individuare e correggere rapidamente. Oltre alla lentezza, incorporare contenuti generati dagli utenti espone il suo dominio al rischio di finire in blacklist. (Ospitare direttamente contenuti generati dagli utenti è ancora peggio.)
L'aspetto positivo è che la comunicazione dalla Cina attraverso il Firewall verso domini non in blacklist in genere non è un problema. Può quindi risolvere la lentezza dei contenuti di terze parti sfruttando le buone velocità del proprio dominio, a patto che non venga rallentato. (In caso contrario, le servirà una soluzione molto diversa e ben più complessa.)
Il primo passo è misurare in dettaglio le prestazioni delle chiamate di rete. Per uno sviluppatore che analizza e migliora le prestazioni in modo iterativo, l'approccio più flessibile è ricorrere all'ampia gamma di strumenti di sviluppo standard integrati nei browser, come Firefox Dev Tools o HAR Analyzer di Google. Questo, però, richiede l'accesso a una VM in Cina. In alternativa, alcuni servizi web possono fornirle gran parte delle informazioni necessarie. WebPageTest è una buona opzione; altri sono elencati qui.
Serva direttamente le risorse
Una volta individuati immagini, JavaScript e CSS di terze parti più lenti da caricare, inizi a servirli dal proprio dominio. Conservi una copia dei file su un server statico oppure imposti un proxy verso le fonti di terze parti. (È l'esatto opposto dell'approccio abituale per servire utenti in tutto il mondo, in cui si delega la distribuzione di alcuni contenuti a server di terze parti specializzati.)
Si troverà gradualmente a sviluppare la sua web app con funzionalità diverse per gli utenti cinesi rispetto a quelli del resto del mondo. Ad esempio, la maggior parte dei sistemi di pagamento non cinesi è irrilevante per i clienti cinesi, che non possono utilizzarli. Eliminandoli per i clienti cinesi, evita l'inutile rallentamento dovuto al caricamento del JavaScript. Potrà poi integrare i metodi di pagamento cinesi, anche se ciò richiede uno sforzo di tipo diverso, viste le restrizioni legali descritte più avanti per le web app commerciali rivolte alla Cina.
Rispetto al caricamento delle risorse, le chiamate AJAX verso domini di terze parti sono più difficili da accelerare. Può valutare di mettere a proxy anche queste chiamate, anche se può risultare complesso a causa dei controlli di sicurezza contro gli attacchi man-in-the-middle. Meno l'applicazione dipende da terze parti, meglio è — anche quando questo rallenta lo sviluppo perché impone di reinventare servizi invece di usare offerte esterne.
Affronti finalmente le ottimizzazioni che continua a rimandare
Quelle viste sono ottimizzazioni specifiche per la Cina, ma anche le classiche ottimizzazioni front-end sono una buona idea. Magari le ha rimandate finché la velocità era già accettabile, ma quando le risorse possono richiedere minuti per caricarsi in modo irregolare, la sua web app deve essere abbastanza resiliente da impedire che una qualsiasi risorsa blocchi il rendering. Minifichi tutto e carichi ogni risorsa possibile in modo asincrono, dopo l'evento onLoad, così il rendering della pagina non viene bloccato.
Tutto questo le permetterà di avere un'applicazione che funziona dalla Cina e potrà portarla molto lontano. Tuttavia, non vedrà l'affidabilità e la velocità a cui è abituato, e l'accesso può essere bloccato in qualsiasi momento.
Attenzione alle "soluzioni rapide"
Vediamo ora alcune soluzioni che sembrano rapide ma non lo sono: i CDN cinesi, le VPN e il deployment a Hong Kong.
I CDN sono acceleratori, non tunnel
Un CDN orientato alla Cina velocizza l'accesso ai suoi server fuori dalla Cina per i clienti che si trovano in Cina. Ma è un acceleratore, non un sistema per scavalcare il firewall. Per mantenere la propria licenza ed evitare il blocco, i provider CDN devono cooperare con il Great Firewall, e si applicano quindi le stesse restrizioni sui contenuti. Il CDN cinese trasformerà siti veloci in siti un po' più veloci, ma non aiuterà con i principali colli di bottiglia citati sopra.
Inoltre, questi CDN non controllano l'accesso dal frontend ai server di terze parti — spesso il collo di bottiglia maggiore, a meno che non distribuisca le risorse dal proprio dominio, come consigliato sopra. I CDN presentano altri svantaggi: la configurazione DNS è complessa e la loro proprietà cambia spesso di mano, con conseguenti API instabili.
Tunnel inaffidabili
Le VPN offrono una forma di tunnel attraverso il Great Firewall. Sono ampiamente usate in Cina, anche se illegali. Possono essere una soluzione accettabile per rendere disponibile un'app aziendale a un piccolo numero di utenti noti. Ma come fornitore di una web app, lei vorrà con ogni probabilità massimizzare l'accesso e non costringere i suoi clienti a usare una VPN. E anche quando le VPN funzionano, il loro traffico è spesso molto più lento dell'accesso diretto, sia per le interferenze del Firewall sia perché le VPN aggiungono un ulteriore livello a tutta la comunicazione di rete. Inoltre, le VPN possono cadere in qualsiasi momento, quando le autorità le identificano e le bloccano — o, peggio, le rallentano in modo irregolare. (Marc Bevand racconta una storia impressionante di neutralizzazione delle VPN attraverso fughe di informazioni in canali laterali tramite deep-packet inspection avanzata.)
Hong Kong è solo un'altra località fuori dal Firewall
Il deployment a Hong Kong sembra promettente: Hong Kong confina con Shenzhen ed è amministrata dalla Cina, ma garantisce libertà di rete. Persino Google, altrimenti bandita in Cina, ha lì un data center. Purtroppo il vantaggio è limitato. Il Firewall continua a rallentare e interrompere l'accesso dalla Cina continentale a Hong Kong, esattamente come per qualsiasi altra località. Proprio come avvicina i suoi server ai clienti fuori dalla Cina per guadagnare qualche millisecondo, Hong Kong la avvicina alla Cina, ma non risolve il problema principale.
Le licenze necessarie
Se ospitare al di fuori della Cina non basta, valuti il deployment in Cina. Per farlo, dovrà prima avviare l'iter di licenza.
Esistono due livelli di licenza ICP (Internet Content Provider):
- una registrazione ICP ( Bei'an), requisito legale prima di pubblicare il suo sito web in Cina;
- se il sito è commerciale e vende servizi online, serve una licenza ICP completa, disponibile solo per aziende a maggioranza di proprietà cinese.
Optare per la registrazione ICP anziché per la licenza completa è ovviamente piuttosto limitante, ma in questo articolo darò per scontato che la registrazione sia la sua unica opzione.
È il momento di precisare che sono un tecnologo, non un avvocato — e tantomeno un avvocato accreditato in Cina. Quindi verifichi i dettagli prima di procedere: leggi e prassi sul campo cambiano di continuo. Posso però assicurarle che questo processo è davvero complicato quanto sembra.
Come ottenere il suo Bei'an
Per la registrazione ICP, costituisca una controllata cinese con dipendenti e uffici. Una finzione legale non basta: deve superare verifiche che attestino la reale esistenza della controllata, fino al punto di fornire una foto di un dipendente che mostra un poster del cloud provider all'interno del suo ufficio fisico. Quel dipendente non è una mera formalità: una solida comprensione di come le regole impattino sul suo deployment cloud è una risorsa preziosissima.
Potrebbe rivolgersi a un'azienda partner cinese che svolga l'iter al posto suo, ma i continui cambiamenti applicativi rendono questa una soluzione incerta.
Presenti poi la registrazione ICP per tempo: il processo richiede settimane. Otterrà il suo numero ICP, da mostrare nel footer della home page.
Se vuole effettivamente vendere beni in Cina, la registrazione ICP non basta: le serve una licenza ICP, e l'azienda deve essere non solo registrata in Cina, ma anche a maggioranza di proprietà cinese.
Avvii il suo deployment in Cina
Le opzioni cloud comprendono provider locali come Alibaba (Aliyun) e Tencent, oltre a piattaforme cloud straniere come AWS e Azure. Le consiglio caldamente AWS China e Azure China, che le offrono API coerenti con quelle che già conosce. Le loro tecnologie godono inoltre di un'eccellente documentazione in inglese, oltre ad articoli, formazione, StackExchange e post nei forum prodotti dagli ecosistemi globali. La documentazione in inglese di Alibaba e Tencent rimane scarsa, nonostante gli sforzi lodevoli per recuperare il terreno. (In realtà, anche la documentazione e i contenuti su questioni specifiche per la Cina riguardanti AWS China e Azure China sono sorprendentemente scarsi, ma almeno sulle API troverà il supporto di cui ha bisogno.)
AWS e Azure non sono Amazon e Microsoft
AWS China non è di proprietà di Amazon e Azure China non è di proprietà di Microsoft. Questi servizi sono gestiti da società cinesi: solo la tecnologia è concessa in licenza dalle aziende americane.
Vanno considerati cloud distinti che, per puro caso, usano le stesse tecnologie — non semplici regioni separate. Non sono integrati. In AWS, ad esempio, deve creare identità utente separate dentro e fuori dalla Cina. Non può copiare gli AMI da e verso la Cina, non esiste Route 53 per abilitare un DNS globale e non può collegare le regioni con Private Link.
Iscriversi al cloud cinese è molto più macchinoso. Con i provider cloud globali in genere non serve nulla oltre a un numero di carta di credito. Con i provider in Cina (inclusi AWS e Azure) servono la registrazione ICP e la licenza per la sua controllata cinese. Dovrà inoltre affrontare disposizioni anti-frode di "registrazione con nome reale" molto più rigorose, comprese foto di vari documenti d'identità e dettagli personali approfonditi. I piani gratuiti sono molto limitati o non disponibili, e il pagamento è anticipato.
Sfide tecniche
Durante la configurazione del suo deployment in Cina, dovrà probabilmente fare i conti con alcuni limiti tecnici:
Un'esperienza di deployment macchinosa
AWS China e Azure China sono in ritardo rispetto ai provider originali nell'adozione delle nuove tecnologie.
E i processi più ordinari — come la registrazione al cloud provider o persino la semplice eliminazione di una VM — richiedono spesso molto più supporto umano di quello a cui è abituato, soprattutto con i cloud provider cinesi nativi. Il personale di supporto è professionale, ma il livello di inglese non è quello a cui è abituato.
L'accesso dall'esterno della Cina tramite la console GUI può occasionalmente rallentare. Allo stesso modo, la connettività per lo sviluppo e l'accesso al deployment può venir meno. Valuti di sviluppare ed eseguire i suoi processi di Continuous Integration su una regione non cinese.
Non può esporre porte HTTP standard come la 80 e la 443 senza una registrazione ICP. Ciò significa che tutto lo sviluppo e il testing dovranno avvenire su altre porte, passando alle porte standard solo in produzione.
Allo stesso modo, gran parte dei test non avverrà in una configurazione DNS realistica, perché non vale la pena registrarsi solo per testare: sia il dominio (ad esempio test-mycompany.com) sia il certificato SSL devono essere approvati sulla base della sua registrazione ICP.
Si prepari al meglio con tecnologie collaudate
L'aspetto positivo è che le connessioni di rete tra server in Cina e fuori dalla Cina sono in genere veloci quanto qualsiasi altra connessione nel cloud. Distribuisca un sottoinsieme minimo di funzionalità nel cloud cinese e poi lo integri nel deployment principale al di fuori della Cina.
Può fare integrazioni cloud-to-cloud come di consueto, salvo nella sfortunata eventualità che le venga assegnato un indirizzo IP in precedenza usato da un servizio bloccato. Tenga però presente che potrebbero verificarsi rallentamenti in qualsiasi momento, quindi progetti le integrazioni di conseguenza. Mantenga database indipendenti dentro e fuori dal Great Firewall e li sincronizzi in modo asincrono. I cloud provider offrono servizi di esfiltrazione di dati in blocco tramite un collegamento diretto che bypassa il Firewall, ma sono costosi e non necessari per scopi ordinari: le classiche architetture asincrone sono più che sufficienti.
Mantenga insomma un'architettura semplice, basata su tecnologie collaudate, dopo aver verificato cosa sia disponibile e maturo sulla piattaforma cloud cinese. (È sempre leggermente in ritardo rispetto alle offerte globali.) Non provi a fare il lift-and-shift di un'intera architettura complessa da AWS o Azure. Prenda invece i singoli pezzi dalla sua architettura a microservizi ben strutturata. (Se non ne ha una, è il momento di costruirla!) Distribuisca soltanto i microservizi che le servono davvero in Cina. Potrebbe dover effettuare un fork del codice per adattarlo ai requisiti del cloud cinese, ma migrando da AWS o Azure alle rispettive piattaforme cinesi non dovrà cambiare granché.
Esporre la sua web app per l'utilizzo dalla Cina è difficile, ma possibile. Per prima cosa, ottimizzi il front-end con tecniche standard e specifiche per la Cina. Poi costituisca una controllata cinese e distribuisca un sottoinsieme minimo di microservizi su AWS China o Azure China.