2 回答

TA貢獻1794條經驗 獲得超8個贊
我沒有太多的背景,所以基本上會嘗試從我如何看待它來提供答案。
首先,我不會將數據發送到 webapi,而是將數據直接發送到 S3。在 Azure 中有共享訪問令牌,因此你可以向你的 api 發送請求,以提供上傳文件的 url(有很多選項,但你可以通過時間限制,按 IP 限制誰可以上傳)。所以上傳文件1。做電話獲取上傳網址, 2.放到該網址??雌饋碓趤嗰R遜上它被稱為簽名政策。
在寫入將在S3上傳時觸發的lambda函數之后,此函數將發送事件(再次,我不知道它在AWS中如何,但在azure中,我將發送Blob隊列消息),此事件將包含文件和起始位置的URL。
編寫第二個Lambda來偵聽事件并進行實際處理,因此在我的應用程序中,有時我知道要處理N個項目需要10秒,因此由于部署的性質,我通常選擇N不超過10-20秒。處理了 N 行并且尚未完成后,發送相同的事件,但現在開始位置 = 乞求上的開始位置 + N。
通過這種方式設計,您可以處理大文件,甚至更聰明,因為您可以發送多個事件,例如“開始行”,“結束行”,以便能夠在多個實例中處理文件。
為什么我不建議您將文件上傳到WebApi,因為這些文件將在內存中,因此假設您有1GB文件從多個來源發送,在這種情況下,您將在幾分鐘內殺死您的服務器。
PS2.文件格式取決于 json,因為它是讀取這些文件的最簡單方法,但請記住,如果您有大文件,將整個文件讀取到內存將很昂貴。以下是如何正確閱讀它們的示例。所以其他選項可能只是平面文件,然后很容易閱讀它,因為這樣你可以讀取范圍并處理它
PS3.在 azure 中,我會使用 Azure Batch Jobs

TA貢獻1818條經驗 獲得超3個贊
這是我的思考過程。當您公開用于日志記錄的 API 時,您的輸入應包含以下屬性
日志級別(信息、調試、警告、致命)
日志消息(字符串)
應用程序標識
應用程序實例標識
應用程序 IP
主機(記錄錯誤的計算機)
用戶 ID(發生錯誤的用戶)
UTC 格式的時間戳(錯誤發生的時間)
其他數據(可自定義為 xml / json)
我建議通過 Gateway API 將 API 公開為 AWS lambda,因為它有助于隨著負載的增加而橫向擴展。
要獲取有關如何構建 API 和使用模型綁定的示例,可以參考 https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api
- 2 回答
- 0 關注
- 120 瀏覽
添加回答
舉報