2009-02-19 4 views
9

Während die Post @http://highscalability.com/amazon-architecture Amazon Architektur im Allgemeinen erklärt, bin ich interessiert zu wissen, wie Amazon S3 implementiert ist.Amazon S3 Architektur

Einige meiner Vermutungen sind

  1. Verteiltes Dateisystem wie HDFS http://hadoop.apache.org/core/docs/current/hdfs_design.html
  2. Eine nicht relationale persistent DB wie CouchDB http://couchdb.apache.org/

Ist es möglich sein, etwas zu implementieren ähnlich zu Dies in einem viel kleineren Maßstab mit Skriptsprachen wie Python oder PHP?

+0

Es gibt mindestens [eins] (https://sourceforge.net/projects/s3mockup/) S3-äquivalente Lösung, mit der Sie Clients testen können. Sie können einige Informationen finden, indem Sie den Quellcode studieren und vielleicht könnten Sie ihn in Ihrem eigenen Projekt verwenden. –

+0

Schauen Sie sich MogileFS an. Es ist nicht API-kompatibel mit S3 und hat viel weniger Funktionen als S3, aber es macht den grundlegenden Prozess der Verteilung von statischen Dateien über eine Reihe von Low-Cost-Storage-Servern. – melo

Antwort

5

Amazon S3 ist mit der Architektur im Dynamo-Papier beschrieben umgesetzt:

http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html

Das Papier konsistente Hashing erklärt, wie und warum die Garantie "Eventual Consistency" ist.

Die Konfliktlösung, über die sie für Dynamo sprechen, wird Benutzern von S3 nicht ausgesetzt. Es wird intern in Amazon-Anwendungen verwendet, aber für S3 ist die einzige Konfliktlösung der letzte Schreibgewinn.

Edit: Werner Vogels hat gesagt: "Dynamo ist nicht direkt als Web-Service extern ausgesetzt, aber Dynamo und ähnliche Amazon-Technologien werden verwendet, um Teile unserer Amazon Web Services wie S3 zu betreiben." http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html

Ich würde betonen, dass er nicht sagt, S3 und Dynamo teilen Komponenten, er sagt ausdrücklich, dass Dynamo selbst ist eine der Technologien, die S3. Alles, was ich von S3 gesehen habe, einschließlich der Vorbehalte, wird angenommen, indem angenommen wird, S3 ist ein schicker Webservice-Wrapper rund um Dynamo mit Authentifizierung, Buchhaltung und einem Last-Write-Wins-Konflikt, der für den Benutzer unsichtbar ist.

Die ursprüngliche Frage war über den zugrunde liegenden Speichermechanismus für S3. Es ist explizit kein verteiltes Dateisystem wie HDFS oder eine nicht-relationale Datenbank wie CouchDB. Dynamo erfüllt diese Rolle.

+1

Ich glaube nicht, dass das stimmt. Dynamos Ziele unterscheiden sich ziemlich von S3 (Dynamo wird für Einkaufswagen und ähnliche Anwendungsfälle verwendet, viele Schreibvorgänge, App-gelieferte Konfliktauflösung, kurze Werte) als S3 (einfacher Schlüssel/Wert-Speicher mit großen Werten, kein inhaltsbasierter Konflikt Auflösung und Verschmelzung, und als solche, interne impl & Design sind sehr unterschiedlich (AFAIK). Architektonisch teilen sie viele Dinge, und einige interne Komponenten auch. – StaxMan

+0

Dynamo und S3 sind völlig unterschiedliche Architekturen – leon

+0

Dynamo kann für einige Stücke von verwendet werden S3 (zB Metadatenspeicher), aber die primäre Speicherstruktur ist völlig unabhängig –

1

Es ist näher an 2, obwohl mit Inhalt als "BLOBs" ohne System Pflege Inhalte gespeichert, während CouchDB tut. Backend-Speicher verwendet eine lokale DB (BDB?) Für Knoten von Clustern, die zum Speichern mehrerer Kopien verwendet werden. Lesevorgänge können zu jedem Knoten, der eine Kopie hat, gehen, genauso wie Schreibvorgänge, aber Schreibvorgänge müssen aufgelöst werden, um Konflikte zu beseitigen. Wie Kevin erwähnt, garantiert dies "eventuelle Konsistenz", gibt aber keine strengen Garantien dafür, wann oder welcher Schreibvorgang gewinnt (von externem POV; intern ist das definiert).

Das Lesen von Dynamo-Dokumenten ist nützlich, um viele der Konzepte zu verstehen, aber die AFAIK-Implementierung ist anders. Dynamo wird intern von Amazon für andere Zwecke verwendet. Es gibt auch Open-Source-Implementierungen von beiden; eine interessante ist Project Voldemort. CouchDB ist offensichtlich sehr interessant.

2

Weder die Architektur von Amazon S3 noch die Implementierung wurde bisher veröffentlicht. Als solche ist nicht für die Erweiterung verfügbar, um die Möglichkeit zu entwickeln, private Clouds jeder Größe zu erstellen.

Es gibt ein paar Artikel zu Themen der Cloud-Speicherarchitektur. Sie könnten sie nützlich finden.Hier ist ein: CACSS: Towards a Generic Cloud Storage Service

Das Verfahren, mit der verschiedenen Technologien kombiniert werden können, eine einzige ausgezeichnete Leistung, hoch skalierbare und zuverlässige Cloud Speichersystem auch detailliert. Diese Forschung dient als Wissensquelle für unerfahrene Cloud-Provider und gibt ihnen die Möglichkeit, ihre eigenen Cloud-Storage-Dienste schnell einzurichten.