現在、私が使用しているPCにはi7-3820
4コア、8ハイパースレッドプロセッサが搭載されています。
apache-spark
いくつかの計算を実行するために、パラメータ(6 vCPU)を使用してlocal[6]
スタンドアロンsatを実行しました。ただし、最終的には次のコンポーネントをディスパッチできるようにしたいので、変更する必要があります。
計算をします
apache-spark
。 1master
つと 2 つにはworkers
物理クラスターがあります。(
PostGis
Postgresql)データベース。通常、Open Dataで提供されるプレーンテキストファイルまたはcsvファイルを保存します。
Geoserver
地理地図のインスタンスを作成します。ログアナライザ、
ELK
。Kafka
コンポーネントが実行するアクション、見つかったイベント、実行する必要があるアクション、分析中のログに対するコンポーネントのイベントを送信するストリーム。ユーザーが
Angular
アプリケーション内で地図と結果を表示できるWebアプリケーション。今のように独立性を維持し、
apache-spark
クラスタリングのアイデアをあきらめた場合は、ポートと環境変数のみを使用すると、私のコンピュータに両方を持つことができました。私はその上で多くの仮想マシンを
Debian 10
使用して作成できます。Vagrant
Virtualbox
各コンポーネントをドッキングすることもできます。
どうやって選ぶべきですか?
Vagrant
/を含む多くの仮想マシンVirtualbox
。Docker
Docker-Engine
自分のコンピュータに直接インストールしてみてください。- 一部の仮想マシンで使用できますか
Docker
? - 考慮できる以上のものがありますか?
しかし、私は次の理由で運命を定めたのではありませんでした。
- クラスタ
apache-spark
には3つのvCPUがあります。 - 1は
PostGis
、 - 1は
Geoserver
、 - 1は
ELK
、 - 1 Webアプリケーションの場合、
Eclipse
=利用可能なvCPUは8つのうち7つなので、開発用にコンピュータを実行し、コンピュータ上で他のタスクを実行するために1つのvCPUしか残りません。
ベストアンサー1
この種の決定は通常、開発者の決定ではなくシステム管理者の決定に近い。開発マシンでは、一般にVM/コンテナに分割することにした決定を考えてはいけません。ほとんどの場合、「ベアメタル」で開発し、すべてを直接インストールできます。
しかし!
システム管理者は、長期的に役立ついくつかの考慮事項と事項を検討したいと考えています。
- ソフトウェアの本番バージョンは複数のノードに配布されるため(質問で提案されているように分解される)、ベストプラクティスは次のとおりです。テストこの構成では、すべてがうまく機能します。
- システム管理者ではなく、開発者がコンテナ間の区切り線を決定するのは合理的です。たとえば、dockerを使用して展開する場合は、開発者が
Dockerfile
開発システムでこの方法で実行するかどうかを作成するのが合理的です。
これを念頭に置いて、コンテナの正確な特性、つまりコンテナ間の区切り線がどこにあるかについてあまり心配する必要はありません。
VM、Docker、VMのDocker
私が知る限り、仮想マシン技術は、ホストが実際に持っているよりも多くの仮想コアをすべての仮想マシンに累積的に割り当てることができます。仮想マシンはホスト上の物理コアよりも多くのコアを持つことはできませんが、HTを持つプロセッサは4つではなく8つのコアとしてカウントされます。したがって、必要に応じて仮想マシンで実行できます。しかし、通常、仮想マシンは重量級コンテナです。各コンテナ内で完全なオペレーティングシステム(カーネルを含む)を実行し、RAM(CPUではない場合)を非常に多く使用する傾向があります。
仮想マシンは、ステートフル機能も非常に優れています。商用開発の課題の1つは、本番、テスト、開発環境を一貫して維持することです。仮想マシンに多くのゴミを残してテストに合格しましたが、本番では失敗しやすいです。
一方、Docker(Windowsホストで実行されていない)は非常に軽い方法でプロセスを分離します。仮想マシンのように、各コンテナに対して別々のカーネルを実行しません。代わりに、Linuxカーネルに組み込まれている特別な分離技術を使用してホスト上でプロセスを実行します。これは非常に効率的です。
Dockerは使い捨て容器も強調しています。これにより、コンテナを簡単に解体(破壊)し、イメージから再起動して、本番環境で動作していることを証明できます。