2012-01-16 4 views
1

Quelle est la meilleure façon de fractionner une application Web massive construite avec un framework Web standard tel que Ruby on Rails ou Django et de les répartir sur un large éventail de serveurs? Si l'on considère un cloisonnement dans les services RESTful et une architecture ou service-oriented design, alors on pourrait utiliser l'une des méthodes nom Paul Dix dans son livre « Design Service-Oriented avec Ruby on Rails »:Comment partitionner la fonctionnalité en services distincts

  • Cloisonnement sur la fonction logique
  • Cloisonnement sur lecture/écriture fréquences
  • Cloisonnement sur Minimisation rejoint
  • Partitionnement à Iteration Vitesse

Est-il préférable de partitionner sur Logi fonction cal et logique métier, pour partitionner sur des fréquences de lecture/écriture, ou pour partitionner en minimisant les jointures et les accès à la base de données? Un autre choix possible sont différents types de contenu: IDs, graphiques (sociaux), cartes, fichiers, images, etc. Il est courant, par exemple, de stocker des images sur Amazon S3 ou d'obtenir des cartes en utilisant Google Maps. Quelles sont les meilleures pratiques?

+0

Trop subjective. la «meilleure» réponse à cette question nécessiterait de connaître beaucoup plus sur vos logiciels, systèmes, données et intentions que vous avez fournis. – SpliFF

+0

J'ai ajouté des informations plus spécifiques, espérons que cela aide à clarifier la question – 0x4a6f4672

+0

@ 0x4a6f4672 la question est encore large. C'est vraiment difficile de répondre. Minimiser les jointures n'a pas de sens si vous avez peu de jointures, l'optimisation pour l'écriture n'a pas de sens si vous avez surtout des lectures. Pourriez-vous partager l'idée de l'application que vous voulez construire? Si vous pouviez identifier les problèmes de performance dans votre question, vous avez probablement votre réponse. –

Répondre

2

Peut-être que cela vaut la peine de regarder les géants de l'Internet. Amazon et eBay sont connus pour leur approche orientée services. Ce sont les géants d'Internet qui partitionnent tout en services.

ebay: Randy Shoup explique un certain nombre de meilleures pratiques à eBay pour construire des sites Web à grande échelle, par exemple dans cette présentation sur eBay's Architectural Principles et le article about lessons from eBay correspondant. Ebay partitionne tout. Chaque problème est divisé en blocs gérables dans plusieurs dimensions, par données, charge et/ou modèle d'utilisation. Les deux modèles de partition de base sont (1) la segmentation fonctionnelle et (2) la division horizontale, la base de données et le niveau d'application sont d'abord segmentés par fonctionnalité, puis divisés horizontalement. Randy dit que la segmentation fonctionnelle et la décomposition fonctionnelle sont la méthode la plus importante, que les éléments de fonctionnalité connexes appartiennent ensemble, tandis que les éléments de fonctionnalité non reliés appartiennent à part. Paul Dix dit la même chose dans son livre: "Généralement, vous voulez partitionner les services en fonction de leur fonction logique". ebay's architecture a environ 200 groupes de fonctionnalités aka "apps". Le niveau d'application qui s'exécute sur 16 000 serveurs d'applications est divisé en ebay's architecture en 220 pools d'applications distincts (vente, recherche, affichage des éléments, enchères, paiement, etc.). Le niveau de la base de données ebay compte plus d'un millier de bases de données logiques différentes sur 400 hôtes, où les bases de données sont segmentées en zones fonctionnelles. ebay a écrit sa propre couche ORM appelée Data Access Layer (DAL) qui prend en charge les divisions de la base de données.

Amazon: Chez Amazon, tout est divisé en services. L'architecture orientée services (SOA) est l'abstraction fondamentale du bâtiment pour les technologies Amazon. Le Amazon.com architecture n'est pas seulement divisé en services, même les développeurs d'Amazon sont organisés en équipes autour des services. Amazon est vraiment un écosystème de nombreuses start-up internes qui ont leurs propres données et leur propre API. Un service est ici quelque chose qui est exploité et détenu par une petite équipe de développeurs. Le Amazon.com platform est constitué de centaines de services, allant des services de base basiques (stockage, calcul, mise en file d'attente, ..) à des services agrégés de haut niveau tels que la gestion des identités, la gestion de contenu, Paiements ou exécution & Service à la clientèle. Pour créer une page de détail de produit pour un client visitant Amazon.com, le logiciel fait appel entre 200 et 300 services pour présenter une expérience hautement personnalisée pour ce client.

Twitter utilise des services qui correspondent aux différents types de contenu, ID, graphiques, URL, etc. Il utilise Snowflake pour la génération d'ID. Snowflake est le service réseau permettant de générer des numéros d'identification uniques à grande échelle utilisés. Twitter utilise FlockDB comme stockage de graphe social. FlockDB est une base de données de graphes distribués pour stocker les listes d'adjanctions utilisées par Twitter. Il utilise SpiderDuck comme outil de recherche d'URL. SpiderDuck récupère toutes les URL partagées dans Tweets en temps réel, analyse le contenu téléchargé pour extraire les métadonnées d'intérêt et met ces métadonnées à la disposition des autres services Twitter pour les consommer en quelques secondes.

Questions connexes