29
ΠΙΘΟΣ Αρχιτεκτονικό και Σεχνολογύεσ .NET Παναγιώτησ Καναβόσ

Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Embed Size (px)

Citation preview

Page 1: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

ΠΙΘΟΣ

Αρχιτεκτονικό και Σεχνολογύεσ .NET

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

Page 2: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Object storage αντύςτοιχο του Amazon S3/Azure Blob storage

Τπηρεςύα του Synnefo

Γραμμϋνο ςε Python

Clients για Web, Windows, iOS, Android, Linux

Page 3: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Synnefo

Page 4: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Client API

REST βαςιςμϋνο ςτο OpenStack Object Storage API

Accounts, Containers χωρύσ Folders

GET για data, object info

PUT, POST για upload και update data

Page 5: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Δομή

Page 6: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Extensions ςτο API

Block Storage

Partial Upload/Download

Permissions, Versions

Metadata Queries

UUIDs για Object IDs

Object updates (copy, move)

Page 7: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Χαρακτηριςτικά API

Δεν υπϊρχουν folders

Placeholder directory object για metadata

Block updates ΜΟΝΟ

Merkle hashing για εντοπιςμό αλλαγμϋνων block

Χρόςη SHA256

Page 8: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Merkle Hashing

Top Hash

Hash of #1-2 Hashes

Block #1 Hash

Block #2 Hash

Hash of #2-3 Hashes

Block #3 Hash

Block #4 Hash

Page 9: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Διαδικαςία Download

Get Hashmapfrom server

Calculate local hashmap

Find different blocks

Download blocks

Patch local file with blocks

Page 10: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Διαδικαςία Upload

Calculate local hashmap

PUT to serverServer responds

with missing block hashes

PUT missing blocks at

container levelRepeat from #2

Server responds 201

Page 11: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Pithos Client

Πολλαπλϊ accounts ανϊ μηχϊνημα

υγχρονιςμόσ τοπικού folder με account ςτον Πύθο

Εντοπιςμόσ τοπικών αλλαγών και upload

Εντοπιςμόσ αλλαγών ςτο server και download

Τπολογιςμόσ Merkle Hash για κϊθε αρχεύο

Page 12: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Η αρχιτεκτονική

UI

WPF

MVVM

CaliburnMicro

Core

File Agent

Poll Agent

Network Agent

Status Agent

Networking

CloudFiles

HttpClient

Storage

SQLite

SQL Server Compact

Page 13: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Τεχνολογίεσ

.ΝΕΣ 4, εξαιτύασ των Windows XP Visual Studio 2012 + Async Targeting Pack UI - Caliburn.Micro Concurrency - TPL, Parallel, Dataflow Network – HttpClient Hashing - OpenSSL - Σαχύτερο του native

provider για hashing Storage - NHibernate, SQLite/SQL Server

Compact Logging - log4net

Page 14: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Οι προκλήςεισ

Χειριςμόσ πιθανόσ εκατοντϊδων file events

Hashing πολλών/μεγϊλων αρχεύων

Πολλαπλϋσ αργϋσ κλόςεισ ςτο server

Αςταθϋσ δύκτυο

Παρόλαυτα να μην κολλϊει

Minimal UI με επαρκεύσ πληροφορύεσ

Page 15: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Χειριςμόσ Events

• Listen

• Wait for Idle

File Agent

• Get Server hashes

• Compare hashes

• Identify changes

Poll Agent

• Queue requests

• Process each file

Network Agent

• Network ops for files

Uploader/Downloader

Page 16: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Χειριςμόσ Events (2)

Χρόςη producer/consumer

Αποθόκευςη των events ςε ConcurrentQueue

Επεξεργαςύα ΜΟΝΟ μετϊ από timeout

Page 17: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Merkle Hashing

Γιατύ μιςώ το Game of Thrones

Αςύγχρονη ανϊγνωςη blocks

Παρϊλληλο Hashing κϊθε block

Χρόςη OpenSSL επειδό ϋχει SSE

Περιοριςμόσ ςτο concurrency

Προςοχό ςτη μνόμη!

Page 18: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Memory Leaks ςε Managed Environment!

4ΜΒ Blocks? Large Memory αλλϊ …

Γρόγορο διϊβαςμα 2GB ανϊ 64ΚΒ

Κατϋβαςμα 600ΜΒ ανϊ x KBs

Σρελόσ αριθμόσ αντικειμϋνων που περιμϋνει collection κατϊ τη διϊρκεια CPU/IO intensive processing

Που να προλϊβει ο Garbage Collector!

Page 19: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Hashing 100% CPU?

Καλό το multicore αλλϊ

Μπλοκϊρει το ςύςτημα για μεγϊλα αρχεύα!

Επιλογό για περιοριςμό των παρϊλληλων block hash ops

Βελτιώςεισ:

Περιοριςμόσ για «μεγϊλα» αρχεύα

«Throttling» του File Read

Page 20: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Πολλαπλέσ αργέσ κλήςεισ

Κϊθε κλόςη ϋνα Task

Σαυτόχρονα REST calls ανϊ account και shares

Task.WhenAll για να επεξεργαςτούμε όλα τα αποτελϋςματα

Page 21: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Αςταθέσ Δίκτυο

Χρόςη System.Net.Http.HttpClient

Αποθόκευςη των blocks ςε cache

Έλεγχοσ για orphans

Αςύγχρονο Retry των κλόςεων

Page 22: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Αντοχή ςε ςκαςίματα

Χρόςη Transactional NTFS αν εύναι διαθϋςιμο

Thanks MS for killing it!

Σροποπούηςη αντιγρϊφων και File.Replaceδιαφορετικϊ

Page 23: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Να μην κολλάει

Χρόςη ανεξϊρτητων agents

Asynchronous operations όπου εύναι δυνατόν

Χρόςη async/await για πιο κατανοητό κώδικα

Απαραύτητο το .ConfigureAwait(false)!

ΠΡΟΟΧΗ ςτο async void

Page 24: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Minimal UI

Χρόςη WPF, MVVM

Χρόςη Progress για την ενημϋρωςη του UI

Ενςωματωμϋνο ςτο .NET 4.5, αντιγραφό ςτο 4

To Shell εύναι το Icon!

Έλλειψη WPF Notification Icon

Προβληματικό Data Binding ςε menu

Page 25: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

SQLite ή Compact CE?

Αρχικϊ SQLite -> Προβλόματα ςυγχρονιςμού (DUH !)

Write Ahead logging, ςημαύνει ότι φαύνονται παλιότερα δεδομϋνα

Αλλαγό ςε SQL Compact λόγω προβλημϊτων ςυγχρονιςμού (duh ?)

Μόπωσ ϋπρεπε να ϋχουμε κϊποιο καλύτερο caching?

Akavache?

Μύα Document DB θα όταν προτιμότερη

Page 26: Πίθος - Αρχιτεκτονική και τεχνολογίες .NET

Επόμενα Βήματα

Δημιουργύα File Manager

Γενικό Καθϊριςμα (DUH!)

Επαναφορϊ των Unit Tests (Duh ?)

Mock Server

WebAPI? scriptcs? Yumm!

Δημιουργύα ανεξϊρτητου Pithos library

Windows RT, Windows Phone clients

ΜΕΣΑ το καθϊριςμα