
Client-Transparent Migrations with Pavan Adharapurapu
Durée: 40m28s
Date de sortie: 03/05/2022
Pavan Adharapurapu details how to approach large-scale migrations while optimizing for user experience.
Visit https://sre.google/prodcast for transcripts and links to further reading.
Hello and welcome to the Google SRE podcast or as we affectionately like to call it the
podcast.
I am your host for today, MP and along with me is Vivian.
Hi, happy episode 5.
And with us today is Pavan.
Pavan, pourquoi ne pas vous introduire ?
Merci MP et Vivian.
Je suis très excité de vous être sur ce podcast.
Bonjour à tous les listeners.
Mon nom est Pavan Adhraaprabhu et je suis un manager de l'engineering tech lead et
manager de l'API plateforme de la plateforme Google.
Je suis travaillé pour les années 90 plus.
La plateforme de l'API où je travaille est partie de l'enquête de la base qui processera
les calls de l'API Google ou les calls de l'API Rest.
Quand vous utilisez, disons, l'application Google sur votre téléphone ou créer une playlist
sur votre browser ou appeler une photo de Google, elles sont tous en application de
les calls de l'API à l'application sur Google Cloud.
La plateforme de l'API est un élément de ces services et donne fonctionnalité
qui est commun à tous les applications Google, comme l'authentication, la date limitée,
la translation de la date entre JSON et l'interne protocole, la construction, la telemetrie et
ceci.
Dans le passé recent, j'ai fait un projet de migration du multi-year, qui a emploi
plusieurs appels de Google sur un nouvel et meilleur plan de l'API.
Le plus important c'est que ce soit fait dans un manière invisible pour les millions
d'applications et des utilisateurs qui ont consommé ces appels.
En partant de ce projet, j'ai appris beaucoup de choses qui ont été compliquées,
des approches de solution communes.
Et surtout, le mindset qu'on doit avoir pour la production du complexe de l'application
de l'API.
Oui, c'est un problème qui vient de beaucoup de différentes formes, pour les
sereaux et les développeurs, que nous voulons changer quelque chose qui est
vraiment significatif sur notre système, mais nous ne voulons pas
vraiment que les clients ou les utilisateurs ne notent que ce qui a changé.
Nous voulons que ce soit transparent à des clients.
Qu'est-ce que ça veut dire que les clients sont transparents ?
Est-ce que ça vient juste de faire des réponses identiques de la bête pour bête ?
Entre un service ancien et un nouveau service ?
Ou est-ce qu'ils sont plus à l'application ?
Oui, la transparence cliente, comme vous l'avez mentionné,
est définitivement en train de faire des réponses matchées,
mais ce n'est pas la même chose que les réponses matchées.
C'est plus que ça.
Donc, pour le plus petit, on définit la transparence cliente.
La transparence cliente est une property de migration
qui vient de la source et du système de travail en même manière
pour tous les aspects observables pour tous les trafics existants.
Ces qualifiers sont importants.
Nous ne sommes pas obligés de ne pas faire des réponses matchées
pour les aspects observables non-users
ou pour les réponses qui ne sont pas partie du trafic de production.
Qu'est-ce que les aspects observables ?
Devoir une réponse compatible pour tous les réponses existants
est définitivement un des aspects,
mais il y a deux autres aspects
qui font une transparence cliente,
naméli, des changements compatibles et des latencies comparables.
Vous pouvez parler plus de changements de state
et comment cela s'intéresse.
Qu'est-ce que ça veut dire ?
Bien sûr.
Donc, la property de changement de state
requiert que le changement de state
affecté par le nouveau système
doit matcher l'ancien système pour un réquest.
Par exemple, on pourrait imaginer deux systèmes
que les deux réjectent et réjectent un réquest
si il y a des credentials invalides.
Plus d'assume que les rétéances rétéves
par les deux systèmes sont exactement les mêmes.
Donc, nous avons une réponse matchée,
mais encore la migration entre les deux systèmes
pourrait être pas transparente.
Par exemple, supposons que le premier système
mute les ressources
avant d'authentifier les réquestes
alors que le deuxième l'authentique
après la mutation.
Puis même si les deux rétéances sont les mêmes,
le final state,
le final state de la ressource,
le premier entre les deux systèmes,
c'est un exemple contrariable,
mais vous avez l'idée
pourquoi le changement de state
doit matcher entre les deux systèmes.
L'autre chose est que le state,
quand nous parlons de le state,
c'est tous les pièces du state
qui sont accessibles à l'utilité.
Donc, cela certainement inclut
le state d'appliquer des ressources.
Le premier state,
chaque service a un ressource
qui le mangait,
mais cela inclut aussi
d'autres parts du state,
comme le state de bâtiment,
le state de la règle,
le state de la télé,
parce que ce sont tous accessibles
à l'utilité.
Par exemple, le state de bâtiment
est accessible
quand l'utiliste
s'applique à la fin de mois,
le state de la télé
est visible
par les charges et les vies dashes
sur Google Cloud Council.
Donc, nous devons assurer
que tous les stades
sont réapilés
en comparaison
entre les systèmes.
Le dernier component
que je m'ai mentionné
qui fait que la latinité de l'appliquer
doit être comparée
parce que la latinité
détoilée signifiquement
pour le système de nouvelles
sera définitivement noticeable
par l'utiliste
et vous ne pouvez pas vraiment
le dire
l'appliquer de l'appliquer.
Ok, donc vous avez mentionné
trois components ici.
Est-ce que ce sont les trois components
ou est-ce que c'est tout
qu'on doit considérer
et comment nous savons
que c'est l'appliquer
d'une certaine quantité
pour l'appliquer de l'appliquer?
C'est une bonne question Vivian.
En effet, comment nous savons
que ces trois components
que je m'ai mentionné
sont en fait
les réponses compatibles,
les changements de state
et les latencies comparables
ne sont pas seulement nécessaires
mais aussi les conditions
suffisantes pour la transparance.
Bien,
cela se fait de la facture
que chaque software de la Terre
peut être modélée
comme une machine de state finale
avec un délai de non-zero propagation.
Pour une input de la fin,
les choses les plus réconnues
que peut être mises
pour une machine de state finale
sont l'output,
la transition de state
et le délai de propagation.
Et pour cela,
c'est suffisant pour nous
de juste faire sure
que ces trois components
sont matchés
entre les deux systèmes
et la transparance clientèle
qui se fait de cela.
C'est intéressant,
ça fait sens,
mais je suis sûr
que c'est beaucoup plus facile
que fait.
En effet.
Cela se remonte
en modélant les choses
de la machine finale de la Terre.
En effet.
Alors, une chose que je suis curieux
de voir,
je pense que c'est un phénomène
où vous avez une
large enoughe API
avec suffisant de nombreuses
façons de l'utiliser,
que quelqu'un d'autre
va commencer à utiliser
votre API
dans un support
ou un de l'un d'un document.
Comment sont ces choses
réconnues
quand vous essayez de faire
les migrations transparentes
de la clientèle ?
Vous vous touchez
sur la main raison
pour la complexité
de la migration de la machine finale.
En effet,
un système avec
une surface blanche
et un usage large
et diverse
aura des clients
selon les traits
d'implementation
du système.
Il y a même un nom pour ça.
C'est le law de la Hyrum.
C'est le chargé
de la implementation
de l'interface
pour les systèmes.
C'est important de vous rappeler
que la transmission clientèle
a besoin d'équivalent de
comportements,
pas seulement pour des features
documentées,
mais aussi pour des features
accidentales,
des idiosyncrasies
et des bugs.
Comme la loi de la Hyrum
dit, il y aura des utilisateurs
qui ne sera pas
directement
dépendant de eux.
Il y a toujours quelqu'un
qui dit
que ce n'est pas un bug,
c'est une feature
qui est en fait
récente pour cet utilisateur.
Oui, c'est ça.
Donc, est-ce que
c'est un petit partage
d'utilisateurs ?
Je pense que je suis curieux
quand vous vous racontez
pour l'ensemble
des gens
qui utilisent votre service.
Si vous essayez
de faire
cette migration transparente
ou ces bugs
et idiosyncrasies
juste pour quelques gens,
comment avons-nous décidé
que cela se démarre
et que nous voulons
compteir pour tous ces gens
depuis que
ce sont des
très expensants
et déjà très complexes.
Oui,
donc,
comment les utilisateurs
dépendent
sur ces
non-main-line features ?
C'est vraiment
une property statistique
de votre système
et de l'usage.
Durant nos
migrations
de clientes
de clientes,
nous avons remarqué
que la majorité
de les utilisateurs
ont utilisé
le système
comme intérêt
pour les scenarios
Mais
il y a une partie non-triviale
des utilisateurs
qui dépendent
sur ces autres
comportements de la système,
les uns qui ne sont pas
désignés intentionnellement
mais sont juste
des propriétés
de l'interline texte
ou des bugs.
Et le truc intéressant
est que
nous voyons
que différents
utilisateurs
utilisent différents,
dépendent sur différents bugs
et différents
comportements d'accident.
Donc,
c'est un peu
de spread out.
Et c'est la property
que nous voyons
pour beaucoup
de autres migrations
de la même manière.
Le truc important
est que
ces utilisateurs
doivent être
adhéribusés
pour ne pas
juste ignorer
ces utilisateurs
juste parce qu'ils
sont un petit partage
de l'aide.
Parce que
l'utilisation
de votre système
peut être
la base
de
le travail
crédit
pour cet utilisateur.
Donc,
quand il s'agit
de migrations
de clientes
le comportement
de l'aujourd'hui
est toujours correct.
C'est ce que vous assumez.
C'est le spectre
et c'est ce que vous avez
à vous assurer
qu'il a été
porté au système de la nouvelle.
Ça fait du sens.
J'aime.
C'est comme
un nouveau utilisateur
qui est derrière.
Je me demande
est-ce que
c'est un absolu?
Comme si vous avez
un utilisateur
qui était
en train de
relier
sur une sorte de
idiosyncrasie
et
portant
cette
fonctionnalité
au niveau du système
a été
introduit
un
comme hypothétiquement
introduit
un grand
complexité d'incréditation.
Vous
avez confiance
qu'ils étaient
les seuls
qui l'ont fait.
Vous avez
considéré
la question
pour changer
ce qu'ils font
pour que ce ne soit pas
ce genre de
effectuant.
Est-ce qu'il y a un acte
C'est une question
de la question.
Donc,
quand nous disons
que
l'expérience cliente
est une
très importante
criterion,
est-ce que c'est
un absolu?
Est-ce que
100,000%
ou sont-ils des cas
où
nous pouvons
faire le cas
pour
reaching out to the customer
and politely requesting them
to change their code
to not depend on
some undocumented feature
or a bug
in the system?
first thing is that
there should be an
extremely high barrier
for doing that.
And why do we have that?
It's because
making even small changes
to production applications
can be a huge cost
for the customers.
And if the customer
uses a service
through
mobile apps,
smart TV apps,
then they may not even be in control
of the update lifecycle.
It would be the end user.
And another important point
is that customer applications
which have been running
for a long time in the field
are generally part of
like very important
workflows for the application user.
So making even small changes
requires a lot of testing
to ensure that
these important use cases
are not broken.
So the barrier
should be extremely high.
But if in the extreme case,
as you mentioned,
MP,
where it's just one user
and where
creating client transparency
causes a huge amount of complexity
on the service side
in the new system,
then maybe
you could make a case
for reaching out to the customer
and giving them enough time,
providing enough documentation
to make the change
that you think would be
necessary to
not port that
buggy behavior
or accidental behavior
into the new system.
So it sounds like it is that
usual complexity trade-off
that it's either going to be
complexity somewhere
inside of the new service
or it's going to be
that complexity would get pushed
back off to the customer.
And there needs to be
a really substantial difference
in like what I'm
in my head, I'm sort of saying
it needs to be like orders of magnitude
easier for the customer
to make the change
than for the migration
to be transparent
for that use case
is sort of what I'm thinking
in my head.
Yes, exactly.
C'est presque comme vous avez
à
avoir cette mindset
que vous n'aurez jamais
pas le customer.
Et l'exception
doit être
si clére
que cela prouve cette erreur.
Qu'est-ce quelles sont les autres
difficultés ?
Qu'est-ce quelles sont les autres choses
que vous avez à regarder
quand vous essayez d'assurer
que vous avez un client
transparent
envers la migration ?
Oui, donc
il y a quatre principales
difficultés que nous avons
trouvé
lors de nos migrations.
La première est
de savoir
le set complet
de disparitions
entre les deux systèmes.
En général, ce n'est pas trop difficile
de savoir
les meilleures disparitions
au niveau de la
feature set
par exemple,
un système pourrait soutenir
un type particulièrement
d'authentication
et le autre système ne le fait pas.
C'est assez facile
de le trouver.
Mais c'est beaucoup plus difficile
de faire ça
pour les bugs
et les trades d'implementation.
La deuxième challenge
est de tester
deux systèmes pour la parité.
Comment nous prouvons
que la migration
entre deux systèmes
sera un client transparent ?
Le test de l'unité
et de l'intégration
ne peut pas
couvrir
toutes les bugs
et les features
du système.
La troisième challenge
que nous avons trouvé
était que
c'est difficile de savoir
quand vous avez dépassé
le customer
parce que pas tous les
issues compatibles
peuvent être détectés
au site de service.
On peut dire que le nouveau système
a un espace inoculé
qui est
appris par beaucoup de
spectacles.
Par exemple,
Jason a appris
un espace en white
et on peut dire
qu'une application
ne peut pas être
appris par beaucoup de
Sans la telemétrie clientielle
qui n'est généralement pas
disponible
pour un service public
avec des clients divers,
on ne peut pas savoir
que vous avez dépassé
cet client
au site de service.
Et c'est l'un des
clés de la
séance de l'insurier
client transparent
et de la migration.
La dernière
challenge
que nous avons touchée
est que
nous pouvons endurer
le nouveau système
avec les fixations
et surtout
les autres systèmes
de synchronisation.
Et ça pourrait réduire
la possibilité de maintenir
le nouveau système
pour tous les utilisateurs
qui sont en train de vous.
N'importe quelle
des challenges
sont
très facilement surmontables.
Ça ressemble
à un peu de
le...
C'est vraiment difficile
de savoir
ce que vous ne savez pas.
Oui, oui.
Des unknowns, des unknowns.
Est-ce qu'il y a une méthodologie
pour ces migrations
que nous pouvons prendre
en général
pour faire sure
que nous
rencontrons
tous ces challenges?
Oui, c'est certain.
Il y a une approche
d'ingénierie
pour pouvoir
contrôler
les disparitions
entre les deux systèmes
et la transparence
de l'application.
Mais avant de
aller là-bas,
avant de
décliner l'approche
que nous avons utilisée
par la suite,
je vais prendre un tour
et décliner
comment nous devons
approcher
une migration complexe
dans le premier endroit.
La première chose
de faire
est d'éviter
une migration complexe
dans le premier endroit
si possible.
Nous devons...
Oui, c'est...
Ne fais pas ça.
C'est un truc surprenant
mais je pense
que c'est très important.
Nous devons
seulement tenter
un,
si les utilisateurs
de long terme
et pas seulement
les propriétés
ont signifiquement
accueillent
la cause
à l'utilisation.
Les migrations
sont sur les quatre
blocs
pour toutes les
issues compatibles.
Ce n'est pas
d'être entouré
probablement.
Il faut
faire des calculations
et des revues
signées
par
votre équipe
et la chaine de leadership.
Et quand vous décidez
de migrer,
n'achez pas le risque.
Ne faites pas
deux guises.
Ensuite,
approchez des migrations
avec l'esprit
de constructif pessimisme.
Nous espérons
le meilleur
mais nous
toujours
planchons
pour le plus
d'autres.
Puis, avant
de commencer
une migration,
vous devrez
assurer
de ne pas
faire
de l'entraînement
qui est
décliné.
C'est-à-dire,
n'hésitez pas
que votre usage
soit
accueillant
l'élément
sinon,
ce serait comme
de mettre l'eau dans un pouls
qui est
simultaneously
remplie de l'eau.
Ce n'est pas
le plus
efficace
de migrer.
Ensuite,
planchons
pour
l'expérience
constrainé
pour la migration.
Quoi que vous faites
comme part
de la migration
devrait être
invisible
pour l'utilisme
et ce ne peut pas
être
l'emphasiser
plus.
Enfin,
faites un plan
à l'aide
pour
que la migration
soit
intractable
ou faite.
Il n'y a pas
le point
de continuer
avec la migration
qui a
causé
beaucoup de
issues
pour les
utilisateurs.
C'est mieux
de
juste
se faire
un plan
qui
continue
de servir
les utilisateurs
sans
causer
plus
de
issues.
La dernière
qui est
qui est
qui est
essayée
de mourir
sur
la
fausse
de la
fausse
un peu.
D'ailleurs,
c'est
un matériel
que vous avez
mis
beaucoup d'efforts,
beaucoup de
hard work
en
en
en
en
en
en
un
en
ou
,
ou
l'un
un
ou
một
ou
une
Maintenant, si vous avez décidé de vous faire avancer avec la migration, comment essayez-vous de garantir,
surtout quand nous nous mettons en place une transparence clientèle,
c'est l'une des requises d'article d'article pour le succès de la migration.
Qu'est-ce que la stratégie est là ?
Oui, la stratégie a le suivi des étapes d'affaires.
Pour assurer une transparence clientèle dans vos migrations,
pour le moment, nous devons éliminer tous les éléments de l'état observable.
Comme nous l'avons mentionné, cela peut inclure plus que juste le state de ressource.
Cela peut inclure des choses comme le state de bilingue, l'établissement, etc.
C'est important que nous identifions tous les étapes observables,
car si vous ne savez pas ce que peut commencer à se faire différemment,
vous ne pouvez pas le traiter ou le faire de l'établissement.
Qu'est-ce que ce que vous avez sur les logs de service ?
Les logs de service sont des comptes de service,
seulement si ils sont exposés à l'utilisation dans des passions.
Si un pipeline consomme les logs,
pour générer des réputations qui sont exposées à l'utilisation,
alors oui, c'est partie de l'état observable.
Vous devez être sûr que c'est réveillé
entre l'élément de l'élément de l'élément, et le système de réveillement.
C'est très difficile.
Oui, ça va aller tout de suite à des messages d'air ?
C'est la même chose, d'accord ?
Est-ce que l'utilise se voit le message d'air dans une forme ou l'autre ?
Si les messages d'air sont juste utilisés pour le débat d'interne
par les développeurs de service,
non, vous n'avez pas besoin de le faire.
Mais si c'est...
Si vous écraser ces messages d'air,
filtrer et peut-être déployer un console,
et que l'utilise de l'utilise se fait régulièrement
pour faire quelque chose important,
alors que c'est un débat d'utilise observable.
Vous devez être sûr que c'est dans un format
et une structure similaire
comme l'élément d'un système d'air.
Ce que je crois est un préquisition critique
pour la transparence clientèle.
C'est comme dire que si vous ne savez pas
ce que l'utilise peut faire,
vous ne pouvez jamais garantir la transparence clientèle.
Si vous ne vous concentrez que sur le state le plus important,
comme le state de ressource dans le database,
si c'est tout ce que vous soyez,
si c'est tout ce que vous concentrez,
vous serez surpris par des tickets de client
qui disent que les dashboards sont en train de se faire régulièrement.
Ou que l'on est en train de faire un débat,
ou que les récits sont en train de se faire régulièrement
plus agressifment que avant.
Vous devez éventuellement découvrir
tout le state observable.
Le premier est que l'une est en train de se faire régulièrement.
C'est mieux que vous s'y serez et que vous vous ennumeriez
en part de votre plan de migration.
Donc, si vous ennumeriez tout le state observable,
le second qui vous fait est que vous quantifiez
la disparition entre les systèmes.
Ce qui est le plus difficile de l'insurer la transparence clientèle.
Nous devons quantifier les issues compatibles
entre les deux systèmes.
Si vous ne le pouvez pas, vous ne le pouvez pas contrôler.
La seule manière pratique que je sais de le faire
est par ce que nous appelons la réplique de production de la production
ou parfois aussi la dégâche d'un noir.
C'est là que la production de la production de l'ancien système
est éventuellement réunie par le nouveau système
et les récompenses et les changements de state
sont comparées entre les systèmes.
Je suis heureux de vous en parler plus en détail,
et en suivant les différents procédés
pour l'insurer la transparence clientèle,
nous allons faire des choses qui nous permettent
de limiter les radies de potentiel des issues compatibles
durant le cours de la course de la course.
En regardant le nombre d'efforts que vous avez mis en place,
c'est difficile de garantir que les deux systèmes
soient 100% compatibles.
Il y a toujours des unknowns.
Nous devons donc déterminer que tout ce que nous faisons
est limité, et nous le faisons en général
par une stratégie de rollout graduel.
La prochaine étape est de détecter les issues compatibles
durant le cours de la course.
Pour cela, nous utilisons la monitoring pour les issues
qui peuvent être détectés sur le site de service,
comme les éditions qui se sont mis en place
sur le nouveau système.
Pour les issues qui ne peuvent pas être traités sur le site de service,
nous avons parlé de la discussion que pas tout,
pas toutes les issues compatibles peuvent être détectés
sur le site de service.
Nous avons closely monitoré tous les canaux de soutien
pour les tickets ou les complérences des clients.
Encore une fois, nous devons ne pas détenir
les clients pour les identifier et les compatibles.
Nous nous traînons des canaux de soutien
pour les précautions et pour les apprendre
des unknowns.
Quand nous détenons les issues,
nous devons nous le mitiger et le faire
par une faible retour de la réplique
au niveau de la situation précédente
ou de la transition de la trafic
de tout le système original.
Enfin, nous devons
correcter les issues détectés
durant le cours de la course
et, comme part de cela,
nous devons nous réveiller
sur le plan de migration
pour voir comment cela a été mis
et si tout le monde a bien été procédé.
Il y a beaucoup de choses qui ressemblent
à la philosophie de SRE
en termes de la radiance de la libération
pour pouvoir détecter les problèmes,
les problèmes de la mitigation,
les problèmes de la réplique
de postmortem,
les deux choses qui sont vraiment étranges
sont la numération de la state
et la production
de la chose qui est la chose de la star
et on a parlé
de la numération de la state,
on a parlé de la façon
sur laquelle cela est très courant
de l'idée de la transparence clientèle.
Je suis curieux de ce réplique
et je peux imaginer
beaucoup de choses de façon dont
ce n'est pas juste
comme le service de la nouvelle
réplique.
Je pense que,
depuis que nous avons parlé de la state
je me sens que les changements de la state
vont être
compliqués
si vous n'avez pas
un service adepte
la réplique ne sera pas
toujours une bonne chose
pour faire.
C'est un point très bon.
C'est un point de considération
d'ingénierie
dans un système de réplique de production.
Avant de l'entendre, je vais toucher
pourquoi nous avons besoin
d'un système de réplique de production
qui fait la réplique de production
et qui peut le replacer
par le système de réplique que vous vous
Nous avons déjà mentionné que
des systèmes de large,
ils ont beaucoup d'accident,
donc vous ne pouvez pas prouver
la propriété de la transparence clientèle
par analyser
le système en vacuum.
Vous ne pouvez pas juste
aller au source code de l'application
du système, il pourrait être trop grand
ou même si vous pouvez aller, c'est très difficile
de prouver qu'ils ont un comportement compatible.
Donc
la seule façon de faire
c'est d'actuellement
faire la production
de production au système de production
sur le système de réplique
et de vérifier
que les réponses, les changements de state et la réplique
sont en contact.
La base de l'idée est cette.
Nous continuons de sample la production du système de production
pour le système de production.
Nous capturons les répliques de l'usage,
la réponse du système de réplique
et la réplique de state de changement de système de production.
Nous
ensuite répliquons la même réplique
au système de réplique
et de reposer la réponse
et de changer le système de réplique
et de comparer.
Si il n'y a pas de dévoues,
c'est pour migrer entre les deux systèmes.
Quand il n'y a pas de dévoues pour
toute la production de la production,
mais si il n'y a pas de dévoues, nous traînons
le système de réplique
jusqu'à la dévoues.
Pour le système de réplique,
nous devons insurer
que aucun changement de state
se déploie par la réplique.
C'est très important.
Comment nous comparons
les changements de state entre le système de réplique
et le système de réplique
et le système de réplique
en ayant que aucun changement de state
soit réplique par la réplique.
Cela va
poursuivre une
considération d'engineur important
en construisant un système de production de la production de la production.
Comment nous faisons
d'abord,
isoler le lait
entre les nouveaux systèmes.
Par exemple,
le système de réplique
reste le même entre les systèmes.
Ne réwritez pas tout
sur le terrain,
comme tout au bout du terrain.
Pour les lait
que nous n'étendons pas,
nous capturons les messages
qui crossent la boundary
pour le système de réplique
et nous répliquons pour le système de réplique.
Par exemple,
quand le système de réplique
décide de répliquer le database
et le système de réplique
réplique un certain
valeur, nous capturons ça.
Et quand nous répliquons
le système de réplique, nous répliquons
le système de réplique.
Et aussi,
quand le système de réplique
décide de répliquer le database, nous capturons ça.
Et nous comparons
avec le système de réplique de réplique.
Donc, de cette façon, nous ne changeons pas le database.
Nous avons juste utilisé le système de réplique
pour répliquer et pour comparer.
Et c'est comme nous nous insurons
que nous comparons les changements de state
sans vraiment
changer le state de la réplique.
Ça me semble que vous pourrez avoir
une partie complexe.
Est-ce que vous avez une liste
de 4 ou 5
des défis ou des choses
pour voir ce que vous faites?
Oui, donc,
en construisant et en utilisant un système de réplique de réplique
sur les années, vous avez appris
beaucoup de choses.
La première chose est
que nous devons assurer que le système de réplique
ne soit pas affecté
par les samples et les interceptions
et le capturant.
C'est comme le quant de la hypo-critique
que vous n'avez pas de harm.
Vous ne vous arrêtez
de déterminer la trafication
sur le système de réplique
dans vos attentes
pour créer un pathé pour une migration
La deuxième chose que nous avons déjà discuté
n'est pas de changer le state de réplique de réplique.
Comme MP a dit,
pas seulement nos systèmes n'est pas d'adapté,
mais
nous ne savons pas
quelles sont les répercussions
qui sont en train de changer le state.
Il y a des systèmes
qui peuvent être réveillés.
Nous devons donc ne toucher le state
en partant de réplique.
Nous devons assurer que tous les principes
sont suivis, même quand nous réveillons
et nous défléchons les deux réponses.
Nous devons
être capable de faire surement
que nous samplez tous les types de trafic.
Il ne devait pas être de la faible.
Si il y a des gaps en sample,
certaines classes de trafic,
vous pouvez avoir des incompatibilities
qui vont être dans la vie
qui vous aiment
durant la migration.
Il y a des difficultés pratiques
comme savoir combien de trafic,
comment de longs,
pour que nous recrions tous les clients.
Il y a des clients qui
font des répercussions fréquentes,
comme une fois par semaine,
ou une fois par mois.
Comment vous en samplez?
Il y a des issues de timings
entre quand vous le capturez
et quand vous le réplayez.
Par exemple, les tokens ont été expérimés
dans la vignette.
Si vous le réplayez après la vignette,
vous pourrez avoir des dégâts pourrieux.
Il y a des flux,
des clés de network,
des choses qui peuvent résoudre
des issues qui peuvent prendre
un temps de temps pour analyser.
Régué de toutes ces issues pratiques,
les répliques de production
sont exceptionnellement effectuelles
en quantifiant
la disparition entre
les deux systèmes et garantir
que la migration
sera un transport client
avec une très grande probabilité.
Est-ce que la réplique de production
est assez
pour...
Vous vous buildez votre système de réplique de production
et vous vous entiez
à la pointe de 0.
Est-ce que c'est suffisant
d'être convaincu que
la migration soit un transport client?
Est-ce qu'il y a des spots
que la réplique de production
est assez?
L'élection de Diffzero
t'a pris une longue distance
pour la réplique de production
mais il y a des choses que vous pouvez toujours faire
au sein de la réplique de production
pour donner plus de confiance.
Par exemple, la réplique de production
est aussi bonne que ça
d'assurer que les répliques de response
et des changements de state sont compatibles
et que la réplique de production
soit plus belle que ça
parce que c'est difficile de faire
un profil de production
en s'ample.
Vous pouvez utiliser le test de load
pour ça.
Et aussi, vous pouvez utiliser
les tests de integration
qui nous ont déjà dit
que ce n'est pas suffisant pour la réplique
mais c'est très bon pour établir
un niveau de compétition
avant d'employer la réplique
et vous pouvez aussi
utiliser d'autres techniques
comme l'air fallback.
Beaucoup de les incompétibilities resultent
dans le nouveau système en éteint les éteintes
où l'au-delà est procédé.
Vous pouvez aussi avoir des mécanismes
réactifs où quand il y a un erreur
sur le nouveau système, vous vous
vous en aviez proposé pour le nouveau système
pour la procédé, pour la première chance
de procédé, quand l'air s'occupe
sur le bloc de l'éteint, avant que le changement
soit passé.
Mais oui, on devrait
garder une main à l'open
et essayer d'utiliser d'autres mécanismes
pour répliquer la réplique
pour les compétences de la réplique
dans nos migrations.
Donc, à ce point, on a pris beaucoup de temps
en parlant de la réplique
et de la compétition du nouveau système
pour que le comportement de notre nouveau système
soit correct pour nos
utilisateurs et les clients.
Mais
comment nous nous approchons
de la réplique
de notre nouveau système ?
Quelle est la vraie validation
que vous vous en avez mis la réplique
en n'importe quel cas ?
Oui, la phase de la réplique
ou les migrations
de la réplique
est généralement appelée la
« trafic de la réplique »
C'est certainement un événement
d'excité, mais aussi
une phase où vous avez beaucoup
de tension car c'est quand
tout ce travail que vous avez fait
en validant la compétition
des deux systèmes est mis à test.
La première chose
de la réplique est que
à l'un des produits ou des launches
de la réplique, la réplique
de la réplique est quantitétivement
et quantitétivement plus grande.
C'est quantitétivement plus grande
parce que vous avez un grand nombre
d'existences de trafic.
Il n'y a pas de trafic organiquement
qui commence à 0, comme pour
les nouveaux produits ou les launches.
C'est déjà là.
C'est quantitétivement plus grand
parce que c'est un trafic stabilisé.
Ce serait possible d'un customer
qui a été envoyé de trafic
pendant les dernières 10 ans.
Imaginez tous les cas de use,
tous les workflows
que cette réplique est
puissante.
Les répliques pour les répliques,
la réplique de la réplique est
très grande pour les migrations.
C'est plus
pire pour l'utilisateur
quand des déruptions se passent.
Avec cela,
les goals pour le Cadovarr
sont les mêmes que pour
les nouveaux launches,
qui sont que nous aimerons
d'assurer une bonne période de temps
entre les défais, une rèdisse
ou un impact, et une
réplique très la même.
Comment assurer
une bonne période de temps entre les défais
et les répliques?
de plus en plus de la réplique
et de plus en plus de la réplique.
La réplique
veut dire une période multi-hérosite
et non multi-dépris.
Si c'est un jour multi-hérosite,
c'est difficile de traiter
la santé de la réplique
de la réplique.
Si c'est un jour multi-hérosite,
c'est suffisamment de l'agent
et cela peut aussi
être très difficile de le faire.
Mais il faut
une grande partie de la réplique
d'un certain nombre de temps.
La réplique
de la réplique
de la réplique
ne peut pas être une grande partie
de la réplique.
ne peut pas être une grande partie
de la réplique.
Dès le moment,
par exemple,
s'est décollé
pendant un mois.
En fait,
avec la réplique,
le taux de la réplique
s'est rendu
une réplique de la réplique.
Et le taux de la réplique
s'est remis
dans la réplique.
Le point important est que le trafic de divertissement doit être sélecté randomement.
Ce sont des choses que chaque cliente a un rôle graduel de leur point de vue.
Si ce n'est pas random, par exemple, si vous coupez par l'application IP ou d'un sort de l'ID,
ce qui s'est passé est que les clients qui ont été migrés à la fin de votre trafic
sont en train de répliquer le système de réplique.
Et si il y a une compétition, un grand part de leur trafic est effecée.
La sélection de randomes s'améliore.
Finalement, pour le rôle graduel,
la manière dont vous garantissez un très bas temps de réplique
est par le retour rapide. C'est votre bout de gré.
Vous devriez pouvoir retourner au niveau de l'état précédent,
ou peut-être, en retourant à 100 % de l'ancien système,
vous devriez pouvoir le faire très vite, comme dans des secondes ou des minutes.
C'est important de construire un mécanisme rapide
avant d'essayer de la migration.
En cas d'une question, vous pouvez faire un rôle graduel et l'investir.
C'est pour ça que vous vous assurez que
pas seulement vous avez le déjeuner limité, mais aussi que vous vous
vous détaillez très vite après que vous détaillez quelque chose de suspectif.
La plan de migration devrait toujours être dédiée avec le plan de rollback.
Oui, ça devrait avoir une entreprise et une exécutation
pour différentes stages de rollout,
pour que nous ayons un signal clair
pour que nous voulons aller au suivant, ou quand nous devons
retourner à l'état. Donc, c'est tout un peu important
de penser et de considérer quand on veut migrer un service
particulièrement au sujet de la transparence cliente.
Il y a beaucoup d'account pour ça.
Est-ce que les situations où la transparence cliente ne devrait pas être le but ?
La réponse est surprenantement oui, mais seulement
pour très peu de scénarios spécifiques.
Donc, vous ne devriez pas donner priorité à la transparence cliente
pour que vous puissiez avoir des problèmes.
Si vous avez une partie de la migration, vous réalisez que la sécurité
et la vulnerabilities de l'ancien système sont explotées et
que ça pourrait vous hurting vos clients, alors c'est important que vous ne vous portez
pas de sécurité au sujet de votre système. Parce que
en long terme, ça nous fait plus de faim que vos clients.
Donc, c'est mieux de vous informer à vos clients et puis vous appuyer.
Vous avez le cas où vous ne vous avez pas besoin
d'aimé la transparence cliente et que ce soit un service qui a
passé à la fenêtre de soutien. Mais en ce cas,
c'est mieux de vous avoir des notices de la transparence
sur votre client, pour que vous puissiez avoir des notices de la transparence.
Mais d'ailleurs, la transparence cliente est
une très forte requérance pour toutes les migrations
et que ce soit un très frustréant
expérience pour toutes les parties.
Oui, pour surement. Surtout pour le service plus complexe.
C'est vrai. Beaucoup de choses que nous avons discutées ne sont pas
utilisées ou dilutées pour services
qui sont simples ou qui n'ont pas de trafic.
Par exemple, nous avons migré des services qui ont un très large
amount de trafic, mais c'était l'une des plus
easiest services pour migrer. Et la raison était que tout le trafic
était venu d'un client qui était adhéré par Google
donc nous savions exactement le pattern de requises
qui serait venu pour le service. Et donc ce n'était pas le cas
d'un set de clients qui a envoyé tous les types de patterns.
C'était très simple et un pattern uniforme, donc c'était très facile.
Donc beaucoup de ces choses, beaucoup de ces challenges en migrations
client-transparences, sont vraiment pour les systèmes
avec un large surface et un large usage et divers.
Quoi d'autre que vous aimeriez nous partager aujourd'hui, Fawn, avant de nous rassembler
l'épisode? Oui, le plus important
que je voudrais redémarrer est
comment la client-transparences est important pour
toute la migration de l'impact. Le point de vue
de client-transparences devrait être donné de primaire sur le point de vue de l'impact.
Qu'est-ce qu'un cas d'épisode pour le système de bacté
pourrait être un cas de utilisation critique pour le client, et que l'ignoring
pourrait nous permettre de plus de frustration.
Je sais que nous avons réprimé ça beaucoup de fois, mais c'est vraiment important
de toujours penser de l'impact de l'impact de l'impact
pour que toutes les migrations de l'impact
puissent avoir une contrainte de p0 et de planifier
pour cela. Merci beaucoup.
Merci beaucoup pour votre temps aujourd'hui. C'était vraiment grand de vous parler de tout ça.
J'ai appris beaucoup. J'ai aussi appris beaucoup.
Merci MP et Vivienne. C'était un plaisir de discuter
la connaissance et les techniques que nous avons appris
pour que nous puissions être partagés par ces migrations complexes
que nous avons faites au cours du passé et j'espère que elles sont utiles pour les
listeners qui planent leurs migrations en futur.
Et bonne chance à toutes ces migrations.
Je sais que je vais en faire des choses que je l'ai appris dans ma pratique de jour-à-dé jour.
Je t'en fais aussi.
Merci beaucoup.
Merci beaucoup.
Merci beaucoup.
Merci beaucoup.
Merci beaucoup.
Merci beaucoup.
Episode suivant:
Les infos glanées
GoogleSREProdcast
SRE Prodcast brings Google's experience with Site Reliability Engineering together with special guests and exciting topics to discuss the present and future of reliable production engineering!
Tags