春の家族の樽にはどのような食べ物がありますか
前回は、springとspringmvcの2つのフレームワークの基本的な知識と学習ルートについて説明しましたが、今回は、Springファミリバケットについて説明します。
スプリングファミリーバケットには、出現順に、おそらくspring、springmvc、springboot、およびspringcloudが含まれていることを誰もが知っているはずです。前菜のスプリングから漢王朝のスプリングシートまで、スプリングファミリーバケットはJavaエンジニアにとって必須の食事と言えます。春の家族のバケツが裸の幹部の春から今日の大家族にどのように進化したかを見てみましょう。
現在、Springエコシステムには22の主要なアクティブプロジェクトが含まれています。
画像
これらのプロジェクトは毎日の開発のほとんどすべてのシナリオをカバーしていることがわかりますが、必ずしもそれらを使用する必要はありません。springとspringmvc、springcloud、springbootに加えて、スプリングコミュニティでは継続的に維持されている多くのオープンソースのスプリングエコロジープロジェクトがあります。たとえば、Springの統合データソリューションを解決するために使用されるspringdataは、名前が示すように、Spring Integrationは外部サービスの統合に適しています。
また、一部のプロジェクトで使用する可能性がある春のセキュリティは、通常、いくつかのセキュリティ問題を解決するために使用されます。このフレームワークは、業界でもより頻繁に使用されます。
さらに、Spring AMQPとSpring Kafkaは、対応するメッセージミドルウェアをSpringフレームワークに統合しているため、メッセージの送受信をフレームワークでより簡単に使用できます。
Springエコシステム全体には、「Spring Framework」、「Spring Security」、「Spring Boot」、「Spring Cloud」など、特定のシナリオに適用される多くの特定のフレームワークが含まれます。「Spring Framework」フレームワークは、エコロジー全体ですコアとなる基盤である他のフレームワークは、「Spring Framework」が提供する基本機能に依存する必要があり、各フレームワークには独自の独立したコードウェアハウスがあります。
SpringプログラミングのJavaエンジニア
私が最初にJavaプロジェクトに取り組み始めたとき、インターネットでチュートリアルを探していたときのことを覚えています。そのとき、私は多くのSpringフレームワークアプリケーションプロジェクトを見てきました。基本的に、オンラインエントリプロジェクトは、SpringMVCに基づいています。
つまり、チュートリアルでは、単純な「hello world」を返すコントローラーを作成するように求められます。より複雑な場合は、データベースにアクセスしてmybatisを使用する必要がある場合があります。もちろん、ソースコードはインターネット上で何度も見つかる場合があります。ダウンロードしてもう一度実行するだけです。もちろん、JDKをインストールし、mavenとideを使用することを前提としています。そうしないと、ダウンロード後に実行できず、さまざまなエラーが報告されます。これらの問題は古いドライバーには存在しませんが、私を信じてください、これはXiaobaiが頻繁に遭遇する問題です。
初めてブログを書いたときは、シンプルなssmプロジェクトに取り組んでいましたが、当時はいろいろなものを不器用に設定し、最終的にプロジェクト全体を実行していたので、実際の戦闘プロセスを楽しく記録しました。元のブログに戻ると、私は本当にけちだと思っています。
しかし、これはプログラマーが経験する必要があるすべてのことであり、Javaの基本を理解し、次にJava Webを理解し、Java Webを完全に理解するために、春を知っておく必要があります。春の終わりには、それを参照してください。コンポーネント、特に作業で使用する可能性のあるコンポーネントも理解されています。
画像
今日、私はアリババでJavaを使用しており、毎日使用するテクノロジーは自己開発のミドルウェアです。これらのミドルウェアテクノロジーの多くは、オープンソーステクノロジーの本質も吸収しています。ソースコードには、春の影がよく見られます。 Springエコシステムの強力な影響力は、国内のファーストクラスのJavaテクノロジーチームでさえ、Springフレームワークのソースコードの研究と学習に多くの時間を費やします。
Java開発を行う人々がSpringに言及するとき、最初に頭に浮かぶ言葉は「IoC」、「AOP」、「Spring MVC」、「Spring Security」などであり、「no SpringはJavaではない」という感覚さえあります。
実際、今日、Springはもはや単純なプログラミングフレームワークではありません。初期の「SSHフレームワーク」から今日に至るまで、StrutsとHibernateはプログラマーの観点からほとんど姿を消していますが、Springは非常に大きく完全な生態系。
したがって、Springエコシステムの特定のフレームワークとして具体的に指定されていない限り、「Spring」の言及はSpringエコシステム全体を指す必要があります。
JavaプログラマーがSpringに精通している限り、彼らはJava開発の本質を習得していると言っても過言ではありません。
Spring Framework
前回はspringとspringmvcを紹介しましたが、内容を完全にするために、もう一度繰り返しさせていただきます。
Spring Frameworkプロジェクトは、Springエコシステム全体の基盤であり、IoC、AOP、Spring MVCなど、Springのコア機能が含まれています。他のプロジェクトは、Spring Frameworkに依存する必要があります。
さらに、Spring Frameworkプロジェクトには、spring-core、spring-beans、spring-context、spring-aop、spring-web、spring-webmvcなどの複数のサブモジュールが含まれていることにも注意してください。
実際、Spring Frameworkプロジェクトはモジュール式のアーキテクチャであり、モジュール間に依存関係があります。Java Webバックグラウンドプロジェクトで最も使用するSpring MVCは実際にはモジュールspring-webmvcであり、他のモジュールとの依存関係は次のとおりです。
画像
明らかに、spring-webmvcモジュールは、spring-context、spring-aop、およびspring-webに依存しています。
spring-webmvcモジュールの依存関係
画像
Springboot
私が初めてスプリングブートと接触したとき、または私がインターンシップをしていたとき、私たちはオープンソースプロジェクトOpenStackを使用してプライベートクラウドを行っていました。OpenStack自体には多くのコンポーネントが含まれ、一部はネットワークを担当し、一部はストレージを担当します、一部はスケジューリングなどを担当します。その全体的な展開方法はすべて分散されているため、マイクロサービス分割を行うのが通常です。
もちろん、当時、私にはマイクロサービスの概念がなく、スプリングブートの片面しかありませんでした。マスターから、マイクロサービスにスプリングブートが使用されていると言われたことしか知りませんでした。スプリングブートプロジェクトのコードを見てみましょう。だから私はしばらくそれを見て、起動方法が少し奇妙で、xml構成ファイルが少なく、そしてそれは大した違いがないように見えることを除いて、このことと春は同じように見えることがわかりました。 。
Spring Bootは、Springに基づく足場プロジェクトです。SpringBootは、多くのSpringおよびspringmvc機能を簡素化し、初心者がSpring開発を簡単に開始できるようにします。
たとえば、組み込みのTomcatをデフォルトで統合し、注釈を設定し、サードパーティの開発コンポーネント(MyBatisなど)の迅速な統合をサポートし、Springを使用するためのしきい値を大幅に削減し、本番環境で直接使用できる多くの関数を組み込んでいます。
簡単に言えば、springbootはspringmvcの外側の層であり、これは、springmvcの複雑な実装の詳細の一部、および面倒な設定と開発プロセスを保護し、従来の物を仕様に変えて、いわゆるspringbootスターターを形成します。
画像
迅速な開発と迅速な継承をサポートするこの種のフレームワークは、明らかに開発効率を向上させるため、現在マイクロサービスアーキテクチャプロジェクトを開発するための唯一の選択肢です。
ただし、ここで強調する必要があるのは、springbootはマイクロサービスと同等ではないことです。これは、せいぜいアプリケーションコンテナーにすぎません。マイクロサービスを大規模ネットワークと比較すると、Springbootアプリケーションはこのネットワークの小さなポイントにすぎず、マイクロサービスは合格する必要があります。サービスゲートウェイ、ロードバランシング、登録センター、およびその他の手段がこれらのポイントを接続し、このネットワークの運用中にサービスのダウングレードとヒューズをサポートします(特定のポイントへの接続を切断します)
Spring Bootを使用して堅牢で直接実行されるプロジェクトをすばやく開発できますが、Spring Bootを使用したばかりの多くの人々がSpring Bootを神話に出していますが、そのコアと基盤はSpring Frameworkに由来しています。
Springに大きく依存している開発者は、最初にSpring Frameworkを確認する必要があります。SpringFrameworkの各モジュールの実装原則を習得している限り、Spring Bootを使用する実際の開発で発生する問題も解決できます。
まず、マイクロサービスとは何ですか?
実を言うと、本当の意味でのスプリングクラウドには触れていません。理由は非常に単純です。開発作業に使用したテクノロジースタックは、アリババの内部ミドルウェアによって契約されています。スプリングクラウドで使用するすべてのテクノロジーは、 Alibabaには、対応する実装のセットまたはいくつかの実装さえあります。それらの一部はオープンソースであり、一部は内部でのみ使用されます。とにかく、Springcloudよりも強力なオープンソーステクノロジーをAlibabaで使用することはできません。
実際、MeituanやJD.comなどのJavaの巨人のように、Aliに加えて、独自に開発したテクノロジースタックのセットも維持します。結局のところ、独自のものを自由に使用でき、問題をすぐに修復できます。ある日バグが発生し、オープンソースコミュニティがおじいちゃんにおばあちゃんを訴えるように依頼した場合に備えて、テクノロジーがあっても恥ずかしくない。
私は厳密な意味でのSpringcloudに連絡していませんが、マイクロサービスのセットは実際にはスープの変更です。
Baidu Encyclopediaのマイクロサービスとスプリングクラウドの紹介を見てみましょう。
いわゆるマイクロサービスは、SOAアーキテクチャーの最終製品であり、このアーキテクチャーの設計目標は、ビジネスを切り離し、サービスを独立して実行できるようにすることです。マイクロサービスの設計原則:1.自分の仕事をする2.サービスの高可用性とスケーラビリティ。
マイクロサービスは新しいソフトウェアアーキテクチャで、大規模な単一のアプリケーションとサービスを数十のサポートマイクロサービスに分割します。マイクロサービス戦略は、業務を容易にし、アプリケーションスタック全体ではなく単一のコンポーネントを拡張して、サービスレベルアグリーメントを満たすことができます。
実際、マイクロサービスの役割は以前の巨大な単一のアプリケーションを複数のコンポーネントに分割することであり、各コンポーネントが独自の役割を果たしていることは明らかです。単一の大きなサービスと比較すると、マイクロサービスのメリットは大きすぎます。たとえば、DevOpsをより適切にサポートし、マシンリソースをより効果的に使用し、スケーラビリティと可用性をより簡単に確保するために、個別に展開およびテストできます。次の図は、マイクロサービスアーキテクチャの進化プロセスです。
画像
それでも理解できない場合は、少しずつ説明します。
1.デプロイとR&Dの効率の点で、大規模なアプリケーションのデプロイは非常に遅いです。コードのビットを変更するには、半日かかります。マイクロサービスアプリケーションのボディは小さく、迅速にデプロイできますが、R&Dの反復の効率は考えられます。マイクロサービスは独立して開発および反復でき、効率は当然高くなります。
2.リソースの使用とテストの効率性の観点から、大規模なアプリケーションでは、リソースの上限と下限の間に大きなギャップが生じることがよくあります。多くの場合、大量のリソースを割り当てなければならず、マイクロサービスアプリケーションはコンテナー化されたデプロイメントをサポートします。コンテナー化されたデプロイメント最大のメリットは、リソースの柔軟な拡張をサポートし、リソースの使用効率を向上させることです。テストの場合、大規模なアプリケーションは、ほとんど変更を加えずにアプリケーションコードに戻る必要があります。コストは想像できます。マイクロサービスが分割されると、テストの量は大幅に削減されます。
さらに、マイクロサービスには多くの利点があります。たとえば、問題のトラブルシューティングが容易で、拡張とスケーリングが容易で、シングルポイントの問題を回避できます。
次の写真は、私たちの日常とマイクロサービスを比較したものです。実際、私たちの生活はそのようなギアで構成されているのではありません。
画像
もちろん、マイクロサービスがすべての利点であるわけではなく、当然欠点もあります。
たとえば、マイクロサービスの分割には多くのコストがかかります。最初に、アプリケーションを分割する必要があります。元のローカルサービスは分散サービスにする必要があり、分散サービスはローカルサービスよりも多くの問題に直面する必要があります。幸い、マイクロサービスフレームワークはこれらの問題のいくつかを解決しました。
さらに、マイクロサービスの分割は、アプリケーションの分割だけでなく、対応するデータソースの分割でもあります。これには、分散トランザクションなど、サブデータベースやテーブルなどの分散データベースのソリューションが含まれます。つまり、マイクロサービスの分割により、データの整合性、ネットワークのパーティション化など、分散環境にのみ存在する多くの問題が必然的に発生します。
画像
springcloud:マイクロサービスに最適なオープンソースソリューション
さて、マイクロサービスの分割は非常に多くの問題を引き起こすため、マイクロサービスフレームワークの開発者は自然にそれを考え、開発者がこれらの問題を解決するのに役立つさまざまな方法を使用します。Springcloudを見てみましょう。それを行う方法。
Spring Cloudは、一連のフレームワークの順序付けられたコレクションです。これは、Spring Bootの開発利便性を使用して、サービス検出登録、構成センター、メッセージバス、ロードバランシング、サーキットブレーカー、データ監視などの分散システムインフラストラクチャの開発を微妙に簡素化し、Springを使用できます。
Bootの開発スタイルでは、ワンクリックでの起動と展開が可能です。
Spring Cloudはホイールの製造を繰り返さず、さまざまな企業が開発した成熟した実用的なサービスフレームワークを組み合わせるだけです。SpringBootスタイルの再カプセル化は、複雑な構成と実装の原則を保護し、最終的に開発します著者は、理解しやすく、導入が簡単で、保守が容易な一連の分散システム開発ツールキットを残しました。
画像
もちろん、Springcloudが用意されており、マイクロサービスの分割によって発生する問題は1つずつ解決できます。
たとえば、ローカルサービスを分散サービスに分割するために、springcloudはサービス登録センターと構成センター、および統合サービスゲートウェイを提供し、分散サービスをローカルサービスと同じくらいシンプルで使いやすいものにします
同時に、メッセージバスやロードバランシングなどのテクノロジーにより、分散環境での高い同時実行性の問題のいくつかが解決されました。
さらに、データモニタリング、ヒューズと電流制限、分散リンクトラッキング、クラスターフォールトトレランスなどの機能には、対応するソリューションがspringcloudにあります。
ここでも、springcloudはマイクロサービスフレームワークであり、springbootはWebアプリケーションを迅速に開発するための足場にすぎません。SpringCloudの基盤はSpring Bootです。SpringBootに基づいて、マイクロサービスコンポーネントの開発プロセスを大幅に簡略化できます。
これまで春のファミリーバケツの内容のほとんどを紹介してきましたが、今後の春の生態技術を学ぶのに役立つことを期待しています。
推奨リソース
実際、Springの最高の技術リソースは公式ウェブサイトにあります:https://spring.io/
英語が上手な学生は、直接公式文書に行きたいと思うかもしれません。
本
春のブーツの戦闘、丁雪峰(翻訳)
Springソースコードの詳細な分析
ビデオ
ここに、あなたと共有するためにいくつかのかなり良いビデオリソースをまとめました。詳細については、公開アカウント[プログラマーHuang Xiaoxie]で「春」に返信して表示してください。
ブログ
Javaテクノロジーウェアハウス「Javaプログラマーレビューガイド」
https://github.com/h2pl/Java-Tutorial
高品質のJava学習コンテンツをネットワーク全体に統合して、Javaを基本的なシステム化から高度なシステム化まで検討するのに役立ちます
インタビューガイド
ネットワーク全体で最もホットなJavaインタビューガイドは、総ページ数が200ページを超えており、レビューに使用する場合でも、インタビューの準備に使用する場合でも、非常に実用的です。
パブリックアカウント[Java Technology Rivers and Lakes]の「PDF」に返信すると、無料で受け取ることができます。
最後に書く
この記事があなたに役立つなら、あなたの「見栄えの良い」カザフスタンにけちをしないでください。友達の輪を転送することが私の最大のサポートです。あなたのサポートは私の最大の励ましです。