Votre application fonctionne bien, mais l'architecture n'est plus un sujet académique. Les tickets de support de l'Asie mentionnent des écrans lents. Un incident de cloud régional a forcé tout le monde dans la même salle de guerre. Le produit souhaite une confiance accrue dans le déploiement mobile plus rapide car un déploiement backend mauvais arrive maintenant au même moment qu'une nouvelle mise à jour d'application, et personne ne peut dire si le problème est API la latence, un client obsolète ou une dépendance régionale échouée.
That’s usually the point where teams start saying “we need multi region.” Sometimes they’re right. Sometimes they’re about to buy a lot of complexity they don’t need.
La mise en œuvre dans plusieurs régions n'est pas une marque de maturité. Il s'agit d'une décision commerciale avec des conséquences pour l'infrastructure, l'ingénierie de la mise en production, l'observabilité, la réponse aux incidents et la livraison d'applications mobiles. Si vous exécutez une application Capacitor ou Ionic, les douleurs apparaissent rapidement. Les utilisateurs ne s'intéressent pas à savoir si le problème était Route 53, un réplica en retard ou un ensemble d'actualisations qui a atteint l'Europe avant l'APAC. Ils s'inquiètent que l'application fonctionnait hier et se sent brisée maintenant.
La bonne nouvelle est que ces problèmes sont prévisibles. Ils apparaissent généralement après le produit marché, après une utilisation internationale, ou après des engagements de fiabilité écrits dans les contrats. Si vous diagnostiquez des requêtes lentes, il est utile de comprendre ce que la latence de réseau est avant de redessiner l'ensemble de la plateforme.
Table des matières
- Introduction Au-delà des limites d'une région
- Qu'est-ce qu'une mise en œuvre dans plusieurs régions ?
- Les principaux moteurs pour l'adoption d'une stratégie de mise en œuvre dans plusieurs régions
- Comparaison d'architectures multi-région courantes
- Les coûts cachés et les compromis critiques
- Guide de mise en œuvre et meilleures pratiques
- Conclusion : Construire un pied-à-terre global résilient
Introduction : Au-delà des limites de la région unique
Une seule région est souvent la bonne réponse au début. Cela simplifie la mise en production, réduit les modes de panne et donne à l'équipe un endroit clair pour déboguer. La plupart des applications peuvent aller loin avec une région unique bien ajustée, un CDN, une bonne mise en cache et une indexation de base de données sensée. C'est la vérité discrète que de nombreuses équipes ignorent lorsqu'elles passent directement à l'architecture mondiale.
Le point de rupture est généralement opérationnel, et non idéologique. Une panne dans votre seule région peut transformer une journée de déploiement routine en un problème de confiance des clients. Un groupe d'utilisateurs éloignés de votre calcul peut transformer chaque rafraîchissement mobile, chaque connexion ou chaque paiement en un ticket de support en slow-motion. À ce stade, le déploiement multi-région cesse d'être un « modèle d'architecture agréable » et devient une question de savoir si l'entreprise peut accepter un risque concentré.
Le déploiement multi-région ne se justifie que lorsque la panne d'une géographie est inacceptable pour l'entreprise, le contrat ou le régulateur.
Il y a aussi un angle de livraison que les diagrammes d'infrastructure rarement montrent. Les équipes mobiles ne livrent pas seulement des backends code. Elles livrent des APIs, mettent à jour des bundles, des changements de configuration, des drapeaux de fonctionnalité et du contenu. Dans une région unique, le chemin de CI à l'appareil utilisateur est plus facile à raisonner. Dans plusieurs régions, vous devez maintenant répondre à des questions plus difficiles :
- Quelle région a reçu la mise à jour en premier : et était-ce intentionnel ?
- Quelle version de l'application appelle quelle forme de backend : When le timing de déploiement diffère par région géographique?
- Quelle expérience utilisateur a échoué : En raison de l'ensemble de l'application, de la région API ou de la couche de routage ?
Par conséquent, le premier projet multi-région ne doit pas commencer par « ajouter plus de régions ». Il devrait commencer par « quels problèmes résolvons-nous et quel nouveau fardeau opérationnel sommes-nous prêts à assumer ? »
Qu'est-ce qu'une mise en œuvre multi-région réelle
La mise en œuvre multi-région consiste à exécuter des parties significatives de votre système dans plus d'une région géographique du cloud, afin que les utilisateurs, le trafic et les pannes ne soient pas tous liés à un seul emplacement.
Cela semble évident, mais les équipes ont souvent confondu trois objectifs séparés. Elles veulent une latence plus faible, une résilience meilleure et une localité de données plus propre. Ces objectifs se chevauchent, mais ils n'exigent pas toujours le même design. Si vous n'avez besoin que d'une livraison plus rapide des actifs statiques, un CDN peut faire la plupart du travail. Si vous avez besoin de survivabilité régionale ou de stockage de données local, vous êtes dans une catégorie entièrement différente.

