web-dev-qa-db-ja.com

仮想マシンを使用した開発についての考え

私は新興企業の開発リーダーとして働き、開発にはVMを使用することを提案しました。私は、各開発者がテスト/開発用のVMを備えたデスクトップを持っていることについて話しているのではなく、すべてのVMが管理され、ローカルで、または自宅からリモートでさえ、microPC(ChromeOSの誰か?)コンピューター。

私にとっての利点は、非常にスケーラブルであり、長期的には安価であり、管理が容易であり、ハードウェアを最大限活用できることです。短所については、このセットアップをセットアップ/維持するために誰かが必要になる以外は、特定のショートッパーは思いつきません。

あなたの何人かがあなたの職場で同様の設定をしていて、あなたの意見で重みを付けられるかもしれないことを望んでいました。ありがとう。

51
J_A_X

開発予算の一部として、何を節約したいですか?イプシロンを心配しているようです。開発者のマシンのコストは、開発者をスタッフに留めておくための総コストの5%未満です。したがって、唯一重要な質問は、「開発者の時間を節約できるか」ということです。開発ソフトウェアのインストールとアップグレードに時間を費やす必要がなければ、それは可能です。または、ネットワークがダウンしたり、サーバーがダウンしたりする場合、またはおそらくネット全体の応答性が少しでも不足している場合は、時間がかかる可能性があります。最近の開発は、IDEとのキーストロークごとの対話、または少なくとも非常にインテリジェントなエディターに依存しています。その相互作用を数十ミリ秒も遅らせると、開発者の生産性が損なわれます。開発者がこの新しい作業方法を学ぶには、コストもかかります。開発者ごとに1日でもかかる場合は、新しいデスクトップのコストよりも多くの労力を費やしています。

これらはVMに対する異議ではなく、リモート開発に対する潜在的な異議です。

96
kevin cline

あなたはペニーワイズでポンドバカだと思います。

まず、マシンのコストは、開発者のコ​​ストと比較して些細です。機械のコストを最小化するのではなく、生産性を最大化するように取り組む必要があります。

第二に、待ち時間(帯域幅ではない)は、多くのプログラミングタスク、特にテキスト編集の鍵となります。開発者のマシンで節約する1ドル、1ポンド、1ユーロごとに、少なくとも10をネットワークアップグレードに費やして、生産性の類似性さえも維持します。あなたはどこかにゴミ箱で見つけたペンティアムIIIのそれらとそれら。

また、ターゲットエンドユーザーに期待される環境に少なくとも合理的に近い環境を開発者に使用させることには、大きなメリットがあると私は思います。仕様などの公式のパフォーマンス目標に関係なく、ほとんどのプログラマーは、コードをテストするときのコードの「感じ方」にかなり基づいています。エンドユーザーとはまったく異なる環境を使用している場合、主要な問題を完全に見落としつつ、些細なことに時間を浪費する可能性があります。

サポートなどの観点からは、同種の環境が魅力的であるように魅力的ですが、開発者のマシンにはできるだけ多くの種類を奨励する必要があります。とにかく、開発者が多くのサポートを必要とすることはめったになく、最小限の投資を返済する以上に、異なるグラフィックチップ、CPU、ネットワークアダプターなどで失敗するコードがあることをすぐに知ることができます。

結論:(少なくとも主に)仮想サーバー環境で使用されるを意図したコードを記述している場合、開発者にそれを提供する必要があります。とにかくテストのためにそれをしているなら、それはcan(しかし必ずしもそうとは限らない)開発にも意味があります。同様に、とにかく非常に仕様の厳しいサ​​ーバーとネットワークが必要な場合(または少なくとも必要な場合)、それはmightですでに利用可能なものを使用することでそれを利用することに意味があります。

しかし、ほとんどの典型的な状況では、これは解決するよりも多くの問題を引き起こす可能性があるように思えます。

58
Jerry Coffin

これは、過去の私のアイデアの1つでした。必要なすべてのソフトウェアを備えた高性能サーバーと、リモートデスクトップ経由でサーバーに接続するためにのみ使用される多数の低パフォーマンスデスクトップPCです。

