De bovenstaande afbeelding is de grayscale-release van Tencent, gewone gebruikers kunnen erbij komen, de Alibaba Cloudserver is niet toegankelijk, de ping is normaal en de resolutie-IP is ook normaal
Het is gewoon ontoegankelijk, het is te zien dat Tencent ook graag speelt met grijswaarden-releases...
1. Waarom Grayscale Release
- Internetdiensten veranderen vaak en de releasecycli zijn kort. Snelheid en kwaliteit zijn altijd moeilijk te combineren.
- Grijswaardenpublicatie kan het risico van publiceren verminderen en de omvang van de impact verkleinen.
- Verminder de afhankelijkheid van testen en verlaag de kosten van dataconstructie voor offline zelftesten.
- Het is handig om logs centraal te monitoren en volledig te publiceren. Door de rol van load balancing op elke laag is het moeilijk om een volledige oproepverbinding te volgen.
- Je kunt grijswaarden testaccounts gebruiken, en daarna echte gebruikersaccounts grijs tonen nadat het testaccount is geslaagd om het risico en de impact van publicatie verder te verminderen.
- Makkelijk terugrollen.
Problemen die niet opgelost kunnen worden door grijswaardenreleases
Het moet worden benadrukt dat de hierboven genoemde "tolerable impact" herstelbaar moet zijn; bijvoorbeeld, de API kan een bepaalde periode niet worden aangeroepen, maar na reparatie kan deze succesvol worden aangeroepen. Het permanente verlies of vernietigen van gebruikersgegevens (zoals productinformatie, bestelgegevens, enz.) is ondraaglijk. Daarom is het de verantwoordelijkheid van de architecten van internetondernemingen om de verloren gebruikersgegevens te herstellen naar een recente staat (zoals een uur geleden tot een week geleden) door handmatige interventie in het geval van verlies van gebruikersgegevens door productiesysteemproblemen (zoals regelmatige back-ups van gebruikersgegevens, het schrijven van operatielogboeken, enz.).
TIPS Test eerst het grijswaardenbeleid van je account om het risico te verminderen dat je de gegevens van echte gebruikers beschadigt of verliest.
2. Welk effect wordt verwacht? Ongeacht de wijziging willen we dat specifieke verzoeken worden doorgestuurd naar onze versie van de wijziging (grijswaardige versie) voor observatie en validatie.
3. Grijstintenstrategie In feite is het de vraag die naar onze grijstintenversie (grijstintenmachine) gerouteerd moet worden. Dit hangt vaak sterk samen met het bedrijfsleven. Voor API's zijn er bijvoorbeeld doorgaans de volgende vereisten:
Specifieke gebruikers (bijv. testaccounts) Specifieke apps (bijvoorbeeld testapps of partnerapps) Specifieke modules en interfaces (alleen sommige interfaces hebben grijswaarden nodig, wat doorgaans een aanpassing is van API-containers, en sommige API's die niet erg belangrijk zijn, worden gebruikt voor grijswaardentesten). ) Specifieke machine (sommige verzoek-IP's worden doorgestuurd naar de grijstintenmachine) 4. Bespreking van grijswaardenschema's Oplossing 1: Het codeniveau wordt beoordeeld aan de hand van de afgesproken vlag, en oud en nieuw worden dynamisch omgewisseld - Amazons aanpak
Implementatie:
Begraven de schakelaar in de code, maak een of-else-oordeel en zet de schakelaar aan voor machines die grijswaarden vereisen, anders staat hij uit. Er zijn twee versies voor elke release.
verdienen
Snelle rollback, geen noodzaak om het systeem opnieuw te publiceren en opnieuw op te starten. gebrek
Wees geneigd naar de code. Vertakkende logica brengt complexiteit met zich mee. Deze methode werd door de auteur gebruikt toen ik bij Alibaba werkte, waarbij ik de database van goederen van Oracle naar MySQL overschakelde en een statusvariabele gebruikte voor controle. Hierdoor wordt het effect van een soepele migratie bereikt.
Optie 2: Pre-release machine - Alibaba's praktijk
In feite is dit geen grijstinten in de ware zin. Omdat deze pre-release machine een interne IP is en geen externe dienst heeft. Domeinbinding is vereist voor verificatie. Maar de data is volledig online. Het is dus in wezen een eenvoudige aanpak voor sommige specifieke gebruikers van grijswaarden (gebruikers die toegang hebben tot de grijswaardenmachine, interne testgebruikers). Er is zelfs een vergelijkbare aanpak aan de API-kant, namelijk onze Gamma-omgeving, en we geven ook de domeinnaam van de Gamma-machine om externe coöperatieve gebruikers te helpen samen te werken aan tests.
verdienen
Simpel gebrek
Waste a machine (dit kan na de pre-release in de productieomgeving worden geplaatst en tijdens de pre-release uit nginx worden verwijderd, maar O&M-ondersteuning is vereist). ) Niet flexibel genoeg IDL-diensten kunnen alleen worden gebruikt voor access layer-machines, en IDL-services moeten apart worden beschouwd. Optie 3: SET-uitrol
1. Inzet in isolatie volgens diensten
Bijvoorbeeld, in de huidige praktijk van API-containers kan de granulariteit van de implementatie worden bereikt tot API-niveau, en de front-end forwards volgens nginx. Zoals wat:
Micro Shopping API Container: api.weigou.qq.com Pat API Container:api.paipai.com Yixun API Container: api.yixun.com Online winkel-API Container:api.buy.qq.com Bovenstaande is een geïsoleerde implementatie op het niveau van grote bedrijven. Het kan ook verder worden verfijnd tot moduleniveau, zoals de API van virtuele dienst e-commerce, een subbedrijfsmodule die onder Paipai hangt, maar omdat ze verbonden zijn met WeChat, is het aantal bezoeken aanzienlijk toegenomen, om te voorkomen dat Paipai andere bedrijven beïnvloedt worden, en om te voorkomen dat andere bedrijven worden beïnvloed, is de API hier bedoeld om twee machines apart voor hen uit te rolden; nginx kan worden geconfigureerd om de virtuele API-toegang te onttrekken:
Virtuele API-container: http://api.paipai.com/v2/virbiz
Op deze manier kunnen we, wanneer we een versie uitbrengen, eerst Yixun kiezen met het kleinste zakelijke volume om te publiceren, en vervolgens observeren dat er geen probleem is voordat we alle andere platforms gebruiken.
2. Deployen door gebruikersisolatie
Dit is niet erg geschikt voor open platforms, maar wel zeer geschikt voor toepassingsscenario's zoals SNS. Het QQ-systeem is bijvoorbeeld verdeeld in verschillende sets volgens gebruikersnummersegmenten, en elke set bevat 100 miljoen opeenvolgende nummers. Aangenomen dat het laatste QQ-getal dicht bij 1 miljard ligt, zijn er in totaal 10 verzamelingen (Set 1 tot Set 10). Op deze manier kun je telkens één van de SETS kiezen om te publiceren, en high-level QQ is vaak geen erg belangrijke gebruiker, dus wordt SET10 als eerste uitgebracht.
verdienen
Geïsoleerde implementatie met minimale impact over bedrijfslijnen heen. Automatisch ondersteuning voor grijswaardenpublicatie. gebrek
De granulariteit van grijstinten hangt af van de granulariteit van de geïsoleerde deployment, die over het algemeen groot is. Verspilling van machines vergeleken met gecentraliseerde implementatie. De versies van elke businesslijn kunnen inconsistent zijn, wat niet bevorderlijk is voor een uniforme beheer. Er zijn bepaalde implementatie- en implementatiekosten Schema 4: Dynamische routering
Methode: Gebruik een grijswaardenbeleid dat flexibel kan worden geconfigureerd om het gedrag van de load balance te beïnvloeden en het toe te staan het IP en de poort van de grijswaardendienst terug te geven volgens het grijswaardenbeleid.
Geschikt voor servicegrijswaarden met backoffice IDL.
verdienen
Flexibel, beheersbaar. gebrek
Het huidige configuratiecentrum en L5 zelf houden geen rekening met gespecificeerde routeringsbeleid, en zijn niet schaalbaar, dus ze moeten buiten deze regels worden ontwikkeld. De metadatabronnen van API's zijn relatief verspreid, en momenteel zijn API- en IDL-metadata, API-niveaus en frequentielimieten verspreid over verschillende databronnen, waardoor het nu nodig is om een grijswaardenrouteringsdatabron toe te voegen.
Er zijn over het algemeen drie manieren om grijswaarden nginx+lua te publiceren, nginx wordt verdeeld volgens cookies, en nginx wordt toegewezen op basis van gewicht:
nginx+lua maakt onderscheid op basis van het IP-adres van de bezoeker, omdat het bedrijf een IP-adres exporteert en de website wordt benaderd met zowel de oude als de nieuwe versie, die niet geschikt is voor deze methode nginx wijst gewichten toe op basis van gewichten, wat eenvoudig te implementeren is en geprobeerd kan worden nginx splitst op basis van cookies, en grayscale publiceert op basis van gebruikers
|