問題タブ [yaws]
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.
erlang - OTP14B02構成エラー
OpenSolarisにOTP14B02をインストールしようとしましたが、呼び出し時に次のエラーが発生します./configure
。
この問題の原因は何で、どうすれば解決できますか?
database - 本番環境の非常に大きな Mnesia テーブル
非常に大規模なシステムのプライマリ データベースとして Mnesia を使用しています。Mnesia Fragmented Tables は、テスト期間中、非常にうまく動作しました。システムには約 15 のテーブルがあり、それぞれが 2 つのサイト (ノード) に複製されており、各テーブルは高度に断片化されています。テスト フェーズ (可用性、効率性、負荷テストに焦点を当てた) では、サービス上で実行されるすべてのアプリケーションが Erlang/OTP アプリであることを考えると、複雑な構造の多くの利点を持つ Mnesia を受け入れました。メイン Web サーバーとして Yaws 1.91 を実行しています。断片化されたテーブルを効率的に構成するために、大規模なシステムで
mnesiaを
使用した多くの参考文献を使用し
ました。
、ハッシングについて。これらのブログ投稿は、パフォーマンスを向上させるためにあちこちで微調整するのに役立ちました.
さて、問題です。Mnesia にはテーブル サイズの制限があります。はい、同意します。ただし、フラグメント数の制限についてはどこにも言及されていません。パフォーマンス上の理由から、また大規模なデータに対応するために、mnesia を「正常」に保つフラグメントの数について。
一部のテーブルには、64 個のフラグメントがあります。n_disc_only_copies
各ノードがフラグメントごとにコピーを持つように、クラスタ内のノード数に設定します。これにより、特定のノードがすぐに届かなくなった場合に mnesia の書き込みが失敗する問題を解決することができました。また、上記のブログで、彼はthe number of fragments should be a power of 2
、この声明 (彼によると) は、mnesia がレコードのハッシュを行う方法から調査されたことを示唆しています。ただし、これについてはさらに説明が必要です。ここで話されている 2 のべき乗はどれですか: 2,4,16,32,64,128,...?
このシステムは、Intel プロセッサ (2 つのプロセッサ、各 4 コア、各コアの速度 2.4 GHz、8 MB キャッシュ サイズ)、20 GB RAM サイズ、1.5 テラバイトのディスク容量を含む HP Proliant G6 で実行することを目的としています。現在、これらの高出力マシンのうち 2 台を自由に使用できます。システム データベースは、2 つの間でレプリケートする必要があります。各サーバーは、Solaris 10、64 ビットを実行します。
mnesia のパフォーマンスが低下し始めるフラグメントの数はいくつですか? 特定のテーブルのフラグメント数を 64 から 128 に増やしてもよろしいですか? 65536 フラグメント (2 ^ 16) はどうですか? フラグメンテーションを使用してテラバイト空間を利用するために記憶喪失をスケールアウトするにはどうすればよいでしょうか?
質問への回答を提供してください。また、システムを強化する可能性のあるその他のパラメーターについてアドバイスを提供することもできます。
注: 数百万のレコードを保持するすべてのテーブルはdisc_only_copies
タイプで作成されるため、RAM の問題はありません。RAM は、実行するいくつかの RAM テーブルに対して十分です。MySQL Cluster や CouchDB などの他の DBMS にもデータが含まれ、Mnesia DBMS と同じハードウェアを使用しています。MySQL Cluster は 2 つのサーバー (それぞれが 2 つの NDB ノード、MySQL サーバーを保持) に複製され、管理ノードは異なるホスト上にあります。
linux - マルチコア サーバーでの Erlang SMP enable オプション
次のホストで Erlang 14B03 を実行しています。
HP Proliant G6 サーバーには、2 つの Intel プロセッサが搭載されており、各プロセッサの速度は 2.4GHz、8MB キャッシュ、各プロセッサには 4 つのコアがあります。サーバーには 20 GB の RAM があります。
-smp
サーバーのハイパー スレッディング機能を最大限に活用するには、エミュレータ オプションをどのように適用すればよいでしょうか。各プロセッサーのコアごとにスケジューラーを 1 つ (合計で 8 つのスケジューラーにする) すると、どのようなパフォーマンス上の利点が得られますか?
erlang - Mnesia フラグメンテーションとレプリケーション: 結果として得られる可用性と信頼性
記憶喪失の断片化について最近尋ねた質問の解決策に続いて、私にはまだ多くの課題があります. 次のシナリオを考えてみましょう (私が尋ねている質問は、以下の内容に基づいています)。
企業内で高可用性が必要なデータ駆動型のエンタープライズ アプリケーションがあります
。何らかの理由で内部情報ソースがダウンした場合、エンタープライズ アプリケーションはオフサイト (リモート)のリカバリ センター
からデータを取得するように切り替える必要があります。
企業内の 2 つのノード( DB サイド AおよびDB サイド Bと呼ばれる)にデータベースを複製することにしました。これら 2 つは別々の
ハードウェアで実行されていますが、ファスト イーサネットまたは光ファイバー リンクなどでリンクされています。論理的には、これら2 つの Mnesia DB
間に何らかのトンネルまたは安全な通信を作成します。
2 つ (A と B) には同じデータのレプリカがあり、
常に同期している必要があります。一方、攻撃やハードウェア障害
によってローカル データ アクセスが切断された場合に備えて、リカバリ センターにも同じデータのコピーがあり、常に同期されている必要があります。したがって、同じデータベース スキーマを 3 つのサイト ( A側、B 側、および復旧センター
)に複製する必要があります。
現在、企業内では、アプリケーション ミドルウェアがデータベース サイト間でデータ要求を切り替えることができます。A がダウンしている場合、アプリケーションがそれを認識することなく、リクエストはデータベース B に再ルーティングされます。ミドルウェア レイヤーは、ロード バランシング (要求の多重化) を行うように構成したり、フェイルオーバー技術を使用して柔軟になるように構成したりできます。
さらなる分析:
ここで、テーブルの作成時に、mnesia テーブルを断片化する必要があります。したがって、次のパラメータを決定します。
RECORD_NAME_HERE
は、レコードは Erlang でのコンパイル時に認識されている必要があるため、実際には変数にすることはできません。インストールから、各テーブルについて、すべてのフラグメント (たとえば、table_name_frag2
) がすべてのノードのファイル システムに表示されることがわかります。
課題と発生する質問:
上記の内容に従った後、mnesia がすべてのノードで実行されているため、最初のデータベースの起動は問題ありません。アプリケーションが実行されると、いくつかの課題が現れ始め、以下にリストされています。
すべての書き込みが最初に試行され
DB Side A
、その瞬間にサイド A が利用できない場合、呼び出しが再試行されDB Side B
、recovery center
3 つのデータベース ノードすべてで呼び出しが返されなかった場合、アプリケーション ネットワークミドルウェアレイヤーは、データベースサーバーがすべて利用できないことを報告します (この決定は、アプリケーションが mnesia レプリカにランダムに書き込むようにすると、mnesia ノードが失われた場合に一貫性のないデータベースエラーが表示される可能性が非常に高いという事実に影響された可能性があります)相互にネットワーク接続されていますが、異なる Erlang アプリケーションによってそれぞれに書き込みがコミットされています. を使用することmaster_nodes
にした場合、データを失う危険性があります) したがって、行動によって、あなたは強制していますDB Side A
マスターになる。これにより、他のデータベース ノードが稼働している間は常にアイドル状態になり、DB Side A
サイド A にヒットするリクエストと同じ数のリクエストがダウンすることはありません。サイド B とリカバリ センターにリクエストがヒットすることはありません。通常、Mnesia は開始時に、関連するすべてのノードが実行されていることを確認する必要があります (関連するすべてのノードで mnesia が実行されている必要があります)。これにより、ネゴシエーションと一貫性チェックを行うことができます。これは、mnesia がすべてのノードでダウンした場合、完全に初期化してテーブルをロードする前に、すべてのノードで mnesia を開始する必要があることを意味します。Erlang VM がリモート サイトで Mnesia と一緒に停止すると、さらに悪化します。まあ、あちこちでいくつかの微調整とスクリプトを実行すると、VM 全体と目的のアプリケーションがダウンした場合に再起動するのに役立つ可能性があります。
長い話を短くするために、質問に行きましょう。
質問:
inconsistent_database, starting to run database behind a partitioned network
a を設定するmnesia master node
ことが望ましくない状況で (データ損失の恐れがあるため) 、 mnesia が のイベントを生成した場合、データベース管理者はどうしますか?私の申請に関する記憶喪失イベントの結果はどうなり
inconsistent_database, starting to run database behind a partitioned network
ますか? 私がこの出来事に反応せず、物事をそのままにしておくとどうなりますか? データが失われていますか?大規模な mnesia クラスタで、Mnesia がリモート サイトの Erlang VM と一緒にダウンした場合、何ができるでしょうか? この状況を自動的に処理する既知の適切な方法はありますか?
ネットワークの問題や障害が原因で 1 つまたは 2 つのノードに到達できない場合があり、生き残ったノードの mnesia は、特に
indexes
. 実行時に、一部のレプリカがダウンした場合、アプリケーションの動作はどうなるでしょうか? mnesia クラスター内にマスター ノードを配置するようアドバイスしていただけますか?
上記の質問に答える際に、可用性を確保できるかどうかにかかわらず、最初に説明したレイアウトを強調することもできます。実稼働環境で mnesia の断片化および複製されたデータベースを使用した個人的な経験を提供できます。このテキストの冒頭にあるリンクされた (引用された) 質問を参照して、フラグメントの数、オペレーティング システムの依存関係、ノード プールのサイズ、テーブルのコピーの種類など、データベースの作成時に信頼性を高めることができる代替設定を提供してください。など
erlang - Yaws プロセスが停止しました
OpenSTA を使用して Erlang アプリケーションのパフォーマンス テストを行っています。テストは 100 人の仮想ユーザーで実行されます。ある時点で、次のエラーがポップアップし始めます。
テストは引き続き実行されます。このエラーに関する情報が見つかりません。eacces
とはどういう意味Error accessing a resource
ですか?
編集@Muzaaya Joshua
:呼び出しで指摘されているようfile:read_file(UT#urltype.fullpath)
に、 function でクラッシュしますut_read(UT)
。モジュールを再コンパイルし、コンテキストを出力しました。エラーは次のeacces
とおりUT
です。
このファイルhandler.yaws
はアプリのエントリ ポイントであり、リクエストごとに呼び出されます。100 以下の仮想ユーザーでテストを実行すると、これらのエラーは表示されません。Missing permission for reading the file, or for searching one of the parent directories.
エラーがread_fileドキュメントに記載されているように、どうすればよいでしょうか?
前もって感謝します。
マーティン
apache - yaws Web アプリケーションでのヒット数のカウント
yaws Web サーバーから Web アプリケーションを実行している場合、ユーザーからサイトへのヒット数をどのように数えますか? 次のように、yaws ログにある自分のサイト
のファイルの行数をカウントする基本的な方法を使用しようとしました。.access
erlang - YAWS/Erlang のインストール方法を教えてください。
ここでは、Yaws を組み込みで実行する方法の小さな例を示しましたが、それを機能させるにはどうすれば Yaws をインストールする必要がありますか?
erlang - YAWSWebsocketのトラブル
ここからYAWSWebSocketの例をローカルで実行しようとしています。これは基本的なwsベースのエコーサーバーです。
私は持っています
- YAWSのセットアップと実行
localhost:8080
(Debianリポジトリから直接。新しいルートディレクトリを指す以外はconfは変更されません) - このページの下部にあるコードリストは、
<erl>
として保存されたタグでラップされていますwebsockets_example_endpoint.yaws
- このページは次のように保存されます
index.yaws
(文字通り、ビューソースをコピーして貼り付け、そのファイルとして保存し、localhost:8080
ではなくソケット要求を指定しましたyaws.hyber.org
)。
ブラウザ内にアクセスlocalhost:8080/websockets_example_endpoint.yaws
すると、予想どおり、「あなたはWebソケットクライアントではありません!離れてください!」というテキストが表示されます。にアクセスするlocalhost:8080
と、JavaScriptが有効になっているフォームが表示されますが、[接続]ボタンをクリックしても何も起こりません。の代わりにindex.yaws
ポイントを指定したままにすると、エコーサーバーが接続され、期待どおりに動作します。yaws.hyber.org
localhost:8080
誰かが私が間違っていることについてのヒントを私に与えることができますか(または、代わりに、実用的な例のソースを教えてください)?
erlang - yaws でステートフルを維持する方法
私は状態でいくつかのプロセス(生成)を持っています。
yaws でシンプルなステートフル サービスを維持する方法は? "appmods" erl ソース ファイルで処理する通信を実装する方法は?
更新:簡単なプロセスにしましょう
Web からプロセスにアクセスする最も簡単な (自明: gen_server、yapp を使用しない) 方法は何ですか?
たぶん、gen_server+yapp+yaws / appmods+yaws の最小限の例が必要です。
windows - erlsrv - Windows でサービスを作成できませんでした
次のようなWindowsサービスを作成しようとしていました:
すぐに次のエラーが発生しました。
http://www.erlang.org/doc/man/erlsrv.htmlのドキュメントを読んだ後でも、引数やいくつかのパラメーターを渡す方法にあまり精通していないと思います。
Windows サービスを正常に作成する方法の例を手伝ってくれる人はいますか? サービスが起動したときに多くのアプリケーションを開始し、停止するたびにそれらのアプリケーションを停止するようにしたいと思います。