4. Client API
REST βαςιςμϋνο ςτο OpenStack Object
Storage API
Accounts, Containers χωρύσ Folders
GET για data, object info
PUT, POST για upload και update data
7. Χαρακτηριςτικά API
Δεν υπϊρχουν folders
Placeholder directory object για metadata
Block updates ΜΟΝΟ
Merkle hashing για εντοπιςμό αλλαγμϋνων
block
Χρόςη SHA256
8. Merkle Hashing
Top Hash
Hash of #1- Hash of #2-
2 Hashes 3 Hashes
Block #1 Block #2 Block #3 Block #4
Hash Hash Hash Hash
9. Διαδικαςία Download
Get Hashmap Calculate local Find different
from server hashmap blocks
Download Patch local file
blocks with blocks
10. Διαδικαςία Upload
Server responds
Calculate local
PUT to server with missing
hashmap
block hashes
PUT missing
Server responds
blocks at Repeat from #2
201
container level
11. Pithos Client
Πολλαπλϊ accounts ανϊ μηχϊνημα
υγχρονιςμόσ τοπικού folder με account
ςτον Πύθο
Εντοπιςμόσ τοπικών αλλαγών και upload
Εντοπιςμόσ αλλαγών ςτο server και
download
Τπολογιςμόσ Merkle Hash για κϊθε αρχεύο
12. Η αρχιτεκτονική
UI Core Networking Storage
WPF File Agent
CloudFiles SQLite
Poll Agent
MVVM
Network
Agent
SQL Server
Caliburn HttpClient
Compact
Micro Status Agent
13. Τεχνολογίεσ
.ΝΕΣ 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
14. Οι προκλήςεισ
Χειριςμόσ πιθανόσ εκατοντϊδων file events
Hashing πολλών/μεγϊλων αρχεύων
Πολλαπλϋσ αργϋσ κλόςεισ ςτο server
Αςταθϋσ δύκτυο
Παρόλαυτα να μην κολλϊει
Minimal UI με επαρκεύσ πληροφορύεσ
15. Χειριςμόσ Events
Poll Agent Uploader/Downloader
• Listen • Queue requests
• Wait for Idle • Get Server • Process each file • Network ops for
hashes files
• Compare hashes
• Identify changes
File Agent Network Agent
16. Χειριςμόσ Events (2)
Χρόςη producer/consumer
Αποθόκευςη των events ςε
ConcurrentQueue
Επεξεργαςύα ΜΟΝΟ μετϊ από timeout
18. Memory Leaks ςε Managed
Environment!
4ΜΒ Blocks? Large Memory αλλϊ …
Γρόγορο διϊβαςμα 2GB ανϊ 64ΚΒ
Κατϋβαςμα 600ΜΒ ανϊ x KBs
Σρελόσ αριθμόσ αντικειμϋνων που περιμϋνει
collection κατϊ τη διϊρκεια CPU/IO intensive
processing
Που να προλϊβει ο Garbage Collector!
19. Hashing 100% CPU?
Καλό το multicore αλλϊ
Μπλοκϊρει το ςύςτημα για μεγϊλα αρχεύα!
Επιλογό για περιοριςμό των παρϊλληλων
block hash ops
Βελτιώςεισ:
Περιοριςμόσ για «μεγϊλα» αρχεύα
«Throttling» του File Read
20. Πολλαπλέσ αργέσ κλήςεισ
Κϊθε κλόςη ϋνα Task
Σαυτόχρονα REST calls ανϊ account και
shares
Task.WhenAll για να επεξεργαςτούμε όλα τα
αποτελϋςματα
21. Αςταθέσ Δίκτυο
Χρόςη System.Net.Http.HttpClient
Αποθόκευςη των blocks ςε cache
Έλεγχοσ για orphans
Αςύγχρονο Retry των κλόςεων
22. Αντοχή ςε ςκαςίματα
Χρόςη Transactional NTFS αν εύναι
διαθϋςιμο
Thanks MS for killing it!
Σροποπούηςη αντιγρϊφων και File.Replace
διαφορετικϊ
23. Να μην κολλάει
Χρόςη ανεξϊρτητων agents
Asynchronous operations όπου εύναι δυνατόν
Χρόςη async/await για πιο κατανοητό
κώδικα
Απαραύτητο το .ConfigureAwait(false)!
ΠΡΟΟΧΗ ςτο async void
24. Minimal UI
Χρόςη WPF, MVVM
Χρόςη Progress για την ενημϋρωςη του UI
Ενςωματωμϋνο ςτο .NET 4.5, αντιγραφό ςτο 4
To Shell εύναι το Icon!
Έλλειψη WPF Notification Icon
Προβληματικό Data Binding ςε menu
25. SQLite ή Compact CE?
Αρχικϊ SQLite -> Προβλόματα ςυγχρονιςμού
(DUH !)
Write Ahead logging, ςημαύνει ότι φαύνονται
παλιότερα δεδομϋνα
Αλλαγό ςε SQL Compact λόγω προβλημϊτων
ςυγχρονιςμού (duh ?)
Μόπωσ ϋπρεπε να ϋχουμε κϊποιο καλύτερο
caching?
Akavache?
Μύα Document DB θα όταν προτιμότερη
26. Επόμενα Βήματα
Δημιουργύα File Manager
Γενικό Καθϊριςμα (DUH!)
Επαναφορϊ των Unit Tests (Duh ?)
Mock Server
WebAPI? scriptcs? Yumm!
Δημιουργύα ανεξϊρτητου Pithos library
Windows RT, Windows Phone clients
ΜΕΣΑ το καθϊριςμα
27. Links για Πίθο
Pithos trial
http://pithos.okeanos.io
Synnefo Documentation
http://www.synnefo.org/docs/synnefo/latest/ind
ex.html
Pithos API Documentation
http://www.synnefo.org/docs/pithos/latest/index
.html
Pithos Windows Client
https://code.grnet.gr/projects/pithos-ms-client
28. Χρήςιμα Links
Parallel FX Team blog
http://blogs.msdn.com/b/pfxteam
Caliburn.Micro
http://caliburnmicro.codeplex.com/
Ayende’s BufferPool
http://ayende.com/blog/4827/answer-
stopping-the-leaks
29. Χρήςιμα Βιβλία
C# 5 in a Nutshell, O’Riley
Parallel Programming with .NET, Microsoft
• Pro Parallel Programming with C#, Wiley
• Concurrent Programming on
Windows, Pearson
• The Art of Concurrency, O’Reilly