Question

Quels sont les bons moyens pour une organisation de partager des données clés dans de nombreuses applications et Départements?

Pour donner un exemple, disons il y a une application principale et la base de données pour gérer les données des clients. Il y a dix autres applications et bases de données de l'organisation qui a lu ces données et se rapportent à leurs propres données. À l'heure actuelle ce partage des données se fait à travers un mélange de liens base de données (DB), vues matérialisées, déclencheurs, mise en scène des tables, des informations de ressaisie, services web, etc.

Y at-il d'autres bonnes approches de partage des données? Et, comment vos approches se comparent à celles ci-dessus en ce qui concerne les préoccupations telles que:

  • données en double
  • sujets à des erreurs processus de synchronisation des données
  • serré contre couplage lâche (réduire les dépendances / fragilité / coordination de test)
  • simplification architecturale
  • sécurité
  • Performance
  • interfaces bien définies
  • d'autres préoccupations pertinentes?

    Gardez à l'esprit que les données client partagé est utilisé à bien des égards, de simples requêtes d'enregistrement unique à complexe, multi-prédicat, multi-genre, se joint à d'autres données d'organisation stockées dans différentes bases de données.

    Merci pour vos suggestions et conseils ...

        
  • Était-ce utile?

    La solution

    Je suis sûr que vous avez vu ce qui vient, « ça dépend ».

    Cela dépend de tout. Et la solution pour le partage des données clients pour le service A peut être complètement différent pour le partage des données clients avec le service B.

    Mon concept préféré qui a augmenté au fil des années est le concept de « cohérence dans le temps ». Le terme est venu d'Amazon parler de systèmes distribués.

    La prémisse est que si l'état des données à travers une entreprise distribuée peut ne pas être parfaitement cohérent maintenant, il « éventuellement » sera.

    Par exemple, quand un dossier client est mis à jour sur le système A, les données des clients du système B est maintenant obsolète et ne correspond pas à. Mais, « éventuellement », le dossier de A sera envoyé à B par un processus. Alors, par la suite, les deux instances correspondront.

    Lorsque vous travaillez avec un seul système, vous ne plutôt vous pas avoir « CE », mises à jour instantanées, une « source de vérité » unique, et, en général, un mécanisme de verrouillage pour gérer les conditions de course et les conflits.

    Le plus en mesure vos opérations sont en mesure de travailler avec des données « CE », plus il est facile de séparer ces systèmes. Un exemple simple est un entrepôt de données utilisé par les ventes. Ils utilisent le DW pour exécuter leurs rapports quotidiens, mais ils ne fonctionnent pas leurs rapports jusqu'au petit matin, et ils cherchent toujours à « Yesterdays » (ou plus tôt) données. Il n'y a donc pas besoin en temps réel pour le DW pour être parfaitement compatible avec le système d'exploitation quotidienne. Il est tout à fait acceptable pour un processus de fonctionner à, par exemple, la fermeture des bureaux et se déplacer sur les transactions jours et les activités en masse dans une grande opération de mise à jour unique.

    Vous pouvez voir comment cette exigence peut résoudre beaucoup de problèmes. Il n'y a pas pour les conflits de données transactionnelles, pas de soucis que certaines données de rapports va changer au milieu d'accumuler la statistique parce que le rapport a fait deux requêtes distinctes à la base de données en direct. Pas besoin de le bavardage haute détail pour aspirer le réseau et le traitement cpu, etc. pendant la journée.

    Maintenant, c'est un exemple extrême, simplifiée et très grossière des CE.

    Mais considérez un grand système comme Google. En tant que consommateur de recherche, nous avons aucune idée quand ni combien de temps il faut pour un résultat de recherche que les récoltes Google sur la façon dont sur une page de recherche. 1ms? 1s? 10s? 10 heures? Il est facile d'imagerie comment si vous touchez Googles serveurs West Coast, vous pouvez très bien obtenir un résultat de recherche différent que si vous cliquez sur leurs serveurs de la côte Est. À aucun moment, sont ces deux cas tout à fait cohérente. Mais une large mesure, ils sont la plupart du temps en accord. Et pour leur cas d'utilisation, leurs consommateurs ne sont pas vraiment affectés par le retard et le retard.

    Considérez email. A veut envoyer un message à B, mais dans le processus, le message est acheminé par le système C, D et E. Chaque système accepte le message, assumer l'entière responsabilité, puis remet le tout à un autre. L'expéditeur voit le feu de courrier électronique sur son chemin. Le récepteur ne manque pas vraiment parce qu'ils ne savent pas nécessairement sa venue. Donc, il y a une grande fenêtre de temps que cela peut prendre pour ce message pour vous déplacer dans le système sans que personne concernée de savoir ou se soucier de la vitesse il est.

    D'autre part, A aurait pu être au téléphone avec B. « Je viens d'envoyer ce, avez-vous encore? Maintenant? Maintenant? Obtenez maintenant? »

    Ainsi, il y a une sorte de sous-jacents, le niveau implicite de performance et de réponse. En fin de compte, « éventuellement », la boîte d'envoi d'un correspondant à la boîte de réception B.

    Ces retards, l'acceptation des données périmées, que ce soit un jour vieux ou 1-5s vieux, sont ce contrôle le couplage ultime de vos systèmes. Le plus souple cette exigence, le plus lâche le couplage et la plus grande flexibilité que vous avez à votre disposition en termes de design.

    Il est vrai jusqu'aux noyaux dans votre CPU. Moderne, multi-cœur, les applications multi-thread en cours d'exécution sur le même système, peuvent avoir différentes vues des données « mêmes », seulement microsecondes sur la date. Si votre code peut fonctionner correctement avec potentia de donnéeslly incompatibles les uns avec les autres, puis heureux jour, il zips le long. Sinon, vous devez accorder une attention particulière pour vous assurer que vos données sont complètement cohérente, en utilisant des techniques comme la mémoire volatile se qualifie, ou des constructions de verrouillage, etc. Tout cela, à leur manière, la performance des coûts.

    Alors, c'est la considération de base. Toutes les autres décisions commencent ici. Répondre à cela peut vous dire comment partitionner des applications à travers les machines, les ressources sont partagées, et la façon dont ils sont partagés. Quels sont les protocoles et les techniques sont disponibles pour déplacer les données, et combien il vous en coûtera en termes de traitement pour effectuer le transfert. La réplication, l'équilibrage de charge, partage de données, etc., etc. Tout basée sur ce concept.

    Modifier, en réponse au premier commentaire.

    Corriger, exactement. Le jeu ici, par exemple, si B ne peut pas modifier les données du client, quel est le mal avec les données du client a changé? Pouvez-vous « risque » qu'il soit à jour pour un court laps de temps? Peut-être que vos données de client arrive assez lentement que vous pouvez reproduire de A à B immédiatement. Dites le changement est mis sur une file d'attente, en raison de faible volume, est ramassé facilement (<1 s), mais même encore il serait « hors de transaction » avec le changement d'origine, et donc il y a une petite fenêtre où A aurait données B ne fonctionne pas.

    Maintenant, l'esprit commence vraiment tourner. Que se passe pendant que 1s de « lag », ce qui est le pire scénario possible. Pouvez-vous concevoir autour d'elle? Si vous pouvez concevoir autour d'un décalage 1s, vous pourriez être en mesure de concevoir autour d'un 5 s, 1 m, voire plus lag. Dans quelle mesure les données du client vous utilisez réellement sur B? Peut-être que B est un système conçu pour faciliter la préparation des commandes de l'inventaire. Difficile d'imaginer quelque chose de plus étant nécessaire que simplement un ID client et peut-être un nom. Juste quelque chose à identifier grossièrement qui l'ordre est pour alors qu'il est en cours d'assemblage.

    Le système de prélèvement ne doit pas nécessairement imprimer toutes les informations du client jusqu'à la fin du processus de cueillette, et alors l'ordre peut-être déplacé à un autre système qui est peut-être plus à jour avec, en particulier, le transport maritime l'information, donc à la fin du système de cueillette n'a pas besoin guère de données clients à tous. En fait, vous pouvez inclure et dénormaliser les informations client dans l'ordre de la cueillette, il n'y a donc pas besoin ou attente de synchronisation ultérieure. Tant que l'ID client est correct (ce qui ne changera jamais de toute façon) et le nom (qui change si rarement ce n'est pas la peine de discuter), qui est la seule véritable référence dont vous avez besoin, et tous vos feuillets de ramassage sont parfaitement exacts au moment de la création.

    L'astuce est l'état d'esprit, de briser les systèmes et en se concentrant sur les données essentielles qui est nécessaire pour la tâche. Les données que vous n'avez pas besoin n'a pas besoin d'être reproduit ou synchronisé. Les gens frottent à des choses comme la dénormalisation et la réduction des données, en particulier quand ils sont dans le monde de la modélisation des données relationnelles. Et avec raison, il doit être considéré avec prudence. Mais une fois que vous allez distribué, vous avez implicitement dénormaliser. Heck, vous copier gros maintenant. Ainsi, vous pouvez aussi bien être plus intelligent à ce sujet.

    Tout cela peut atténuer grâce à des procédures solides et une compréhension approfondie des flux de travail. Identifier les risques et progressez les politiques et les procédures pour les traiter.

    Mais le plus dur se brise la chaîne à la DB centrale au début, et instruire les gens qu'ils ne peuvent pas « tout avoir » comme ils peuvent attendre quand vous avez un seul magasin central, parfait de l'information.

    Autres conseils

    Ceci est certainement pas une réponse complète. Désolé, pour mon long post et j'espère qu'il ajoute aux pensées qui seraient présentées ici.

    J'ai quelques observations sur certains des aspects que vous avez mentionné.

    duplicate data
    

    Il a été mon expérience que ce qui est généralement un effet secondaire de la départementalisation ou de spécialisation. Un des pionniers du département collecte de certaines données qui est considéré comme utile par d'autres groupes spécialisés. Comme ils n'ont pas un accès unique à ces données comme il se confond avec d'autres collectes de données, afin de l'utiliser, ils commencent trop collecte / stockage des données, ce qui en soi ce double. Ce problème ne disparaît jamais et tout comme il y a un effort continu dans le code refactoring et élimination du double emploi, il est nécessaire d'apporter en permanence des données en double pour un accès centralisé, le stockage et la modification.

    well-defined interfaces
    

    La plupart des interfaces sont définies avec une bonne intention garder d'autres contraintes à l'esprit. Cependant, nous avons tout simplement une habitude de plus en plus hors des contraintes imposées par les interfaces définies précédemment. Encore une fois un cas pour refactoring continuos.

    tight coupling vs loose coupling
    

    Si quelque chose, la plupart des logiciels est en proie à ce problème. Le couplage serré est généralement le résultat d'une solution opportune compte tenu de la contrainte de temps auquel nous sommes confrontés. Le couplage lâche encourt une certaine complexité qui ne nous plaît pas quand nous voulons faire avancer les choses. Le mantra de services Web est en cours depuis tours pour un certain nombre d'années et je suis encore de voir un bon exemple de solution qui pallie complètement le point

    architectural simplification
    

    Pour moi, c'est la clé de la lutte contre tous les problèmes que vous avez mentionnés dans votre question. SIP vs histoire VoIP H.323 vient dans mon esprit. SIP est très simplifiée, facile à construire tout comme une norme H323 de télécommunication typique a essayé d'envisager tous les problèmes de la planète sur la VoIP et de fournir une solution pour elle. Le résultat final, SIP a augmenté beaucoup plus rapidement. Il est une douleur pour être conforme à la solution H.323. En fait, la conformité est une industrie H323 méga argent.

    On a few architectural fads that I have grown up to.
    

    Au fil des ans, j'ai commencé à aimer l'architecture REST pour sa simplicité. Il offre un accès unique et simple aux données et facile à construire des applications autour. Je l'ai vu solution d'entreprise souffrent davantage de la duplication, l'isolement et l'accès de moi les données que toute autre question comme la performance, etc. REST offre une panacée à certains de ces maux.

    Pour résoudre un certain nombre de ces problèmes, j'aime le concept de « Hubs de données » centrales. Un Data Hub représente une « source unique de vérité » pour une entité particulière, mais ne stocke les ID, aucune information comme les noms, etc. En fait, il ne stocke des cartes d'identité - par exemple, ceux-ci carte l'ID client dans le système A, au Numéro de client du système B, et le numéro de client dans le système C. Interfaces entre les systèmes utilisent le centre de savoir comment relier les informations dans un système à l'autre.

    Il est comme une traduction centrale; au lieu d'avoir à écrire du code spécifique pour la cartographie de A-> B, A> C et B> C, avec sa présence augmentation exponentielle lorsque vous ajoutez des systèmes, il vous suffit de convertir en / du moyeu: A- > Hub, B> Hub, C> Hub, D> Hub, etc.

    Licencié sous: CC-BY-SA avec attribution
    Non affilié à StackOverflow
    scroll top