SlideShare a Scribd company logo
1 of 26
Tag trykket af dit (eksterne) API 
med Azure Websites WebJobs 
Christian Dalager, Eksponent 
@dalager 
Softwareudvikler og sådan 
#CampusDays
#CampusDays 
Agenda 
1. Meget kort 
2. Problemet 
3. Løsningen 
4. Spørgsmål
#CampusDays 
”Arkitektur ”
Bemærkning om Microsoft Azure features… 
#CampusDays
#CampusDays 
Problemet. 
Eller: hvordan vi skal være bedre til 
ikke at lade vores indre påvirke af 
vores omverden.
#CampusDays 
Case: jeg har fået den her fede idé... 
Vi laver et socialt netværk 
- Lidt som Twitter 
- Men bare med følelser!! 
Men hvordan? 
1. Vi bruger åbent api fra sociallytic.dk 
2. Profit!
#CampusDays 
Og jeg har allerede købt domænet! 
emotweecon.azurewebsites.net!!!
#CampusDays 
Demo 1: 
Hvori vi ser et problem opstå 
Case: Emotweecon
#CampusDays 
Når en bruger er en bruger 
• I ordinær brugerinteraktion på et website kan en 
bruger ikke agere hurtigere end han kan klikke. 
• Man skalerer efter antallet af brugere 
• Et internt API, der kun betjener Jquery skal kun 
følge med almindelig vækst
#CampusDays 
Når brugeren er en maskine... 
• Der er ingen bånd, der binder en maskine 
• En maskine 
• beder om ressourcer noget hurtigere end en bruger 
• kan aflevere data hurtigere end et menneske 
• kan parallellisere 
• kan være buggy og ryge i uendeligt loop
#CampusDays 
• Hvis vi lader eksterne processer styre vores interne processer? 
• Risiko for at trække en hel infrastruktur ned, hvis tingene ikke er afkoblet 
• Cascading exceptions: deres YSOD bliver din YSOD. 
• Slave af synkron processering – det går også ud over vores brugere 
• ”Users can’t signup! WE ARE LOSING MONEY!!” 
Løsningen! 
Problemet 
• Afkobling 
• Temporal 
• Computing 
• Fx Simple queue-arkitektur 
• Aka Messaging
#CampusDays 
Løsning. 
Asynkron processering af køer med 
Azure WebJobs
#CampusDays 
Det generelle princip 
Alle requests til API bliver smidt på en kø og der svares straks. 
Webjob står og tager beskeder af køen. Det kan tage lang tid, men stresses ikke af 
øgende arbejdsbyrde
#CampusDays 
Konkret løsning for vores Emotweecon platform 
1. Vi tager alle beskeder og lægger dem på køen og svarer brugeren med det samme 
2. WebJob fanger besked og sender det til analyse på api.sociallytic.dk 
3. Efter endt analyse gemmes resultat i database 
4. Så notificeres websiden med SignalR 
{ 
"Id":182, 
"Text":"Kode er festligt. Det holder mig i live.", 
"Date":"2014-11-24T18:48:52.2743711+00:00", 
"Emotion":"positive", 
"EmotionScore":1.0 
}
#CampusDays
#CampusDays 
WebJobs 
• Processer under Azure Websites 
• Kan være exe, .sh, .js, .bat og måske mere (men vi kigger kun på .NET) 
• Forskellige triggers 
• Scheduled 
• Table 
• Blob 
• Storage Queue 
• Service Bus 
• ”Functions” er metoder der bindes til en triggertype 
• Autoloader public static void/Task metoder i public classes i loadede assemblies
#CampusDays 
Demo 2: WebJobs
#CampusDays 
Azure Storage Queues 
• Bor i en storage account 
• WebJobs SDK wrapper om eksisterende API 
• FIFO – first in, first out (ikke nødvendigvis first in-first done!) 
• Retries v exception 
• Poison-queue 
• VisibilityTime (gør først msg ”synlig” i køen på et senere tidspunkt) 
• Re-entry on timeout 
• 64kb message size 
• Max 7 dages message retention, derefter slettes der 
• Sikring af idempotens er dit eget ansvar
#CampusDays 
Demo 3: 
Azure Storage Queue
#CampusDays 
Og hvordan skalerer det?! 
• Flere websites vil skrive til 
samme kø 
• Et enkelt WebJob vil som default 
prøve at trække 16 beskeder af 
en queue og processere 
parallelt (!) 
• 3 websites  48 competing 
consumers 
• Placer evt API på instanser, der 
ikke laver andet kritisk for at 
isolere load spikes fra kritiske 
systemer 
• Storage Queues har 200TB 
message limit...
#CampusDays 
Et alternativ: Azure Service Bus 
Azure Queues Azure Service Bus 
• Persistent og Reliable 
• Poll API 
• 1-60 sekunder i kø 
• 200TB I køen 
• 64kb/msg 
• Slettes efter 7 dage 
• Persistent og reliable 
• Event API 
• <0.1 sekunder i kø 
• < 80gb I køen 
• 256kb/msg 
• Slettes aldrig 
• Publish/Subscribe/Topics 
• Sessions 
• Duplicate detection 
• Automatic dead-lettering v 
timeout 
• Del af messaging infrastruktur
#CampusDays 
Andre forbedringer? 
• Kode, der faktisk er produktionsklart 
• Rebus af @mookid8000: et Message Bus API/abstraction med masser af features, der 
kan køre ovenpå 
• Azure Service Bus 
• Azure Queues(måske...) 
• SQL 
• MSMQ 
• Rabbit MQ 
• gudvedhvad) 
• https://github.com/rebus-org/Rebus 
• Færre statiske klasser og metoder...
#CampusDays 
Gotchas 
• Webjobs 
• Disconnected dev ikke muligt 
• Man kan dog attache debugger til webjob gennem Server Explorer 
• Storage Queue 
• ”never finished” messages dukker op igen efter timeout. Forvirrende state.
#CampusDays 
Nogle strategier ved forskellige API requesttyper 
• GET 
• load løses ved traditionel caching, paging, og API limits 
• POST med 204 nocontent svar (”void”) 
• Sendes i kø 
• Vi tager imod besked, giver en kvittering og lover at udføre arbejdet 
• Klienten må selv følge op. 
• POST med forventet resultat 
• Sendes i kø 
• Kan løses ved at medsende en callback url/web hook, som så efterfølgende kaldes når arbejdet er 
udført 
• Nogle gange forventes det at være synkront 
• Evt SignalR notifikationer
#CampusDays 
Links 
• Demo src: https://github.com/dalager/emotweecon/ 
• WebJobs ressources: https://github.com/Azure/azure-content/ 
blob/master/articles/websites-webjobs-resources.md 
• WebJobs SDK Samples: https://github.com/Azure/azure-webjobs-sdk-samples 
• How to work with Azure Queue storage using the webjob sdk: 
https://github.com/Azure/azure-content/blob/master/articles/websites-dotnet-webjobs- 
sdk-storage-queues-how-to.md 
• Sentiment Analysis på dansk: http://sociallytic.dk
#CampusDays 
Q&A 
Spørgsmål? 
Nu eller 
• @dalager 
• christian@eksponent.com 
• Nedenunder bagefter session

