エリプティクス

エリプティクス
開発者Yandexサポートのエフゲニー・ポラコフ
初回リリース2008 (2008年
リポジトリ
言語C++PythonGo
タイプNoSQL
ライセンスGNU Lesser General Public License
ウェブサイトwww.reverbrain.com

Ellipticsは、オープンソースコードを使用した分散型キーバリューデータストレージです。デフォルトでは、複数のレプリカが異なるグループ(分散ハッシュ)に配置された、従来の分散ハッシュテーブル(DHT)です。Ellipticsは、大量の中規模および大規模ファイル(1KBから最大ギガバイト、数千から数十億のオブジェクト)を保存する際の、複数のデータセンターおよび物理的に分散されたストレージロケーションの要件を満たすために作成されました

歴史

Ellipticsは2007年に、LinuxプログラマーのEvgeniy Polyakovによって開発されたキャッシュコヒーレント分散ファイルシステムであるPOHMELFS [ 1 ] [ 2 ]の一部として作成されました。POHMELFSは2008年1月31日に発表され[ 3 ] 、2009年6月9日にリリースされたバージョン2.6.30でLinuxカーネルソースツリーのステージング領域に統合されました。このファイルシステムは実質的に使用されなくなり、2012年2月に再び削除されました[ 4 ]

2008年、Ellipticsは独立したプロジェクトとして分離されました。Polyakovは分散データストレージシステムへの様々なアプローチを試しましたが、その複雑さゆえに適さないものや、現実離れしたものもありました(BerkeleyDBLevelDB、中規模および大規模ファイル向けのKyoto Cabinetバックエンド、単一DHTリング内の異なるデータセンター、最終的なリカバリがないなど)。Ellipticsは、物理的に分散した場所に複数のレプリカが並列更新される、結果整合性のあるシステムです。Ellipticsは、低レベルのディスク上ストア(Eblob)からSLRUキャッシュ、動的ルーティングプロトコルに至るまで、複数のレイヤーで構成されています。[ 5 ]

2012年、ポリャコフは楕円関数に基づいたPOHMELFSの新バージョンを発表した。[ 4 ]

2014年現在、EllipticsはYandex Maps、Disk、Music、Photos、Market、インフラストラクチャ、[ 6 ] Sputnik検索エンジンCoubで使用されています。

建築

デフォルトでは、Elliptics は単一のグループ(レプリカ)に分散ハッシュテーブルを形成します。グループには 1 台以上のサーバーを含めることができ、物理サーバーには異なるバックエンドに保存された複数の Elliptics グループ(レプリカ)を含めることができます。グループは異なる物理的な場所に配置できるため、他の場所にアクセスできない場合でもクライアントの要求に応えることができます。ピアツーピア(P2P) プロトコルを使用すれば、プロキシを介さずにストレージサーバーから直接データにアクセスできます。Elliptics は、Cocaine テクノロジー、SLRU キャッシュ、および複数のプラグイン可能なバックエンド(中規模および大規模データで最速で最も人気のある eblob)に基づいてC ++ 、JavaScriptPythonでのサーバー側スクリプトをサポートしています。

Elliptics クライアントはすべてのストレージ サーバーに直接接続するため、次のことが可能になります。

  • O (1)のネットワーク要求で検索を実行(レプリカごとに1つのネットワーク要求)
  • 複数のレプリカに書き込み/更新コマンドを並列に実行する

データ アクセス用のアプリケーション プログラミング インターフェイス(API) はいくつかあります。

  • 非同期機能約束C++ライブラリ
  • Pythonバインディング
  • Goバインディング
  • TheVoidライブラリ(boost::asioを使用)に基づくバケットとACLを備えたRiftというHTTPプロキシ
  • コミュニティ主導のErlangバインディング

特徴

  • 分散ハッシュテーブル、メタデータサーバー不要、真の水平スケーリング
  • データレプリケーション - レプリカは異なる物理的な場所に保存可能
  • 範囲と一括リクエスト
  • さまざまなI/Oストレージバックエンド、独自の低レベルストレージバックエンドを作成するためのAPI
  • ノードが削除または追加された場合の自動データ再パーティション
  • 結果的に一貫性のあるリカバリ
  • コンシステント・ハッシュ・アドレス指定モデル
  • クラスタ統計
  • フロントエンド: HTTP; バインディング: C / C++GoPython
  • サーバー側スクリプト実行サポート(書き込みトリガーアナログ)
  • TTL 付き分散 SLRU キャッシュ
  • P2P ストリーミングのサポート (eblob およびファイル バックエンドのみ - Nginx Web サーバーなどの外部アプリケーションは、プロキシなしで eblob オブジェクト ファイルからクライアントに直接データをストリーミングできます)

問題と制限

  • 結果整合性:Ellipticsは完全に分散されているため、緊急時にはサーバーが実際のファイルよりも古いファイルのコピーを返す可能性があります。これは場合によっては受け入れられないこともあります。このような場合は、時間のロスが発生するため、より信頼性の高いデータ要求方法を使用することをお勧めします
  • データが複数のサーバーに並行して書き込まれるため、クライアントとサーバー間のネットワークが弱点になる可能性があります。
  • APIは高レベルのリクエストには不便かもしれません。EllipticsはユーザーにSQLのようなデータリクエストを提供していません。
  • Elliptics には高レベルのトランザクション サポートがないため、コマンド グループが完全に実行されるか、まったく実行されないかを保証することはできません。
  • トランザクションはグループ内でのみアトミックであり、主キーに基づいてロックされます。

ドキュメント

Ellipticsとその関連プロジェクトは、コミュニティウィキ(Wayback Machineに2020年1月21日アーカイブ)でドキュメント化されています。 高レベルの設計ドキュメント、チュートリアル、低レベルの詳細、ナレッジベースが含まれています。Ellipticsと関連プロジェクトは、オープンなGoogleグループで議論されています

参照

参考文献

  1. ^ 「POHMELFS:新しくも古い分散Linuxファイルシステム - Phoronix」 www.phoronix.com 20175月8日閲覧
  2. ^ "POHMELFS returns [LWN.net]" . lwn.net . 2017年5月8日閲覧
  3. ^ “Entry 2008.01.31” . 2008年10月6日時点のオリジナルよりアーカイブ2017年5月8日閲覧。
  4. ^ a b Evgeniy Polyakov (2012年2月8日). 「pohmelfs: 参加を呼びかける」 .
  5. ^ “Как устроены облака Яндекса: 楕円法” . 2017 年5 月 8 日に取得
  6. ^ "Elliptics — Yandex Technologies" . api.yandex.com . 2017年5月8日閲覧