リトルハブは読む:
これはリトルハブが録画したビデオです。まだここに投稿していません。見たい場合はチェックしてみてください。それがあなたを助けることを願っています。
フロントエンドとバックエンドの分離ブログプロジェクトの半分以上が記録されており、少し近いです。明日と明後日にお会いできるはずです。
私のBステーション:MarkerHubをフォローして、一緒にテクノロジーを学びましょう。
ウェブサイトの開発履歴
マインドマップでJavaを学ぶのは本当に良い方法です!今日、私たちは地図を使用して、ウェブサイトのトラフィックが0から1に徐々に増加するプロセスに関係するテクノロジーと知識システムを分類しています。
ユーザー数が増加し、同時実行性がますます高くなっているときに、Webサイトのアーキテクチャがどのように進化するかについて話しましょう。次に、9つのステージを使用して、各ステージの開発プロセスに関連する技術的なポイントを1つずつ分析します。
Java入門
まず第一に、何があっても、ウェブサイトを構築するには、Javaの基本的な知識が必要です。Javaファウンデーションでは、データ構造内の配列、リンクリスト、キュー、およびスタックの特性と使用シナリオに精通している必要があります。スレッド化とリフレクションも比較的基本的なものであり、インタビューでよく尋ねられます。デザインパターンでは、特に勉強する必要はないと思います。多くは忘れがちです。多くの場合、私たちのビジネスは主にカプセル化を学習するため、コード管理は単純ではありません。一般的なパターン:シングルトン、ファクトリ、エージェント、オブザベーションユーザー、テンプレート、および戦略は、最初に精通している可能性があります。Webの知識については、http / tcpの4つの層を理解する必要があります。サーブレット、フィルター、リスナーがすべてWebの基盤である場合、セッションとCookieの関係を理解する必要があります。
フレームワークベース
Springとmybatisは、Javaプログラマーにとって不可欠なフレームワークの基盤です。Springのiocとaopがコアコンセプトです。Beanコンテナに精通し、aopカスタムアノテーションを使用する必要があります。springmvcは、最も広く使用されているmvcフレームワークです。mvcの主要コンポーネントの関係とプロセスに対応することは、複数のデータソースを構成するだけでなく、精通している必要があります。
SpringMVCプロセス
-
1.ユーザーはフロントコントローラーDispatcherServletにリクエストを送信します。
-
2. DispatcherServletは、HandlerMappingプロセッサマッパーを呼び出す要求を受け取ります。
-
3.プロセッサマッパーは特定のプロセッサを見つけ(xml構成と注釈に基づいて検索できます)、プロセッサオブジェクトとプロセッサインターセプタ(存在する場合は生成)を生成し、それをDispatcherServletに返します。
-
4. DispatcherServletは、HandlerAdapterプロセッサアダプタを呼び出します。
-
5. HandlerAdapterは、アダプテーションを通じて特定のプロセッサー(コントローラー、バックエンドコントローラーとも呼ばれます)を呼び出します。
-
6.実行が完了すると、コントローラーはModelAndViewに戻ります。
-
7、HandlerAdapterはコントローラーの実行結果ModelAndViewをDispatcherServletに返します。
-
8. DispatcherServletは、ModelAndViewをViewResloverビューリゾルバーに渡します。
-
9. ViewResloverが解析した後、特定のビューに戻ります。
-
10. DispatcherServletは、ビューに従ってビューをレンダリングします(つまり、モデルデータをビューに入力します)。
-
11.DispatcherServletはユーザーに応答します。
Mybatisは現在主流のデータレイヤーフレームワークです。もちろん、Spring Data JPAも増加しています。mybatisのソースコードは比較的単純なので、読み通すことができます。
Springbootは最近さらに人気があり、Springは業界ソリューションの完全なセットを提供しており、その多くはspringcloudなどのspringbootに基づいています。統合するのは特に便利です。springbootの場合、サードパーティのモジュールを組み立てる方法、モジュールスターターをカスタマイズする方法、読み込みを自動開始する方法などを理解し、理解する必要があります。
フェーズ1:単一プロジェクト
最初の段階は、単一のプロジェクトを構築することです。この段階は、Javaの基盤と見なす必要があります。その多くは、spring + mybatis、インターフェイスドキュメントswagger2、エンティティ検証休止状態バリデーター、検索エンジンluceneなど、現在の企業で一般的なフレームワークの組み合わせです。次に、環境centos7、コード管理git、および継続的デプロイgitをデプロイします。
emmm〜なじみのない学生はもっと基本的なことを学ぶべきです〜
フェーズ2:アプリケーションとデータベースを物理的に分離する
アプリケーションサーバーをデータベースから物理的に分離して、CPUやメモリなどへの負荷がそれほど大きくならないようにします。
フェーズ3:キャッシングと静的
フリーメーカーやベロシティ、その他のテンプレートエンジンなど、一般的なテンプレート静的基盤がいくつかあります。現在、多くのコード生成フレームワークは実際にテンプレート静的テクノロジを使用しています。テンプレートを定義した後、パラメータを渡してレンダリングし、目的のコードを生成します。
ここでは、nginxが静的ファイルサーバーとして適しています。次の動的分離では、nginxを使用します。
フェーズ4:アプリケーションの負荷分散、クラスター
Nginxはリバースプロキシサーバーとして使用できるため、負荷分散ツールとして使用できます。ポーリングや重みなど、理解する必要のある負荷分散戦略もあります。一般的に言えば、nginxが主流であり、他のアパッチはあまり使用されていません。Nginxには、青緑色の展開、グレースケールの展開など、いくつかのオンラインスキルもあります。
-
青緑色の展開
サービスの提供を中断することなくシステムがオンラインであることを保証できる展開方法
-
グレースケールリリース
黒と白の間をスムーズに移行できる公開方法を指します
負荷分散とは、Webサーバー、FTPサーバー、エンタープライズキーアプリケーションサーバー、その他のミッションクリティカルなサーバーなど、実行する複数のオペレーションユニットに割り当てて、作業タスクを一緒に完了することを意味します。
アプリケーションサーバーの負荷分散後に解決する必要がある最初の問題は、セッション同期(セッション)です。一般的に使用されるフレームワークは、Spring Session、shiro-redisなどです。キャッシュの選択に関しては、ehcacheは通常使用されず、redisがより多く使用されます。
もちろん、nginxはリバースプロキシツールとして使用されるため、すべてのnginxは高可用性を実現するように構成する必要があります。これは通常、keepalived + nginxの組み合わせです。
ステージ5:動的と静的の分離
ダイナミクスとスタティックを分離するためによく言われるソリューションは、一般に、静的ファイルをnginxなどのファイルサーバーにデプロイして、アプリケーションサーバーの要求圧力を軽減することです。CDNの概念もあります。プロセスがどのようなものかを理解する必要があります。結局のところ、今ではcdn、cdn、cdnなどとよく言われます。理解できないと口を挿入できません〜
一般的に、静的なものを保存するためにクラウドストレージを使用するのが好きです。QiniuCloudやCosなどのクラウドストレージを使用することがよくあります。もちろん、一部のcss、js、およびその他のファイルは通常nginxの下に配置されるため、nginxは動的および静的分離の主要なツールでもあります。
フェーズ6:分散キャッシュ、キャッシュクラスター
この段階では、キャッシュは主に極端に使用され、redisの5つのデータ構造の利点を再利用して、データ表示を調整します。さらに、キャッシュの浸透、キャッシュのなだれ、キャッシュの故障、その他の概念など、設計されたキャッシュの問題についてはよく知っている必要があります。と。解決策があります。また、Redisの高可用性を確保するために、Redisマスタースレーブクラスター、センチネル、およびその他のメカニズムを確立します。
もちろん、キャッシュを使用した後、より重要な問題が発生しました。つまり、キャッシュがデータベース内のデータと一致していることを確認する方法です。
ステージ7:読み取りと書き込み、サブデータベースとサブテーブルの分離
第7段階では、主な焦点は、読み取りと書き込み、およびサブデータベースとテーブルを分離することです。これは、異なるデータベースの相互調整を中心に展開します。
読み取りと書き込みの分離
読み取りと書き込みを分離する方法もたくさんあります。もちろん、最も一般的な方法は、AbstractRoutingDataSourceを継承し、determineTargetDataSource()メソッドをオーバーライドすることです。他に方法はありますか?誰もが科学を普及させるために、それは春とmybatisのために立ち上げることができます:
春
1.パッケージをスキャンして、さまざまなデータソースを区別します
@MapperScanアノテーションはさまざまなパッケージをスキャンします。このパッケージのすべてのマッパーは同じデータソース、主にsqlSessionTemplateRef属性を使用します。次の記事を読むことができます:https://www.cnblogs.com/kangoroo/p/7133543.html
2.注釈で区別する
AbstractRoutingDataSourceを継承することにより、determineTargetDataSource()メソッドをオーバーライドしてデータソースを指定します。最も一般的に使用される手段を理解する必要があります!例:renren-高速オープンソースプロジェクト
mybatis
1.操作を開始したメソッドの名前をインターセプトします
自分でプレフィックスを追加、削除、変更、確認してから、プレフィックスに基づいてデータソースを選択することに同意する必要があります。
2.操作を開始したSQLをインターセプトします
mysqlの実行メソッドをインターセプトしてSQLを取得し、SQLを介して読み取りと書き込みのインスタンスを判断します:https://github.com/shawntime/shawn-rwdb
サブライブラリとサブテーブル
mycat: プロキシに基づいて、MySQLプロトコルを書き換え、MycatサーバーをMySQLデータベースに偽装します
shareding-jdbc: jarパッケージの形式で軽量サービスを提供するJDBCインターフェースに基づく拡張機能
派生して対処された多くの問題があり、分散トランザクション、分散ロックなど、多くの解決策が生まれました。
-
分散トランザクションCAP定理
-
一貫性:クライアントは、一連の操作が同時に行われることを知っています(効果的)
-
可用性(可用性):すべての操作は、予測可能な応答で終了する必要があります
-
パーティションの許容範囲:単一のコンポーネントが使用できない場合でも、操作を完了できます
-
分散トランザクションのベース定理
-
基本的に利用可能
-
ソフト状態
-
結果整合性
強力な一貫性を実現することはできませんが、各アプリケーションは独自のビジネス特性に基づくことができます
適切な方法を使用して、システムの究極の一貫性を実現します
-
分散ロック
-
redisロック
-
redis + lua
-
redisson
-
-
動物園の飼育係のロック
-
-
分散された一意の主キーID
-
UUID
-
redis自動インクリメントID
-
フェーズ8:マイクロサービスアーキテクチャ
現在のrpcソリューションには主に2つのシステムがあります
-
アリシステムダボ+ズーキーパー
-
スプリングシステムspringcloud
springcloudで一般的に使用されるコンポーネント間の統合関係により、対応する問題を解決しました。これらの問題に精通し、包括的に使用する方法を学ぶ必要があります。
-
登録センターユーレカ
-
クライアントの負荷分散リボン
-
宣言型RESTはFeignを呼び出します
-
フォールトトレラント処理Hystrix
-
サービスゲートウェイズール
-
統合管理構成構成
-
サービス追跡Sleuth + zipkin
また、高可用性を実現するために解決する必要がある、劣化、タイムアウトの再試行、電流制限など、サービス分割によって引き起こされる一連の問題もあります。メッセージキュー、キャッシュ、非同期同時実行、および高い同時実行のために導入されたその他のテクノロジーをすべて理解する必要があります。
フェーズ9:NoSqlと分散検索エンジン
ここでの重要なポイントの1つは、分散検索エンジンです。以前にLuceneについて説明しましたが、esとsolrの最下層は実際にはLuceneです。したがって、Lucene(転置インデックス)の基本的な実装原則、および単語のセグメンテーションなどの概念に精通している必要があります。同時に、esとデータベース間のデータ同期の問題に対して3つのソリューションを使用できます。
-
運河に基づく同期
-
メッセージキューに基づく同期
-
logstashに基づく同期
同時に、esやmongoに関係なく、これらのnosqlデータストアにはフラグメンテーションの概念があり、高可用性とバックアップの原則を理解する必要があります。
駅Bでのビデオ説明
現在、私はこれらの9つの段階に関連する内容を説明し、さらに詳細な分析を行うビデオ(合計約150分)を録画しました。興味のある学生はステーションBに行ってチェックし、親指を立てることができます。弾幕、コレクション3連!ご支援ありがとうございます
リンク:https://www.bilibili.com/video/av80313108
(アプリまたはPCを使用してHD用に開きます!)
結びの言葉
さて、今日は内容を大まかにまとめました。必要なのはコンセプトだけです。各段階には多くのポイントがあります。特定のポイントについて詳細に調べることができます。私はLuYimingです。読んでいただきありがとうございます。また、B駅に来て、弾幕で学ぶことを歓迎します。
------------------------------------------- <終了> ---- -----------------------------------
Lu Yiming MarkerHub 5月26日
https://mp.weixin.qq.com/s/M7FV8OnB51bFTuK_5Qa06w