SpringBootマイクロ電気サービスプロバイダーは実用的なプロジェクトの雪崩--- Redisのキャッシュを開発するために、キャッシュが破壊を防止するためにキャッシュに浸透します

最近、かなりの数のSpringBootを開始しました+ダボ+ Redisの+カフカの電気物品は、今日は前のコンテンツの下で、今日の5件の記事書かれた一連の開始前に、過去に再び分散したマイクロプロジェクトにサービスを提供するために私の最初のレビューを返しました。

シリーズ(A): IDEAの主な用途、SpringBootプロジェクト、WebおよびSpringBootアーキテクチャでの実装に依存して基本的なMavenプロジェクトの作成は言いました。

シリーズ(B):親子依存、サブ展開の設定環境やポートサービスの統一構成を作成するにはMavenプロジェクトの主な話題、統合アクセスダボ、サービス層(プロバイダ)サブモジュールの実装プロバイダ(4)と消費(a)の構成およびサービスコールによって、マイクログランドサービスの実装。

シリーズ(3):プロジェクトについて話し始めると、統一された構成管理(サブモジュールとサードパーティの依存JAR)のバージョン番号に依存して、データベース構成とRedisのアクセスに接続し、分散キャッシュを実装しています。

シリーズ(4):セキュリティを達成するためのインタフェース(抗悪質な要求、データの改ざんなど)、フィルタ構成と署名、トークンインターセプトテスト、AOPの署名の実装、抗SQLインジェクション。

時間と学習ではなく、喜び。私はこの記事のシリーズを立ち上げたとして、目的は、マイクロ分散サービス着陸の開発を理解し、小さなパートナーを助けるために非常に単純な目的です。現在のIT市場は、マイクロ分散サービス階の開発が主流となっています。SpringBoot、ダボ、飼育係、Redisのは、カフカ、SpringCloudなども頻繁に尋ねられるインタビュートピック、あなたはすでにあなたが学ぶ必要がある基本的な技術知識であるこの業界でのダイビングにしたい、そして、私は私の最後の2年間実行する場合より多くの記事を紹介する分散型マイクロサービスの開発経験。しかし、目の前または次の記事でそこの場所よりも少ないですが、場合にも(私は追加することがあり、現在のマイクロ文字を交互に)多くの命令ACは、私たちは、一緒に資格のある技術者を育て、進行するように指示することを願っていますと言いました。

今日は、コンテンツアクセスとセキュリティカフカRedisのキャッシュ実装であると言いたいです。以下のような:貫通キャッシュ、および解決方法のキャッシュアバランシェ降伏?キャッシュサーバがダウンしているか、再起動し、キャッシュデータが失われ、他の問題されることはありません。私たちは、トピックにこれらの問題を取ります。

Redisのキャッシュセキュリティ

Redisのプロジェクトが大幅に特にデータクエリの用語で、アプリケーションのパフォーマンスと効率を向上させる、分散キャッシュを使用しています。しかし同時に、それはまた、いくつかの問題をもたらします。最も重要な問題は、厳密な意味では、この問題は解決策を持っていない、データの一貫性です。データの適合性要件が高い場合は、キャッシュを使用することはできません。またキャッシュ、キャッシュとキャッシュアバランシェ降伏を浸透代表的ないくつかの質問。

||キャッシュ浸透

キャッシュの浸透は、データベースが存在しない特定のデータ照会を参照します。一般的に、通常の使用のキャッシュ処理、キャッシュクエリへのデータクエリ、そこには重要なされていないか、キーの有効期限が切れている場合は、データベースを照会し、キャッシュにオブジェクトへのクエリ。データベースのクエリオブジェクトが空の場合、キャッシュはそれらを入れていません。ユーザは、データID「-1」は、特に大規模または存在しないIDを開始する場合。この時点で、攻撃者である可能性が高い、攻撃者は、データベースに過度の圧力を引き起こす可能性があります。

ソリューション:

図1に示すように、界面層は、チェックサムを増加させます。確認のためのID基盤、ID <= 0直接傍受。

図2は、キャッシュの有効な時刻が長すぎる設定(60秒と短く設定することができ、キーのヌルとして書かれた、キーと値の鍵かもしれ今回に取得していないデータベースでは、キャッシュデータからないように注意しますこれは、同じユーザーID暴力的な攻撃を使用して繰り返し攻撃を防ぐことができ、)を使用することはできません通常の状況をリードします。

||キャッシュ雪崩

キャッシュ雪崩は、一定の期間を指し、集中キャッシュが期限切れ。同時点(17入れ、23ポイント)をキャッシュ仮定に集中している時にこれらの商品を購入するなど、直ちに618へなどの原因と雪崩の一つ、と買い占めの波でまもなく到来を告げるだろう、 2時間のキャッシュ。朝の時間1時までに、これらの商品のキャッシュの有効期限が切れていることになります。データベースに落ちた疑問これらの商品へのアクセス時には、データベースのために、それは大きな圧力をもたらすでしょう。

ソリューション:

1、設定データキャッシュの有効期間中、時間を加えたランダム要素の後に。

2、分散キャッシュの有効期限、データキャッシュの人気クラスビット長い、短い人気のクラスです。

図3は、ホットデータを無期限に設定してください。

||キャッシュの内訳

缓存击穿,是指一个key非常热点,高并发集中对这个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像春运期间火车站售票大厅,本来那些设在门口和广场的自助机可以办理售票,结果自助机瞬间全部瘫痪,造成大量买票的人涌进售票大厅人工窗口。

解决方案:

1,设置热点数据永远不过期;

2,加互斥锁,互斥锁参考代码如下:

|| 缓存数据持久化

Redis提供了将数据定期自动持久化至硬盘的能力,包括RDB和AOF两种方案,两种方案分别有其长处和短板,可以配合起来同时运行,确保数据的稳定性。

RDB

RDB方式是一种快照式的持久化方法,将某一时刻的数据持久化到磁盘中。并在启动时自动加载rdb文件,恢复之前保存的数据。可以在配置文件中配置Redis进行快照保存的时机:

save [seconds] [changes]

例如:save 60 100, 会让Redis每60秒检查一次数据变更情况,如果发生了100次或以上的数据变更,则进行RDB快照保存。可以配置多条save指令,让Redis执行多级的快照保存策略。Redis默认开启RDB快照。

AOF

采用AOF持久方式时,Redis会把每一个写请求都记录在一个日志文件里。在Redis重启时,会把AOF文件中记录的所有写操作顺序执行一遍,确保数据恢复到最新。AOF默认是关闭的,如要开启,进行如下配置:

appendonly yes

  • AOF提供了三种fsync配置,always/everysec/no,通过[appendfsync]指定:appendfsync no:不进行fsync,将flush文件的时机交给OS决定,速度最快;

  • appendfsync always:每写入一条日志就进行一次fsync操作,数据安全性最高,但速度最慢;

  • appendfsync everysec:折中的做法,交由后台线程每秒fsync一次;

推荐阅读:

Spring Boot实现分布式微服务开发实战系列(四)

Spring Boot实现分布式微服务开发实战系列(三)

Spring Boot实现分布式微服务开发实战系列(二)

Spring Boot实现分布式微服务开发实战系列(一)

获取项目源代码,请扫码关注公众号,并发送Springboot获取。

 

おすすめ

転載: www.cnblogs.com/lyn20141231/p/11210278.html