第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在 Web API ASP.Net 引入大量日志

如何在 Web API ASP.Net 引入大量日志

C#
皈依舞 2022-09-04 17:04:17
我是API開發(fā)的新手,我想創(chuàng)建一個(gè)Web API端點(diǎn),它將接收大量的日志數(shù)據(jù)。我想通過 Amazon Kinesis 傳輸流將這些數(shù)據(jù)發(fā)送到 Amazon s3 存儲(chǔ)桶。下面是一個(gè)工作正常的示例應(yīng)用程序,但我不知道如何引入大量入站數(shù)據(jù)以及我的API應(yīng)該以什么格式接收數(shù)據(jù)?我的 API 終結(jié)點(diǎn)的外觀。 [HttpPost] public async void Post() // HOW to allow it to receive large chunk of data? {        await WriteToStream(); }    private async Task WriteToStream()    {        const string myStreamName = "test";        Console.Error.WriteLine("Putting records in stream : " + myStreamName);        // Write 10 UTF-8 encoded records to the stream.        for (int j = 0; j < 10000; ++j)        {        // I AM HARDCODING DATA HERE FROM THE LOOP COUNTER!!!             byte[] dataAsBytes = Encoding.UTF8.GetBytes("testdata-" + j);            using (MemoryStream memoryStream = new MemoryStream(dataAsBytes))            {                    PutRecordRequest putRecord = new PutRecordRequest();                    putRecord.DeliveryStreamName = myStreamName;                    Record record = new Record();                    record.Data = memoryStream;                    putRecord.Record = record;                    await kinesisClient.PutRecordAsync(putRecord);            }        }    }P.S:在現(xiàn)實(shí)世界中,我不會(huì)有那個(gè)循環(huán)。我希望我的 API 引入大數(shù)據(jù),我的 API 的定義應(yīng)該是什么?我需要使用稱為多格式/數(shù)據(jù)的文件嗎?請(qǐng)指導(dǎo)我。
查看完整描述

2 回答

?
幕布斯7119047

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


查看完整回答
反對(duì) 回復(fù) 2022-09-04
?
泛舟湖上清波郎朗

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


查看完整回答
反對(duì) 回復(fù) 2022-09-04
  • 2 回答
  • 0 關(guān)注
  • 119 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)