L'analogie de l'entrepôt est suffisamment proche pour être utile
Imaginez votre application comme une entreprise de commerce électronique avec un entrepôt. Si cet entrepôt se trouve aux États-Unis, les clients d'Europe et d'Asie attendent plus longtemps, le coût de l'expédition augmente et un désastre local peut bloquer l'ensemble de l'entreprise. L'ouverture d'entrepôts régionaux résout les problèmes de distance et de résilience, mais elle crée également des problèmes de synchronisation des stocks, de personnel, de routage et de surcoût opérationnel.
Le logiciel se comporte de la même manière. Vous placez le calcul plus près des utilisateurs, vous répliquez l'état critique et vous routez les demandes en fonction de la latence, de la santé ou de la géographie. Si vous voulez un modèle mental plus simple pour les équipes frontend, comparez-le à un réseau de bord pour la livraison mondiale . La différence est que multi-région n'envoie pas juste les fichiers plus près des utilisateurs. Il déplace la responsabilité de l'application à travers les géographies.Là où les développeurs le ressentent en premier lieu
Les développeurs expérimentent généralement multi-région avant de la comprendre pleinement. Une chaîne de livraison de version a soudainement besoin de ciblage régional. Les journaux sont divisés entre les environnements. Un bug mobile se reproduit uniquement pour les utilisateurs routés vers une région. Une écriture de base de données réussit dans un endroit et apparaît plus tard dans un autre endroit.
C'est pourquoi « dupliquer simplement la production dans une autre région » fonctionne presque jamais proprement. La mise en œuvre multi-région réelle oblige à faire des choix sur :
Gestion de l'état :
- peut l'application rester sans état au niveau du service ? Routage des demandes :
- qui décide où un utilisateur atterrit ? Propriété des données :
- laquelle région est autorisée à accepter les écritures pour lesquels les enregistrements ? which region is allowed to accept writes for which records?
- Comportement de redondance : automatique, manuel ou conditionnel ?
Si l'équipe ne peut pas répondre à ces questions de manière claire, elle n'a pas encore de conception multi-région. Elle a une infrastructure dupliquée et des incidents futurs en attente.
Facteurs Clés pour l'Adoption d'une Stratégie Multi-Région
Seuls quelques motifs justifient le coût et la douleur d'une mise en œuvre multi-région. Si votre motif n'est pas l'un d'eux, restez sceptique.
D'après ceci analyse de quand vous avez réellement besoin d'une mise en œuvre multi-régionil est fondamentalement justifié lorsque les organisations ont besoin d'accords contractuels de SLA de 99,99 % d'uptime ou pluslorsque les applications sensibles à la latence doivent livrer des temps de réponse inférieurs à 100 ms sur plusieurs continentsou lorsque des réglementations telles que Les données des utilisateurs de l'UE doivent rester dans les frontières de l'UE en vertu du RGPD.
Les engagements de disponibilité changent la réponse
Une fois que la disponibilité est incluse dans un contrat, l'architecture devient une question juridique et commerciale. Une région unique peut être fiable, mais si l'entreprise nécessite 99,99% de disponibilité, la marge pour les perturbations régionales devient trop étroite, et l'isolement géographique devient partie de l'histoire de la résilience.
Par conséquent, la planification de la récupération en cas de catastrophe doit se trouver à côté de la conception du système. Les équipes qui sont sérieuses sur la résilience paient généralement leur travail d'architecture avec une planification plus large pour les interruptions commerciales , car les objectifs de disponibilité ne concernent pas seulement les serveurs. Ils affectent les communications avec les clients, les blocages de mise à jour, les flux de travail de support et les décisions de direction pendant les incidents.Règle pratique :
Si la direction souhaite un engagement de quatre-vingt-dix-neuf, demandez à qui appartient l'approbation de la failover régionale, les messages aux clients et l'autorité de retrait avant de provisionner quoi que ce soit. La performance mondiale est un problème de physique
Si vos utilisateurs sont concentrés dans un marché unique, une région unique plus CDN gagne généralement en simplicité. Si vos utilisateurs sont répartis en Asie-Pacifique, en Europe et en Amériques, la distance commence à fixer des limites dures.
__CAPGO_KEEP_0__
Les attentes de réponse sous 100 ms sur plusieurs continents ne sont pas quelque chose que vous pouvez activer d'un seul coup dans une région. Vous réduisez les payloads, cachez agressivement et optimisez les requêtes, mais à un certain point, le câble lui-même devient la bouteille. Pour les utilisateurs mobiles, ce retard se cumule. L'application démarre, charge la configuration, vérifie l'authentification, charge les données de flux d'accueil et charge souvent des assets. Chaque voyage supplémentaire en travers de l'océan apparaît sous la forme de « l'application se sent lente. »
C'est là où une bonne planification de l'infrastructure pour la scalabilité et la fiabilité comptent. Cela empêche les équipes de traiter une plainte de latence mondiale comme un bug de performance local.
La conformité peut supprimer la possibilité d'avoir un choix
Parfois, le débat d'architecture se termine avant de commencer. Si les termes juridiques ou contractuels exigent la résidence des données dans une géographie spécifique, vous avez besoin d'infrastructure là-bas.
C'est particulièrement important pour les équipes dans le fintech, la santé et le SaaS d'entreprise. Le problème ne consiste pas seulement à savoir où une requête est servie. C'est où les données personnelles sont stockées, répliquées, chiffrées et écrites. Une fois que les limites régionales des données deviennent obligatoires, le déploiement multi-région n'est plus une optimisation de performance. C'est une exigence de conformité avec des conséquences architecturales.
Un grand nombre d'équipes essaient de retarder cette prise de conscience en disant qu'elles « résoudront cela dans la couche d'application ». Cela ne tient rarement la place sous audit ou examen par les clients. Si la résidence est importante, la mise en place de l'infrastructure, la gestion des clés et la mise en route de l'écriture doivent tous refléter cela.
Comparaison des architectures multi-régionnelles courantes
The choix d'architecture détermine combien votre opération future sera douloureuse. Pas le diagramme du jour de lancement. La mise en production mardi, l'incident nocturne, et le retraitement lorsque l'une des régions se comporte différemment des autres.

