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

Post on 14-Jul-2015

194 views 2 download

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

ΠΙΘΟΣ

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

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

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

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

Γραμμϋνο ςε Python

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

Synnefo

Client API

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

Accounts, Containers χωρύσ Folders

GET για data, object info

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

Δομή

Extensions ςτο API

Block Storage

Partial Upload/Download

Permissions, Versions

Metadata Queries

UUIDs για Object IDs

Object updates (copy, move)

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

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

Placeholder directory object για metadata

Block updates ΜΟΝΟ

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

Χρόςη SHA256

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

Διαδικαςία Download

Get Hashmapfrom server

Calculate local hashmap

Find different blocks

Download blocks

Patch local file with blocks

Διαδικαςία Upload

Calculate local hashmap

PUT to serverServer responds

with missing block hashes

PUT missing blocks at

container levelRepeat from #2

Server responds 201

Pithos Client

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

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

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

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

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

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

UI

WPF

MVVM

CaliburnMicro

Core

File Agent

Poll Agent

Network Agent

Status Agent

Networking

CloudFiles

HttpClient

Storage

SQLite

SQL Server Compact

Τεχνολογίεσ

.ΝΕΣ 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

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

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

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

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

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

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

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

Χειριςμόσ 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

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

Χρόςη producer/consumer

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

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

Merkle Hashing

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

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

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

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

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

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

Memory Leaks ςε Managed Environment!

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

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

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

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

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

Hashing 100% CPU?

Καλό το multicore αλλϊ

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

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

Βελτιώςεισ:

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

«Throttling» του File Read

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

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

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

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

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

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

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

Έλεγχοσ για orphans

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

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

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

Thanks MS for killing it!

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

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

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

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

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

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

ΠΡΟΟΧΗ ςτο async void

Minimal UI

Χρόςη WPF, MVVM

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

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

To Shell εύναι το Icon!

Έλλειψη WPF Notification Icon

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

SQLite ή Compact CE?

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

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

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

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

Akavache?

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

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

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

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

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

Mock Server

WebAPI? scriptcs? Yumm!

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

Windows RT, Windows Phone clients

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