2 回答

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

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊
這是我的思考過程。當(dāng)您公開用于日志記錄的 API 時(shí),您的輸入應(yīng)包含以下屬性
日志級(jí)別(信息、調(diào)試、警告、致命)
日志消息(字符串)
應(yīng)用程序標(biāo)識(shí)
應(yīng)用程序?qū)嵗龢?biāo)識(shí)
應(yīng)用程序 IP
主機(jī)(記錄錯(cuò)誤的計(jì)算機(jī))
用戶 ID(發(fā)生錯(cuò)誤的用戶)
UTC 格式的時(shí)間戳(錯(cuò)誤發(fā)生的時(shí)間)
其他數(shù)據(jù)(可自定義為 xml / json)
我建議通過 Gateway API 將 API 公開為 AWS lambda,因?yàn)樗兄陔S著負(fù)載的增加而橫向擴(kuò)展。
要獲取有關(guān)如何構(gòu)建 API 和使用模型綁定的示例,可以參考 https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api
- 2 回答
- 0 關(guān)注
- 119 瀏覽
添加回答
舉報(bào)