Active-passive pour le basculement contrôlé
Active-passive signifie que l'une des régions gère le trafic de production tandis que l'autre région est prête à prendre le relais. Dans la pratique, les organisations ont souvent recours à l'un ou l'autre de pilot light ou de warm standby.
Pilot light garde la région secondaire minimale. Warm standby garde plus de la pile en cours d'exécution et actuelle, ce qui permet un basculement plus rapide et moins chaotique. Ce modèle est souvent le premier pas sensé car il vous offre une récupération géographique sans vous obliger à mettre chaque service et chaque chemin de données en mode actif mondial.
Le compromis est évident. La région de secours n'est pas prouvée sous le trafic normal. Vous n'apprenez que combien vos hypothèses étaient complètes que lorsque vous testez le basculement, ou pire, lorsque vous en avez besoin.
Voici une utilisation utile avant la comparaison plus approfondie : Options de hébergement cloud pour la livraison d'actualisations d'applications mobilesLes équipes mobiles ont souvent oublié que le basculement régional de l'arrière-plan et la livraison régionale des mises à jour doivent s'aligner.
Un expliqueur visuel court aide ici :
Active-active pour le trafic en direct dans plusieurs régions
Active-active est là où plusieurs régions servent le trafic en même temps. Bien fait, cela donne aux utilisateurs une latence plus faible et un comportement de basculement plus propre. Fait mal, cela donne des bugs de cohérence qui ne se produisent que sous partial failure.
D'après cette vue d'ensemble de l'architecture de déploiement multi-région, les applications active-active doivent être entièrement sans état. La même source note que les stratégies de routage DNS telles que la routage basé sur la latence envoient les utilisateurs vers la région à la plus faible latence, tandis que la routage de basculement utilise des vérifications de santé pour basculer le trafic vers les points de terminaison de secours lorsque les primaires échouent.
Cette exigence d'état sans est là où de nombreux projets s'arrêtent. L'affinité de session, les écritures de fichiers locaux, les caches régionaux spécifiques et les hypothèses cachées à l'intérieur des services plus anciens travaillent tous contre l'active-active. Si votre application dépend toujours de « le serveur se souvient », vous n'êtes pas prêt.
Les services sans état rendent l'active-active possible. Ils ne le rendent pas simple.
Comparaison d'Architecture Multi-Région
| Attribut | Active-Passive (Standby Chaud) | Active-Active |
|---|---|---|
| Objectif principal | Rétablissement après sinistre avec un redémarrage plus rapide | Haute disponibilité et latence inférieure pour le trafic mondial en direct |
| Modèle de trafic normal | Une seule région principale gère le trafic | Plusieurs régions gèrent le trafic simultanément |
| Pression sur la conception de l'application | Modéré | Élevé, surtout autour des services sans état |
| Complexité opérationnelle | Inférieur à active-active | Le plus élevé |
| Gestion des données | Réplication vers la région de secours | État partagé ou synchronisé entre les régions actives |
| Style de basculement | Basculement contrôlé vers la région de secours | Déplacement du trafic entre les régions déjà en ligne |
| Bon ajustement | Systèmes critiques nécessitant une récupération régionale sans service global complet | Produits avec des utilisateurs sur plusieurs continents et des besoins stricts en matière d'expérience ou d'accessibilité |
La bonne réponse est souvent suivie des exigences commerciales. Si vous avez besoin de récupération de catastrophe régionale, l'active-passive est souvent suffisant. Si vous avez besoin que les utilisateurs sur plusieurs continents frappent des calculs proches tout le temps, l'active-active devient l'option principale, mais seulement si l'architecture de l'application est prête pour cela.
Les Coûts Cachés et les Échanges Critiques
Le facture de cloud est le coût le plus facile à remarquer. C'est rarement le plus difficile à gérer.
Selon ce guide à la mise en œuvre de l'infrastructure SaaS multi-régionale, les dépenses d'infrastructure augmentent généralement de 1,5 à 3 fois par rapport aux configurations de région unique, et les équipes commencent souvent avec 2-3 régions telles que US Est, EU Ouest et Asie-Pacifique. La même source note que les frais de transfert de données entre régions sont une surprise majeure, et que l'expansion significative devrait suivre la concentration des utilisateurs ou les besoins des entreprises plutôt que l'ambition architecturale.

