• Как правильно использовать S3 хранилища, и на сколько моя идея верна?

    Eugene-Usachev
    @Eugene-Usachev Автор вопроса
    Сергей Горностаев,
    Клиент запрашивает файл у реактивного сервиса, который читает файл из хранилища в виде потока байт и тут же отдаёт в виде сегментированного http-ответа.


    Но ведь это означает 2 передачи одного файла: от хранилища к сервису, и от сервиса к клиенту. Очевидно, что в случаях, когда производительность некритична, это будет работать. Так же, очевидно, это верное решение, если нужно как-то изменить файлы перед отдачей. Однако, если файлы перед отдачей изменять не надо, почему бы не разрешить пользователям обращаться к хранилищу?

    Не воспринимайте мои слова, как высмеивание вашего подхода или любую другую форму агрессии. Я лишь студент, который не имеет опыта эксплуатации большой СХД. Однако, я хочу получить максимально полные знания, поэтому хочу спросить Вас, почему ваша компания и многие другие выбрали именно такую архитектуру?
    Написано
  • Как настроить CMake на установку пакетов?

    Eugene-Usachev
    @Eugene-Usachev Автор вопроса
    Станислав Макаров, мне нужно написать два приложения: клиент с GUI, который по gRPC общается с сервером, и сам сервер. Я не знаю, на какой ОС будет собираться моё приложение. Мне сказали, что на него посмотрят, потом я пройдусь по всем компьютерам в компании и поставлю его. Оба проекта имеют общие зависимости, как минимум gRPC и сгенерированные proto файлы.

    Вопросов у меня достаточно много, например, как создать общие зависимости для двух проектов, как эти проекты собирать под любую ОС? Но для начала, хочу собрать хотя бы сервер.

    Я задал этот вопрос, чтобы прояснить ситуацию, так как разные ссылки в Гугле дают разные ответы, но на форуме ответы тоже разделились. Выше мне посоветовали скачать библиотеки без менеджера, Вы советуете его использовать.
    Написано
  • Как настроить CMake на установку пакетов?

    Eugene-Usachev
    @Eugene-Usachev Автор вопроса
    res2001, куда следует устанавливать статически линкуемые библиотеки (в какую папку проекта)? У Nginx я не нашёл папки с зависимостями (хотя мог плохо искать), у Tarantool есть папка third-party, у Aerospike что-то странное (есть папка modules, но по мимо неё существует pkg с пустыми папками).

    Как их линковать мне тоже ещё не известно, но я думаю, что смогу это нагуглить, но, если Вам несложно, не могли бы вы задать вектор направления поиска?
    Написано
  • Насколько хороша такая политика обновления библиотеки?

    Eugene-Usachev
    @Eugene-Usachev Автор вопроса
    Станислав Макаров, в чём разница между alpha и beta?
    Написано
  • По каким причинам тест может "падать" именно в github actions?

    Eugene-Usachev
    @Eugene-Usachev Автор вопроса
    historydev, вынесите в ответ комментарий, если хотите, чтобы я отметил его решением.
    Написано
  • Как назвать трейты для каналов?

    Eugene-Usachev
    @Eugene-Usachev Автор вопроса
    Василий Банников, LocalChannel не реализует Send и не использует примитивы синхронизации, поэтому он более эффективен при shared-nothing.

    Они находятся в разных модулях, но, если у их этих трейтов будут одинаковые названия, IDE будут не знать, откуда импортировать.
    Написано
  • Как назвать трейты для каналов?

    Eugene-Usachev
    @Eugene-Usachev Автор вопроса
    Более удобная миграция с LocalChannel на обычный Channel и наоборот. А также возможность написать свои собственные каналы под этот трейт, на который могут завязаться в том числе и другие программы.
    Написано
  • Как узнать, что программа запущена в дебагере из кода?

    Eugene-Usachev
    @Eugene-Usachev Автор вопроса
    Василий Банников, у меня есть обнаружение дедлоков. Функция теста паникует, если тест не завершился за секунду. Когда используется дебагер, оставляются точки прерывания, которыми разработчик пользуется для отладки. В этот момент время идёт, и функция будет паниковать, когда разработчик пойдёт к следующей точке. Хотелось бы обнаружить, что используется дебагер, чтобы убрать панику по времени.
    Написано
  • Почему асинхронный блок поверх асинхронного асинхронного блока удваивает память?

    Eugene-Usachev
    @Eugene-Usachev Автор вопроса
    Я написал вспомогательную структуру для целей выше.
    struct WithRes<R, Fut: Future<Output=R>> {
        res_ptr: *mut R,
        fut: Fut
    }
    
    impl<R, Fut: Future<Output=R>> WithRes<R, Fut> {
        fn new(res_ptr: *mut R, fut: Fut) -> Self {
            Self { res_ptr, fut }
        }
    }
    
    impl<R, Fut: Future<Output=R>> Future for WithRes<R, Fut> {
        type Output = ();
    
        fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
            let this = unsafe { self.get_unchecked_mut() };
            let mut pinned = unsafe { Pin::new_unchecked(&mut this.fut) };
            match pinned.as_mut().poll(cx) {
                Poll::Pending => Poll::Pending,
                Poll::Ready(res) => {
                    unsafe { this.res_ptr.write(res) };
                    Poll::Ready(())
                }
            }
        }
    }


    Она не удваивает память и держит future всё так же на стеке. Однако я не уверен, во что она компилируется. В том плане, zero-cost эта абстракция или нет (тут я создаю pinned, который исполняет future по ссылке, но WithRes::poll тоже вызывается по ссылке).

    Это решение можно приспособить к другим проблемам, но вопрос всё ещё остаётся. Я проверил, асинхронные замыкания тоже не удваивают память. Василий Банников, стоит ли мне спросить на иностранном форуме и поднять issue?
    Написано
  • Почему асинхронный блок поверх асинхронного асинхронного блока удваивает память?

    Eugene-Usachev
    @Eugene-Usachev Автор вопроса
    Василий Банников, я помню, что они делают именно так (вставляют блок в блок), но я перечитал часть исходников и не нашёл там этого. Так что я или плохо искал, или они с этим не борются.
    Написано
  • Почему асинхронный блок поверх асинхронного асинхронного блока удваивает память?

    Eugene-Usachev
    @Eugene-Usachev Автор вопроса
    Василий Банников, а потребитель поймёт, что память удваивается? Я это обнаружил, потому что в режиме debug собираю статистику размеров future. Потребитель увидит только большие затраты памяти.
    Написано
  • Почему в Go вакансиях требование знания PHP?

    Eugene-Usachev
    @Eugene-Usachev
    Сергей Горностаев, где они ищут разработчиков на Rust, и как туда попасть?
    Написано
  • Как в библиотеке пометить макрос, как unstable?

    Eugene-Usachev
    @Eugene-Usachev Автор вопроса
    Мне нравиться эта мысль, спасибо.
    Написано
  • Есть ли разница кто будет обрабатывать оплату на сайте - фронт или бек?

    Eugene-Usachev
    @Eugene-Usachev
    Сергей Соловьев, я не уверен, что Вы правильно поняли вопрос. Автор причислил к "клиенту" nextjs, который в большинстве случаев является отдельным сервером (не только отдаёт статику, но и может отправлять запросы другим серверам, скрыто от пользователя). Если автор использует nextjs в бессерверном режиме, Ваш ответ верный. Но автор не уточнил этого.
    Написано
  • Как обрабатывать корутину с бесконечным циклом?

    Eugene-Usachev
    @Eugene-Usachev
    historydev, если уж правильно, то так
    Корутина (сопрограмма) — это блок кода, который работает асинхронно, то есть по очереди.

    То что называется горутины, по сути является и корутинами. Корутины есть почти в любом современном языке программирования (если не в любом). Это и те же async / await Rust, Promises в JS и так далее.
    Написано
  • Как писать микросервисную архитектуру?

    Eugene-Usachev
    @Eugene-Usachev Автор вопроса
    Дмитрий, спасибо за объяснение. Я честно не вижу применений этой архитектуре, но вы подпитали моё любопытство.
    Написано
  • Как писать микросервисную архитектуру?

    Eugene-Usachev
    @Eugene-Usachev Автор вопроса
    Дмитрий, спасибо за ответ!
    Написано
  • Как писать микросервисную архитектуру?

    Eugene-Usachev
    @Eugene-Usachev Автор вопроса
    Дмитрий, хорошо. Это я и спрашивал изначально. Я просто наслушался всяких спикеров из Avito, которые решали такие проблемы через саги. Но если это нормальная практика - я не против. Однако у меня вопрос. Вы сами реализовывали (работали в проекте с этим) взаимодействие одного сервиса с несколькими БД или это только ваши мысли?
    Написано
  • Как писать микросервисную архитектуру?

    Eugene-Usachev
    @Eugene-Usachev Автор вопроса
    Everything_is_bad, интересное решение. Однако, как Вы это себе представляете (я без грубости, правда интересно)? То есть нужно создать отдельный сервис, который пишет в очередь сообщений всё, что происходит с чатам с сообщениями в них? Тогда мы действительно уходим от блокировки чатов (правда теперь мы блокируем целую очередь, что не так эффективно, но зато мы прячем от программиста реализацию, вы же это имели в виду?) и полностью убираем проблему транзакций, но это решение выглядит странно (отдельный сервис для очереди). Если не отдельный сервис, то мы обязываем сервисы реализовывать эту функцию, как
    получить запрос -> отправить его в очередь -> встать в ожидание ответа из очереди

    Тут я уже не могу судить, так как не видел таких реализаций ни на одном докладе или литературе. Это нормальная практика?
    Написано