メリットは次のとおりです。

  • 確かなバックアップ。一部の開発者はデスクトップコンピュータを定期的にバックアップしたくない場合があるため、中央のソリューションの方が信頼性が高くなります。
  • すべての開発者にとって、どこからでも作業できる可能性。これは、社内のどのPCからでも作業することを意味します。朝、開発者が静かな労働条件を望んでいるとしましょう。彼は自分の部屋に行き、そこで働く。次に、ペアプログラミングを行うか、より社会的な環境で働きたいと考えています。彼はデスクトップPCをシャットダウンし、10台のコンピューターがある別の部屋に行き、そこから接続します。いいえ、「すべてのアプリをもう一度再読み込みする必要があります」ではありません。

まあ、そこには深刻な問題がいくつかあるので、今後はこのようなものは絶対に使わないと思います。

  • リモートソリューションの特異性。複数のコンピュータ画面を同時に使用して離れた場所で作業するのはどうですか?つまり、簡単ですか?明らかですか?私が毎日使用するショートカットは、離れた場所で作業しているときに有効になりますか?私はちょっと確信が持てません。 Ctrl + Shift + Escを押して、現在実行中のプログラムのリストを表示するとどうなりますか?ああ、それは機能しません。そのため、今は別の方法でそれを覚えている必要があります。

  • パフォーマンスヒット。パフォーマンスがまったく低下しないかどうかはわかりません。また、遅いコンピューターを使用するプログラマーは不幸なプログラマーであることを覚えておいてください。そして、プログラマーを安っぽい状況に不満にさせる会社は、高品質のソフトウェアを決して生産しません。

  • 災害の影響が大きい。ソリューションを冗長サーバーでホストしますか?社内に冗長ネットワークがありますか?ルータがダウンし、冗長性がないとしましょう。これは、すべての開発者が作業できなくなったことを意味します。全然。ローカルにソフトウェアがインストールされていないためです。彼らにはソースコードさえないので、それはサーバー上にあります。つまり、全員が停止し、ルーターが交換されるのを待つだけのために、1時間ごとにそれらすべての人々にお金を払っています。

  • ハードウェアのコスト。それが唯一のサーバーである場合、どれくらいの費用がかかりますか?もし20人の開発者がいるとしたら、64 GBのRAMサーバー上で十分でしょうか?よくわかりません。2つのCPUを備えたクアッドコアソリューションで十分でしょうか?繰り返しますが、そうでない場合、どう思いますか?ある種のクラウド?または、複数のサーバーで動作するスケーラブルなソリューションがありますか?マシンあたりのWindows Server(Windowsを使用している場合)のコストを支払う準備はできていますか?

  • 電気代。完全にリモートで作業する場合は、ローカルで作業している場合とほぼ同じサーバー側の電力量に加えて、ローカルマシンとネットワークによって浪費される電力量を費やすことになります。

  • ライセンス。メリットと問題のどちらにする必要があるのか​​はわかりませんが、この場合のソフトウェアライセンスのコストははるかに高くなると思います。

繰り返しになりますが、管理、サポート、導入、保守のすべてのコストを考慮してください。このようなカスタムソリューションを使用すると、何かが失敗するたびに、すべての開発者がNOPを実行して作業を続行できるようになるのを数えずに、簡単に巨大になる可能性があります。

19

開発者マシンとしてオンデマンドのAmazon ec2インスタンスを使用します。これはコストとは関係ありません。複数のプロジェクトに取り組んでいる「開発者のプール」があり、プロジェクト間をすばやく移動する機能が必要です。

一般に、VMは初期セットアップ時間を節約します。しかし、長期的には、生産性の損失のために時間を浪費します。開発者のコ​​ストはマシンのコストよりはるかに多いため、コストは軸ではありません。

生産性コストには、VMイメージ(数分))の開始にかかる時間、応答性の悪さ、リソース/メモリの制約が含まれます。これらは最初はそれほど多くありませんが、時間が経つと煩わしくなります。

