2012-08-14 71 views
0

在視頻控制器 - 顯示操作中,我嘗試了兩種場景。第一個使用increment_counter,和直接寫到分貝:我正確使用ApacheBench嗎?

Video.increment_counter(:views_count, @video.id) 

第二種方法使用的save方法。

@video.views_count = @video.views_count + 1 
@video.save 

在ApacheBench,我做的:

ab -n 100 -c 10 http://127.0.0.1:3000vidoes/18 

視頻ID爲18.我一定要在每個AB運行復位views_count,通過Video.find(18).update_attribute(:views_count, 18)

運行ApacheBench這兩種方案後,views_count是100一貫的我會想到increment_countersave方法更精確,因爲它直接寫入到數據庫。

我是否正確地坐姿?

回答

1

你用這兩種方法得到正確答案的原因是你並不真正在這裏測試並行性。雖然apachebench發出10個併發請求,但您的rails服務器一次只能處理其中的一個請求。嘗試以下方法之一以利用第二種場景中出現的競態條件:

  • 啓動多軌服務器並將它們放在負載平衡器後面。您可以通過乘客或thin -s 4之類的東西來完成此操作,然後將所有這些服務器放在nginx或haproxy實例之後。
  • 切換到使用避免GIL的螺紋解決方案,例如在puma下運行的JRuby或rubinius