Le facture n'est qu'une partie de l'histoire
Les organisations prévoient souvent des coûts de calcul dupliqués. Moins prévoient des coûts de réplication, d'observabilité dupliquée, d'environnements supplémentaires et du temps humain nécessaire pour maintenir les régions cohérentes.
Un certain nombre de pièges de coûts se présentent à plusieurs reprises :
- La réplication entre régions : chaque chemin de synchronisation devient un article de facture et une dépendance opérationnelle.
- La capacité de secours : le redondance n'est pas utile si la région secondaire ne peut absorber la demande réelle.
- Surveillance de l'extension : Les tableaux de bord, les alertes et l'analyse de journaux s'étendent désormais à des géographies, et non plus seulement aux services.
- Fardeau de test : Chaque annulation et chaque exercice de récupération prend plus de temps car la matrice s'est élargie.
Ce qui fonctionne est la retenue. Commencez par les moins de régions qui résolvent le problème. Ajoutez-en plus seulement lorsque vous avez une raison claire du marché, réglementaire ou contractuelle.
Le flux de travail du développeur devient difficile rapidement
Par conséquent, l'architecture multi-région laisse l'équipe de plateforme et atterrit sur chaque bureau d'ingénieur.
Les pipelines de lancement ne peuvent plus simplement « déployer prod » . Ils ont besoin d'ordre, de validation et de contrôle de la zone d'impact régionale. Les drapeaux de fonctionnalité ont besoin de conscience régionale. Le support doit savoir quelle région de serveur et quelle version de client un utilisateur a atteint. Les gestionnaires de produit doivent comprendre que la mise en production peut être saine en Europe et dégradée en APAC en même temps.
Pour les équipes mobiles, la conformité ajoute une autre couche. Si votre chemin d'actualisation de l'application et votre chemin de données de serveur ne respectent pas les mêmes limites régionales, vous pouvez créer des problèmes de politique en essayant de résoudre des problèmes de fiabilité. Les équipes travaillant sur les préoccupations de politique d'Apple et de Google pour la conformité multi-région doivent réviser les chemins de livraison, les hypothèses de stockage et les contrôles de déploiement ensemble. La taxe cachée de la mise en œuvre multi-région est la charge cognitive. Chaque déploiement, chaque alerte et chaque rapport client nécessite désormais un contexte régional.
Monitoring spread: __CAPGO_KEEP_0__
Guide d'implémentation et meilleures pratiques
La plupart des projets multi-région qui échouent ne le font pas parce que l'équipe a choisi le mauvais produit cloud. Ils échouent parce que la discipline de déploiement, la conception de données et l'observabilité n'étaient pas prêts pour les dimensions supplémentaires.

