私たちは、約20年前から私たちとクライアントに役立つアプリケーションを持っています。かなり良い実績ですが、明らかに一部の地域では年齢を示しています。
製品を次のレベルに引き上げるためのアドバイスと提案を探しています。このアイデアは、10,000行のコードを破棄したり書き換えたりすることなく、いくつかの問題に対処することです。
アプリケーションサーバーサイド(実際には数十のプログラムとCGI)がLinux(CentOS固有)上で実行され、インタラクティブな操作がブラウザー(多くのjavascript/jquery、いくつかのajax呼び出し、主にサーバーサイドのレンダリング)を介して処理されます。サーバー側はほぼすべてCで書かれています。データの取得、投稿、プログラムの起動を処理する独自のフォームエンジンがあります。データベースにはMySQLを使用しています。
アプリケーションは本質的に金融であり、数十万のトランザクションと顧客レコードを処理します。製品の中核はしっかりしています。コアとは、私たちのビジネスロジック、バッチ処理などのことです。それは、インターフェイスと、ツールを再構築する必要がある周辺です。
より詳細なアクセス/権限モデル、APIを介したデータやプロセスへのより良いアクセスを使用でき、これらのコンポーネントを現在のシステムで可能なよりも迅速に開発できる必要があります。
私たちの投資を維持し、壊れていないものを修正しないために、これらの懸念に対処するためにどのような変更を加えることができるかを調査していますが、ほとんどのライブラリとプログラムはCで作成されています。
フロントエンドをNode.jsベースのアプリケーションに置き換えるというアイデアがあります。アプリケーションは最初に、データの読み取りと更新、およびビジネスロジックプロセスのエンドポイント用のAPI(Restベースのjsonデータ)サービスを提供します。また、いくつかのロールベースのアクセス許可モデルを介して、データ(読み取りと書き込み)とプロセスへのアクセスを管理します。
最終的に、既存のインターフェースはこれらのAPIを使用するためにやり直され、おそらく、ソケットIOおよびクライアント側のJavaScriptフレームワークを介して、より多くのクライアント側のレンダリングとより優れた対話性を実現します。
最後に、私の質問:
準備のみの操作の場合、すべてのサーバー側のアクティビティはNode.jsアプリケーションで処理されることを期待しています。ビジネスロジック、おそらくデータベースの書き込みについては、別のプログラムに処理を引き渡すことになると思います。 aysnc/await機能により、パフォーマンスの低下なしにこれが可能になると想定しています。アドオンの統合は可能かもしれませんが、私たちのライブラリはスレッドセーフではないため、有用性が制限される可能性があります。
コメント/アイデア/提案を事前にありがとう。
これは非常に貴重なソフトウェアであり、進化させる素晴らしい計画です。
そのようなシステムが顧客にサービスを提供して機能している場合、あなたが取る書き換え戦略は重要です。既存のアプリケーションを改善することを目標とする場合(別のアプリケーションを構築することではない場合)、それを実行しますプログレッシブ。
あなたはすでに全部を書き直すことはないと言っていましたが、これは良い計画です。しかし、フロントエンドの大規模な書き直しも行わないでください。新しいフロントエンドを段階的に展開します。
重要なアイデアは次のとおりです。現在のソフトウェアは現在のユーザーのために機能し、あなたが気付いていない難しい勝利の知識でいっぱいです。ユーザーのフィードバックを得て適応できるように、穏やかに書き換えます。
それを行うためのパターンがあります:Strangler Fig。
アイデアは、APIを移行することです。エンドポイントごとにそのエンドポイントに取り組むことができます。このアイデアは、エンドユーザーには見えないLegacy APIまたはModern APIへの呼び出しをリダイレクトするファサードを持つことです。同じロジックをフロントエンドにも適用できます(iPortを使用して、まだ移植されていない古いページを埋め込むために、SPA全体を段階的に書き直しました)。
トピックに関するこれらのリソースは役に立ちます:
Node.jsの選択に関しては、あなたの選択です。 Nodeでそのようなものを構築できます。それはあなたにとって最良の選択でしょうか?制約と、求めている利点がよくわかります。開発者が言語に精通していること(自分に合ったものを選んでください)や、言語を選択するときに参加するコミュニティを過小評価しないでください。
Expressは確かにミニマリストであり、IMOを拡張するには、より多くの経験が必要です。しかし、それは非常にうまく機能し、十分に柔軟です!もっと独断的なものを探しているなら、 Sails.js があります。最近の町の人は Nest.js です。これは、チームがよりJavaスタイルのバックエンド(TypeScriptに基づいている)に行きたい場合に適しています。
移行に最適であることを願っています。これはエキサイティングなプロジェクトです。