0

我正在編寫一個在AWS上運行的web應用程序。我的應用程序要求用戶上傳他們的PDF文件。我將使用linux中的「convert」實用程序將它們轉換爲Images。 這是我在Ubuntu 12.04安裝:AWS芹菜和數據庫

  • Django的
  • 芹菜
  • Django的芹菜
  • 博託

我使用Apache作爲我的網絡服務器。

工作流程如下: 三個是三個異步任務,兩個隊列用於處理所有的處理,S3用於存儲輸入文件和輸出文件。 用戶上載的PDF,那麼:

  1. accept_file_task被稱爲:此任務需要用戶上傳的PDF並將其存儲在我的S3存儲,然後插入一個消息到input_queue(SQS)

  2. check_queue_and_launch_instance_task :一個定期任務,不斷監視input_queue中的消息數量,並在隊列中的消息多於Ec2實例的數量時啓動實例

  3. 實例具有一個True:循環的引導腳本。任何實例都可以從input_queue中選擇消息並執行Subprocess.Popen(「convert」+ input +輸出)並將處理後的消息寫入output_queue,並將生成的圖像上載到S3輸出存儲區並將其作爲下載鏈接

  4. output_process_task:另一個不斷輪詢output_queue的週期性任務,只要有消息可用,它就會更新下面提到的表中的狀態。

我正在使用名爲Document的模型來存儲所有狀態信息。我也有用戶註冊,因此有一張表來存儲所有的用戶信息。另外Celery創建了很多表來存儲所有的任務信息。現在,我正在使用一個實例和該實例上的sqlite3數據庫(附帶python)。

我不確定下面的事情

  1. 如何擴大數據庫?我應該去RDS還是SimpleDB或AmazonDB。如果不是芹菜,我可以輕鬆使用simpleDB。我真的被困在這一個

  2. 如何擺脫兩個週期性任務check_queue_and_launch_instance_task和output_process_task。我的想法是必須以某種方式使用Autoscaling,以便在稍後階段需要時可以使用Elastic Load Balancer。

如果你們已經設計了類似的東西,請幫助我如何去了解它

回答

0

如何擴大數據庫?我應該去RDS還是SimpleDB或AmazonDB。如果不是芹菜,我可以輕鬆使用simpleDB。我真的被困在這一個

請記住,不成熟的優化是一切邪惡的根源。 RDS(實際上只是MySQL,Oracle或MS SQL)與SimpleDB的問題更多的是基於可擴展性的應用程序設計決策。 SimpleDB只是一個簡單的鍵值存儲。另一方面,RDS將爲您提供完整的功能。如果您的數據是relational,那麼您應該使用關係數據庫。如果你只需要一個地方來存儲簡單的字符串或整數,那麼類似SimpleDB的東西會更有意義。

現在我正在使用一個實例和該實例上的sqlite3數據庫(附帶python)。

請確保您瞭解a)在您的設計中創建單一故障點的後果b)與在此應用程序中使用獨立RDBMS相比,SQLite的侷限性。 (您可以使用它,但對於單用戶應用程序,它的格式爲really intended)。

如何擺脫兩個週期性任務check_queue_and_launch_instance_task和output_process_task。我的想法是必須以某種方式使用Autoscaling,以便在稍後階段需要時可以使用Elastic Load Balancer。

如果您願意用SQS替換Celery,您可以將SQS + SNS + Cloudwatch連接在一起以簡化這部分應用。儘管你所做的並不是一個不錯的選擇,特別是如果它已經運行良好的話。你的時間可能會更好地花在面前的問題上,而不是那些可能發生的問題。

+0

感謝您的回覆。我的印象是異步任務需要芹菜。請你指點一下SQS + SNS + Cloudwatch可以代替芹菜的參考資料。我可以從字面上使用SimpleDb,因爲我的數據庫要求不是全部關係。它將我從所有的快照創建等中拯救出來,就像我可能需要做的RDS一樣。 – rajatk

+0

您實際上可以使用[SQS上的芹菜](http://docs.celeryproject.org/en/latest/getting-started/brokers/sqs.html)。這對你有幫助嗎? – jamieb

+0

那就是我已經在做的事情。但對於定期任務,我擔心自動縮放 – rajatk