46
Παράλληλος και Ασύγχρονος Προγραμματισμός The server-side story Παναγιώτης Καναβός

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

Embed Size (px)

Citation preview

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

Παράλληλος και Ασύγχρονος ΠρογραμματισμόςThe server-side story

Παναγιώτης Καναβός

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

Parallel Extensions

• Best kept .NET secret known by all

• Από το 2010 και το .NET 4.0

• Καλύπτει τα Task, Data based μοντέλα επεξεργασίας

• Ξαδερφάκια• TPL Dataflow

• System.Reactive

• Διαθέσιμα από NuGet

• SIMD με το RyuJIT

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

Χρήση σε desktop

• async/await για ασύγχρονα events

• Task.Run για background Processing

• Παράλληλη επεξεργασία

• Προτεραιότητες• Αποφυγή μπλοκαρίσματος UI

• Μείωση χρόνου εκτέλεσης

• Χρήση όλων των cores

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

Τι διαφέρει ο Server

• Δεν υπάρχει UI thread

• Πολλοί ταυτόχρονοι χρήστες/requests

• Throughput/Scalability πιο σημαντικά από διάρκεια request

• Αλλά έχουμε timeouts• Πολλά services, πολλά συνδυασμένα timeouts

• Και …

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

Server Meltdown

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

Server Meltdown

• Load Balanced φάρμα

• Μεγάλος φόρτος

• Πρώτος server κολλάει στα 100% CPU• Timeouts, App pool Recycle

• Περισσότερα requests στους υπόλοιπους server

• Ο δεύτερος server φτάνει 100%

• Κάτσε κάτω από τη μπάρα!

• …

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

Request Queuing στο ASP.NET

IIS Queue

• Req 1

• Req 2

• Req 3

ASP.NET Worker Threads

• Thread 1

• Thread 3

App Domain

• Thread 2

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

Γιατί …

• Πολλά threads Χειρότερο Scalability• Τόσα core έχεις, τόσα thread θα τρέξουν

• Thrashing

• Αν όλοι περιμένουν όλους, κανείς δεν τελειώνει

• Μισεί τα blocking calls!• Εξάντληση Thread Pool Δεν σερβίρουμε

• 500 Too Busy

• Άμεση Ενέργεια• App Pool Recycle

• Όχι ότι μπορεί να γίνει και τίποτε άλλο …

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

Ασύγχρονη εκτέλεση

• Σημαντικότερη για server από ταχύτητα• Stackless Python Δεν υπάρχουν blocking calls

• Η όψη της πραγματικότητας• Δεν υπάρχει blocking I/O σε επίπεδο λειτουργικού

• I/O = File, Database, WS/REST calls

• Στον IIS – IO Threads

• Αφού το IO Thread κάνει τη δουλειά, εγώ τι το περιμένω?

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

Async σε WebForms

• Βασική υποστήριξη async event handlers• async void Button_Click μπρρρ…

• <%@ Page Async=“true” %>

• Χρήση Page.RegisterAsyncTask για διαδικασίες που κρατάνε περισσότερο από το request• Χύμα Background threads μπορεί να σκοτωθούν

οποιαδήποτε στιγμή

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

Async σε MVC/Web API

• Async actions!

• Παίζει ωραία με EF async

• HostingEnvironment.QueueBackgroundWorkItem• Ενημερώνει τον IIS

• Δίνει 90 sec στο task να τελειώσει σε περίπτωση shutdown/recycle

• HangFire, Azure Web Jobs για επαναλαμβανόμενα tasks

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

Parallel.For και PLINQ

• Data Parallelism

• Κόβει τα δεδομένα σε κομμάτια

• Task ανά κομμάτι

• Γενικά 1 Task/Core

• Χρησιμοποιεί και το calling thread• Φαίνεται να μπλοκάρει

• Δεν μας νοιάζει στο server

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

Dataflow

Κλήση στη βάση

• I:Date

• O:Sales

Web call

• I:Sale

• O:Details

• X3

• Bounded

Ανάλυση Αποθήκευση

• Bulk Insert στη βάση

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

Dataflow – Παλιός Γνωστός

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

Τα βασικά

• Μοντέλα επεξεργασίας• Agent και Pipeline • και MapReduce data processing

• Ένα task ανά block (ρυθμίζεται)

• Buffer εισερχομένων/εξερχομένων

• Είδη Blocks• Buffering• Execution• Grouping

