[英]How to ingest large amount of logs in ASP.Net Web API
我是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);
}
}
}
PS:在實際應用中,我不會使用for循環。 我希望我的API吸收大數據,我的API的定義應該是什么? 我需要使用一種稱為multiform / data的 文件嗎? 請指導我。
這是我的思考過程。 在公開用於記錄的API時,您的輸入應包含以下屬性
我建議通過網關API將API公開為AWS lambda,因為它將有助於隨着負載的增加而擴展。
要獲取有關如何構建API和使用模型綁定的示例,請參閱https://docs.microsoft.com/zh-cn/aspnet/web-api/overview/formats-and-model-binding/model-validation-在-ASPNET-Web的API
我沒有太多背景信息,因此基本上會嘗試從我的看法中提供答案。
首先,不是將數據發送到webapi,而是將數據直接發送到S3。 在蔚藍中,存在共享訪問令牌,因此您向api發送請求以向您提供url上載文件的位置(有很多選項,但您可以限制時間,可以限制可以上傳IP的IP)。 因此,要上傳文件1.進行調用以獲取上傳網址,2.放入該網址。 看起來在Amazon中它稱為“ 簽名策略” 。
寫完lambda函數(將在S3上傳時觸發)之后,該函數將發送事件(同樣,我不知道其在AWS中的運行方式,但天藍色將發送Blob Queue消息),該事件將包含指向文件的URL和起始位置。
編寫第二個Lambda來偵聽事件並進行實際處理,因此在我的應用程序中有時我知道處理N個項目需要10秒鍾,因此由於部署的性質,我通常選擇N為不超過10-20秒的時間。 在處理了N行並且尚未完成之后,發送相同的事件,但是現在開始位置=乞求時的開始位置+N。 更多信息如何讀取范圍
通過這種方式設計,您可以處理大文件,甚至可以變得更聰明,因為您可以發送多個事件,在其中可以說出“開始行”,“結束行”,這樣便可以在多個實例中處理文件。
PS。 為什么我不建議您將文件上傳到WebApi,因為這些文件將存儲在內存中,所以可以說您有多個源發送1GB的文件,在這種情況下,您將在幾分鍾之內殺死服務器。
PS2。 文件格式取決於,因為它是讀取這些文件的最簡單方法,所以它可能是json,但請記住,如果您有大文件,則將整個文件讀取到內存中會很昂貴。 這是如何正確閱讀它們的示例 。 因此,其他選項可能只是平面文件,因此易於閱讀,因為這樣您就可以讀取范圍並進行處理
PS3。 天藍色,我將使用Azure批處理作業
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.