私たちのプロジェクトの1つでは、コードをリファクタリングして、「コードをダウンロードしてMavenを実行する」ための初期設定を簡素化しました。この変更により、新しい開発者がプロ​​ジェクトに取り掛かることは簡単でした-そして今、誰もAmazon VM画像を使用していません。他のプロジェクトでもこれをエミュレートしようとしていますが、それまで時間がかかります。それまでは、ec2イメージがあります。

18

仮想マシンでの開発は非常にうまく機能しますが、正しく行われた場合のみです。

  • VMを使用すると、開発者ごとに1台ではなく、チーム全体で1台のコンピューターを使用できるからといって、それが良いアイデアであるとは限りません
  • 再起動では、24時間の応答時間でサポートチケットを開く必要はありません。
  • 開発VMは、開発者から5000マイル離れたデータセンターに配置しないでください。
  • VMは開発者によって管理されている可能性があるためサポートされていませんが、VMがソース管理などのネットワークサービスにアクセスできないことを意味するわけではありません。
  • リモートデスクトップ接続は標準であり、入力した引用符をウムラウトに変換するカスタムの「高セキュリティ」アプレットではありません。
  • 新しいVMまたは既存のものを再構築するには、数週間ではなく数分かかるはずです

私はこれらすべての問題を見てきましたが、特にそれらとの作業を楽しんでいません。ただし、私はVMセットアップを自宅で使用しています。ローカルインストールよりも高速に実行され、異なるプロジェクト用の個別の環境や、環境が不安定になった場合の高速再構築などを可能にします。

12
Tom Clarkson

私はVMを使用していますが、メインプロジェクトにはお勧めしません。

開発にVMを使用する理由は、レガシープロジェクト(VB6、.NET 1.1など)をサポートする必要があり、VS2003/2005/vb6/etcをインストールすることによってメインマシンをダーティにしたくないためです。 ...問題なく動作しますが、あちこちに断続的な問題があります。

さらに、相互作用が遅い、VMの起動/シャットダウンに時間がかかる、ネイティブUI効果がない(Win7のAeroなど)など。

あなたがお金の面で節約しようとしているものは何でも、あなたはあなたがチームに課そうとしている面倒によって、あなたは無駄になるでしょう。さらに、ここで誰かが述べたように、マルチスクリーンのサポートはありません。できるだけ生産性を上げるには、少なくとも3つの画面が必要です。

9
AngryHacker

開発の#1ルールは、開発者を満足させることです。リモートVMを使用することはほぼ不可能です。マルチモニターのサポートはむらがあり、ネットワークのラグとブリップは厄介で、コスト削減は一般的に最小限です。

VMで作業することは確かですが、ローカルVMも考慮に入れて、物理コンピューターを途方もなく高速な獣にします。

私は100%在宅勤務しており、個人のISPとVPNの間(高い信頼性にもかかわらず)には、オフラインモードで作業できなかった場合に気が動転するほど十分なメッセージがあります。

私は通常、さまざまなVirtualBoxイメージを起動して、それらから作業します。ローカルで新しいものを必要とする場合でも、ネットワーク経由で数百MBをコピーするのに時間はかかりません。

8
Jordan

私のチームは、「低速PC /高速VMサーバー)構成を正常に実装しました。20人の開発者のチームの場合、8プロセッサ、256GB RAMサーバーが接続されていましたファイバー経由で非常に高速なSANに接続します。コストは高くなりますが、各開発者に同じようなパフォーマンスのワークステーションを提供するよりも安価です。小規模なチーム(4人の開発者)にとって、規模の経済が実現して実際に何でも節約できるかどうかはわかりません。

5

開発用のVMは一見の価値がありますが、金銭的なコストが間違ったの理由です。

これは、Marc HolmesのExpert .NET Delivery with NAnt&CruiseControl.netで簡単に説明されました-簡単に言うと、VMは、開発者の特定の構成に依存することから作業のあらゆる側面を妨げることです。すべてのプロジェクトの開始時に、そして実際に特定の必要がない限り、あなたはVMツール、それはキックし続けません。これは、あなたが行った変更があなたのマシン以外のマシンで壊れる可能性を最小限に抑えます。開発者はおもちゃを取り除かれると泣くかもしれません-しかし、結局、ツールへの依存はあなたができる弱点であり、あなたができることすべてですクリーンな環境で直感的にやらないと匂いがしません。

