the server-side story: Παράλληλος και ασύγχρονος...

Post on 13-Jul-2015

126 Views

Category:

Software

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Παράλληλος και Ασύγχρονος Προγραμματισμός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

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

top related