сохраняет его в монгу
public override async Task<PutObjectReply> PutObjectInBucket(IAsyncStreamReader<PutObjectRequests> requestStream, ServerCallContext context)
но проблема возникает тогда, когда сюда летит большое количество файлов одновременно допустим 20 000
вопрос: как праивльно их сохранить? есть предчувствие что это должно быть не 20 000 стримов а один стримно тогда как это реализовать?
сделать из 20к файлов один большой стрим и как его развернуть потом при сохранении ?
Zip?
А в чем проблема возникает. Сформулируешь?
что такое летит 20000 файлов?
от коннектов пухнет, исключения кидает
какие исключения?
если ты пишешь в S3 то можно файл не приниматьв память, а стримить его напрямую в S3
System.ArgumentNullException: Value cannot be null. (Parameter 'value') at Google.Protobuf.ProtoPreconditions.CheckNotNull[T](T value, String name) at SP.FileStorage.Service.API.RemoveObjectRequest.set_Link(String value) например вот
нет не пишу в S3
выглядит как ошибка формата
она происходит при Task.WhenAll() если разом начать засылать стримы, а если по одному то все будет ок
если сервис не справляется, самое время воткнуть кафку
Видимо, тебе нужен стримовый запрос, а не отдельные запросы. https://learn.microsoft.com/ru-ru/aspnet/core/grpc/client?view=aspnetcore-7.0
Это выглядит как ты в Link пытаешься null присвоить, проверь какие там у тебя присвоения и когда, может race обычный или просто ошибки обработки
Мне нужно не отказываясь от GRPC как то реализовать так, что бы стрим шел один и сохраняло файлы верно
Если что в .NET probuf string нельзя писать null, если надо undefined сделать, то используй clear()
https://learn.microsoft.com/ru-ru/aspnet/core/grpc/performance?view=aspnetcore-7.0 Ну вот тут описано. По идее там вообще одно соединение нужно для одного клиента, потому как нафига их несколько? Они мультиплексируются по HTTP2
не понимаю, зачем тебе стрим grpc для файлов?
Потому что есть сервис файлстораджа, на который по grpc файлы отправляются с других сервисов
это хорошо, зачем grpc stream, стримы же для реалтайм обновлений юзают обычно
А как файлы слать?
у тебя много маленьких файлов?
Да с разных сервисов
да просто обычным вызовом на эндпоинт, без стримов
http/2
Так… и что там в аргументе будет ? Пейлоад со стримом ?
просто пэйлоад, а как его считать — это уже второй вопрос
Так в этом и вопрос как не делать кучу пейлодов а заслать в виде одного ? Получается 1 файл == 1 пейлоад
Вот такое вполне себе живет и нормально используется
Обсуждают сегодня