More Related Content

Similar to Tag trykket af dit (eksterne) API med Azure WebJobs

Digicure seminar | Web performance optimering
Digicure seminar | Web performance optimeringDigicure seminar | Web performance optimering
Digicure seminar | Web performance optimering
Tobias Borg Petersen
 
Inspirationsdag 24. april: Så nemt opgraderer du til XPages
Inspirationsdag 24. april: Så nemt opgraderer du til XPagesInspirationsdag 24. april: Så nemt opgraderer du til XPages
Inspirationsdag 24. april: Så nemt opgraderer du til XPages
Notesnet_dk
 
LINAK Web universe 2012
LINAK Web universe 2012LINAK Web universe 2012
LINAK Web universe 2012
Frank Neitzel
 
CV 2016 - Huan Minh Vuong
CV 2016 - Huan Minh VuongCV 2016 - Huan Minh Vuong
CV 2016 - Huan Minh Vuong
Huan Vuong
 
Digicure seminar | Web Performance Monitorering
Digicure seminar | Web Performance MonitoreringDigicure seminar | Web Performance Monitorering
Digicure seminar | Web Performance Monitorering
Tobias Borg Petersen
 
Voluntarisme hos yousee it
Voluntarisme hos yousee itVoluntarisme hos yousee it
Voluntarisme hos yousee it
translucentdk
 

Similar to Tag trykket af dit (eksterne) API med Azure WebJobs (20)

