私は、Asteriskダイヤルプランから呼び出されるPerlを使用して複数のAGIを作成しています。私は数多くの同時呼び出しを受けることを期待しているので、それらの負荷を分散する方法が必要です。 AGIの代わりにFastAGIを使用するように勧められました。問題は、私のAGIが1台だけでなく多くのサーバに分散され、私のエントリーポイントが必要だということです。アスタリスクは、そのアベイラビリティに基づいて、アジスが存在するサーバ間でコールを送出します。ですから、FastAGIアプリケーションに複数のIPアドレスを1つではなく提供することを考えました。出来ますか?FastAGIの負荷を分散するにはどうしたらいいですか?
答えて
(つまりFastAGIを呼び出すほぼ600アスタリスクチャンネルですので、24個のE1の全てやっFastAGI呼び出し、ピークは約80%である)私はFastAGIを使用して大規模なIVRの実装を持っています。私はロードバランシングを行う簡単な方法は見つけられませんでしたが、私のケースでは、FastAGIの呼び出しが異なります.1つはコールの開始時にデータベース内のユーザーを検証し、もう1つはユーザーの残高またはそのほとんど最近のトランザクション、もう1つはトランザクションを実行します。
だから何私がやったことは1台のサーバー上で一つのアプリケーションにすべての検証と単純なクエリを送信し、すべてのトランザクションは、別のサーバー上の別のアプリケーションへの呼び出しました。あなたはzaptel/dahdiチャンネル上の着信コールの多くを持っている場合
のロードバランシングを行うには、粗な方法は、チャンネルごとに異なるグループを使用することです。たとえば、2台のFastAGIサーバーと4台のE1の受信コールがあるとします。グループg1に2つのE1を、グループg2に2つのE1を設定できます。あなたはこのようFastAGI呼び出すあなたのダイヤルプランに続いて
[globals] serverg1=ip_of_server1 serverg2=ip_of_server2
:その後、あなたは、このようなグローバル変数を宣言ip_of_server1に解決されますserverg1に解決され、グループG1に属するチャンネルで
AGI(agi://${server${CHANNEL(callgroup)}}/some_action)
。グループg2に属するチャネルでは、CHANNEL(コールグループ)がg2に解決され、$ {serverg2}がip_of_server2に解決されます。
通常の通話は1つのスパンに着信を開始し、その後、別のため、それはとても一つのサーバがより多くの仕事を取得するなど、最善の解決策ではないのですが、それは何か。
...私たちはFastAGI負荷分散ゲートウェイ、全く悪くないアイデアを書かなければならないだろうと思い、実際のロード・バランシングを取得するにはMehhh ...何かを負荷分散するために適用される同じ構文を使用しますウェブページのような要求。
1つの方法は、DNSでラウンドロビンを行うことです。あなたはvru1.example.com 10.0.1.100およびvru2.example.com 10.0.1.101を持っているのであれば、あなたのようなDNSに2つのエントリを入れて...
fastagi.example.com 10.0.1.100
fastagi.example .com 10.0.1.101
...ダイヤルプランのagi(agi://fastagi.example.com/youagi)は、理論上は10.0.1.100と10.0.1.101の間で交互に表示する必要があります。また、必要な数のホストを追加できます。
もう1つの方法は、ここで説明するにはあまりにも複雑すぎることですが、HAProxyのようなプロキシツールは、複数のサーバー間をルーティングできる必要があります。メンテナンスのために現在の負荷に基づいて均等に分散するような、より高度なバランスをとることができます。
すべてのTCPリバースプロキシがこのトリックを行います。HAProxyは1であり、nginxであり、TCP moduleである。
私は、この非常に特定の問題に対処するためにnode.js(nodast)を使用して独自のFastAGIプロキシを作成しました。これは、FastAGIプロトコルをSSLで実行し、AGI要求
また、プロキシ設定は基本的にjavascriptなので、実際に面白い方法で実際に負荷を分散することができます。
サンプルの設定は以下の通りになりませんでしょう:
var config = {
listen : 9090,
upstreams : {
test : 'localhost:4573',
foobar : 'foobar.com:4573'
},
routes : {
'agi://(.*):([0-9]*)/(.*)' : function() {
if (this.$callerid === 'unknown') {
return ('agi://foobar/script/' + this.$3);
} else {
return ('agi://foobar/script/' + this.$3 + '?callerid' + this.$callerid);
}
},
'.*' : function() {
return ('agi://test/');
},
'agi://192.168.129.170:9090/' : 'agi://test/'
}
};
exports.config = config;
- 1. 負荷分散サーバー
- 2. 負荷分散ソートアルゴリズム
- 3. ケトル - 負荷分散
- 4. フェールオーバー負荷分散
- 5. LoadRunnerの負荷分散
- 6. ドッカーの負荷分散バランス
- 7. リリーフトラフィックの負荷分散
- 8. 負荷分散:フロントエンドルーティングはサーバーの負荷を軽減しますか?
- 9. spring cloudのfeignで負荷分散ルールを調整するにはどうすればいいですか
- 10. クラウドコンピューティングの負荷分散で最適なアルゴリズムは何ですか?どうして?
- 11. Asp.net負荷分散サーバーエラー
- 12. Apache mod_jk負荷分散グラスフィッシングクラスタインスタンス
- 13. Kubernetes UDP負荷分散サービス
- 14. ネットワーク負荷分散サーバー
- 15. HAProxy負荷分散TCPトラフィック
- 16. 負荷分散wso2 IS
- 17. OrientDB 2.2.4負荷分散
- 18. どのようにTCPトラフィックの負荷を分散しますか?
- 19. DBテーブルを分割して負荷を分散しますか?
- 20. HTTP負荷分散用のメッセージバスを探しています
- 21. コンシューマグループ負荷分散されたリーダー
- 22. ウサギmqによる負荷分散オプション
- 23. ファームからWebフロントエンドサーバーを削除する(負荷分散)
- 24. JMeterでのトランザクションの負荷分散
- 25. Beanstalkでサーバーの負荷分散を行います
- 26. EC2サーバーの負荷分散方法は?
- 27. RabbitMQクラスタの負荷分散方法は?
- 28. Mesos-dnsは負荷分散を提供しますか?
- 29. Javascriptで負荷分散ドメインxml
- 30. GCPの負荷分散とは何ですか?
は良いが。クライアント(つまりアスタリスク)はDNS要求をキャッシュする可能性が最も高く、したがって常に同じIPを繰り返し使用します。短いTTLであっても。 – pdeschen