Vad hjÀlpte oss att snabbt stÀlla om till onlineförsÀljning under de nya förhÄllandena

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. 

Vad hjÀlpte oss att snabbt stÀlla om till onlineförsÀljning under de nya förhÄllandena

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. 

Vad hjÀlpte oss att snabbt stÀlla om till onlineförsÀljning under de nya förhÄllandenaAntalet bestÀllningar frÄn 18 till 31 marsVad hjÀlpte oss att snabbt stÀlla om till onlineförsÀljning under de nya förhÄllandenaAntalet förfrÄgningar till mikrotjÀnsterna för onlinebetalningarVad hjÀlpte oss att snabbt stÀlla om till onlineförsÀljning under de nya förhÄllandenaAntalet 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. 

Vad hjÀlpte oss att snabbt stÀlla om till onlineförsÀljning under de nya förhÄllandena

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. hÀr. 

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.

Vad hjÀlpte oss att snabbt stÀlla om till onlineförsÀljning under de nya förhÄllandenaHÀ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. hÀr och hÀr.

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

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster