日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

所有其他指标均无用

發(fā)布時(shí)間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 所有其他指标均无用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

對(duì)于隊(duì)列,無(wú)論是實(shí)現(xiàn)為JMS ,數(shù)據(jù)庫(kù)表(即Ruby的Delayed :: Job用于隊(duì)列的什么),甚至是Amazon的SQS ,用于評(píng)估隊(duì)列狀態(tài)的最常見(jiàn)指標(biāo)是其長(zhǎng)度。 從本質(zhì)上講,可以基于在任何給定時(shí)間隊(duì)列中駐留多少消息來(lái)得出效率度量。 如果只有幾條消息,則表明隊(duì)列正在高效地運(yùn)行。 如果有很多消息,則說(shuō)明效率低下,必須發(fā)出警報(bào)。

但是,如果您處于持續(xù)繁忙的環(huán)境中,并且隊(duì)列突然出現(xiàn)快速填充的趨勢(shì),那該怎么辦? 如果你有足夠的工人已經(jīng)在運(yùn)行來(lái)處理突發(fā),你需要更多的火起來(lái)?

您可以解雇更多的工人,但這樣做可能會(huì)花費(fèi)您。 也就是說(shuō),您可能必須設(shè)置新的工作程序?qū)嵗?#xff0c;例如Heroku工作程序dynos或AWS AMI,這最終將使您花費(fèi)大量的金錢(qián)。 有時(shí),這些工作人員實(shí)例需要一些時(shí)間來(lái)啟動(dòng),當(dāng)它們開(kāi)始運(yùn)行時(shí),活動(dòng)爆發(fā)已經(jīng)結(jié)束,隊(duì)列又恢復(fù)了正常–最初可用的工作人員充分地處理了負(fù)載。

事實(shí)證明,隊(duì)列的長(zhǎng)度是一個(gè)滯后指標(biāo)。 您浪費(fèi)了不必要的資源。 錯(cuò)誤的警報(bào)!

如果您已經(jīng)有足夠的能力來(lái)處理隊(duì)列中的消息大量涌入,那么監(jiān)視隊(duì)列的長(zhǎng)度就不會(huì)有太大幫助。 實(shí)際上,這是一個(gè)誤導(dǎo)性指標(biāo),可能會(huì)導(dǎo)致您采取不必要的操作。

因此,當(dāng)已經(jīng)有足夠的工人在場(chǎng)時(shí),隊(duì)列的長(zhǎng)度并不表示系統(tǒng)的效率 。 相反,在高容量環(huán)境中意味著某些事情的度量標(biāo)準(zhǔn)是消息在隊(duì)列中駐留的時(shí)間 。 這是一個(gè)可行的指標(biāo):如果消息被卡在隊(duì)列中等待處理,那么您需要更多的處理器!

Moo超過(guò)隊(duì)列長(zhǎng)度,讓隊(duì)列等待時(shí)間

默認(rèn)情況下, Amazon的SQS不提供查詢(xún)消息已在隊(duì)列中保留多長(zhǎng)時(shí)間的功能。 因此, 我寫(xiě)了Moo 。

Moo為客戶(hù)端提供了一個(gè)接口,該接口可用于獲取隊(duì)列度量標(biāo)準(zhǔn)中的消息時(shí)間并對(duì)其采取措施。 這是通過(guò)使用時(shí)間戳擴(kuò)展SQS消息來(lái)完成的。 然后,當(dāng)從SQS隊(duì)列中彈出消息時(shí),將檢查該時(shí)間戳。 如果超過(guò)閾值差,則調(diào)用回調(diào)。

Moo的用戶(hù)會(huì)發(fā)現(xiàn)它的用法類(lèi)似于Ahoy! ,它是AWS Java SDK之上的面向異步回調(diào)的外觀。 實(shí)際上,Moo使用Ahoy! 在下面,帶有附加功能,即附加“最大排隊(duì)時(shí)間”異步回調(diào)。

Moo支持多個(gè)隊(duì)列時(shí)間閾值,并且設(shè)置最大隊(duì)列時(shí)間的方法如下:

為隊(duì)列中的時(shí)間添加最大閾值

//adds a 1 second max threshold sqs.addQueueWaitTimeCallback(1000, new QueueWaitTimeCallback() {public void onThresholdExceeded(long waitTime) {//waitTime is the actual time in queue//do something... like fire off a web hook, etc} });