Digicure seminar | Web performance optimering
Digicure seminar | Web performance optimeringDigicure seminar | Web performance optimering
Digicure seminar | Web performance optimering
 
Wordpress Multisite
Wordpress MultisiteWordpress Multisite
Wordpress Multisite
 
Status på dansk indlejret tidskritisk software
Status på dansk indlejret tidskritisk softwareStatus på dansk indlejret tidskritisk software
Status på dansk indlejret tidskritisk software
 
instant@larm workshop | Digicure
instant@larm workshop | Digicureinstant@larm workshop | Digicure
instant@larm workshop | Digicure
 
Automatiseret GUI-test af Lars Kjølholm, BRF Kredit
Automatiseret GUI-test af Lars Kjølholm, BRF KreditAutomatiseret GUI-test af Lars Kjølholm, BRF Kredit
Automatiseret GUI-test af Lars Kjølholm, BRF Kredit
 
Clio online flow undervisning
Clio online flow undervisningClio online flow undervisning
Clio online flow undervisning
 
20160301 Red Hat JBoss Fuse i praksis i Syddjurs Kommune
20160301 Red Hat JBoss Fuse i praksis i Syddjurs Kommune20160301 Red Hat JBoss Fuse i praksis i Syddjurs Kommune
20160301 Red Hat JBoss Fuse i praksis i Syddjurs Kommune
 
Angular2 workshop
Angular2 workshopAngular2 workshop
Angular2 workshop
 
Joomla! Day Denmark 2012 - Kolding Kommune - Case Story
Joomla! Day Denmark 2012 - Kolding Kommune - Case StoryJoomla! Day Denmark 2012 - Kolding Kommune - Case Story
Joomla! Day Denmark 2012 - Kolding Kommune - Case Story
 
Inspirationsdag 24. april: Så nemt opgraderer du til XPages
Inspirationsdag 24. april: Så nemt opgraderer du til XPagesInspirationsdag 24. april: Så nemt opgraderer du til XPages
Inspirationsdag 24. april: Så nemt opgraderer du til XPages
 
LINAK Web universe 2012
LINAK Web universe 2012LINAK Web universe 2012
LINAK Web universe 2012
 
Mvc 1+2 Tech Talk 201003
Mvc 1+2 Tech Talk 201003Mvc 1+2 Tech Talk 201003
Mvc 1+2 Tech Talk 201003
 
CV 2016 - Huan Minh Vuong
CV 2016 - Huan Minh VuongCV 2016 - Huan Minh Vuong
CV 2016 - Huan Minh Vuong
 
Digicure seminar | Web Performance Monitorering
Digicure seminar | Web Performance MonitoreringDigicure seminar | Web Performance Monitorering
Digicure seminar | Web Performance Monitorering
 
Voluntarisme hos yousee it
Voluntarisme hos yousee itVoluntarisme hos yousee it
Voluntarisme hos yousee it
 
En fantastisk applikationsserver (Intravision IBM Connect 2013 Update i Århus)
En fantastisk applikationsserver (Intravision IBM Connect 2013 Update i Århus)En fantastisk applikationsserver (Intravision IBM Connect 2013 Update i Århus)
En fantastisk applikationsserver (Intravision IBM Connect 2013 Update i Århus)
 
Sådan arbejder du dit digitale design sikkert i mål
Sådan arbejder du dit digitale design sikkert i målSådan arbejder du dit digitale design sikkert i mål
Sådan arbejder du dit digitale design sikkert i mål
 
Onboarding - Konkrete opgaver til nyansatte
Onboarding - Konkrete opgaver til nyansatteOnboarding - Konkrete opgaver til nyansatte
Onboarding - Konkrete opgaver til nyansatte
 
Itucation kursusbevis
Itucation kursusbevisItucation kursusbevis
Itucation kursusbevis
 
Lamp - Apache | appacademy.dk
Lamp - Apache | appacademy.dkLamp - Apache | appacademy.dk
Lamp - Apache | appacademy.dk
 

More from Christian Dalager (6)

En time om det der internet
En time om det der internetEn time om det der internet
En time om det der internet
 
Domain-Driven Design på 7 min
Domain-Driven Design på 7 minDomain-Driven Design på 7 min
Domain-Driven Design på 7 min
 
