2017-08-21 5 views
0

私は96G RAMサーバーを持っていますが、私はそれにいくつかの春のブートアプリケーションを実行したいと思います。彼らはすべてMySql DBが必要です。コンテナ内でSpring起動アプリケーションを実行していますか?またはVM?またはVM内のコンテナ?

私は、最高の分離とパフォーマンスを得るためにサーバーを利用する最良の方法を決めるのは難しいです。

私は、次のことを考えています:

  1. をちょうど

は、今私は、MySQL /春のブートを実行する必要があり、各スプリングブートアプリケーションのためのMySQLサーバー

  • A VMのVMを作成します。 VM内で直接実行することも、ドッカーで実行することもできます。これを行うことで私はすぐに利益を得ることはできません。しかし、後で私のアプリケーションのためのクラスタを作成する必要がある場合は、ドッカーの画像を持っているだろうか?

    あなたが私の場合、あなたは何をしますか?

    おかげ

  • 答えて

    1

    最高の分離とパフォーマンスが必要ですか?

    Dockerコンテナが提供する分離を信頼してください。それは主要な設計目標です。
    不要なレイヤー(つまり、DockerコンテナをホストするVM)を追加しないでください.VMレイヤーを追加すると、パフォーマンスへの影響が発生し、そうでないと思われます。

    コンテナリースMySQLは本質的にステートフルなので、思考が必要です。
    これを行う場合は、少なくともコンテナの外部に状態(データと、おそらくの設定)を保存しています。

    ではなく、のMySQLをコンテナ化することができます。あなたが持っているので、彼らは(

  • スケーリングは、「別のインスタンスをスピンアップ」のように簡単ではありませんステートフルだ

    • :私はので、データベースは、コンテナ輸送のユースケースに適していることを感じることはありません彼らはアップデートにしばしば
    • 更新を受けない
    • )従属を確立し、多くの状態を同期して保存するには、使用「に以下の要件があります「コンテナの新しいバージョンへのスワップ」
    • ほど些細ではありませんすべての環境で同じバージョン "(つまり、開発環境にMariaDB 5.7をローカルで使用している開発者MySQL 5.6を使用しています...これは無難です)

    また、Amazon RDSなどの管理対象データベースの使用を検討する必要があります。私はあなたが使いたい高性能コンピュータを持っていると認識していますが、インフラストラクチャを維持したり拡張したりするための運用コストと比べて重視する価値があります。

    はい:Springブートアプリケーションごとにコンテナを作成し、それらのコンテナを直接実行します。私が言ったように、Dockerの孤立を信頼してください。少なくとも、侵害されているかどうか、それが脅威モデルに応じた許容可能なリスクであるかどうか、およびVMが報告された脆弱性のケースであなたを救ったかどうかを調べます。

    は(クラウドにデプロイに対して、あなたの高速なコンピュータ上すなわちローカル)これらのドッカーコンテナを展開するについては

    :すなわち、それは、クラウド上のすべてを管理するために簡単です(あなたが運用コストを最適化するかどうかによって決まるといません物理的な機械とやりとりする必要があります)、または高速コンピュータを最大限に活用しようとする(そしてそのすべてをそのコンピュータに直接展開する)。

    おそらく、高速コンピュータでDockerコンテナのオーケストレーションをリモートで管理する方法があります。クラウドへの導入のメリットは多くあります。

  • +0

    お寄せいただきありがとうございます。あなたの答えと他の人の答えを読んだ後、私はそれほど多くの孤立を必要としないことに気付きました。間にVMを追加すると、不必要な複雑さが生じ、パフォーマンスコストもかかります! IPv4アドレスについては言及していません:-)私のサーバ(16コア、32スレッド)でこれらをすべて実行すると、MySqlはコア/スレッドの使用をどのように制限できますか? –

    +0

    はあなたが[my.ini'に 'max_connections'を設定できるようですね](https://stackoverflow.com/a/621527/5257399) – Birchlabs

    +0

    @Brichlabsありがとう! –

    0

    あなたは春のブートアプリケーションのドッカーイメージを作成することができ、彼らが構築し、スケールアップとダウンするのは簡単です。 MySQLをDockerイメージとして移動し、ボリュームをディスクにマッピングすることもできません。ドッカー内にすべてのアプリケーションがある場合は、(ドッカーの作成によって)簡単に管理できます。

    しかし、欠点は、あなたは、MySQL-DBの複数の容器を持っているならば、あなたはデータのレプリケーションを心配する必要があり、複数のDBコンテナ間でDBの同じ状態を維持することである

    私はあなただった場合、私は希望春の起動アプリケーションをちょう​​どdockerize!

    +0

    私にあなたの視点を与えてくれてありがとう!私はドッカーでmysqlを実行することに同意することがこの時点では良い考えではないかもしれません。 –

    1

    あなたが探しているのは、Docker Swarmです。これにより、ドッカー(効率的な仮想コンテナ)を配備し、どんな努力でもそれらを拡大縮小することができます。 、このイメージを構築し実行するには

    FROM java:8 
    
    VOLUME /tmp 
    
    ADD spring-boot-0.0.1-SNAPSHOT.jar springboot-appname.jar 
    
    RUN bash -c 'touch /springboot-appname.jar' 
    
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/springboot-appname.jar"] 
    

    docker build -t name-application-img . 
    

    展開するには、次のように、あなただけDockerfileで画像を構築する必要があり、あなたの春のブートアプリケーションを "dockerize" を

    Docker Swarm内のサービスとしての画像:

    docker service create -p {exposed-port}:{private-port} --name {service-name} --replicas 1 name-application-img 
    
    +0

    あなたのご意見ありがとうございます。 –

    関連する問題