請(qǐng)注意, addQueueWaitTimeCallback方法在隊(duì)列值和相伴的QueueWaitTimeCallback回調(diào)實(shí)現(xiàn)中花費(fèi)的最長(zhǎng)時(shí)間為毫秒。 如果超過(guò)最大閾值,則在消息接收期間將異步調(diào)用onThresholdExceeded方法;否則,將被onThresholdExceeded 。 此外, onThresholdExceeded將接收實(shí)際隊(duì)列等待時(shí)間作為參數(shù)。

告訴我Mo

要啟動(dòng)Moo實(shí)例,您有多種選擇,包括配置AWS的AmazonSQS實(shí)例或僅傳遞密鑰,機(jī)密和隊(duì)列名稱(chēng),如下所示:

為隊(duì)列中的時(shí)間添加最大閾值

SQS sqs = new SQS(System.getProperty("key"), System.getProperty("secret"), System.getProperty("queue"));

接下來(lái),您可以將零附加到許多QueueWaitTimeCallback實(shí)例,如下所示:

為隊(duì)列中的時(shí)間添加最大閾值

sqs.addQueueWaitTimeCallback(600000, new QueueWaitTimeCallback() {public void onThresholdExceeded(long actualWaitTime) {//do something -- fire off SNS message?} });

在這種情況下,如果消息在隊(duì)列中的時(shí)間超過(guò)10分鐘,我將添加一個(gè)要調(diào)用的回調(diào)。 注意,這些QueueWaitTimeCallback回調(diào)由隊(duì)列讀取器實(shí)例觸發(fā)。 因此,例如, QueueWaitTimeCallback當(dāng)然可以啟動(dòng)其自身的更多實(shí)例。

這是一個(gè)示例JSON文檔,您可能希望將其放入SQS隊(duì)列中:

為隊(duì)列中的時(shí)間添加最大閾值

{ "employees":[{ "firstName":"John", "lastName":"Doe" },{ "firstName":"Anna", "lastName":"Smith" },{ "firstName":"Peter", "lastName":"Jones" } ]}

發(fā)送和接收此消息與使用Ahoy!時(shí)完全一樣。 例如,要發(fā)送消息,只需將String傳遞給send方法:

為隊(duì)列中的時(shí)間添加最大閾值

sqs.send(json, new SendCallback() {public void onSend(String messageId) {//messageId is from SQS} });

注意, send方法帶有一個(gè)可選的SendCallback 。

通過(guò)receive方法接收消息,該方法需要一個(gè)強(qiáng)制的ReceiveCallback – 對(duì)于從隊(duì)列中接收到的每個(gè)消息,該回調(diào)將被異步調(diào)用。 每個(gè)實(shí)例將接收放置在隊(duì)列中的消息以及消息的SQS ID。

為隊(duì)列中的時(shí)間添加最大閾值

sqs.receive(new ReceiveCallback() {public void onReceive(String messageId, String message) {//do something w/the message -- in this case it's JSON} });

注意,如果在收到消息后,Moo注意到消息在隊(duì)列中等待的時(shí)間超過(guò)為關(guān)聯(lián)的QueueWaitTimeCallback配置的最大隊(duì)列等待時(shí)間閾值,則Moo將調(diào)用它。 注意,Moo可以調(diào)用多個(gè)實(shí)例。 因此,您可以建立一條鏈來(lái)隨著時(shí)間的增加采取各種行動(dòng)。

請(qǐng)記住,隊(duì)列的長(zhǎng)度通常是一個(gè)滯后指標(biāo)。 實(shí)際含義的度量標(biāo)準(zhǔn)是消息在隊(duì)列中的停留時(shí)間。 這是一個(gè)可行的指標(biāo), Moo使您能夠?qū)Υ俗鳇c(diǎn)事情! 你能挖一下它么?

參考: The Disco Blog博客中來(lái)自我們JCG合作伙伴 Andrew Glover的所有其他指標(biāo) 均無(wú)用 。

翻譯自: https://www.javacodegeeks.com/2013/10/all-other-metrics-are-useless.html

總結(jié)

以上是生活随笔為你收集整理的所有其他指标均无用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。