上記の引数を必ずしも信じないことに注意してください。私はそれらを理解しており、ある程度整合していますが、議論を生み出すために議論のために作成しています。

5
Tom W

潜在的な欠点

  • VMホストがダウンした場合...あなたはallがうんざりしています。これまでに20人のチームがいた場合、「GAH!ホストは応答しません! ? "一斉に...面白くない。
  • スナップショットを許可している場合...それらはすぐにリソースを消費します。 20人* 10〜20枚のスナップショットは、それぞれ大量のHDDスペースを作成します(または、少なくとも問題を引き起こすのに十分なほど)。
  • ホストでのリソースの使用に問題が発生した場合も、everyoneに問題が発生します。

IME、それは良い解決策であり、機能しますが、ホストに適切なハードウェアが必要であり、悪いことが起こった場合、それらは誰にでも起こります。

4
Steven Evers

これはJoelテストの最も重要な基準の1つに失敗します。

私はすべての開発者が少なくともi3以上のラップトップまたはデスクトップを使用していることを確認しますRAM.

8GBは私が努力しているものです。

これにより、生産性が向上し、サーバーの保守に費用がかかる代わりに、ローカルマシンで実際にVirtual Boxを実行して開発とテストを行うことができます。 Virtual Boxのインストールクレイジーなものをスナップショットし、さまざまなブラウザーとインストーラーをテストして、「IT」サービスに連絡する必要なく、すべてを数秒で既知の良好な構成に戻すことができます。

開発者は、社内で最高速のマシンを必要とし、ローカルマシンでRAMとroot権限が最も多く必要です。ストーリーの終わりです。

4
user7519

ローカルVM(ローカルPCで実行されている)とリモートVMの両方を開発する前に、VMの開発に携わってきました。ローカルのものは、リモートのものよりもmuchで作業するのに適していました。

RDPで接続していたリモートVMでは、すべてのキーストロークとアクションの間にわずかな遅れがありました。このような条件下で短時間で開発することは可能ですが、日中は非常にイライラしました。

LinuxマシンでFlash Builderを実行する必要があったため、私はローカルでVMWare上でVM=の下で幸せに開発しました。十分なメモリがある限り、それは非常に満足しました-かなり使いやすかったです。

4
prunge

私たちはリモートマシンに対してそれを行い、それはかなりうまくいきます。ほとんどの場合、自宅で作業することはありません(通常、あちこちで緊急の修理を行う場合のみ)。オフィスの高速デスクトップマシンにリモート接続された、かなりローエンドのネットブックを使用します。それらは確かにまだ遅いです(おそらく何よりもネットワークによって制限されています)が、時々短いタスクで動作します。ただし、VMは、最高のハードウェアであるIMHOを使用しても少し気が散るほどの遅延を引き起こす可能性があるため、常勤の場合は実際には受け入れられません。

3

私の最後の仕事で、私たちはそれを正確に行いました:

すべての開発者がアカウントを持っているWindowsターミナルサーバーを使用しました。開発者には通常のPCがまだありましたが(既にそこにあったため)、PCはRDPクライアントのみを実行しました。

Java開発のため、Javaコンパイラ+ IDE(主にEclipse))、およびWebブラウザを使用しました。 DBクエリツール、バージョン管理クライアント、および場合によってはOffice SW(この場合はOpenOffice.org)。

実際に問題が発生することはなく、パフォーマンスはかなりまともでした。

唯一の実際の問題は、1つのシステムを共有しているため、状況によっては他のユーザーを混乱させないように注意する必要があることです。 IT運用でサーバー上で大きなファイルのコピーやバックアップの実行が必要になると、全員のパフォーマンスが低下しました。これを特定して解決したとき(優先度を低くしてコピーするか、一晩で)、すべてがうまく機能しました。

したがって、注意点は、できるだけ早くパフォーマンスを評価し、それに応じてハードウェアとその使用を計画することです。