Open APIs - concepts. applications. visualizations.
Open APIs - concepts. applications. visualizations.Open APIs - concepts. applications. visualizations.
Open APIs - concepts. applications. visualizations.
 
Gå ned i vægt med Azure Mobile Services
Gå ned i vægt med Azure Mobile ServicesGå ned i vægt med Azure Mobile Services
Gå ned i vægt med Azure Mobile Services
 
Azure Mobile Services (Danish)
Azure Mobile Services (Danish)Azure Mobile Services (Danish)
Azure Mobile Services (Danish)
 
Put kajakken på hylden - og få sexede windows services
Put kajakken på hylden - og få sexede windows servicesPut kajakken på hylden - og få sexede windows services
Put kajakken på hylden - og få sexede windows services
 

Tag trykket af dit (eksterne) API med Azure WebJobs

  • 1. Tag trykket af dit (eksterne) API med Azure Websites WebJobs Christian Dalager, Eksponent @dalager Softwareudvikler og sådan #CampusDays
  • 2. #CampusDays Agenda 1. Meget kort 2. Problemet 3. Løsningen 4. Spørgsmål
  • 4. Bemærkning om Microsoft Azure features… #CampusDays
  • 5. #CampusDays Problemet. Eller: hvordan vi skal være bedre til ikke at lade vores indre påvirke af vores omverden.
  • 6. #CampusDays Case: jeg har fået den her fede idé... Vi laver et socialt netværk - Lidt som Twitter - Men bare med følelser!! Men hvordan? 1. Vi bruger åbent api fra sociallytic.dk 2. Profit!
  • 7. #CampusDays Og jeg har allerede købt domænet! emotweecon.azurewebsites.net!!!
  • 8. #CampusDays Demo 1: Hvori vi ser et problem opstå Case: Emotweecon
  • 9. #CampusDays Når en bruger er en bruger • I ordinær brugerinteraktion på et website kan en bruger ikke agere hurtigere end han kan klikke. • Man skalerer efter antallet af brugere • Et internt API, der kun betjener Jquery skal kun følge med almindelig vækst
  • 10. #CampusDays Når brugeren er en maskine... • Der er ingen bånd, der binder en maskine • En maskine • beder om ressourcer noget hurtigere end en bruger • kan aflevere data hurtigere end et menneske • kan parallellisere • kan være buggy og ryge i uendeligt loop
  • 11. #CampusDays • Hvis vi lader eksterne processer styre vores interne processer? • Risiko for at trække en hel infrastruktur ned, hvis tingene ikke er afkoblet • Cascading exceptions: deres YSOD bliver din YSOD. • Slave af synkron processering – det går også ud over vores brugere • ”Users can’t signup! WE ARE LOSING MONEY!!” Løsningen! Problemet • Afkobling • Temporal • Computing • Fx Simple queue-arkitektur • Aka Messaging
  • 12. #CampusDays Løsning. Asynkron processering af køer med Azure WebJobs
  • 13. #CampusDays Det generelle princip Alle requests til API bliver smidt på en kø og der svares straks. Webjob står og tager beskeder af køen. Det kan tage lang tid, men stresses ikke af øgende arbejdsbyrde
  • 14. #CampusDays Konkret løsning for vores Emotweecon platform 1. Vi tager alle beskeder og lægger dem på køen og svarer brugeren med det samme 2. WebJob fanger besked og sender det til analyse på api.sociallytic.dk 3. Efter endt analyse gemmes resultat i database 4. Så notificeres websiden med SignalR { "Id":182, "Text":"Kode er festligt. Det holder mig i live.", "Date":"2014-11-24T18:48:52.2743711+00:00", "Emotion":"positive", "EmotionScore":1.0 }
  • 16. #CampusDays WebJobs • Processer under Azure Websites • Kan være exe, .sh, .js, .bat og måske mere (men vi kigger kun på .NET) • Forskellige triggers • Scheduled • Table • Blob • Storage Queue • Service Bus • ”Functions” er metoder der bindes til en triggertype • Autoloader public static void/Task metoder i public classes i loadede assemblies
  • 18. #CampusDays Azure Storage Queues • Bor i en storage account • WebJobs SDK wrapper om eksisterende API • FIFO – first in, first out (ikke nødvendigvis first in-first done!) • Retries v exception • Poison-queue • VisibilityTime (gør først msg ”synlig” i køen på et senere tidspunkt) • Re-entry on timeout • 64kb message size • Max 7 dages message retention, derefter slettes der • Sikring af idempotens er dit eget ansvar
  • 19. #CampusDays Demo 3: Azure Storage Queue
  • 20. #CampusDays Og hvordan skalerer det?! • Flere websites vil skrive til samme kø • Et enkelt WebJob vil som default prøve at trække 16 beskeder af en queue og processere parallelt (!) • 3 websites  48 competing consumers • Placer evt API på instanser, der ikke laver andet kritisk for at isolere load spikes fra kritiske systemer • Storage Queues har 200TB message limit...
  • 21. #CampusDays Et alternativ: Azure Service Bus Azure Queues Azure Service Bus • Persistent og Reliable • Poll API • 1-60 sekunder i kø • 200TB I køen • 64kb/msg • Slettes efter 7 dage • Persistent og reliable • Event API • <0.1 sekunder i kø • < 80gb I køen • 256kb/msg • Slettes aldrig • Publish/Subscribe/Topics • Sessions • Duplicate detection • Automatic dead-lettering v timeout • Del af messaging infrastruktur
  • 22. #CampusDays Andre forbedringer? • Kode, der faktisk er produktionsklart • Rebus af @mookid8000: et Message Bus API/abstraction med masser af features, der kan køre ovenpå • Azure Service Bus • Azure Queues(måske...) • SQL • MSMQ • Rabbit MQ • gudvedhvad) • https://github.com/rebus-org/Rebus • Færre statiske klasser og metoder...
  • 23. #CampusDays Gotchas • Webjobs • Disconnected dev ikke muligt • Man kan dog attache debugger til webjob gennem Server Explorer • Storage Queue • ”never finished” messages dukker op igen efter timeout. Forvirrende state.
  • 24. #CampusDays Nogle strategier ved forskellige API requesttyper • GET • load løses ved traditionel caching, paging, og API limits • POST med 204 nocontent svar (”void”) • Sendes i kø • Vi tager imod besked, giver en kvittering og lover at udføre arbejdet • Klienten må selv følge op. • POST med forventet resultat • Sendes i kø • Kan løses ved at medsende en callback url/web hook, som så efterfølgende kaldes når arbejdet er udført • Nogle gange forventes det at være synkront • Evt SignalR notifikationer
  • 25. #CampusDays Links • Demo src: https://github.com/dalager/emotweecon/ • WebJobs ressources: https://github.com/Azure/azure-content/ blob/master/articles/websites-webjobs-resources.md • WebJobs SDK Samples: https://github.com/Azure/azure-webjobs-sdk-samples • How to work with Azure Queue storage using the webjob sdk: https://github.com/Azure/azure-content/blob/master/articles/websites-dotnet-webjobs- sdk-storage-queues-how-to.md • Sentiment Analysis på dansk: http://sociallytic.dk
  • 26. #CampusDays Q&A Spørgsmål? Nu eller • @dalager • christian@eksponent.com • Nedenunder bagefter session

