簡體   English   中英

我可以為我的應用程序使用cron作業(需要具有高度可伸縮性)嗎?

[英]Can I use cron jobs for my application (needs to be extremely scalable)?

我將要進行一個大型項目,在該項目中,我將需要計划任務(cron作業)來運行一個腳本,該腳本將遍歷我的整個實體數據庫,並每10分鍾調用一次Facebook,Twitter和Foursquare等多個API 。 我需要此應用程序具有可伸縮性。

我已經可以預見到一些潛在的陷阱。

  1. 從API提取數據很慢。
  2. 由於數據庫中有成千上萬條記錄(不斷增加),因此在10分鍾內處理每條記錄將花費太多時間。
  3. 某些共享服務器僅在30秒后停止運行腳本。
  4. 由於不斷運行密集腳本而導致服務器出現問題。

我的問題是如何構建我的應用程序...?

  1. 我可以創建多個cron作業來處理數據庫的一小部分(這將是自動化的)嗎?
  2. 這將可能需要成千上萬的cron工作。
  3. 如何繞過某些服務器的30秒問題?
  4. 有沒有更好的方法來解決這個問題?

謝謝!

我將要進行一個大型項目,在該項目中,我將需要計划任務(cron作業)來運行一個腳本,該腳本將遍歷我的整個實體數據庫,並每10分鍾調用一次Facebook,Twitter和Foursquare等多個API 。 我需要此應用程序具有可伸縮性。

最好的選擇是設計應用程序以使用分布式數據庫,並將其部署在多台服務器上。

您可以將其設計為在兩個“等級”的服務器中工作,這與map-reduce方法不同:輕量級服務器僅執行查詢並“預先消化”某些數據(“ map”),以及聚合數據的服務器(“降低”)。

完成此操作后,您可以建立性能基准並進行計算,例如,如果每分鍾可以生成2000個查詢,並且可以處理盡可能多的響應,則每20,000個用戶需要一台新服務器。 在“每分鍾生成2000個查詢”中,您需要考慮以下因素:

  • 從數據庫中檢索數據
  • 控制服務器之間的流量帶寬
  • Facebook,Foursquare,Twitter等的流量帶寬
  • 必須在本地進行日志記錄(也許可以提取日志摘要並將其上傳到“命令和控制”)

這種體系結構的優點是您可以從小規模開始-可以用一台同時運行連接器,映射器,Reducer,命令和控制以及持久性的機器來構建測試平台。 當您成長時,您只是將不同的服務外包給了不同的服務器。

在幾個分布式計算平台上,這還允許您通過在地理位置或連接方式上明智地分配Mappers來更快地運行查詢,並通過與Amazon“ zones”一起使用來減少各個平台之間的流量成本(Amazon也提供消息服務,您可能會發現對於任務之間的交流很有價值)

一個注意事項:我不確定PHP是否適合用於整個過程。 我寧願使用Python。

不過,在每個實例20000個用戶的訪問量級別上,我認為您最好與Facebook,Foursquare等公司的人員接手。 至少您可以收集一些策略,例如將連接器腳本作為獨立的任務運行,每個連接器根據該服務的用戶ID對其隊列進行排序,以利用可能存在的少量數據局部性,並利用流水線方式壓縮更多帶寬,減少服務器負載。 最多,他們可能會指向您使用批量API或其他協議,或者以一萬億美元的價格購買您:-)

請參閱http://php.net/manual/en/function.set-time-limit.php以繞過30秒的限制。

要在PHP中安排作業,請查看:

  1. http://www.phpjobscheduler.co.uk/
  2. http://www.zend.com/cn/products/server/zend-server-job-queue

我個人將看一個處理工作計划的更健壯的框架(請參閱Quartz with Quartz),而不是重新發明輪子並編寫自己的工作計划程序。 不要忘記,您可能需要不時檢查任務的狀態,因此您將需要圍繞任務的日志記錄解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM