@xabikos Το συμπέρασμα είναι "Lies, damn lies and benchmarks". Γίνεται τόση φασαρία για την ταχύτητα του ServiceStack αλλά αν τρέξεις ένα από τα δικά τους benchmarks, δεν βλέπεις διαφορά. Από εκεί και πέρα, θα σκεφτόμουν πολλά πράγματα πέρα από το πόσο γρήγορα απαντάει το framework σε ένα dummy benchmark με μία παράμετρο και ένα sting response.
Αυτό τον καιρό δουλεύω σε online travel agency με τους servers στο Amazon, και είναι τυπικό να έχουμε περίπλοκα responses της τάξης των 2ΜΒ (φαντάσου 200 ταξίδια με όλες τις λεπτομέρειες), με κλήσεις σε 3-4 third party services με κάποια να έχουν 3+ sec latency. Αυτό σημαίνει ότι μας καίει το scalability, το density (πόσα requests μπορούμε να σηκώσουμε σε κάθε server), το CPU (για να μην γίνει κανένα app pool recycle) και η ασύγχρονη συμπεριφορά.
Η ασύγχρονη συμπεριφορά είναι εξαιρετικά σημαντική αν έχεις κίνηση και καλείς άλλα services ή βάσεις, γιατί έτσι γλυτώνεις IIS threads και CPU. Μεγάλο CPU μπορεί να οδηγήσει σε recycle του application pool, το οποίο θα έχει σαν αποτέλεσμα η κίνηση που πήγαινε σε ένα server να πάει τώρα στους άλλους server της φάρμας και να τους ρίξει και αυτούς.
Επίσης, μπλοκαρισμένα threads ==> αυξανόμενο IIS queue ==> φόρτωμα των επόμενων server στη φάρμα και πάλι cascading failure. Μπορεί να μην πέσουν, αλλά η καθυστέρηση θα είναι τέτοια που είτε οι clients θα κάνουν timeout είτε οι πελάτες θα πάνε σε άλλα sites. Να βάλεις ένα queue μπροστά όπως προτείνει το ServiceStack δεν λύνει *αυτό* το πρόβλημα.
Το Web API τώρα έχει φτιαχτεί εξαρχής για να δουλεύει καλά ασύγχρονα, ενώ το Service Stack πρόσθεσε ασύγχρονη επεξεργασία μόλις στην έκδοση 4. Θα ήθελα να δω πραγματικά πόσο καλά την υλοποιεί. Το ServiceStack πολύ απλά είχε μείνει πίσω και δεν μπορούσε να προχωρήσει χωρίς να σπάσει τον κώδικα.
Επιπλέον, ο λόγος που το ServiceStack.Text ήταν γρηγορότερο από το Json.NET σε προηγούμενες εκδόσεις, ήταν ότι κάλυπτε απλούστερες περιπτώσεις από το Json.Net. Πράγματα όπως το Json schema δεν υπήρχαν καθόλου (και νομίζω ακόμα λείπουν). Έχουν βγει άλλοι, γρηγορότεροι parsers οι οποίοι όμως υποστηρίζουν ακόμα πιο απλά σενάρια.
Όσον αφορά το licensing, το Web API είναι open source, τσάμπα license, με ξεκάθαρα versions, εύκολο deployment με Nuget, documentation. Το ServiceStack σου δίνει μεν τον κώδικα αλλά πρέπει να πληρώσεις αν θέλεις nuget. Versioning δεν υπάρχει στον κώδικα (ούτε ένα tag), το documentation συχνά αναφέρεται σε παλιότερες εκδόσεις.
Άλλο σημαντικό στοιχείο είναι πόσο καλά θα υποστηρίζεται το ASP.NET vNext και κυρίως το cloud-optimized environment. Αυτό θα μου δώσει καλύτερο density , να εξυπηρετήσω δηλαδή περισσότερους clients με τα ίδια ή φθηνότερα VMs στο Amazon ή το Azure και έτσι να γλυτώσω χρήματα. Μπορεί 200MB στο desktop να ακούγονται αστεία, αλλά είναι αρκετά για να κατέβω μία κλίμακα στο cloud. Πραγματικά δεν θα ήθελα να δω επανάληψη της ιστορίας με το Service Stack v3 και γενικά την χρήση των features του .NET 4+. Δεν θέλω να βρεθώ του χρόνου να λέω "αχ πότε θα το υποστηρίξουν να κατέβω κλίμακα".
Και ακόμα δεν έχω πιάσει καν θέματα όπως το authentication (πόσο εύκολα δουλεύει το OAuth?), πρωτόκολλα (BSON, Protobuf, MessagePack, τί-με-νοιάζει-αφού-έχω-gzip), validation, parameter binding.
Τελικά, αν σκέφτεστε τί framework να διαλέξετε για τα επόμενα 1-2 χρόνια καλό θα ήταν να κάνετε τη δική σας σύγκριση αντί να βασιστείτε σε στημμένα benchmark.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos