Jii:構成とスケーリング

YiiとNode.jsのファンであるすべてのKhabrovitesにこんにちは。 長い間、Jiiについての記事はありませんでしたが、作品はまだ立ち止まっておらず、私は何か言いたいことがあります!

この記事では、アプリケーションを構成し、複数のプロセスとしてアプリケーションを起動する方法を見ていきます。









このフレームワークについて初めて耳にする人には、 以前の記事を読むか、サイトにアクセスすることをお勧めします

要するに、

Jiiは、アーキテクチャとAPIがYii 2.0 PHPフレームワークに基づいているフレームワークであり、それを最大限に活用し、JavaScriptの利点を保持しています。


構成



ハブには、それがどのように必要であるか/アプリケーション構成を整理することができるかについての多くの記事が既にありました。 私自身の経験から、構成はアプリケーションの詳細と規模に大きく依存していると言えます。

そのため、Jiiで構成を作成するとき、まず制約とルールのセットではなく、コンストラクターを作成しようとしました。



Jii構成では、環境の名前に加えて、アプリケーションをいくつかの小さなものに分割し、それぞれが特定のタスクを担当できるようにします。 1つはトランスポート(http / comet)を実装でき、もう1つはバックグラウンドで非同期計算を実行できます。3番目は定期的に何かを監視するデーモンなどです。

この分散は通常、大規模なアプリケーション(プロジェクト)でのみ観察されるため、Jiiはプログラマーを単純なアプリケーションを作成するための不必要な抽象化で過負荷にしません。





いくつかの構成例を見てみましょう。各構成例は、前の構成例よりも複雑になります。



ベーシック







環境に分割せずに、追加の構成ファイルを介して構成をオーバーライドする機能を備えた、単一アプリケーションの最も単純な構成。



//   var Jii = require('jii'); require('jii-ar-sql'); //    ,     var custom = require('./config'); //          require('jii-workers') .application(Jii.mergeConfigs( //   { application: { basePath: __dirname, components: { db: { className: 'Jii.sql.mysql.Connection', database: 'site', username: 'site', password: '' } } } }, //   custom ));
      
      





これらすべてをserver.jsファイルに入れて、 ノードserver.jsを実行すると、次のことが起こります。



  1. ネイティブClusterモジュールを使用して、マスターアプリケーション(プロセス)が起動されます。そのコードはjii-workers内にあります。
  2. 別のプロセスのマスターアプリケーションは、上で表示した構成でアプリケーションを起動し、その状態を監視します-死んだ場合、再起動します。
  3. アプリケーションが起動すると、 Jii.application.WebApplicationのインスタンスが作成され、設定が書き込まれます
  4. サービスインターフェースをサポートするコンポーネント(HttpServerなどのstart、stopメソッドがある)の場合、startメソッドが起動されます-アプリケーションは作業を開始します。


完全なgithubコード



標準







環境の名前に応じた、より複雑な構成。複数のアプリケーションがあり、各アプリケーションには複数の重複するワーカーが含まれる場合があります。



 var Jii = require('jii'); require('jii-urlmanager'); require('jii-httpserver'); require('jii-comet'); var custom = require('./config'); require('jii-workers') //    .setEnvironment(custom.environment) //         .application(['http', 'comet'], function (environment, name) { return Jii.mergeConfigs( // Main config require('./app/config/base')(environment), require('./app/config/' + name)(environment), // Custom configuration custom.base || {}, custom[name] || {} ); });
      
      





最も単純な例とは異なり、いくつかのアプリケーション( httpおよびcomet )を作成する必要がありました。 アプリケーション関数への最初のオプション引数としてそれらの名前を設定します。 2番目のパラメーターは構成を渡しましたが、完成したオブジェクトとしてではなく、関数として渡しました。 この関数はすぐに呼び出され(この場合は2回)、最初のパラメーターで指定された環境名とアプリケーション名が引数として渡されます。 一種の構文糖、これ以上。

構成の残りの部分はapp / config / *ファイルで配布され、すべてのコードはgithubで見ることができます。



高度な









さて、構成の拡張形式について簡単に説明します。多くのアプリケーションがあり、すべてがフォルダーとファイルに断片化されています。



 var Jii = require('jii'); var custom = require('./config'); require('jii-workers') .setEnvironment(custom.environment) // Comet server .application('comet', function (environment) { return Jii.mergeConfigs( require('./configuration/comet/main')(environment), custom.comet ); }) // Garbage collector .application('gc', function () { return Jii.mergeConfigs( require('./configuration/gc/main'), custom.gc ); }) // Http and Online applications .application(['http', 'online'], function (environment, name) { var envConfig = {}; try { envConfig = require('./configuration/' + name + '/' + environment.getName()); } catch (e) { } return Jii.mergeConfigs( // Main config require('./configuration/base/main'), require('./configuration/base/' + environment.getName()), require('./configuration/' + name + '/main'), envConfig, // Custom configuration custom.base, custom[name] ); });
      
      





この例では、さまざまなアプリケーションを宣言するために、 アプリケーションメソッドが複数回呼び出されます。 それ以外の点はすべて同じです。

すべてのサンプルコードはここにあります



スケーリング



Node.jsワーカーは1つのプロセッサコアしか占有できないため、通常はプロセスコアの数に応じて複数のワーカーを作成することをお勧めします。 メモリーとCPUの消費量が多い場合、ノードが「固定」されることを考慮すると、この量を少なくとも2倍増やすことをお勧めします。

各アプリケーションのJii構成では、アプリケーションを実行するプロセスの数を指定できます。 スケーリングはClusterによって行われます。 各ワーカーにはインデックスが割り当てられます。これは、異なるポートでサーバーを配布する必要がある場合に便利です。



合計



実際、私が言ったように、多くの構成オプションが存在する可能性があります-アプリケーションごとに異なります。 jii-workersモジュール形式のツールを使用すると、タスクを簡素化できます。

Jii構成は特効薬ではなく、Jiiアプリケーションの作成専用です。



Jiiはオープンソースプロジェクトであることを思い出させてください。だから誰かがその開発に参加してくれたらとても嬉しいです。 affka@affka.ruに書き込みます。



フレームワークサイト-jiiframework.ru

Github-github.com/jiisoft



気に入りましたか? GitHubに星を付けてください! :)






All Articles