Hej!
Jag heter Mikhail och Àr IT-chef pÄ företaget 'Sportmaster'. Jag vill dela med mig av en historia om hur vi hanterade de utmaningar som uppstod under pandemin.
Under de första dagarna av de nya förhÄllandena stannade den traditionella offline-handeln för 'Sportmaster' och belastningen pÄ vÄr onlinekanal, sÀrskilt nÀr det gÀller hemleveranser, ökade tiofaldigt. Inom nÄgra veckor transformerade vi en enorm offline-verksamhet till online och anpassade tjÀnsten efter vÄra kunders behov.
I stort sett blev det som tidigare var vĂ„r sekundĂ€ra verksamhet vĂ„r huvudaffĂ€r. Betydelsen av varje online-order ökade extremt. Vi behövde bevara varje krona som kunden tog med sig till företaget.Â

För att snabbt kunna svara pÄ kundernas förfrÄgningar öppnade vi ett extra kontaktcenter pÄ företagets huvudkontor, och vi kan nu ta emot omkring 285 000 samtal per vecka. Samtidigt har vi överfört 270 butiker till ett nytt format för kontaktlös och sÀker drift, vilket gjorde det möjligt för kunderna att hÀmta sina bestÀllningar och för anstÀllda att behÄlla sina jobb.
Under transformationen stötte vi pÄ tvÄ huvudproblem. För det första ökade belastningen pÄ vÄra online-resurser avsevÀrt (hur vi hanterade detta kommer Sergey att berÀtta om). För det andra ökade antalet sÀllsynta (innan COVID) operationer mÄngdubbelt, vilket i sin tur krÀvde en stor mÀngd snabb automatisering. För att lösa detta problem tvingades vi snabbt omdirigera resurser frÄn de omrÄden som tidigare var huvudfokus. Hur vi klarade av detta kommer Elena att berÀtta om.
Drift av onlinetjÀnster
Koliesnikov Sergey, ansvarar för driften av webbshoppen och mikrotjÀnsterna
FrĂ„n det ögonblick som vĂ„ra fysiska butiker började stĂ€nga för besökare började vi mĂ€rka en ökning av mĂ€tvĂ€rden som antalet anvĂ€ndare, antalet bestĂ€llningar som görs i vĂ„r app och antalet begĂ€rningar till applikationerna.Â
Antalet bestÀllningar frÄn 18 till 31 mars
Antalet förfrÄgningar till mikrotjÀnsterna för onlinebetalningar
Antalet bestÀllningar som lades pÄ webbplatsen
I den första grafiken ser vi att tillvĂ€xten uppgick till cirka 14 gĂ„nger, medan den andra visar 4 gĂ„nger. Den mest illustrativa metrik vi anser vara svarstiden för vĂ„ra applikationer.Â