Démarrez par la voie des données
Avant de dupliquer les serveurs d'applications, décidez comment les données circulent et qui possède les écritures. La guidance d'AWS dans la discussion sur la mise en forme bien conçue de l'isolement et de la préparation multi-région souligne la réplication continue vers les régions de secours, le suivi du retard de réplication, la parité des quotas de service dans les régions et les pipelines de déploiement qui visent une région à la fois plutôt que toutes à la fois. Cette seule recommandation sur le déploiement d'une région à la fois est plus précieuse que de nombreux équipes le réalisent. Cela vous donne la contenance. Si une migration, une modification de configuration ou un nouveau plafond de service casse, vous voulez une géographie affectée, pas toutes.
Utilisez un court checklist avant le lancement :
Définissez la propriété des écritures :
- savez quelles régions peuvent accepter les écritures pour chaque domaine de données. Suivez explicitement le retard :
- ]} n'assume pas que les répliques sont à jour parce que l'interface utilisateur ressemble à du vert.
- Correspondre aux quotas et aux limites : le basculement meurt rapidement si une région a des plafonds de capacité inférieurs.
- Planifier les modes dégradés : Certaines fonctionnalités devraient devenir non modifiables plutôt que pleinement indisponibles.
Gérer le trafic avec intention
Le DNS et la gestion du trafic ne sont pas des tâches “réglées et oubliées”. Ils sont codés dans la politique de l'infrastructure.
La mise en route basée sur la latence est utile lorsque les utilisateurs doivent atteindre la région la plus proche en bonne santé. La mise en route de basculement est utile lorsque l'une des régions reste principale et que l'autre est de secours. Les vérifications d'état sont importantes, mais les vérifications d'état superficielles peuvent tromper. Une région peut répondre aux tests de ping tout en ayant une dépendance critique qui faille pour les utilisateurs réels.
Le modèle sûr est de définir ce que signifie être en bonne santé au niveau de l'application. La connexion fonctionne. La commande de paiement fonctionne. La synchronisation fonctionne. La récupération du manifeste d'application fonctionne. Si l'entreprise repose sur ces flux, les vérifications d'état doivent les refléter.
Un ou deux habitudes sont utiles :
- Gardez la mise en route simple au début : n'assemblez pas trop de politiques le jour de la mise en route.
- Test le comportement de redondance : les équipes se rappellent la failover et oublient le chemin de retour.
- Documentez l'autorité de contournement manuel : quelqu'un a besoin de permissions claires pour arrêter l'automatisation lorsque les signaux entrent en conflit.
Livrez les modifications du backend et du mobile sans créer d'incidents mondiaux.
C'est là où les articles sur l'infrastructure passent souvent. Vos utilisateurs vivent l'ensemble du système, pas seulement la disposition des régions.
Lorsque les API backend se déployent par région, la stratégie d'actualisation mobile nécessite le même niveau de contrôle. Si l'Europe obtient un nouveau contrat API avant l'APAC, la version de l'application atteignant l'Europe en premier peut fonctionner correctement tandis que le même bundle peut se rompre ailleurs. C'est pourquoi l'ingénierie de lancement pour les mobiles nécessite des canaux, un déploiement étalé, un retrait et des indicateurs de performance régionaux.
Une option que les équipes utilisent est Capgo, qui délivre des ensembles de mise à jour signés pour les applications Capacitor et Electron à travers un réseau édge mondial, prend en charge les canaux ciblés, applique les mises à jour à la prochaine mise en route et fournit des journaux par appareil et des contrôles de retraitement. Dans un environnement multi-région, cela compte car la livraison des applications devient partie de la sécurité opérationnelle, pas seulement de la commodité.
Un modèle de lancement pratique ressemble à ceci :
- Déployez les modifications du backend dans une région en premier : confirmer l'état de santé avant d'agrandir.
- Exposer les métriques de compatibilité : savoir quelles versions d'applications appellent quelles variantes de API.
- Déployer les mises à jour mobiles par public ou par géographie : ne pas envoyer chaque utilisateur à la fois.
- Garantir que le retrait est abordable : si une région se dégrade, inverser l'unité la plus petite possible.
Une panne mondiale peut commencer comme un problème de coordination de mise à jour, et non comme une faillite d'infrastructure.
Observer le chemin de l'utilisateur, et non seulement les serveurs.
La surveillance traditionnelle se concentre sur les services, les bases de données, les files d'attente et les métriques de serveur. Les opérations multi-région ont également besoin d'une lentille centrée sur l'utilisateur.
Cela signifie corriger la région, la version de l'application, le canal d'actualisation, le point de terminaison de serveur et le résultat de la demande. Pour les applications mobiles en particulier, le symptôme atteint souvent le support avant d'atteindre la surveillance de l'infrastructure. « L'application s'est bloquée après connexion à Singapour » est un indice de routage et de mise à jour, et non seulement un rapport de bug.
Une bonne observabilité dans un déploiement multi-région devrait répondre rapidement à ces questions :
| Quelle est la question | Pourquoi cela compte |
|---|---|
| Quelle région a servi la demande | Vous avez besoin de contexte régional avant de déboguer quoi que ce soit |
| Quelle version de l'application a effectué l'appel | Les incompatibilités entre client et serveur sont souvent confondues avec des problèmes d'infrastructure |
| La réplication était-elle à jour | Un retard de données peut créer des incohérences visibles pour les utilisateurs |
| Est-ce que le trafic a changé récemment | Les changements de routage expliquent les groupes d'issues géographiques soudains |
| Est-ce que nous pouvons annuler sélectivement | Un annulation partielle bat la panique globale |
When les équipes peuvent répondre à ces cinq questions rapidement, les incidents deviennent gérables. Lorsqu'elles ne le peuvent pas, chaque panne se transforme en un exercice de devinette au niveau de l'application, du réseau et des couches cloud.
Conclusion La construction d'un pied-à-terre global résilient
Le déploiement multi-région est digne d'effort lorsque la exigence est réelle. La disponibilité contractuelle, l'expérience de basse latence à l'échelle mondiale et les obligations de résidence de données justifient les coûts. Tout le reste mérite d'être examiné.
La plus grande erreur n'est pas de sous-estimer la conception de l'infrastructure. C'est de sous-estimer l'impact quotidien de la mise à l'échelle multi-région sur le travail d'ingénierie. Les déploiements nécessitent une séquence. Les mises à jour mobiles nécessitent une logique de lancement régional. L'observabilité doit relier l'expérience utilisateur à la routage, la réplication et la version de l'application. Les équipes de support et de produits ont besoin du même vocabulaire régional que les ingénieurs de plateforme.
Les équipes qui réussissent bien restent disciplinées. Elles commencent avec la plus petite empreinte régionale qui résout le problème commercial. Elles préfèrent un comportement de redondance clair plutôt qu'une architecture ingénieuse. Elles traitent l'ingénierie de lancement et l'observabilité de l'utilisateur comme des parties de premier ordre de la résilience.
Un pied-à-terre global résilient n'est pas construit en copiant une région dans une autre. C'est construit en décidant, à l'avance, comment le système entier se comporte lorsque la géographie, les réseaux, les déploiements et les utilisateurs ne se alignent pas parfaitement.
Si votre équipe déploye des applications Capacitor et a besoin d'un contrôle plus serré sur la livraison mondiale des applications pendant les déploiements multi-région Capgo peut vous aider à coordonner les mises à jour en direct signées, les canaux étiquetés, le retrait et la visibilité au niveau du dispositif, afin que les modifications back-end et les lancements mobiles ne divergent pas.