• Συνδέσεις μεταξύ των block

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

Execution Blocks

• Action Block• Κλασσικό Job Queue

• Βασική υλοποίηση Agent

• Transform Block• Μετατροπή ενός Input σε ένα Output

• Για μία μετοχή καλώ ένα web service για να πάρω το ιστορικό ως ένα πακέτο

• TransformMany Block• Για ένα input πολλά outputs

• Παράλληλη εκτέλεση

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

Throttling

• BoundedCapacity• Μέγιστος αριθμός εισερχόμενων

• Μπλοκάρει τις πηγές

• MaxMessagesPerTask• Recycle ενός Task μετά από X μηνύματα

• CPU Throttling

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

Execution Block Demos

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

Buffering Blocks

• Buffer Block• Εύκολη υλοποίηση Publisher/Subscriber

• Broadcast Block• Το τελευταίο event σε πολλούς

• WriteOnce block

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

Batch Block Demo

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

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>>

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

Grouping Block Demos

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

Συνδέσεις

• LinkTo IDisposable

• Αποσύνδεση Dispose

• Ρυθμίσεις• Φίλτρα με Lambda

• Propagate Completion

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

Συνδυασμός με Encapsulate

• Νέο block

• Ένα Input, ένα Output

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

Error Handling

• Απόρριψη εισερχομένων

• Άρνηση νέων εγγραφών

• Προώθηση exception

• Πιάνεται με await/.Wait()

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

Dataflow Demos

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

Reactive Extensions

• Παρακολούθηση Γεγονότων• Control Events

• Εγγραφές στο Event Log

• Κλήσεις σε Web Service

• Χρόνου

• Διαχείριση ως stream

• Δουλεύει με LINQ

• Βάση για Event Processing

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

Πηγές

• Οτιδήποτε υλοποιεί το IObservable<>

• Χρόνος• Observable.Interval

• Events• Observable.FromEventPattern

• BeginXXX/EndXXX• Observable.FromAsyncPattern

• State machines / “Loops”• Observable.Generate

• Tasks

• Οποιοδήποτε IEnumerable<T>

• Subject<T> mySubject.OnNext(data)

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

Reactive Demos

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

Χρήσιμα Functions

• Interval

• Buffer

• Sample

• Throttle

• Window

• Skip

• Take

• TakeUntil

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

Μετατροπές

• Υποστηρίζονται όλα

• task ... AsObservable()

• block … AsObservable()

• await Observable

• ToTask<T>

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

SignalR

• Real Time communication from Server to Client

• Push Notifications

• Long process progress• Eg. Search for tickets

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

Multiple Techniques

• Web sockets, falling back to …

• Server Sent Events

• Forever Frame

• Ajax Long Polling

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

Κλήση function στο Browser

• Server-side:Clients.All.DoSomething(data)

• Browser-sidehub.client.updateProgress = function (data)

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

Connections and Hubs

Hub

Browser

Browser

Client application

Browser

Persistent Connection

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

Connections and Hubs

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

Scaleout μέσω Backplane

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

Υποστηριζόμενα backplanes

• Windows Azure Bus

• SQL Server

• Redis• Το προτεινόμενο Distributed memory cache για νέα

Azure projects

• Open Source Rulez!

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

SignalR Demos

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

Χρήσιμες Πηγές - 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

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

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

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

Microsoft Virtual Academy for IT Pros

Όλα τα trainings που χρειάζεσαι δωρεάν σε ένα site!

/virtualization/

/server-infrastructure/

/private-cloud/

/hybrid-cloud/

/desktop-devices-management/

/licensing/

/και πολλά άλλα…

www.microsoftvirtualacademy.com

MVA

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

Microsoft Virtual Academy LIVE

Όλα τα trainings που χρειάζεσαι δωρεάν σε ένα site!www.microsoftvirtualacademy.com

4 ΜΕΡΕΣ Εκπαίδευση με το Mark RussinovichΔΩΡΕΑΝ ΠΡΟΕΤΟΙΜΑΣΙΑ για την Εξέταση 70-533: Implementing Azure Infrastructure SolutionsΚαι 50% ΕΚΠΤΩΤΙΚΟ VOUCHER ΣΤΟ ΚΟΣΤΟΣ ΤΗΣ ΕΞΕΤΑΣΗΣ

1 ως 4 Δεκεμβρίου

MVA

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

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

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