2
sleske

TL; DR:複数のジョブで実行してきたので、今はそれを好みます。

コストは、注目するべき間違った理由です。ここにいくつかの良いものがあります。

理由

  • 異なる環境(開発、テスト、本番)におけるプラットフォームの一貫性。
    • 理由:異なる環境でのプラットフォームの違いによる欠陥ベクトル、欠陥を完全に排除します。
  • アップグレードなどのシステム変更を開発VMで最初に実行し、検証、ロールアップしてテストし、検証して、本番環境に導入できます。開発(およびテスト)vmsを使用すると、はるかに簡単です。
    • 理由:コントロール。スナップショット、ロールバック、デルタの特定、1つのサーバーでの変更、およびvmの複製などで成功を伝えることができます
  • 開発するシステムが安全なネットワークでのみ利用できる場合があります。または、ソフトウェアを実行するサーバーのアクセスが制限されているか、ネットワークの特性が異なる場合があります。
    • 理由:開発VMは、ロックされたシステムまたはサービスにアクセスできるVLAN開発サーバーはテストサーバーと実稼働サーバーと同じ制限付きアクセスを持っています。ネットワーク特性またはアクセスできないアクセスの要件を誤ってコーディングする問題はありません。

課題

特にゲートウェイまたはジャンプサーバーを経由する必要がある場合、最大の課題はリモート開発です。これは、特に開発者が十分に丸められていない場合(システムエンジニアリングに関する知識、ネットワークに関する知識などがある場合)は困難になります。

リモート開発には多くのバリエーションがありますが、通常は2つの主要な違いに要約されます。

  • リモート環境で開発ツールを実行し、RDPクライアント、リモートX11クライアントなどのプロトコルを使用します。
  • 開発ツールをローカルで実行し、プロトコルを使用してリモートサーバーで透過的に同期または実行します。多くの場合、トランスポート層としてsshを使用します。

ツール

リモート開発に役立つツールがあり、それを容易にするIDEがあります。リモート開発がどの程度可能かを調査する必要があります。多くの場合、コードが開発されているのと同じサーバーで実行する必要があります。ただし、他のツールもあります。

  • Secure Shell:成功するリモート開発のセットアップのほとんどは、パスワードなしのログイン(キー認証を使用)、透過的なマルチホップ(ジャンプサーバーの問題を解決)、およびその他の構成オプションを使用して、応答時間を改善するsshを大幅に使用します。注:SSHのOpenSSH以外の実装を使用すると、常に問題が発生します。
  • GNU Screen/TMUX:端末マルチプレクサ。 Screenは彼らの祖父であり、現在も順調に進んでいますが、ほとんどの人がTMUXに切り替え始めた(あるいは始めた)と思います。
  • Vim/Emacs:古いガードですが、どちらもさまざまな方法でリモート開発に最適です。それはVimなので必要なのはシェルだけですが、Emacsはローカルで実行してリモート開発にTRAMPを使用できます。
2
dietbuddha

ハードウェアは安く、プログラマーは高額です。

なぜ開発者に遅い開発マシンを与えることによってプログラマーを苛立たせたいのですか?ハードウェアをアップグレードするコストは、それらが得るパフォーマンス上の利点と比較して見劣りします。

より良い機械を求めてください。少なくとも4 GBのRAMを要求してください。さらに2 GBのタブレットを追加すると、1週間も経たないうちに収益が戻ってきます。

1
Carra

少し異なる方法で、これらの遅いマシンを使用するコストを強調するスプレッドシートをマネージャー/会計士に渡しましたか? VMソリューション(正しく行われなければ、簡単ではない)は、開発者と企業を同じ立場に置くだけかもしれないことを指摘します。

1
Martijn Verburg

デュアルスクリーンのサポートの欠如は、常に取引を殺すものでした。 1つの画面で大規模な開発作業を行うことは想像できません。

現在、それらはテスト/展開/いじくりのために揺るぎないので、彼らがスタックから落ちるべきではないと私は思います。

1
Wyatt Barnett

これは、VMwareインストールに対する管理能力に依存します。優先度の低いサブプールに入れられた場合、他のサブプールのアクティビティに応じてマシンが遅くなります。

