Search
Write a publication
Pull to refresh
0
0
Sergey Cherepinskii @sergeyhc

BackEnd разработчик

Send message

Возьмите pgx

Мы внимательно изучали документацию GORM, у них под капотом уже pgx, так зачем делать костыли, когда уже есть достаточно хороший и развивающийся ORM?

а ещё замените стандартный encode/json на github.com/json-iterator/go

У нас собственный утилиты на GO, которые позволяют эффективно работать с JSON, однако спасибо за ваши идеи.

Удобно? Вы видели Express, Koa, Hapi? Вот с ними удобно, а NestJS это бегемот неудобный и сверх медленный в плане перформанса.

Об express можно сразу забыть, он использует устаревший паттерн callback-функций и приводит к печальным последствиям. В остальном Nest js предлагает отличную архитектуру из коробки и заставляет следовать некоторым паттернам разработки.

Поздравляю, а разве не очевидно что изначально использовать MongoDB это провальная идея?

К сожалению, не всё сразу удаётся оценить в нужно виде. Нам пришлось пройти через пробы и ошибки. Во время смены стека, мы решились на этот шаг. Потому-что переписать наш ORM и Репы в Nest.JS было бы слишком затратно.

Запах ИИ? Возможно, это аромат индексов, кеширования и connection pooling’а. Или просто свежий воздух, появившийся после оптимизации запросов. Но если хочется разобраться глубже, могу объяснить — только предупреждаю, эффект может быть необратимым.

И что-то ключевые факторы никак не объясняют, с чего вдруг запросы быстрее стали выполняться.

Давайте поговорим про скорость выполнения, насчёт первого и второго фактора.

Go компилируется в машинный код, что обычно и делает его быстрее, чем интерпретируемые или JIT-скомпилированные языки. При это сами двоичные файлы Go оптимизированы для производительности.

В то время, как Nodej.js интерпретируется с помощью движка V8, который использует компиляцию Just-In-Time (JIT). Хотя V8 и высоко оптимизирован, он обычно не может сравниваться с чистой скоростью выполнения компилируемых языков, в нашем случае Go.

Горутины:
Go использует горутины, которые чрезвычайно легковесны по сравнению с потоками. Он может эффективно обрабатывать тысячи параллельных задач, благодаря своей модели параллелизма и планировщику. Что очень важно с больших количествах запросов.

В то время, как Node.js использует управляемую событиями, неблокирующую модель ввода-вывода. Он обрабатывает параллелизм с помощью однопоточного цикла событий, который эффективен для задач ввод-вывода, но может испытывать трудности с задачами, которые связаны с процессором.

К ответу приложим сравнение различных методов и алгоритмов языка программирования проведённых другими разработчиками.

Надеюсь мы ответили на ваш вопрос.

Статья носит обзорный характер, и мы опустили множество технических нюансов. В скором времени планируем опубликовать дополнительные материалы с конкретными данными по этапам миграции и подробными показателями производительности. Поэтому уровень статьи "Простой".

Go заметно снижает время выполнения запросов благодаря двум ключевым факторам:
- Компиляция в машинный код: Go-компилятор генерирует оптимизированный код, что обеспечивает более быструю работу по сравнению с интерпретируемыми языками.

- Горутины позволяют легко распределять задачи обработки запросов по многим потокам, что минимизирует задержки на I/O и синхронизацию, приводя к ускорению выполнения некоторых операций.

За счёт этих ключевых факторов, есть большое влияние на скорость выполнения запросов.

На текущий момент разработка выполняется закрыто и доступ к сайту для широкой аудитории не открыт. У нас реализованы разные сервисы от SSO до самого сайта.

Мы полностью переписали приложение, не ограничиваясь заменой СУБД. Новая архитектура на Go позволила оптимизировать потоки, снизить нагрузку на ОЗУ и ЦП, а также использовать все преимущества языка. 

Процент заслуги можно считать совокупным: и оптимизация СУБД, и мощь Go сыграли свою роль.

Information

Rating
Does not participate
Location
Россия
Works in
Registered
Activity

Specialization

Backend Developer
Lead
NestJS
TypeScript
Node.js