Editor's Notes

  1. Title Slide – Insert session title, session code and speaker names Project this slide while attendees are arriving. Please do not add additional elements to this slide
  2. Kan som regel ikke lide begrebet. Det har det med at skabe afstand til det konkrete. Håndværket. Fingrene. Det skræmmer udviklere fra at tænke vigtige arkitektoniske tanker Softwarearkitektur er for *alle* Løsningsarkitektur plejer at være tættere bundet til det konkrete. I dag vil vi tale om noget, der normalt falder under ”arkitektur” begrebet. Men det jeg vil prøve at illustrere, er, at det i virkeligheden kan være en simpel teknik til at løse en bestemt type af problemer Vi behøver ikke kalde det arkitektur. Eller for et enterprise pattern. Det er bare endnu et stykke værktøj i udviklerens ruskindsbælte.
  3. Det her kommer til at handle om, hvordan man kan løse en konkret type af problemer i ”ren Azure”. Jeg ved ikke alt om Azure Jeg ved ikke alt om asynkrone messaging arkitekturer Jeg kommer til at sende spørgsmål tilbage til publikum, hvis jeg ikke kender svaret
  4. Section title slide (Optional)
  5. Demo placeholder (Optional)
  6. Content Slide – White background
  7. Demo placeholder (Optional)
  8. Content Slide – White background