5

Hello to All

私はいくつかのキャッシュされたデータ(たとえばMemcacheに保存されている)を使用する必要があるPHPWebサイトを持っています。データは、Webサービスからデータをフェッチするデーモンによってキャッシュに保存する必要があり、一部はMySQLサーバーにも保存する必要があります。

デーモンは次のことを行う必要があります。

  1. 外国為替レートを取得し、それらを解析して、データベースと、別々のマシンの2つの別々のmemcacheに保存します。
  2. 財務インデックスを取得し、個別のmemcacheに保存します。
  3. 大きなXMLデータをフェッチし、2つの別々のmemcacheに保存します。

私はこれらのデーモンをC/C ++ / Perl / PHP/Pythonで書くことができます。

これらのデーモンを実装するために、どの言語/スクリプトを選択するかを決定する必要があります。これにPHPを使用する利点は、Webサイトアプリケーション自体で使用されるAPIを使用できることです。もう1つの利点は、PHPが簡単で誰もが知っているので、これらのデーモンの保守に縛られることはありませんが、一方でPHPは低速で、はるかに多くのリソースを消費することです。

PHP以外の言語を使用することの主な欠点は、C / C ++/Perlで記述されたコードを維持するのが難しいことです。最近では、C / C ++/Perlを使用してこの種のタスクを実行することは一般的ではないと思います。私はそれを言うのは間違っていますか?

この場合、私に何をすることをお勧めしますか?

4

5 に答える 5

4

単純さ/コードの再利用のための最良の選択はおそらくPHPでしょう。

PEARシステムデーモン
phpでデーモンを作成します

編集
私が知る限り、データを渡すだけなので、パフォーマンスについて心配する必要はありません。また、リソースの使用については、max_memoryが不足しないように注意してください(おそらくストリーミングまたは十分に構成することによって)。時間がかかりすぎる操作を中止してログに記録します。SQL操作が失敗した場合などに、ループでデータベースに再接続します。

注意事項
デーモンのプログラミングには注意が必要であり、多くのことがうまくいかない可能性があります。すべての障害点を考慮に入れてください。

また、PerlはPHPよりもデーモンに関してはるかに精通していることに注意してください。パフォーマンス(データの受け渡し)は問題ではなく、デーモンプログラミングはそれだけで十分難しいため、c / c ++を省略しました。なぜ、メモリリーク、セグフォールトなどの心配を追加するのですか?

于 2011-01-08T20:59:34.187 に答える
4

PerlとPythonは、そのようなスクリプトを書くためのデフォルトの答えです。しかし、優れたコードを作成する場合、どの言語を使用するかは(それほど)重要ではありません。さらに重要なことは、失敗したときにスクリプトをどのように処理するかということです。

長期的には、スクリプトが恣意的な理由で失敗することはめったにない場合があります。また、スクリプトは通常は適切に機能し、どこで問題が発生したかを見つけるのが難しいため、スクリプトをデバッグする価値がない場合があります。

私はあなたがしているのと同じ種類のことをしているperlスクリプトをほとんど持っていません。私にとってトリッキーな部分は、ライブストリーミングデータのチャンクを見逃したくなかったので、スクリプトが長時間失敗しないようにすることでした。

そしてそのために私はmonitを使用しました。素晴らしいツール。

于 2011-01-09T03:27:15.847 に答える
3

ベストプラクティスは、あなたが最もよく知っているテクノロジーを使用することです。あなたはするであろう:

  • ソリューションをより迅速に実装する
  • 発生した問題をより適切にデバッグできるようになります
  • 作業の一部をオフロードできるライブラリをより簡単に評価(またはそれらについて知ることさえ)
  • コードの保守と拡張に時間をかけます

現実的には、実際に実際のパフォーマンス要件がない限り、速度とリソースの使用量は比較的重要ではありません。

于 2011-01-09T04:02:52.240 に答える
2

短い: 私はPythonを使用します。

大きい: 私はCLIモードでPHPを試しましたが、確かに悪いPHPライブラリ、またはWebリクエストモードで高速に死ぬ以外のことは一度もなかったPHPライブラリが原因で、多くのメモリリークが発生しました(私はたとえば、PDOで疑わしい)。

私が最近真剣からのコードの一部を見たPythonの世界ではそれPythonデーモンとしての素晴らしいnagiosの書き直しであり、非常に賢いです。http://www.shinken-monitoring.org/the-global-architecture/&http://www.shinken-monitoring.org/wiki/official/development-hackingcodeを参照してくださいこれは監視ツールであるため、いくつかのデーモンがタスクを繰り返すための非常に優れたアイデアを確かに見つけることができます。

さて、私は提案をすることができますか?データフェッチタスクのスケジューラとしてShinkenまたはCentreonを使用してみませんか?(そして、おそらくすぐに、nagiosエンジンの代わりに真剣エンジンを搭載したCentreon、私は願っています)?これは、外部データの変更、フェッチの問題などを検出するのに役立ちます。

次に、実行する必要のあるタスク(データのフェッチ、データの変換、データの保存など)の場合、これはETLの仕事です。優れたオープンソースツールの1つは、Talend ETL(Java)です。Talendにはいくつかのスケジューリングおよび監視ツールがありますが、オープンソース(ライセンスの支払いが必要な種類のオープンソース)はありません。しかし、タスク用にNagiosのような外部スケジューラーを追加するのは簡単なはずです(私は願っています)。memcachedがtalendETLのストレージエンジンとして利用可能であることを確認するか、プラグインをコーディングする必要があります。

したがって、これは、言語の代わりに、ツールについて考える必要があると言うことです。想定できる複雑さに応じて、各ツールは独自の複雑さを追加します。ただし、すべてを最初から再構築したい場合は、Pythonが高速で効率的です。

于 2011-01-09T00:18:26.713 に答える
0

アプリケーションの他の部分が記述されているのと同じ言語を使用する必要があります。そうすることで、コードと開発者のスキルをより簡単に再利用できます。

ただし、他の人が指摘しているように、PHPは、リークしやすい方法でメモリを処理するため、長時間実行されるデーモンには適していません。

したがって、これらのタスクは定期的に(再)開始される「cron」ジョブで実行しますが、意図したよりも多くのタスクのコピーを実行しないようにしてください。

cronジョブは、デーモンよりも堅牢です。

  • 失敗して終了したcronジョブは、次にスケジュールされたときに再開されます
  • メモリリークを含むcronジョブは、実行を終了するとメモリを解放します
  • ソフトウェア(ライブラリなど)が更新されたcronジョブは、特別な作業を行わなくても、後続の実行で新しいバージョンを自動的に取得します。
  • 「cron」は、運用チームがそれを制御するために使用できる起動/シャットダウンスクリプトをすでに提供しているため、これらを書き直す必要はありません。Opsチームは、「cron」の操作方法をすでに知っており、一時的に無効にしたい場合はcrontabエントリをコメントアウトする方法を知っています。
于 2011-01-09T15:13:57.170 に答える