1
NickJ

他の人が述べたように、それは本当にVMデスクトップで解決しようとしている問題に依存しており、その問題を解決することの利点と欠点を比較するVM環境が発生します。

私たちは、すべてのオンショア開発者が従来の物理マシンを持っているが、オフショア開発者(現在、小さなアウトソーシング会社と協力している)が仮想デスクトップを使用するハイブリッド環境に移行しています。リモートデスクトップで解決しようとしている問題は、セキュリティとパフォーマンスに関連しています。仮想環境は明らかにセキュリティの観点からより優れた制御を提供し、パフォーマンスのために完全なソースコードではなく「変更されたピクセル」のみを転送し、プロキシサーバーなどを実装する必要があります。

これが正しい方法かどうかはまだわかりませんが、私たちが向かっているところです。

0
Ted

私はあなたがリモートVM=ソリューションを使いたくないと思います。ネットワーク接続がボトルネックになり、高速接続であっても、それはフラストレーションを引き起こすのに十分である可能性があります。私たちは離れています。この手法からローカル開発環境の使用まで。

私たちはiMacで開発しています。これは本当に素晴らしいことですが、私たちのWebアプリケーションはProductionのLinux環境で実行されています。これの問題は、結局、Linuxでのみ発生し、トラブルシューティングが困難になる可能性があるという問題に遭遇する可能性があることです。ここで仮想マシンの威力が発揮されます。しかし、VM 100%の時間を使用するという考えさえ好きではありません。

私は最近、Vagrant(http://vagrantup.com/docs/getting-started/why.html)とChefについて学び、VirtualBoxを非常に簡単に操作できるようにしました。 Vagrantは、VM必要なときに簡単に起動し、VM不要なときに破棄する機能を提供します。私のMacを使用した開発。コードをテストする準備ができたら、VMを起動してテストし、必要な間だけ保持します。Vagrantまた、VMを同僚と簡単に共有できるため、全員が同じ環境で作業していることを確認できます。

Vagrantをチェックアウトして、VMの開発と操作に関して少なくとも利用可能なオプションを知っておくことをお勧めします。

0
Andrew

RAID10に50個のSSDディスクを備えたメインフレームがあり、そのメインフレームで3〜4台のマシンのみを使用している場合、それは機能する可能性があります。

それ以外の場合、それらは遅延し、実際には遅延します(まれに、スナップショットがそれを相殺する場合があります)。

0
Coder

私は5台のマシンに関するレガシープロジェクトに取り組んでいます。各マシンは計算パイプラインで役割を持っています(マシン1はマシン2にリクエストを送信し、次にマシン3にリクエストを送信します)。ただし、仮想マシンに設定を配置することで、時間を大幅に節約できました。1.開発者が遅延していたため、テストを設計に組み込む時間がなかったため、システムをデバッグできませんでした。 2.配置されているセットアップが多すぎて、グループに配置するのに時間を費やす必要がありました。

一度に多くのプロジェクトに取り組んでいるので、今はそれを使用しています。私が現在抱えている主な問題は次のとおりです。1. VMは、維持するのに時間がかかりすぎています。 2. VMが実行するために大量のメモリを消費している

このため、注文のためにVMを使用しようとすると、VMが使いにくくなります。 1つのメインマシンにメールとテキストを保存し、廃止されたVMで開発します。コストをかけずに、あなたの人生をきちんと清潔に保ちます。

0
Henry Aloni

画面共有を使用して、VPN経由でラップトップから接続できる適切なデスクトップマシンをオフィスに持っています。

それは時間外サポートインシデントと時々強制的なリモート作業のために動作します。 2台目のマシンで完全に構成された環境を維持するよりも、またはWANを介してデータセンターへの低遅延を必要とするものを開発するよりも確かに優れています。

ただし、その方法で長期間作業するのはイライラします。私は時々、私を家に留めていたものが邪魔にならなくなったときに、その日の後半に働きに駆り出されました。

レイテンシと画面の領域は、私にとって2つのキラーです。

0
Bill Michell