2016-05-25 12 views
3

私は、Arangosのマルチモデル機能が大きな恩恵を受けるアプリケーションに取り組んでいます。バックエンドのアプリケーションニーズを考慮して、私は、すべてではないにしても、REST APIを介して提供される可能性が高いと判断し、将来の開発や他のユーザーとの統合のためのクリーンな設計を支援します。 APIは、残りのロジックを処理するために、いくつかのWebおよびモバイルフロントエンドフレームワークによって消費されます。このプロジェクトは、NodeJSエコシステムを使用して、スタック全体のJavascriptで開発されます。ArangoDB FoxxをRESTバックエンドとして

質問自体:

べきで、1使用arangodb +フォックスは、このように、RESTのAPIを提供し、スタック内の別の層/コンポーネントを回避するための完全なバックエンド・スタックを作成するだろうか?例えばエクスプレス/ハピ/ループバックなど

主要なバックエンド要件:役割

  • セッション
  • 暗号化
  • DB間の複数のホップを回避し、バックエンドをするなどの複雑なクエリ(私の最初の思考の根、と

    • 認証)
    • エントリ解析、検証、サニタイズ
    • 予定タスク

    は主を探して:

    • 既知の設計上の利点
    • 既知の設計上の制限
    • "隠し"
    • 他の可能性のある将来後悔

    ボトルネック。

    (これはいくつかの質問に答えるかもしれません):Foxxはnpm経由で利用できるいくつかのノードミドルウェアを利用できますか?

    お時間をいただきありがとうございます。

  • +0

    私の答えが分かりましたので、この質問を閉じるために受け入れられたと思いますか?それとも、それが受け入れられるために私の答えで私が言いたいことが他にもありますか? –

    答えて

    2

    私は帆アプリケーションをFOXXアプリケーションに移植し始めているので、いくつかの質問に答えることができます。

    ArangoDBでのロールベースの承認は、おそらくあなたが望むレベルよりも高すぎます。私たちの場合、外部サービスを使用して、非常にきめ細かいレベル(頂点やエッジよりはるかに低いレベル)で、さまざまなWebアプリケーションやサービスベースのアプリケーションを認可します。私の気持ちは、そのレベルでの承認は、あなた自身がJavaScriptで書く必要があるということです。コレクション単位でCRUDだけであれば、多大な労力を必要とすべきではありません。

    認証とセッションでは、私が見つけFOXXの例を見てみます:あなたが暗号化について尋ねているのかはっきりしていないFOXX authorization-session example

    。あなたがSSL接続について話しているなら、それはネイティブにサポートされています(arangodbエンドポイントを参照)。内部暗号化については、javascript暗号化モジュールがあります。ArangoDb crypto

    javascript joiパッケージでの入力検証などがサポートされています。

    複雑なクエリ...絶対にArangoDBバージョン3.xでさらに良くなっています。トラバーサルをチェーンすることができます(1つのエッジコレクションを使用して下に移動し、次に別のエッジコレクションを使用して移動します)。

    効率性について考えるときは、あなたは正しいと思います。これがセイルからFOXXへの主な理由です。ここでは、外部サービスのアクセス許可に基づいてクエリ結果をフィルタリングします。つまり、これらの属性がクライアントによって指定されている場合、ArangoDBネイティブスキップおよびリミットサポートを使用することはできません。セイルでは、結果をチャンクに戻し、適切なスキップと限界値に達するまで収集する必要があります。 FOXXに移行することで、ネットワークやその他のリソースを大幅に節約します。私たちは、FOXXプロトタイプの実装にリクエストを転送することでこれをテストしました。これは、セイルの後処理設定よりもはるかに優れています。

    制限付きでNPMモジュールを使用できます。 Javascript Modules

    +0

    ありがとうggendel!あなたが移植を完了したときにどのようになるかについて、この質問を通して更新してください。 – GRE2608

    +0

    セイルアプリケーション(まだプロトタイプ形式)は、Foxxに完全に移植されています。重要なコード変更はほとんどなく、Foxxのものへのsails/arangojsクエリの変更はほとんどなく、Foxxは大幅に高速化しています。 1つのテストケースは、セールで3.5時間、Foxxで29分(7倍のスピードアップ)でした。 AQLの呼び出しは事実上同じなので、ネットワークのトラフィックとセイル側のデータを再処理する必要があります。 – ggendel

    2

    あなたはアプリケーションの唯一のバックエンドとしてArangoDB Foxxを使うことができますが、これを行う際にはFoxx(Node.jsのような汎用JS環境と比較して)の制限を守ることが重要です。

    暗号化があります。 ArangoDBはいくつかの暗号化(例えば、パスワードのHMAC署名とPBKDF2鍵の導出など)をサポートしていますが、Node.jsのように網羅的ではありません。また、計算コストの高い暗号化を使用すると、データベースのパフォーマンスに影響を与えます(Node.js Foxxとは厳密に同期しているため、すべての操作はブロックされているとみなされるため)。

    ArangoDBはロールベースの認証をサポートしていませんが、データベースを残す必要はありませんが、Node.jsに実装するのと同じように、ArangoDBでFoxxを使用して実装するのは完全に合理的です)。

    セッションの場合は、セッション文書(セッションバックエンドとしてArangoDBを使用)を使用するか、署名付きトークンを使用してサービスをステートレスに保つことができます(FoxxはJWTサポートを提供していますボックス)。

    複雑で保存されたクエリと入力検証(実際にはhapi用に作成されたjoiスキーマライブラリを使用しています)は実際にはFoxxの主な使用例の一部です。

    Foxxにはキューイングタスク用の独自のメカニズムが付属しています。これらのタスクは、先にスケジュールすることも、定期的に繰り返すこともできます。ただし、必要に応じて、外部ジョブまたはメッセージキューが適しています。良いことは、組み込みのジョブキューをすぐに開始でき、開発中に必要が生じた場合でも専用のソリューションに移行できることです。

    ミドルウェアとNPMパッケージの場合:FoxxはNode.jsコードと完全に互換性がありません。できるだけ多くの互換コードを提供してコアモジュールを互換性を維持しようとしていますが、ArangoDBでは非同期操作を実行するのにNode.jsが一般的に使用されています。

    暗号化、ファイルまたはネットワークのI/Oを使用せず、非同期API(setTimeout、約束など)を使用しないNode.jsモジュールをお持ちの場合、Foxxと互換性があります。 lodashのような多くのユーティリティライブラリは問題なく動作します。モジュールが動作しないことが分かっても、mocha(Foxxに統合)やGraphQL(NPMのgraphql-syncパッケージ経由)で行ったように、アダプタを作成することは可能かもしれません。

    私の経験では、FoxxサービスをNode.jsの薄い層の上に置くのは良いアプローチです(例えばFoxx APIにほとんどプロキシする簡単なアプリケーション)、そして/またはあなたのバックエンドの一部を委譲するスタンドアロンのNode.jsマイクロサービス(例えば、電子メールやLDAPのような非HTTPサービスとの統合)は、HTTP経由でFoxxに統合することができます。

    もう1つ:既存のExpressミドルウェアの多くは、ノード固有の依存関係と非同期ロジックのためFoxxと互換性がない可能性が高いですが、ArangoDB 3は、機能的に明示的なミドルウェアを使用して、互換性のあるAPI。

    +0

    ありがとうアラン!あなたのメモをすべて考慮して、私は基本的なアプリコンポーネントを構築し、うまくいけば、ハードコアの詳細に落ち着くまでには、すでに安定したブランチに入っています。それでも、Arangoの前にある薄いnodejsレイヤーのコンセプトは、実際に実装する必要がある他のnonDB関連のマイクロサービスが存在する可能性が高いためです。あなたの最後のコメントで、v3が_native_ asyncをもたらすか、それとも単にasyncミドルウェアと互換性があるのか​​を知っていますか? – GRE2608

    +0

    @ GRE2608その点を明確にするには:Foxxは明示的にデフォルトで非同期型と互換性がありません。しかし、多くのExpressミドルウェアは実際には非同期動作に頼っていないため、Foxxで簡単に動作することがあります。 –

    関連する問題