Comment concevez-vous/architectez-vous une application évolutive? Des suggestions de livres ou de sites Web qui pourraient aider à comprendre comment développer des applications?
Merci
Au cours de l’année écoulée, j’ai dû aborder cette question dans le cadre d’un projet sur lequel mon entreprise travaillait et j’ai trouvé ces ressources extrêmement utiles: Todd Hoff's highscalability.com ; Architectures Internet évolutives , de Theo Schlossnagle; et Création de sites Web évolutifs , par Cal Henderson. Highscalability.com, en particulier, vous indiquera de nombreuses présentations, tutoriels, livres et papiers de qualité et constitue un excellent point de départ. Tous les conseils sont pratiques et basés sur l'expérience de sites tels que Flickr, Twitter et Google.
BTW, l'évolutivité n'est pas la performance. Un système parfaitement évolutif est un système qui a un coût marginal fixe pour ajouter des utilisateurs ou une capacité supplémentaires.
Ceci est une bonne lecture de livejournal et comment ils ont adapté leur application au fil du temps.
danga.com/words/2004_mysqlcon/mysql-slides.pdf [PDF]
Ce n’est peut-être pas le genre de chose que vous recherchez, mais c’est l’un des meilleurs «Voici ce que nous avons fait et pourquoi», une vue d’ensemble de la mise à l’échelle.
J'ai tendance à penser que l'évolutivité est étroitement liée à la maintenabilité. Et on semble souvent oublier que les gens ne passent que peu de temps à développer des applications et le reste du temps à le maintenir.
De plus, la mise à l'échelle concerne presque certainement les données (qui sont plus agiles que le code - vous aimez donc en avoir de plus en plus), c'est pourquoi le coût de votre accès au stockage doit rester entre O(1)
et O(n)
.
Pour moi, l'application parfaitement évolutive est une application que je pourrais copier d'un environnement à un autre (similaire), configurer quelques valeurs et l'exécuter pour étendre le domaine d'exécution de l'ensemble de l'application.
Il y a déjà quelques bonnes réponses postées ici. Dans certains livres et liens, vous trouverez quelques schémas de pensée courants.
Écrivez le moins de code possible
Réutilisez le code autant que possible
Ne pas trop, ou sous-abstraite votre conception
Divisez les objets en zones modulaires pouvant fonctionner sur plusieurs systèmes. Le traitement lourd devrait être laissé à un système séparé.
Avant de commencer, vous devez connaître le champ d'application de l'application. Qu'attend le client/l'unité opérationnelle en termes de performances et quels sont les domaines critiques de défaillance? Scott Hanselman avait un excellent podcast concernant le sujet.
Certaines des friandises offertes: n'utilisez pas la mise en cache à moins que vous n'ayez à le faire; servir des fichiers est plus rapide que d'assembler des fragments d'une base de données; savoir comment gérer les heures de serveur Peek; Sachez ce que seront vos pics.
Encore une fois, connaissez d’abord la portée de l’utilisation afin de savoir si vous devez mettre à l’échelle.
Quoi que vous fassiez, vous ne pouvez pas concevoir le système dès le départ pour qu'il soit évolutif pour tous vos besoins. Souvent, une fois que votre système est en marche, vous rencontrez des goulots d'étranglement là où vous vous attendez le moins (par exemple, la bande passante du réseau local). Quoi qu'il en soit, mon conseil est également highscalability.com :)
Je suggérerais ce livre pour ça:
Même s'il s'agit principalement d'un livre PHP, les idées sont les mêmes pour toutes les piles Web.
Ceci est exactement ce dont vous avez besoin! Application Architecture Guide a été créé par l'équipe Microsoft Patterns and Practices pour aider les architectes ...