O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - ITProDevConnections 2014

414 visualizações

Publicada em

Πως διαφέρει ο παράλληλος και ασύγχρονος προγραμματισμός στο Server και ποιές τεχνολογίες του .NET μας επιτρέπουν να πετύχουμε μεγάλο throughput και να αποφύγουμε meltdowns?

Publicada em: Software
  • Entre para ver os comentários

  • Seja a primeira pessoa a gostar disto

The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - ITProDevConnections 2014

  1. 1. Παράλληλος και Ασύγχρονος Προγραμματισμός The server-side story Παναγιώτης Καναβός
  2. 2. Parallel Extensions • Best kept .NET secret known by all • Από το 2010 και το .NET 4.0 • Καλύπτει τα Task, Data based μοντέλα επεξεργασίας • Ξαδερφάκια • TPL Dataflow • System.Reactive • Διαθέσιμα από NuGet • SIMD με το RyuJIT
  3. 3. Χρήση σε desktop • async/await για ασύγχρονα events • Task.Run για background Processing • Παράλληλη επεξεργασία • Προτεραιότητες • Αποφυγή μπλοκαρίσματος UI • Μείωση χρόνου εκτέλεσης • Χρήση όλων των cores
  4. 4. Τι διαφέρει ο Server • Δεν υπάρχει UI thread • Πολλοί ταυτόχρονοι χρήστες/requests • Throughput/Scalability πιο σημαντικά από διάρκεια request • Αλλά έχουμε timeouts • Πολλά services, πολλά συνδυασμένα timeouts • Και …
  5. 5. Server Meltdown
  6. 6. Server Meltdown • Load Balanced φάρμα • Μεγάλος φόρτος • Πρώτος server κολλάει στα 100% CPU • Timeouts, App pool Recycle • Περισσότερα requests στους υπόλοιπους server • Ο δεύτερος server φτάνει 100% • Κάτσε κάτω από τη μπάρα! • …
  7. 7. Request Queuing στο ASP.NET IIS Queue • Req 1 • Req 2 • Req 3 ASP.NET Worker Threads • Thread 1 • Thread 3 App Domain • Thread 2
  8. 8. Γιατί … • Πολλά threads  Χειρότερο Scalability • Τόσα core έχεις, τόσα thread θα τρέξουν • Thrashing • Αν όλοι περιμένουν όλους, κανείς δεν τελειώνει • Μισεί τα blocking calls! • Εξάντληση Thread Pool  Δεν σερβίρουμε • 500 Too Busy • Άμεση Ενέργεια • App Pool Recycle • Όχι ότι μπορεί να γίνει και τίποτε άλλο …
  9. 9. Ασύγχρονη εκτέλεση • Σημαντικότερη για server από ταχύτητα • Stackless Python  Δεν υπάρχουν blocking calls • Η όψη της πραγματικότητας • Δεν υπάρχει blocking I/O σε επίπεδο λειτουργικού • I/O = File, Database, WS/REST calls • Στον IIS – IO Threads • Αφού το IO Thread κάνει τη δουλειά, εγώ τι το περιμένω?
  10. 10. Async σε WebForms • Βασική υποστήριξη async event handlers • async void Button_Click μπρρρ… • <%@ Page Async=“true” %> • Χρήση Page.RegisterAsyncTask για διαδικασίες που κρατάνε περισσότερο από το request • Χύμα Background threads μπορεί να σκοτωθούν οποιαδήποτε στιγμή
  11. 11. Async σε MVC/Web API • Async actions! • Παίζει ωραία με EF async • HostingEnvironment.QueueBackgroundWorkItem • Ενημερώνει τον IIS • Δίνει 90 sec στο task να τελειώσει σε περίπτωση shutdown/recycle • HangFire, Azure Web Jobs για επαναλαμβανόμενα tasks
  12. 12. Parallel.For και PLINQ • Data Parallelism • Κόβει τα δεδομένα σε κομμάτια • Task ανά κομμάτι • Γενικά 1 Task/Core • Χρησιμοποιεί και το calling thread • Φαίνεται να μπλοκάρει • Δεν μας νοιάζει στο server
  13. 13. Dataflow Κλήση στη βάση • I:Date • O:Sales Web call • I:Sale • O:Details • X3 • Bounded Ανάλυση Αποθήκευση • Bulk Insert στη βάση
  14. 14. Dataflow – Παλιός Γνωστός
  15. 15. Τα βασικά • Μοντέλα επεξεργασίας • Agent και Pipeline • και MapReduce data processing • Ένα task ανά block (ρυθμίζεται) • Buffer εισερχομένων/εξερχομένων • Είδη Blocks • Buffering • Execution • Grouping • Συνδέσεις μεταξύ των block
  16. 16. Execution Blocks • Action Block • Κλασσικό Job Queue • Βασική υλοποίηση Agent • Transform Block • Μετατροπή ενός Input σε ένα Output • Για μία μετοχή καλώ ένα web service για να πάρω το ιστορικό ως ένα πακέτο • TransformMany Block • Για ένα input πολλά outputs • Παράλληλη εκτέλεση
  17. 17. Throttling • BoundedCapacity • Μέγιστος αριθμός εισερχόμενων • Μπλοκάρει τις πηγές • MaxMessagesPerTask • Recycle ενός Task μετά από X μηνύματα • CPU Throttling
  18. 18. Execution Block Demos
  19. 19. Buffering Blocks • Buffer Block • Εύκολη υλοποίηση Publisher/Subscriber • Broadcast Block • Το τελευταίο event σε πολλούς • WriteOnce block
  20. 20. Batch Block Demo
  21. 21. Grouping Blocks • Batching Block • Join Block • 2-3 Inputs, 1 Tuple<T1,T2,T3> output • BatchedJoin Block • Batch  Join • T1, T2  Tuple< IList<T1>, IList<T2>>
  22. 22. Grouping Block Demos
  23. 23. Συνδέσεις • LinkTo  IDisposable • Αποσύνδεση  Dispose • Ρυθμίσεις • Φίλτρα με Lambda • Propagate Completion
  24. 24. Συνδυασμός με Encapsulate • Νέο block • Ένα Input, ένα Output
  25. 25. Error Handling • Απόρριψη εισερχομένων • Άρνηση νέων εγγραφών • Προώθηση exception • Πιάνεται με await/.Wait()
  26. 26. Dataflow Demos
  27. 27. Reactive Extensions • Παρακολούθηση Γεγονότων • Control Events • Εγγραφές στο Event Log • Κλήσεις σε Web Service • Χρόνου • Διαχείριση ως stream • Δουλεύει με LINQ • Βάση για Event Processing
  28. 28. Πηγές • Οτιδήποτε υλοποιεί το IObservable<> • Χρόνος • Observable.Interval • Events • Observable.FromEventPattern • BeginXXX/EndXXX • Observable.FromAsyncPattern • State machines / “Loops” • Observable.Generate • Tasks • Οποιοδήποτε IEnumerable<T> • Subject<T>  mySubject.OnNext(data)
  29. 29. Reactive Demos
  30. 30. Χρήσιμα Functions • Interval • Buffer • Sample • Throttle • Window • Skip • Take • TakeUntil
  31. 31. Μετατροπές • Υποστηρίζονται όλα • task ... AsObservable() • block … AsObservable() • await Observable • ToTask<T>
  32. 32. SignalR • Real Time communication from Server to Client • Push Notifications • Long process progress • Eg. Search for tickets
  33. 33. Multiple Techniques • Web sockets, falling back to … • Server Sent Events • Forever Frame • Ajax Long Polling
  34. 34. Κλήση function στο Browser • Server-side: Clients.All.DoSomething(data) • Browser-side hub.client.updateProgress = function (data)
  35. 35. Connections and Hubs Browser Hub Browser Client application Browser Persistent Connection
  36. 36. Connections and Hubs
  37. 37. Scaleout μέσω Backplane
  38. 38. Υποστηριζόμενα backplanes • Windows Azure Bus • SQL Server • Redis • Το προτεινόμενο Distributed memory cache για νέα Azure projects • Open Source Rulez!
  39. 39. SignalR Demos
  40. 40. Χρήσιμες Πηγές - Courses MVA Course • Lighting up Real-Time Web Communications with SignalR Pluralshight Course • Async and Parallel Programming: Application Design Βιβλία • The C# Concurrency Cookbook, Stephen Cleary, O’Reilly
  41. 41. Χρήσιμες Πηγές - Sites Sites • Signal R • TPL Dataflow • Reactive Extensions • Using Asynchronous Methods in ASP.NET • 101 Rx Samples Blogs • Stephen Cleary • The Magic of using Acync in ASP.NET, Scott Hanselman • How to run background tasks in ASP.NET, Scott Hanselman
  42. 42. Session Evaluation Your feedback is important and valuable Submit before the event’s close session to WIN prizes 2ways to access Go to m.itprodevconnections.gr Ask for an Evaluation Sheet from the registration desk
  43. 43. MVA Microsoft Virtual Academy for IT Pros /licensing/ /virtualization/ /server-infrastructure/ /hybrid-cloud/ /private-cloud/ /desktop-devices-management/ /και πολλά άλλα… www.microsoftvirtualacademy.com Όλα τα trainings που χρειάζεσαι δωρεάν σε ένα site!
  44. 44. MVA Microsoft Virtual Academy LIVE 1 ως 4 Δεκεμβρίου 4 ΜΕΡΕΣ Εκπαίδευση με το Mark Russinovich ΔΩΡΕΑΝ ΠΡΟΕΤΟΙΜΑΣΙΑ για την Εξέταση 70-533: Implementing Azure Infrastructure Solutions Και 50% ΕΚΠΤΩΤΙΚΟ VOUCHER ΣΤΟ ΚΟΣΤΟΣ ΤΗΣ ΕΞΕΤΑΣΗΣ www.microsoftvirtualacademy.com Όλα τα trainings που χρειάζεσαι δωρεάν σε ένα site!
  45. 45. MVA Microsoft Virtual Academy for Devs /app development/ /game development / /web development / /mobile development / /cloud development / /C#-XAML-HTML/ /visual studio και πολλά άλλα… www.microsoftvirtualacademy.com Όλα τα trainings που χρειάζεσαι δωρεάν σε ένα site!

×