Upload
panagiotis-kanavos
View
124
Download
3
Embed Size (px)
Citation preview
Παράλληλος και Ασύγχρονος ΠρογραμματισμόςThe server-side story
Παναγιώτης Καναβός
Parallel Extensions
• Best kept .NET secret known by all
• Από το 2010 και το .NET 4.0
• Καλύπτει τα Task, Data based μοντέλα επεξεργασίας
• Ξαδερφάκια• TPL Dataflow
• System.Reactive
• Διαθέσιμα από NuGet
• SIMD με το RyuJIT
Χρήση σε desktop
• async/await για ασύγχρονα events
• Task.Run για background Processing
• Παράλληλη επεξεργασία
• Προτεραιότητες• Αποφυγή μπλοκαρίσματος UI
• Μείωση χρόνου εκτέλεσης
• Χρήση όλων των cores
Τι διαφέρει ο Server
• Δεν υπάρχει UI thread
• Πολλοί ταυτόχρονοι χρήστες/requests
• Throughput/Scalability πιο σημαντικά από διάρκεια request
• Αλλά έχουμε timeouts• Πολλά services, πολλά συνδυασμένα timeouts
• Και …
Server Meltdown
Server Meltdown
• Load Balanced φάρμα
• Μεγάλος φόρτος
• Πρώτος server κολλάει στα 100% CPU• Timeouts, App pool Recycle
• Περισσότερα requests στους υπόλοιπους server
• Ο δεύτερος server φτάνει 100%
• Κάτσε κάτω από τη μπάρα!
• …
Request Queuing στο ASP.NET
IIS Queue
• Req 1
• Req 2
• Req 3
ASP.NET Worker Threads
• Thread 1
• Thread 3
App Domain
• Thread 2
Γιατί …
• Πολλά threads Χειρότερο Scalability• Τόσα core έχεις, τόσα thread θα τρέξουν
• Thrashing
• Αν όλοι περιμένουν όλους, κανείς δεν τελειώνει
• Μισεί τα blocking calls!• Εξάντληση Thread Pool Δεν σερβίρουμε
• 500 Too Busy
• Άμεση Ενέργεια• App Pool Recycle
• Όχι ότι μπορεί να γίνει και τίποτε άλλο …
Ασύγχρονη εκτέλεση
• Σημαντικότερη για server από ταχύτητα• Stackless Python Δεν υπάρχουν blocking calls
• Η όψη της πραγματικότητας• Δεν υπάρχει blocking I/O σε επίπεδο λειτουργικού
• I/O = File, Database, WS/REST calls
• Στον IIS – IO Threads
• Αφού το IO Thread κάνει τη δουλειά, εγώ τι το περιμένω?
Async σε WebForms
• Βασική υποστήριξη async event handlers• async void Button_Click μπρρρ…
• <%@ Page Async=“true” %>
• Χρήση Page.RegisterAsyncTask για διαδικασίες που κρατάνε περισσότερο από το request• Χύμα Background threads μπορεί να σκοτωθούν
οποιαδήποτε στιγμή
Async σε MVC/Web API
• Async actions!
• Παίζει ωραία με EF async
• HostingEnvironment.QueueBackgroundWorkItem• Ενημερώνει τον IIS
• Δίνει 90 sec στο task να τελειώσει σε περίπτωση shutdown/recycle
• HangFire, Azure Web Jobs για επαναλαμβανόμενα tasks
Parallel.For και PLINQ
• Data Parallelism
• Κόβει τα δεδομένα σε κομμάτια
• Task ανά κομμάτι
• Γενικά 1 Task/Core
• Χρησιμοποιεί και το calling thread• Φαίνεται να μπλοκάρει
• Δεν μας νοιάζει στο server
Dataflow
Κλήση στη βάση
• I:Date
• O:Sales
Web call
• I:Sale
• O:Details
• X3
• Bounded
Ανάλυση Αποθήκευση
• Bulk Insert στη βάση
Dataflow – Παλιός Γνωστός
Τα βασικά
• Μοντέλα επεξεργασίας• Agent και Pipeline • και MapReduce data processing
• Ένα task ανά block (ρυθμίζεται)
• Buffer εισερχομένων/εξερχομένων
• Είδη Blocks• Buffering• Execution• Grouping
• Συνδέσεις μεταξύ των block
Execution Blocks
• Action Block• Κλασσικό Job Queue
• Βασική υλοποίηση Agent
• Transform Block• Μετατροπή ενός Input σε ένα Output
• Για μία μετοχή καλώ ένα web service για να πάρω το ιστορικό ως ένα πακέτο
• TransformMany Block• Για ένα input πολλά outputs
• Παράλληλη εκτέλεση
Throttling
• BoundedCapacity• Μέγιστος αριθμός εισερχόμενων
• Μπλοκάρει τις πηγές
• MaxMessagesPerTask• Recycle ενός Task μετά από X μηνύματα
• CPU Throttling
Execution Block Demos
Buffering Blocks
• Buffer Block• Εύκολη υλοποίηση Publisher/Subscriber
• Broadcast Block• Το τελευταίο event σε πολλούς
• WriteOnce block
Batch Block Demo
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>>
Grouping Block Demos
Συνδέσεις
• LinkTo IDisposable
• Αποσύνδεση Dispose
• Ρυθμίσεις• Φίλτρα με Lambda
• Propagate Completion
Συνδυασμός με Encapsulate
• Νέο block
• Ένα Input, ένα Output
Error Handling
• Απόρριψη εισερχομένων
• Άρνηση νέων εγγραφών
• Προώθηση exception
• Πιάνεται με await/.Wait()
Dataflow Demos
Reactive Extensions
• Παρακολούθηση Γεγονότων• Control Events
• Εγγραφές στο Event Log
• Κλήσεις σε Web Service
• Χρόνου
• Διαχείριση ως stream
• Δουλεύει με LINQ
• Βάση για Event Processing
Πηγές
• Οτιδήποτε υλοποιεί το IObservable<>
• Χρόνος• Observable.Interval
• Events• Observable.FromEventPattern
• BeginXXX/EndXXX• Observable.FromAsyncPattern
• State machines / “Loops”• Observable.Generate
• Tasks
• Οποιοδήποτε IEnumerable<T>
• Subject<T> mySubject.OnNext(data)
Reactive Demos
Χρήσιμα Functions
• Interval
• Buffer
• Sample
• Throttle
• Window
• Skip
• Take
• TakeUntil
Μετατροπές
• Υποστηρίζονται όλα
• task ... AsObservable()
• block … AsObservable()
• await Observable
• ToTask<T>
SignalR
• Real Time communication from Server to Client
• Push Notifications
• Long process progress• Eg. Search for tickets
Multiple Techniques
• Web sockets, falling back to …
• Server Sent Events
• Forever Frame
• Ajax Long Polling
Κλήση function στο Browser
• Server-side:Clients.All.DoSomething(data)
• Browser-sidehub.client.updateProgress = function (data)
Connections and Hubs
Hub
Browser
Browser
Client application
Browser
Persistent Connection
Connections and Hubs
Scaleout μέσω Backplane
Υποστηριζόμενα backplanes
• Windows Azure Bus
• SQL Server
• Redis• Το προτεινόμενο Distributed memory cache για νέα
Azure projects
• Open Source Rulez!
SignalR Demos
Χρήσιμες Πηγές - 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
Χρήσιμες Πηγές - 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
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
Microsoft Virtual Academy for IT Pros
Όλα τα trainings που χρειάζεσαι δωρεάν σε ένα site!
/virtualization/
/server-infrastructure/
/private-cloud/
/hybrid-cloud/
/desktop-devices-management/
/licensing/
/και πολλά άλλα…
www.microsoftvirtualacademy.com
MVA
Microsoft Virtual Academy LIVE
Όλα τα trainings που χρειάζεσαι δωρεάν σε ένα site!www.microsoftvirtualacademy.com
4 ΜΕΡΕΣ Εκπαίδευση με το Mark RussinovichΔΩΡΕΑΝ ΠΡΟΕΤΟΙΜΑΣΙΑ για την Εξέταση 70-533: Implementing Azure Infrastructure SolutionsΚαι 50% ΕΚΠΤΩΤΙΚΟ VOUCHER ΣΤΟ ΚΟΣΤΟΣ ΤΗΣ ΕΞΕΤΑΣΗΣ
1 ως 4 Δεκεμβρίου
MVA
Microsoft Virtual Academy for Devs
Όλα τα trainings που χρειάζεσαι δωρεάν σε ένα site!
/game development /
/web development /
/cloud development /
/mobile development /
/C#-XAML-HTML/
/app development/
/visual studio και πολλά άλλα…
www.microsoftvirtualacademy.com
MVA