I denna graf ser vi svaret frÄn frontend och applikationer, och vi har kommit fram till att vi inte har sett nÄgon verklig tillvÀxt.
Först och frÀmst beror detta pÄ att vi pÄbörjade förberedande arbete i slutet av 2019. Nu har vÄra tjÀnster reserverats, med redundans pÄ nivÄerna av fysiska servrar, virtualiseringssystem, containrar och tjÀnster i dessa. Samtidigt tillÄter kapaciteten i vÄra serverresurser att hantera multipla belastningar.
Det huvudsakliga verktyget som hjĂ€lpte oss genom hela denna process var vĂ„rt övervakningssystem. Ărligt talat hade vi inte nyligen ett enhetligt system som gjorde det möjligt att samla in metrik pĂ„ alla nivĂ„er, frĂ„n den fysiska hĂ„rdvaran till affĂ€rsmĂ„tt.Â
Formellt sett fanns det övervakning i företaget, men den var oftast spridd och ansvarig för specifika avdelningar. Faktum var att nÀr en incident intrÀffade hade vi nÀstan aldrig en gemensam förstÄelse för vad som hade hÀnt, ingen information gavs, och detta ledde ofta till en cirkelrörelse i sökandet och lokaliseringen av problemet för efterföljande lösning.
Vid ett tillfĂ€lle insĂ„g vi och beslutade att vi inte lĂ€ngre ville tolerera detta â vi behövde ett enhetligt system för att se hela bilden. De huvudsakliga teknologierna i vĂ„r stack inkluderar Zabbix som alert- och metriklagringscentral, Prometheus för insamling och lagring av applikationsmetrik, Stack ELK för loggning och lagring av data för hela övervakningssystemet, samt Grafana för visualisering, Swagger, Docker och andra anvĂ€ndbara och bekanta verktyg.
Vi anvĂ€nder dessutom inte bara teknologier som finns pĂ„ marknaden utan utvecklar ocksĂ„ vissa saker sjĂ€lva. Till exempel skapar vi tjĂ€nster för att integrera system med varandra, det vill sĂ€ga nĂ„gon form av API för insamling av metrik. Dessutom arbetar vi pĂ„ egna övervakningssystem â pĂ„ affĂ€rsmĂ€tningsnivĂ„ anvĂ€nder vi UI-tester. Vi har Ă€ven en bot i Telegram för att informera teamen.
Och vi försöker ocksĂ„ göra övervakningssystemet tillgĂ€ngligt för teamen sĂ„ att de sjĂ€lva kan lagra sina metrik och arbeta med dem, inklusive att stĂ€lla in alertningar för vissa specifika metrik som inte har en sĂ„ bred tillĂ€mpning.Â
In the entire system, we strive for proactivity and the fastest possible localization of incidents. Moreover, the number of our microservices and systems has significantly increased recently, consequently raising the number of integrations. As part of optimizing the incident diagnostics process at the integration level, we are developing a system that allows for cross-system checks and provides results, which helps identify key issues related to imports and the interaction of systems with each other.Â
Naturally, we still have room to grow and develop in terms of system operation, and we are actively working on this. You can read more about our monitoring system. .Â
Technical TestsÂ
Sergey Orlov, heads the center of competence in web and mobile development
Since the closure of physical stores began, we have faced various challenges in terms of development. Primarily, there was a surge in load. It is clear that if no appropriate measures are taken, when high load is applied to the system, it can sadly turn into a pumpkin with a sad pop, either completely degrading in performance or losing its functionality altogether.
The second aspect, slightly less obvious, is that the system under high load needed to be changed very quickly, adapting to changes in business processes. Sometimes several times a day. In many companies, there is a rule that during large marketing activities, no changes should be made in the system. At all, let it operate as it is.
Whereas we essentially had an endless Black Friday, during which changes to the system needed to be made. And any error, problem, or failure in the system would be very costly for the business.
Looking ahead, I can say that we managed to cope with these challenges; all systems withstood the load, scaled easily, and we did not experience any major technical failures.
Det finns fyra grundpelare som systemets förmÄga att hantera hög belastning vilar pÄ. Den första Àr övervakning, som du lÀste om lite tidigare. Utan ett vÀl uppbyggt övervakningssystem Àr det praktiskt taget omöjligt att hitta flaskhalsar i systemet. Ett bra övervakningssystem Àr som hemma klÀder, det ska vara bekvÀmt och anpassat för dig.
Den andra aspekten Àr testning. Vi tar detta pÄ stort allvar: vi skriver bÄde klassiska enhetstester, integrationstester, belastningstester och mÄnga andra för varje system. Vi skriver dessutom en teststrategi, och vi strÀvar efter att höja nivÄn pÄ testningen sÄ att manuella verifieringar inte lÀngre behövs.
Den tredje grundpelaren Ă€r CI/CD Pipeline. Processerna för byggande, testning och distribution av applikationer ska vara sĂ„ automatiserade som möjligt, och det ska inte finnas nĂ„got manuellt ingripande. Ămnet CI/CD Pipeline Ă€r ganska djupt, och jag kommer bara beröra det ytligt. Det Ă€r vĂ€rt att nĂ€mna att vi har en checklist för CI/CD Pipeline, enligt vilken varje produktteam gĂ„r igenom med hjĂ€lp av kompetenscentra.
HÀr Àr checklistan
PÄ sÄ sÀtt uppnÄs mÄnga mÄl. Det handlar om versionering av API, och funktionstoggling för att undvika en vÄg av releaser, samt att uppnÄ testtÀckning pÄ sÄdan nivÄ att testningen Àr helt automatiserad, distributionerna Àr sömlösa och mycket mer.
Den fjÀrde grundpelaren Àr arkitekturprinciper och tekniska lösningar. Man kan prata lÀnge och mycket om arkitektur, men jag vill betona ett par principer som jag vill lyfta fram.
För det första Ă€r det viktigt att vĂ€lja specialiserade verktyg för specifika uppgifter. Ja, det lĂ„ter sjĂ€lvklart, och det Ă€r uppenbart att man bör slĂ„ i spik med en hammare, medan man bör anvĂ€nda speciella skruvmejslar för att öppna armbandsur. Men i vĂ„r tid strĂ€var mĂ„nga verktyg efter att bli mer universella för att nĂ„ ut till ett sĂ„ stort anvĂ€ndarsegment som möjligt: databaser, cache, ramverk och sĂ„ vidare. Ta till exempel databasen MongoDB, som arbetar med flerdokumenttransaktioner, medan databasen Oracle arbetar med json-filer. Och det verkar som om allt kan anvĂ€ndas för allt. Men om vi föresprĂ„kar prestanda mĂ„ste vi tydligt förstĂ„ fördelarna och nackdelarna med varje verktyg och anvĂ€nda de som passar vĂ„r uppgiftsklass.Â
För det andra bör varje ökning av komplexiteten vid systemdesign vara motiverad. Vi mÄste stÀndigt ha detta i Ätanke, principen om lÄg koppling Àr allmÀnt kÀnd. Jag anser att den bör tillÀmpas bÄde pÄ nivÄn för en specifik tjÀnst, pÄ hela systemnivÄn och pÄ nivÄn för det arkitektoniska landskapet. FörmÄgan att horisontellt skala varje komponent i systemet under belastning Àr ocksÄ viktig. Om man har denna förmÄga innebÀr skalning ingen svÄrighet.
NÀr det gÀller tekniska lösningar har vi bett produktteam att förbereda en fÀrsk uppsÀttning rekommendationer, idéer och lösningar som de har genomfört i processen av förberedelser inför nÀsta belastningsvÄg.
Cache
Det Ă€r viktigt att medvetet vĂ€lja mellan lokala och distribuerade cacher. Ibland kan det vara meningsfullt att anvĂ€nda bĂ„de och inom samma system. Till exempel har vi system dĂ€r en del av data i grunden Ă€r en vitrin-cache, vilket betyder att kĂ€llan till uppdateringar finns utanför systemet och att systemet inte Ă€ndrar dessa data. För denna typ av tillvĂ€gagĂ„ngssĂ€tt anvĂ€nder vi den lokala Caffeine Cache.Â
Och det finns data som systemet aktivt Àndrar under drift, och hÀr anvÀnder vi en distribuerad cache med Hazelcast. Denna strategi gör att vi kan utnyttja fördelarna med en distribuerad cache dÀr det verkligen behövs, och minimera servicekostnaderna för datacirkulationen i Hazelcast-klustret dÀr vi kan klara oss utan det. Vi har skrivit mycket om cache. och .
Dessutom gav bytet av serialiserare till Kryo i Hazelcast oss en bra prestandaökning. ĂvergĂ„ngen frĂ„n ReplicatedMap till IMap + Near Cache i Hazelcast möjliggjorde att vi minimerade datarörelserna i klustret.Â
Ett litet tips: vid massinvalidering av cache kan en taktik med uppvÀrmning av en andra cache följt av övergÄng till den ibland vara tillÀmplig. Vid en sÄdan metod borde vi fÄ dubbel minneskonsumtion, men i praktiken, i de system dÀr detta har anvÀnts, minskade minnesanvÀndningen.
Reaktiv stack
Vi anvÀnder den reaktiva stacken i ett relativt stort antal system. I vÄrt fall handlar det om Webflux eller Kotlin med korutiner. Den reaktiva stacken passar sÀrskilt bra nÀr vi förvÀntar oss lÄngsamma in- och utdataoperationer. Till exempel, anrop till lÄngsamma tjÀnster, arbete med filsystem eller lagringssystem.
Den allra viktigaste principen Ă€r att undvika blockerande anrop. Under huven pĂ„ reaktiva ramverk körs ett litet antal aktiva tjĂ€nstrĂ„dar. Om vi ovarsamt gör ett direkt blockerande anrop, som ett anrop till en JDBC-drivrutin, kommer systemet helt enkelt att stanna.Â
Försök att omvandla fel till egna runtime-exceptioner. Den verkliga exekveringsströmmen av programmet gÄr till de reaktiva ramverken, vilket gör kodexekveringen icke-linjÀr. Som en följd av detta Àr det mycket svÄrt att diagnostisera problem via stack-traces. En lösning hÀr Àr att skapa tydliga och objektiva runtime-exceptioner för varje fel.
Elasticsearch
Vid anvĂ€ndning av Elasticsearch, undvik att vĂ€lja oanvĂ€nda data. Detta Ă€r i princip ett mycket enkelt rĂ„d, men det som oftast glöms bort. Om du behöver vĂ€lja mer Ă€n 10 000 poster pĂ„ en gĂ„ng, mĂ„ste du anvĂ€nda Scroll. I en analogi liknar detta en kursorsökning i en relationsdatabas.Â
AnvĂ€nd inte postfilter utan behov. Vid stora datamĂ€ngder i huvudvalet belastar denna operation databasen mycket.Â
AnvÀnd bulkoperationer dÀr det Àr tillÀmpligt.
API
Vid utformning av API, inkludera krav pÄ minimering av överförda data. Detta Àr sÀrskilt relevant i samverkan med frontend: just pÄ detta grÀnssnitt gÄr vi utanför vÄra datacenterkanaler och arbetar redan pÄ kanalen som kopplar oss till kunden. Om det finns minsta problem dÀr, kan för hög trafik orsaka en negativ anvÀndarupplevelse.
Och slutligen, undvik att överösa med all data, ha en tydlig approach till kontraktet mellan konsumenter och leverantörer.
Organisatorisk transformation
Elena Eroshkina, IT-chef
Vid tidpunkten för nedstĂ€ngningen, nĂ€r behovet av att snabbt öka takten i onlineutvecklingen och införa omnikanal-tjĂ€nster uppstod, befann vi oss redan i en organisatorisk transformation.Â
En del av vÄr struktur har övergÄtt till att arbeta utifrÄn principer och metoder för produktansats. Team har bildats som nu ansvarar för drift och utveckling av varje produkt. Medarbetare i sÄdana team Àr fullt engagerade och organiserar sitt arbete enligt Scrum eller Kanban, beroende pÄ vad som passar dem bÀst, de anpassar distributionsprocessen, implementerar tekniska metoder, kvalitetsmetoder och mycket mer.
Av en lycklig tillfÀllighet hade majoriteten av dessa produktteam just verkat inom online- och omnikanal-tjÀnster. Detta möjliggjorde för oss att pÄ kort tid (allvarligt, bokstavligt talat inom tvÄ dagar) gÄ över till distansarbete utan att tappa effektiviteten. Den etablerade processen gjorde det möjligt att snabbt anpassa sig till de nya arbetsvillkoren och upprÀtthÄlla ett tillrÀckligt högt tempo för att leverera ny funktionalitet.
Dessutom uppstod det ett behov av att stĂ€rka de team som befinner sig i framkant av onlineverksamheten. Vid den tidpunkten blev det klart att vi endast kunde göra detta med interna resurser. UngefĂ€r 50 personer bytte omrĂ„de dĂ€r de tidigare arbetat och integrerades i arbetet med en ny produkt under tvĂ„ veckor.Â
För detta krÀvdes inga speciella ledarskapsinsatser, eftersom vi parallellt med att organisera vÄr egen process, med teknisk förfining av produkten och kvalitetsmetoder, lÀr vÄra team sjÀlvorganisering - att hantera sin egen produktionsprocess utan att involvera administrativa resurser.
Vi lyckades rikta vĂ„rt ledningsresurs dit det var nödvĂ€ndigt just dĂ„ â pĂ„ samordning tillsammans med verksamheten. Vad Ă€r viktigt för vĂ„r kund just nu? Vilken funktionalitet bör implementeras först? Vad behöver göras för att öka vĂ„r kapacitet för leverans och hantering av bestĂ€llningar? allt detta och en tydlig rollmodell gjorde att vi under denna period kunde belasta vĂ„ra produktionsflöden med det som verkligen Ă€r viktigt och nödvĂ€ndigt.Â
SjÀlvklart, i en tid av distansarbete och högt förÀndringstempo, dÀr varje deltagares insats pÄverkar affÀrsresultaten, kan man inte bara förlita sig pÄ inre kÀnslor av typen "GÄr allt bra för oss? Jo, det verkar okej." Objektiva mÀtvÀrden av produktionsprocessen Àr nödvÀndiga. SÄdana har vi, de Àr tillgÀngliga för alla som Àr intresserade av mÀtvÀrden för produktteam. Framför allt för teamet sjÀlvt, verksamheten, de som arbetar i angrÀnsande omrÄden och ledningen.
Varje tvÄ veckor hÄlls en status med varje team dÀr mÀtvÀrden analyseras under 10 minuter, flaskhalsar i produktionsprocessen identifieras och gemensamma lösningar utvecklas: vad kan göras för att eliminera dessa flaskhalsar. HÀr kan man ocksÄ direkt be om hjÀlp frÄn ledningen om ett problem ligger utanför teamens pÄverkan, eller fÄ vÀgledning frÄn kollegor som kanske redan har stött pÄ ett liknande problem.
Men vi förstÄr att för att uppnÄ en betydande acceleration (och exakt det mÄl har vi satt upp) mÄste vi fortfarande lÀra oss mycket och implementera det i vÄrt dagliga arbete. Just nu fortsÀtter vi att skala den produktansats vi har till andra team och nya produkter. För att göra detta har vi fÄtt lÀra oss ett nytt format för en online-skola för metoddoktorer.
Metoddoktorer, de personer som hjĂ€lper teamen att bygga processer, förbĂ€ttra kommunikationen och öka arbetsÂeffektiviteten, Ă€r i sjĂ€lva verket förĂ€ndringsaktörer. Just nu arbetar studenter frĂ„n vĂ„r första omgĂ„ng med team och hjĂ€lper dem att bli framgĂ„ngsrika.Â
Jag tror att den aktuella situationen för oss öppnar upp möjligheter och perspektiv som vi kanske sjÀlva Ànnu inte helt har insett. Men den erfarenhet och praktik vi fÄr just nu bekrÀftar att vi har valt rÀtt utvecklingsvÀg, vi kommer inte att missa dessa nya möjligheter i framtiden och vi kommer att kunna svara lika effektivt pÄ de utmaningar som "Sportmaster" kommer att stÄ inför.
Slutsatser
Under denna svÄra tid har vi formulerat de grundlÀggande principer som utvecklingen av mjukvara bygger pÄ, och som jag tror kommer att vara relevanta för varje företag som sysslar med detta.
MĂ€nniskor. Det Ă€r grunden för allt. AnstĂ€llda mĂ„ste ha nöje i sitt arbete, förstĂ„ företagets mĂ„l och mĂ„len för de produkter de arbetar med. Och naturligtvis mĂ„ste de kunna utvecklas professionellt.Â
Tekniken. Det Àr viktigt att företaget moget nÀrmar sig arbetet med sin teknologiska stack och bygger upp kompetenser dÀr det verkligen behövs. Det lÄter vÀldigt enkelt och uppenbart. Och det ignoreras mycket ofta.
Processer. Det Àr viktigt att bygga rÀtt struktur för produktteam och kompetenscenter och att skapa samarbeten med affÀrerna för att arbeta med dem som partners.
SÄ ungefÀr sÄ överlevde vi. Den moderna tidens kÀrnbudskap bekrÀftades Ànnu en gÄng med en kraftfull klump.
Ăven om du Ă€r ett stort offline-företag med mĂ„nga butiker och en mĂ€ngd stĂ€der dĂ€r du Ă€r nĂ€rvarande, utveckla din onlineverksamhet. Det Ă€r inte bara en extra försĂ€ljningskanal eller en snygg app dĂ€r man ocksĂ„ kan köpa nĂ„got (Ă€ven för att konkurrenterna ocksĂ„ har nĂ„got fint). Det Ă€r inte en reservhjul som kan hjĂ€lpa dig att klara stormen.
Det Àr en absolut nödvÀndighet. BÄde dina tekniska resurser och infrastruktur, men ocksÄ mÀnniskor och processer mÄste vara förberedda. Att snabbt köpa extra minne, lagring, starta nya instanser och liknande kan göras pÄ ett par timmar. Men mÀnniskor och processer mÄste förberedas i förvÀg.
KĂ€lla: habr.com
