亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

C#
皈依舞 2022-09-04 17:04:17
我是API開發的新手,我想創建一個Web API端點,它將接收大量的日志數據。我想通過 Amazon Kinesis 傳輸流將這些數據發送到 Amazon s3 存儲桶。下面是一個工作正常的示例應用程序,但我不知道如何引入大量入站數據以及我的API應該以什么格式接收數據?我的 API 終結點的外觀。 [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:在現實世界中,我不會有那個循環。我希望我的 API 引入大數據,我的 API 的定義應該是什么?我需要使用稱為多格式/數據的文件嗎?請指導我。
查看完整描述

2 回答

?
幕布斯7119047

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


查看完整回答
反對 回復 2022-09-04
?
泛舟湖上清波郎朗

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


查看完整回答
反對 回復 2022-09-04
  • 2 回答
  • 0 關注
  • 120 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號