問題タブ [quasar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - モバイルアプリ API スケーリング戦略
当社の API は、100 万人のユーザーをサポートするために開発されました。4 か月以内に 50 万人に達したため、現在、1 年以内に到達する予定の 1,000 万人のユーザーをサポートできるように拡張中です。現在、コア データ処理/集計ロジックを SDK として他のアプリに出荷しているため、目標は現実的です。
現在の API は、ボディが JSON である HTTP ポストです。新しいユーザーが登録すると、デバイスから約 200KB のデータがアップロードされます。以前はデータ サーバー側で処理していましたが、現在はデバイス自体で処理しています。
その後、アプリは 1 日あたり約 2KB のデータをアップロードし、ほぼ同じ量をダウンロードします。複数のモバイル デバイスを使用するユーザーの場合、この数はもう少し多くなりますが、これはユーザー ベース全体の 1% にすぎません。
現在、API サーバーは Jetty+Jersey を使用しており、平均で約 200 の同時接続があります。約 500 ~ 1000 の同時接続を処理できます (要求の種類によって異なります)。
各 API サーバー (合計 4) には 120 のデータベース接続があります。ワークロードは書き込み 80%、読み取り 20% で、更新はほとんどありません。
現在、API は同期的です。つまり、リクエストごとにデータを保存/取得し、ack/data をクライアントに送り返します。
スケーリングする 1 つの方法は、API サーバーを (垂直方向および/または水平方向に) スケーリングし、userId でデータベースを分割することです。データベースのシャーディングが行われるのは、100 万ユーザーごとに 1 TB のデータ ストレージが必要であることを見積もったためです。SSDへの移行も予定していますが、自社のデータセンターがあり、移行が進行中であるため、しばらく時間がかかります。
私が予見する主な課題は、SDK が人気のあるアプリに展開される際の新規ユーザーの急増を処理することです。私が検討しているいくつかのアプローチがあります:
1) 書き込みリクエスト中にエンティティを抽出し、KAFKA にプッシュしてクライアントに ACK を送信します。コンシューマーはエンティティを抽出してキューから保持し、それらをバッチに挿入します。
2) 読み取りと書き込みの異なるサーバーを使用します。読み取りには、既存の同期アーキテクチャを使用します。書き込みリクエストの場合、エンティティを抽出して保持し、それらをメモリ内キューにプッシュする Netty によってサポートされる別の URL を公開し、クライアントに ACK を送信します。kafka キューに非同期で転送し、最終的にデータベースに転送します。
3) 要求ごとに非同期サーバーの Quasar+Comsat および軽量スレッドを使用し、クライアントに ack を待機させます (永続化されたエンティティの自動インクリメント ID も取得します)。問題は、DB 接続の数がボトルネックであることです。多数の同時軽量スレッドを生成しても、実際には役に立たない可能性があります。
これらのアプローチの長所/短所/改善点を指摘したり、新しいアプローチを提案したりすることは、非常に役立ちます。10M から 100M にスケーリングしたとしても、これらのアプローチのどれが当てはまるかという観点も役立ちます。私たちはウェブインターフェースを持っていないので、すべてのデータ転送は純粋にjsonです.発展途上国では、2Gのデバイスと多くのネットワーク切断をサポートする必要があるため、これも考慮する必要があります.
java - ファイバー Quasar 間のメッセージの受け渡し
でメッセージを聞いて処理するために、クエーサー ファイバーを使用していますQueueObjectChannel
。ファイバー間のメッセージ キューとしてどのオブジェクトを使用すればよいかわかりません。私が抱えている問題は、QueueObjectChannel
コンストラクターに渡されるはずのものを理解していないことです。javadoc によると、コンストラクターは取ることになっていますQueueObjectChannel(co.paralleluniverse.strands.queues.BasicQueue<Message> queue, Channels.OverflowPolicy policy, boolean singleProducer, boolean singleConsumer)
が、実装するものを構築しようとしているため、直感に反するようですBasicQueue
。
インターフェイスを実装することになっていますか?
ファイバー間通信に対する私の理解は完全に間違っていますか?
multithreading - クエーサーファイバーを JSF で最適に動作させるにはどうすればよいですか?
JSFでquasarを最適に動作させるにはどうすればよいですか? 私は、FiberHttpServlet の行で Comsat Quasar 統合を使用して JSF プロジェクトを作成しましたが、数値の改善は見られません。
私のプロジェクトはここにあります: https://github.com/sanketsw/Quasar_JSF_Demo
残念ながら、ファイバーは、JMeter (50 スレッドに制限されたサーバーと 3000 人のユーザーを実行する JMeter テスト) からテストされたときに、ポジティブな影響を与えることがわかりませんでした。応答は、500 ユーザーまでの javax.faces.webapp.FacesServlet とまったく同じでした。3000 人のユーザーの場合、リクエスト失敗のエラー率は高く、応答時間も成功したリクエストの通常の FacesServlet よりも大幅に長くなりました。
このスレッドにさらに取り組み、より良い結果が得られた場合は、お知らせください。または、設定に誤りがないか確認してください。
gradle - Kotlin Quasar の例が機能しない
Kotlin Quasar アクターの例をテストしています。 Quasar と Kotlin – 強力な組み合わせ 質問は、この例は時代遅れですか? Kotlin と Quasar の使用方法を確認できるドキュメントはありますか?
これは私の gradle.build ファイルです。
fiber - クエーサー平行宇宙の例
私はクエーサーが初めてで、以下のような例があるかどうか知りたい. または、誰かがこれを行う方法について正しい方向に向けることができたとしても。
だから私がする必要があるのは、jsonファイルを読むことです。インデックスごとに新しいファイバーを作成し、json から値を渡します。各ファイバーは、json の値に基づいて実行関数を作成します。ただし、値によっては、一部のファイバーで処理に時間がかかる場合があります。完了するまで最大 5 秒待機します。
これらのファイバーはすべて並行して実行されると思います。
これは可能ですか?どんな例でも素晴らしいでしょう。
quasar - クエーサーマルチファイバー警告
私はクエーサーが初めてで、これをやってみました。基本的に、ファイバーがスレッドをブロックしているという警告が表示されます。なんで ?以下のようなことはできませんか?
ありがとう
java - Gradle で Quasar を構成する方法
私はGradleを初めて使用し、何をすべきかわかりません。
Gradle を介して Quasar をインストールする方法に関する Quasar ドキュメントは次のとおりです: Quasar Docs
ページにはテンプレート プロジェクトもあります:テンプレート Gradle プロジェクト
最後に、これは私のbuild.gradle
:
そして、私はこのエラーを受け取ります:
だから私は何をすべきですか?この質問をして申し訳ありませんが、私はGradleを初めて使用し、この質問を投稿する前にGoogleで検索しました。ありがとう
java - AOT インストルメンテーションとは何を意味しますか?
バイトコード インストルメンテーションとは何かを知っています。実行時に .class ファイルのバイトコードを変更するだけで、JDK 1.5 以降で利用できるようです。ただし、正確には実行時ではなく、クラスのロード中にあると言われています。
ここで私の質問は、AOT または Ahead of Time インストルメンテーションとは何ですか? 逆の手続きとは?時間の経過とともに計装?
コードの計測
Quasar ファイバーは、バイトコードの計測に依存しています。これは、 を介したクラスロード時Java Agent
、または Ant タスクを使用したコンパイル時に実行できます。インストルメンテーションの実行
Java AgentQuasar
の軽量スレッド実装は、バイトコード インストルメンテーションに依存しています。インストルメンテーションは、コンパイル時 (詳細は後述) または実行時に Java エージェントを使用して実行できます。Java エージェントを実行するには、次を java コマンドラインに追加する必要があります (または、任意のビルド ツールを使用して、これを JVM 引数として追加します)。
-javaagent:path-to-quasar-jar.jar
Ahead-of-Time (AOT) インストルメンテーション
Quasar を使用してプログラムをインストルメント化する簡単で好ましい方法は、実行時にコードをインストルメント化する Java エージェントを使用することです。ただし、Java エージェントを実行できない場合もあります。Quasar は、Ant タスクによる AOT 計測をサポートしています。タスクは
co.paralleluniverse.fibers.instrument.InstrumentationTask
にありquasar-core.jar
、計測するクラスのファイルセットを受け入れます。すべてのクラスが実際にインスツルメントされるわけではありません –suspendable method
s を持つクラスのみ (以下を参照) – 単純に、プログラム内のすべてのクラス ファイルをタスクに与えます。実際、クエーサー自体は 事前に計測されています。