非常に大規模な10年前のLAMP(Linux、Apache、MySQL、PHP)Webアプリケーションがあり、それは制御不能であり、多数のパッチと数百人のプログラマがいる可能性があるために不十分に記述されています。
書き換えを行う場合、LAMPスタックに代わるものは何ですか? LAMPの背後にある理由の1つは、開発が簡単で安価であることです。これで会社は、新しいシステムにより多くの時間/労力/お金を費やすことができます。 JavaまたはOracleでのC++について考えましたか?企業が使用する一般的な「エンタープライズ」スタックはありますか?
どうもありがとう。
おめでとうございます。あなたは、可能な最もリスクの高いタイプのプロジェクトに着手しました。
完全な書き直し、2番目のシステム、未解決の人々の問題、技術的な方向性の欠如、それを大きくするための前向きな意向-これらのいずれも、正気の人々が反対方向に叫び声を上げる原因となる危険信号です。唯一のボーナスは、現在持っている言語よりも悪い言語を選ぶのが難しいということです。
最初に、大まかな数値を使用してベースラインの期待値を設定する必要があります。平均すると、「エンタープライズソフトウェア開発プロジェクト」の納品には、見積もり時間の200%、見積もり予算の200%がかかり、当初約束されていた機能の50%が提供されます。それらは失敗ではありません-それらは成功です。失敗は非常に一般的であり、機能する成果物がないために組織がプラグを抜くまで、成功と同じように見えます。それは平均です。私に飛び出した赤旗のリストを考えると、ベースラインの期待は、平均を下回るという重大なリスクがあることです。
誇張したかったのに。残念ながら私は違います。
あなたはいくつかのポジティブでそれを打ち消す必要があるでしょう。
まず、プラットフォームです。あなたのためにうまくいくたくさんの受け入れ可能なプラットフォームがあります。 PHP(私は偏見がある-私はそうする))から離れたい場合は、さまざまな環境でパイロットプログラムに取り組み、何が効果的かを確認することを強くお勧めします。次に、重要な利害関係者(開発者を含む!)の間で最高の評価を得たもの。何を選択しても、利害関係者がその選択に満足しているかどうかよりも重要ではありません。
次に、機能セット。 2番目のシステムを構築しています。あなたの最優先事項は、2番目のシステム症候群を回避することです。誰もが現在のシステムで自分が嫌いなことを知っています。誰もが「私が望む」と「もしも」のリストを持っています。個人的にはそれらは見栄えがよく、最初のシステムの経験から情報を得ています。しかし、それらすべてを2番目のシステムに積み重ねると、失敗します。したがって、誰かが機能要求にノーと言うために配置されなければならず、冷酷でなければなりません。 (読み取りThe Mythical Man-Monthは、何が問題だったかを理解しようとしている2番目のシステムの設計者に触発された古典的な本です。)一般的な経験則として、最初のシステムでは経験不足が示され、 3番目のシステムは通常はうまくいきますが、2番目のシステムが失敗する可能性が最も高いです。
第三に、ソフトウェアの見積もり。実行して、歩かないで、ピックアップしますソフトウェア推定:ブラックアートの謎を解くスティーブマッコネルによって、正確な推定を生成する組織の能力を向上させます。非常に優れた組織はほとんどなく、これを改善することは、大規模なプロジェクトに着手する前の最優先事項です。
第4に、「エンタープライズ」ラベルから離れてください。一般に、エンタープライズソフトウェアとは、実際の業務から切り離された役員に販売されるソフトウェアを意味します。したがって、それは優れたマーケティングと時折のみ技術的なメリットを持っています。オラクルはあなたのビジネスを手に入れたいと思っています。彼らは間違いなくあなたに最高のドルを払わせるでしょう。しかし、あなたがそれらから得る特定のものがない限り、彼らは実際にはPostgreSQLが持っていないような技術的に提供できるものはあまりありません。そして、個人的に言えば、私が目にした最大のデータベースはGoogleのMySQLデータベースでした。 Googleがニーズに合わせて拡張できる場合は、お客様のニーズに合わせて拡張できます。 (それで、Googleは、安価なコンピュータの冗長アレイの上に構築された実質的にRAMディスクであったものでそれをバックアップすることができました。そしてGoogleは、ほとんどのデータストレージにMySQLを使用していません。ニーズ。)
幸運を。うまくいけば、私はあなたを怖がらせた。あなたは怖いはずです。これは間違いなくリスクの高いプロジェクトです。しかし、それは不可能ではありません-非常に、非常に危険です。これらのリスクを受け入れ、理解し、積極的に軽減できないことは、失敗を保証するものです。
自問してください理由 LAMPから移行したい。それはスタックの欠陥が原因ですか、それとも元のアプリケーションの周りのプラクティスと設計の欠陥が原因ですか?悪いコードは、アセンブラーから最も宇宙飛行士の建築物まで、あらゆる環境で書くことができます。
現在、私の会社では、Linux、nginx、MySQL、Pythonで非常にスケーラブルな一連のWebサービスを実行しています。最大のハードルは、このスタックのあらゆる側面のスケーラビリティではなく、不十分に記述されたレガシーコードの問題でした。 Javaや.NETでも同じことができます。それを効果的にするためにそのスタックの専門知識を持っている限り、それは本当に問題ではありません。
はい、あなたは問題を抱えています-しかし、解決策は書き直すことではありません!
さて、建設的な方法で実際に問題を解決するためのソリューションです。古いシステムのレイヤーを切り離して交換する必要があることは明らかです。つまり、既存のシステムとの互換性を維持する必要があるということです。これはWebサービスのように聞こえます(C++でも好きな言語で記述できます)。
したがって、システムのどの部分を完全に独立したWebサービスに置き換えることができるかを特定し、メインシステムの複雑さを軽減し始めます。次に、管理しやすいサイズに切り詰めたら、コードベースのリファクタリングを開始し(その陳腐化したWordを使用して申し訳ありません)、無関係な残骸を取り除き、もう少し適切に設計されたものに置き換えます。うまくいけば、もっと多くの変更を確認でき、メインシステムのより大きな部分をより適切に記述されたコードで置き換えると、さらに多くの助けになるでしょう。
そして、それを実行したら、ソリューションである保守可能で拡張可能なシステムが得られる可能性があります。
秘訣は次のとおりです。1。仕様に合わせて適切に設計され、それらの使用方法と機能について文書化された独立したコンポーネント。 2.既存のコードの一部を書き直して、まったく同じように機能するようにしますが、より優れています。つまり、何をすべきかを文書化する必要があります。 3.もう少しドキュメント化します。ドキュメントが気に入ったので、これは言いませんが、システムが過去にどのように取り組んだかについて、一般的に厳密さが欠けていたようです。いくつかのコードをハックし、さらにハックすると、混乱を招きます。ドキュメンテーションと仕様を強制すると、物事を一致させる可能性が大幅に高まります。
失敗に満ちていない、これからのパスはありません-LAMPスタックの最大の利点の1つは、PHPにはlotのライブラリーがあるということです、そしてコードがすでにPHPにある場合は、PHPが必要なすべてをサポートしていることを確信しています。
保守性のない悪いコードはどの言語でも作成できますが、「エンタープライズ」Webの選択肢は基本的にPython、Ruby、C#、Java、またはPHPです。 PHP=から離れることの唯一の利点は、静的に型付けされた言語に移動することかもしれません-それは私が同意できる1つの引数ですが、他のことについては、離れることからの大きな理由はないと思いますからPHP言語として。
まず第一に、Web開発でのC++の使用は非常にニッチであり、検討する価値すらないほどです。 「どの言語を使用すればよいですか?」と質問された場合、答えがnot "C++"であることを100%保証できます。それは、他の人が言ったように、選択肢があります:
Enterprise-y Webアプリケーションの最も一般的な2つの選択肢は、Java(およびそのフレームワークの1つ)とC#/。NET(おそらくグリーンフィールド用のASP.NET MVC)です。開発、ASP.NET Webフォームは、しばらく生産されていたものです。これら2つの間の決定は、多くの場合、優先サーバーOSによって主に駆動されます。Java、Windowsの場合は.NET) 。Java Windowsでは実行できますが、悲しいこともよくあります。Monoを使用してUnixで.NETを実行できますが、ビジネスに賭けることはお勧めしません。
他の人がPythonとRubyについて言及しています。これら2つについての私の個人的な経験はほとんどなく、まったくありません。私の理解は両方に高品質のフレームワークがあるということです。スペクトルのエンタープライズエンド。
PHP手に負えない人を却下した人はすでにバイアスのせいで非難されています。私もバイアスされています-私はPHP手に負えないのであなたはもう絶対に典型的な1つをすでにビルドしましたPHP trainwreck、外に出て別のものをビルドしないでください。
それをすべて述べた、あなたは「非常に大きなWebアプリケーション」について説明します。 「おそらく数百人」のプログラマーが10年以上かけてオールをそれに浸したと述べています。私はあなたがかなりの数のプログラマーがそこで働いていると仮定します。そして、私はさらに、この大きなPHPアプリケーションは彼らが取り組んでいる主要なまたは唯一のものであり、したがって、これらのプログラマの多くまたはほとんどが持っていないことを(おそらく不正確に)仮定しますPHP以外の重要な大規模な経験。
彼らは他のプラットフォームで良い「第二のシステム」を構築するつもりはありません。
このことを行う場合は、使用するプラットフォームを選択して使用する経験豊富な開発者から始める必要があります。上記のPython and Rubyでの個人的な経験はほとんどなく、どれもありません。それらを簡単に学ぶことができ、適切なコードを書くことができると確信しています。しかし、もし私がラーニングエクスペリエンスとして大規模なシステムを使用しようとした場合、交換するシステムと同じぐらい悪く見えるまでに10年もかからない列車事故を生み出すことになるでしょう。
最終的に、会社が2番目のシステムに時間、労力、およびお金を費やす余裕がある場合(そして、10年前のシステムを書き換えると、時間、労力、お金のlotになります)、選択したプラットフォームでの現在の経験が豊富な採用担当者をかなり費やす必要があります。
Joel Spolsky氏によると、ソフトウェア会社が犯す可能性のある1つの最悪の戦略的ミスは、コードを最初から書き直すことでした。
あなたは言う:
多数のパッチと数百人のプログラマがいる可能性があるため、不十分に書かれている
それは理由ではありません。 Joelは次の記事ですべてを説明しています http://www.joelonsoftware.com/articles/fog0000000069.html
それを読んで、あなたがより良いものを作る方法を考えてください。