JAVA学習経験、JAVAソリューションの概要、高い同時実行性、キャッシュの内訳、キャッシュなだれ、分散ソリューション

高並行性ソリューション:

  1. キャッシュ:Redisメモリデータベース、Nginx静的ページキャッシュ
  2. 非同期:メッセージミドルウェア、マルチスレッド
  3. 並行プログラミング:
  4. 配布:
  5. データベース:データベースレイヤーは、読み取りと書き込み(読み取りと書き込みが少なく、読み取り80%、書き込み20%の場合)、サブデータベースとテーブル、クラスターモードから分離して、高い同時実行性を実現できます(通常、サービスレイヤーでデータベースキャッシュを使用しないでください)キャッシュする)

キャッシュデータの整合性:

  1. 準リアルタイム:メッセージキューMQメカニズムを使用する
  2. キャッシュの無効化、無効化時間の設定
  3. 強い整合性:追加、削除、変更のビジネスにおける更新redis
  4. 時限タスク

キャッシュペネトレーション:キャッシュにデータがない、悪意のあるリクエスト、直接データベースへ

  1. 空のオブジェクトをキャッシュする:存在しないデータをredisにキャッシュし、それを直接nullに割り当てます
  2. 条件フィルタリング:増加シーケンスを使用する場合は、直接0未満にすることができます。uuidを使用する場合は、長さを制限できます
  3. ブルームフィルター:キーをredisに格納するために大きなキャッシュマップが使用され、クエリを実行する前に、マップに値があるかどうかを確認します

雪崩のキャッシング:大量のデータが同時に無効になり、リクエストがデータベースに直接送られる

  1. 同時にキーが失敗しないようにしてください
  2. データのウォームアップ:大規模な同時実行の前に、関連データが直接redisにキャッシュされます
  3. キャッシュが期限切れになることはありません。いくつかのホットスポット、重要なキーが期限切れになることはありません。

キャッシュの内訳:ホットキーアクセスの頻度が非常に高いホットキーが失敗した瞬間に、大量の同時データがデータベースに送信されます

  1. 期限切れなし、これらのホットキーを期限切れにしないための最も効果的な方法2.ミューテックス:現在のホットキーはデータベースにクエリを実行しており、他のホットキーはキューに追加されています。時間まで待ち行列に入れた後、redisから直接取得します

分散トランザクション:

  1. Redisソリューションソリューション:
  2. Zookeperソリューション:

Nginxは高可用性です。

  1. LVS:keeplived
  2. DNS負荷:1つのドメイン名が複数のIPアドレスに対応

分散サービスとマイクロサービスの違い:

  1. マイクロサービスはデータベースから独立しています

サーバー情報プッシュテクノロジーへのフロントエンド

  1. 短いポーリング方法:jsのsetIntervalタイミングタスクを使用してajaxリクエスト(Jingdongログイン、Jingdong支払いなど)を送信し、次に注文ページにジャンプする);
    ソリューション:ブラウザjs setタイミングタスク
  2. ロングポーリングモード:クライアントが要求した後、クライアントは結果があるまで待機してから戻ります。戻った後、もう一度リクエストします(現在、見出しはスクロールしています)。
    解決策:ブラウザーの要求に結果が返された後、現在の関数を再度呼び出します;サーバーは、spring3が提供するDeferredResultを使用します。
  3. SSEの長い接続:イベントソースは切断後の再接続をサポートします
    解決策:ブラウザーはイベントソース機能を使用します;サーバーの変更についてはビデオをご覧ください
  4. websocket:

高い並行性:

redis:100,000以上の読み取り、80,000以上の書き込み
mysql:メカニカルハードディスク300、ソリッドステートハードディスク700
tomcat:平均300-500、制限1000
mysql最大接続数300-700
nginxページキャッシュを使用してcdnテクノロジーを置き換えることができますが、cdnは支払い

ダボの質問:

每次最多返回100条数据,多了需要修改dubbo的配置
序列问题,需要显示声明
编译版本的问题,不同机器编译的dubbo的class文件版本不一致,无法调用

おすすめ

転載: blog.csdn.net/penggerhe/article/details/108253787