[復刻版]なしのウォームアップは、高並行性、高い同時コールを呼び出すことはありません。

ウォームアップなしで、高い並行性、高い同時呼び出しを呼び出していません。

キャッシュ、溶断電流制限:我々はすべて知っているように、並行性の高いシステムは、3つの軸があります。しかし、そこに多くの場合、隅に忘れ斧、欲求不満があり、それが予熱されています。

著者:妹自分の犬出典: 妹味 | 2019年6月28日10時55分
http:// developer.51cto.com/art/201906/598514.htm

 

 

キャッシュ、溶断電流制限:我々はすべて知っているように、並行性の高いシステムは、3つの軸があります。しかし、そこに多くの場合、隅に忘れ斧、欲求不満があり、それが予熱されています。

例えば、現象のために

私は二つの現象についてお話しましょう。これらの現象は、高度に並行システムで発生する可能性があります。

まあ、それは多くの問題を引き起こしています。

再起動後まず、DB、死の瞬間

並行性の高い環境下でのDBは、死亡後にそのプロセスを再起動してください。上流の負荷分散戦略の間にそのピークに事業として再配分を生じました。ただ、交通のDB-第三を受け入れ、そして狂気はありませんさらに応答するまで、急上昇したロード即座に開始しました。

理由:DBの新たなスタート、そして様々なキャッシュは準備ができて、非常に異なるシステム状態と、通常の操作ではありません。1/10可能な通常の量は、あなたは死にそれを置くことができます。

第二に、サービスが再開され、アクセス例外

もう一つの共通の問題がある:私は、サーバーの問題が発生した効果をロードバランシングを持って、機械の残りの部分はすぐにこれらの要求、良い走行を運びます。サービスがクラスタに再結合するとき、それは高い時間がかかる多数の要求を受けており、要求、故障のも軍隊の大量の場合にしています。

原因は、おそらくに帰することができます。

1は、サービス開始後、JVM完全に準備ができていない、JITコンパイルではありません。

2、アプリケーションで使用されるさまざまなリソースの準備ができていません。

3、ロードバランシングはリバランスを発生します。

これら2つの問題が十分に予熱されていません

ウォームアップ、すなわちコールドスタート/ウォームアップ方法。システムは、直接、システムへのトラフィックの急激な増加は、即座にシステムを圧倒することができる高い水レベルにプルアップ長期の低レベルにある場合。フロースルーレートが徐々に増加するように、「コールドスタート」とは、徐々にウォームアップ時間の冷却システムに、一定時間内に上限しきい値を増加させ、冷却システムが圧倒されないようにしてください。

私はこの曲線をしたいです。

そして、そうではありません。

実際にははるかに複雑

流量是不可预测的,这不同于自然增长的流量,或者人为的攻击——这是一个从无到有的过程。甚至一些自诩超高速的组件,如lmax的disruptor,在这种突然到来的洪峰之下也会崩溃。

warmup最合适的切入层面就是网关。如图:node4是刚启动的节点,集成在网关中的负载均衡组件,将能够识别出这台刚加入的实例,然后逐步放量到这台机器,直到它能够真正承受高速流量。

假如所有的请求,都经过网关,一切都好办的多,也有像Sentinel 之类的组件进行切入。但现实情况往往不能满足条件。比如:

1、你的应用直接获取了注册中心的信息,然后在客户端组件中进行了流量分配。

2、你的应用通过了一些复杂的中间件和路由规则,最终定位到某一台DB上。

3、你的终端,可能通过了MQTT协议,直接连上了MQTT服务端。

我们进行一下抽象,可以看到:所有这些流量分配逻辑,包括网关,都可以叫做客户端。即所有的warmup逻辑都是放在客户端的,它们都与负载均衡紧密耦合在一起。

解决方式

接口放量

按照以上的分析,通过编码手段控制住所有的客户端调用,即可解决问题。

一个简单的轮询方式

1、我要能拿到所有要调用资源的集合,以及启动时间,冷启动的配置等。

2、给这些资源分配一些权重,比如最大权重为100,配置100秒之后冷启动成功。假如现在是第15秒,则总权重就是100*(n-1)+15。

3、根据算好的权重,进行分配,流量会根据时间流逝逐步增加,直到与其他节点等同。

4、一个极端情况,我的后端只有1个实例,根本就启动不起来。

拿SpringCloud来说,我们就要改变这些组件的行为。

1、ribbon的负载均衡策略。

2、网关的负载均衡策略。

还好,它们都是基础组件,不用来回拷贝代码了。

走马观花

顾名思义,意思就是把所有的接口都提前访问一遍,让系统对资源进行提前准备。

比如,遍历所有的http连接,然后发送请求。

这种方法是部分有效的,一些懒加载的资源会在这个阶段陆续加载进来,但不是全部。

JITおよびプロセス非常に長いウォームアップを行うことができ、他の機能強化、ぞんざいな方法は、ある程度までしか役割を持つことができます。

別の例は、特定のDBである熱が最も必要なデータがページキャッシュ年にロードされるように、開始後、いくつかの非常に特徴的なSQLを実行します。

ステータス予約

そのままバック復元し、起動時に、死亡時にシステムのスナップショットを取ります。

このプロセスは、一般的な非正規のシャットダウン、システムの最後の言葉をする機会がないので、我々は唯一のシステムのスナップショットが実行されている行う、タイムアウトすることができ、より多くの魔法です。

起動時にノード、その後、スナップショットがメモリにロードされます。これは、広くメモリコンポーネントのいくつかのタイプに使用されます。

比較すると、我々は最も信頼性の高い方法は、ウォームアップロジックをクライアントに統合されて符号化することであることがわかりました。この作品は、長い痛みを伴うかもしれないが、結果は良好です。

道 - もちろん、あなたも「>リロードnginxのnginx->重みを修正する削除」をすることができます。時には非常に効果的で、常に効果的ではない、通常、常にではないが安心して安心して。

あなたとすべて。結局、ポイントへの前戯は、無謀と呼ばれていません。

おすすめ

転載: www.cnblogs.com/jinanxiaolaohu/p/11112034.html