Ответы пользователя по тегу Node.js
  • Как создать микросервисы на ноде с монолита?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    99.99% что это вам не надо. Самое плохое что вы можете сделать - это не правильно разделить монолит. Вам ведь придется поддерживать еще слои взаимодействия и синхронизации между микросервисами.

    https://youtu.be/lHpVxk9TPA8
    Ответ написан
  • Что надо, чтобы написать node js веб-приложение?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Начните с детального ТЗ, и декомпозиции. "сайт - рулетку, многопользовательский режим" - это буквально значит "хочу чего-то как-то сделать".
    Ответ написан
    3 комментария
  • Как Node разрешить созать директорию без судо?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Поменять права на каталог, и ознакомиться с https://habr.com/ru/post/436132/
    Ответ написан
  • Как для Node.js защитить process.env от чтения сторонними npm-пакетами?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    В полной мере - никак
    Ответ написан
    Комментировать
  • Целесообразно ли обучаться нынешнему node.js (10.12.0) по курсам для версии 0.10?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смысла нет. Вы бы учили например windows по скринкасту для win98?
    Ответ написан
  • Какой библиотекой на Node.js можно воспользоваться для равномерного деления?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Довольно интересная задачка, тут конечно нужно еще кучу проверок сделать, но алгоримт может выглядеть примерно так: https://3v4l.org/DQRKq
    Ответ написан
    2 комментария
  • Nodejs или Golang?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Ни то, ни другое. Для Android - Java, для win - C#, для mac - Swift, для linux - С++
    Ответ написан
    Комментировать
  • Nodejs ssr и микросервисы, как правильно готовить?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Появились мысли вынести фрондетнд из основного репозитория.

    Рендеринг же на бэке, зачем?

    иметь возможность нанимать более компетентных и узкоспециализированных разработчиков

    Это как бы вообще не связано))

    упростить поддержку, понизить порог входа

    Вполне возможно, что ваши действия дадут полностью обратный эффект.

    Если я правильно понял - нода вам не нужна. Для рендеринга страниц php в принципе создавался.
    Я не знаю, что у вас за проект, но вполне возможно микросервисы вам тоже не нужны.
    Ответ написан
    5 комментариев
  • Правильно ли использовать node.js в качестве rest api сервера?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    в его асинхронности и одним процессом

    Тут нет преимущества, это обычный маркетинг))

    что даст преимущества в большом количестве подключений

    Асинхронность ни как не помогает в обработке большого количества подключений

    хорошей скорости обработки запросов

    Это чисто ваша задача

    json не надо конвертировать

    При передачи данных другому приложению - таки надо будет

    веб сокеты из коробки поддерживаются

    Вас обманули, из коробки поддержки ws ни в express ни в nodejs нет

    Какая польза в его асинхронности если при обращении к api нужно залезть в базу, дождаться ответа от нее и потом вернуть данные?

    Да как бы никакой))

    Будут ли у меня проблемы с драйверами или ORM, и хорошая ли это практика?

    Будут сложности в поддержке

    Стоит ли в моем случаи вообще использовать node.js или пойти по первому варианту и использовать PHP?

    Смысла нет.
    Ответ написан
    Комментировать
  • Java ( с либами ) против Node.js, что выбрать для вебсервиса?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Крутость асинхронности - это, к сожалению маркетинг. Нода однопоточная, асинхронность - это так, чисто разделение вашего пользовательского кода и операций ввода/вывода. Да, есть форки, но это все равно отдельные процессы без общей памяти, да в es9 есть shared memory, но это на порядки более куцее решение, чем говорят о нем.
    Асинхронный код для нано сервисов может быть и не плох, исключительно за счет скорости имплементации, но на лонг ране - это домоклов меч. Банально, у вас в одном из промисов происходит исключение, как вы определите что не так? Только догадки, так как это произойдет в следующем тике, а там основная часть стектрейса уже потеряна. Я уже молчу про кровь из глаз при покрытии асинхронного кода тестами.
    Ответ написан
    7 комментариев
  • Почему такой код считается нормальным?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    В функциях не должно быть глобальных переменных

    Да, это плохая практика, но nodejs ее пропагандирует, увы.

    Каждая функция должна быть написана так, чтобы её можно было скопировать в другой проект без изменений

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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Жуть какая. Ваш сервис будет деградировать с повышением нагрузки И повышением количества воркеров.

    А теперь вопрос, как быть с массивами?

    Наверное заюзать мютексы, которых нет.

    Нода - это однопоточная штука, не надо эмулировать многопоточность. Вам же это еще и поддерживать.

    Вполне нормальный кейс:
    Кэш хранить в Redis, или чем-то типа того, ну а сервисы на ноде уже stateless.
    Да, в такой схеме вы потеряете на издержках сети, зато получите простоту в горизонтальном масштабировании.

    з.ы. посмотрите в сторону golang
    Ответ написан
    3 комментария
  • Оправдано ли будет использование NodeJS в качестве бэкенда крупного приложения?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Оправдано ли будет использование NodeJS в качестве бэкенда крупного приложения?

    Если крупного - по нагрузкам и маленького по коду, вполне возможно. Если же предполагается крупная кодовая база, нода - это не лучшая идея.

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

    Приведу несколько примеров.

    Валидация аргументов, да можно заюзать typescript, как базу для этого, но есть момент: по хорошему, если вы вызвали некий метод с неправильными данными - его штатная работа не возможна, не плохо бы бросить исключение, но не все так просто, если ваш даже синхронный метод вызовется асинхронно - вы обязаны, либо сделать его сразу асинхронным и передавать ошибку, либо всюду хреначить try-catch, чего оптимизатор v8 не любит.

    С тестами асинхронного кода все очень плохо, вам придется обмазываться всякими proxyquire, sinon и т.д. При этом очень внимательно следить за очисткой состояния. Да, я понимаю, что моки и в других языках нужно юзать, но тот же proxyquire можно сравнить с php-шным runkit, что как бы вообще по хорошему трогать не надо, а придется. Примите также за исходную, что вы будете много времени тратить на то, что бы понять какой из тестов асинхронщины у вас сфейлился.

    Рано, или поздно у вас возникнет потребность в неком DI контейнере, привычный require 'myService' уже не прокатит. Пробросы зависимостей станут источником ошибок. Если вы не будете это дело покрывать функциональными тестами много ошибок обнаружите уже на stage сервере.

    Изоморфные приложения - это просто маркетинговый булшит)) Для крупных проектов характерно использование одних и тех же сущностей в абсолютно разных контекстах, причем на бэке в своих, а на фронте в своих. Но, конечно же, если очень хочется - можно делать более абстракные сущности, что бы они работали и там и там, очень скоро ваш код станет не саппортабельным.

    Лука Никитин
    Не проводили тест, когда по 2 сервера и на ноду и на php?
    Ответ написан
    2 комментария
  • Как начать работать с Docker?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Контейнер дохнет, если основной процесс внутри закончился. Смотрите логи
    docker logs НАЗВАНИЕ_КОНТЕЙНЕРА
    НАЗВАНИЕ_КОНТЕЙНЕРА вытягиваем через
    docker ps -a
    Ответ написан
    5 комментариев
  • Как в 20 17 учить node.js?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Изучение nodejs чем-то принципиально отличается от изучения других платформ / языков?))
    Идете в книжный, просите книгу, читаете произвольный абзац гдето по средине. Если ввобще не понятно о чем написано - книга вам не подходит, просите другую.
    Читаете и практикуете.
    Ответ написан
    8 комментариев
  • Что означает однопоточность Node.js?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Значит ли это, что 143 потока процессоров будут простаивать ?

    грубо говоря да

    Решают ли кластеры эту проблем ?

    да, но проще запустить N процессов nodejs через тот же supervisord

    Значит в воркеры можно поместить только какие то вычисления.

    можно, правда целесообразность зависит от поставленной задачи

    Мне лично кажется именно по этой причине Node не применяется для действительно сложных проектов с огромной аудиторией

    для чего-то маленького, завязанного на event-loop нода подходит, тот же statsd - вполне production hl решение.
    Ответ написан
    Комментировать
  • Разъясните по Node.JS: это сервер или сборщик, или то и другое?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Node.JS - это сервер

    Нет, это платформа.

    как, допустим, написанный на нем сайт состыковать с Апачем или Nginx

    Если под сайтом вы понимаете http сервер на nodejs - за счет проксирования. Для отдачи статики - nodejs не нужен, nignx хватит с головой.

    на его базе собирают проекты а потом переносят на другие сервера.

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

    нет хостингов на его базе?

    Если вы выбрали ноду, учитывая что уровень вхождения у нее на порядки выше - вероятно вам нужно нечто специфическое и требования к конфигурированию окружения у вас более высокие. Это на пыхе можно забросить wp в публичный каталог и сказать, что так и было.
    В остальном - под хостинг проектов на nodejs - есть тьма vps/vds, а хостинг именно под приложения для nodejs - имхо не нужен.

    Я собираю на базе Ноды в сборщиках сайт, а потом его как готовую приложуху выношу на любой сервак?

    Если вам нужен только сборщик статики - в принципе да. Если же вы хотите ноду как бэкенд использовать - тогда этот вопрос придется продумывать, в зависимости от вашего проекта.
    Ответ написан
    1 комментарий
  • Как обеспечивается согласованность данных между процессами в кластере Node.js?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Господа, будьте добры рассказать каковы традиционные подходы при разработке ПО для кластера Node.js относительно обеспечения согласованности информации между процессами кластера?

    В рамках одного инстатса - собственно то же самое, что и на c++ - общая память. Создаем в некоем общем скопе сервис с данными, которые нужны для всех и используем.
    В рамках кластера - кэширующие сервера, типа memcached, redis.

    Что я должен учитывать разрабатывая бекэнд-приложение для кластера Node.js?

    Несколько факторов:
    - оно течет, и вы не раз будете вытирать капли крови из глаз, пытаясь понять где.
    - качество существующих решений в большинстве случаев - невероятно низкое. Чего только стоит https://habrahabr.ru/post/280099/
    - у вас будет много зависимостей хотите вы того, или нет.
    - если вам не помогает событийная модель - Node.js вероятно не то, что вам надо.

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

    Кэшировать в скопе, доступном для каждого из ваших процессов.

    Кроме того, являются ли мои примеры корректными, практикуется ли описанное кеширование данных в бекэнд-приложениях на Node.js?

    По тому, как оно внутри работает - безусловно. Визуально же будет несколько по другому.

    const http = require('http');
    
    const hostname = '127.0.0.1';
    const port = 3000;
    
    const I_AM_CACHE = {
        "some": "data",
    };
    
    const server = http.createServer((req, res) => {
      res.statusCode = 200;
      res.setHeader('Content-Type', 'text/plain');
      res.end(JSON.stringify(I_AM_CACHE));
    });
    
    server.listen(port, hostname, () => {
      console.log(`Server running at http://${hostname}:${port}/`);
    });
    Ответ написан
  • Можно ли интегрировать приложение nodejs в приложение на php?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Будет ли это работать с моим приложением?

    Но у меня нет знаний по ноде, понятия не имею как она работает

    Очевидно нет. Для любого решения нужна интеграция. Если вы понятия не имеете как это сделать - то и интегрировать не выйдет.
    Ответ написан
    Комментировать
  • Проблема "тормознутости" Ruby реальна в наше время?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Игровые сервера бывают разные и трбования к производительности тоже отличаются.
    Если у вас нет опыта построения аналогичных проектов - сделайте сначала прототип на языке, который лучше знаете. Получив этот опыт вы поймете на чем акцентировать внимание в конечном продукте, как следствие - стоит ли менять язык - тоже.
    Ответ написан
    Комментировать