TLに、理解されるであろう。
ここでは、データ処理をマイクロサービスに移行する際の私の話をご覧ください。https://www.youtube.com/watch?v=COzkPkHZMG8それでもまだそれが悪いと感じる場合は、代わりに(推奨されていない)アプローチを提案する下部に飛びます。
なぜこれが
良いことです私たちは事、これが今後のより良い解決策であると、なぜ私はモノリシックなアプローチを取ってからあなたを落胆したい理由をウォークスルーする分を見てみましょう。結局のところ、私は推奨しない代替案を提案しますが、うまくいくはずです。
を使用すると、ほとんどの企業が生産に開発者のノートパソコンからのバッチ機能を提供するために持っているプロセスを考える場合モノリス
を壊し、それは一般的に不定期のリリースと遅いプロセスです。プロセスは遅く、コードが必要とする複数のグループ(開発、外部QAからのもの、可能であれば変更管理プロセスのもの、最終的にコードを展開するためのいくつかのタイプのオペレーションチーム)があるかもしれません。通常、そのプロセスを通過する必要のあるコード部分が小さくなればなるほど、そのプロセスをより簡単に行うことができます。
この例では、50個のバッチジョブを含むシステムの場合、1つを変更するには、すべてジョブでそのプロセスを実行する必要があります。これを打破すると、ジョブを個別に変更して展開できるという点で、実際には保守が簡単になります。開発者は、代わりにバッチジョブに集中する必要があります。
ユーバーの瓶
への移行、それにパッケージのすべてのあなたの仕事を持つ単一のWARファイルからの移動のもう一つの利点は柔軟性です。どのようなインフラストラクチャでも、これらのジョブを実行できます。 java -jar foo.jar
コマンドを使用して、ローカルまたはベアメタルで実行したいですか?頑張れ。 cf push
経由でCloudFoundryで実行したいですか?あなたは賭ける。アプリをドッキングしてKubernetesで実行したいですか?あなたはできる!インフラストラクチャは環境ごとに変わる可能性があるため、あなたは同じようなことをすることができますが、それはより微妙です。 überジャーの場合、保証する必要があるのはJavaバージョンだけです。
また、アーティファクト管理の問題もよく解決されています。 MavenリポジトリへのJARファイルのプッシュは、Java環境全体で十分に検証されている簡単なプロセスです。 WARファイルを管理する方法は実際にはありません。それらをMavenリポジトリにプッシュできますが、それは理想的ではありません。 überジャーに移動することで、リリースプロセスはすべてのジョブ(および一般的なすべてのアプリケーション)で非常に標準化されます。
最後に、über瓶に移動することはそれほど難しくありません。あなたの仕事がうまく定義されていると仮定すると、実際にはパッケージングの運動にすぎません。そうでない場合は、最初の段階でモジュラー化されるように、健全なリストラを行う良い機会です(優れたエンジニアリング実務)。
別のアプローチ
私はこの方法はお勧めしませ DO と言って、ここでオフを開始します。しかし、それは動作するはずです。
各ジョブに1つの瓶ジャーを作成する代わりに、50個のジョブがすべて入った瓶ジャーを作成します。実行時に実行するジョブを決定するために環境変数を調べ、起動時に自動的にジョブを実行するようにSpring起動機能をオフにする独自のCommandLineRunner
を作成する必要があります。
そこから、50個のタスクをSpring Cloud Data Flow内の50のタスク定義で構成します。それぞれが実行するジョブを示す環境変数を渡します。そこから、50のジョブのそれぞれを独立して実行/監視することができますが、依然としてモノリシックのアーティファクトが得られます。
返信ありがとう、マイクロサービスのアプローチは素晴らしいです。 しかし、同じJARファイル内に複数のジョブをパッケージ化する柔軟性があり、Cloud Dashboardとは別に起動可能ですか?ユースケースがある可能性があります。たとえば、ジョブが小さく、別のジャーがオーバーヘッドになる可能性があります。 私たちの使用例は、DB2からCassandraに移行しており、約50の表があります。計画は、1つのテーブルに1つのジョブを書くことで、合計50のジョブです。移行が完了すると、それらのジョブの90%は使用されません。だから、私たちの考えは、多くの瓶がオーバーヘッドであり、通常のモノリシックな方法でパッケージを作ることです。 – praveen
ジョブごとに1つのテーブルを作成する場合は、構成を使用して各テーブルを処理するのに十分なスマートなジョブを1つ作成してください。これは、配備の問題よりもデザイン上の問題のように聞こえます。 –
こんにちはMichael、 バッチ管理では、UIからのジョブとテーブルの移行を容易に追跡/開始できるように、各テーブル(同じリーダー/ライター、スコープ済みのジョブ/ステップ)でジョブを作成したかったのです。 あなたが示唆したように、構成を介して複数のテーブル移行を処理できるスマートジョブを再考しました。また、各テーブルに1つのタスク定義を追加することを計画していますので、ここではタスク定義レベルでの移行を区別します。 ご支援いただきありがとうございます:) – praveen