• При каких случаях необходимо прописывать транзакции в базе данных?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Всегда нужно использовать транзакции
    Ответ написан
    1 комментарий
  • Как работает модуль cluster в nodejs?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Без cluster нода работает на 1 ядре, для масштабирования создаются новые процессы через cluster.fork(); Каждый из процессов может узнать, он главный или дочерний, через cluster.isMaster и cluster.isWorker. Между процессами можно передавать сообщения (события) и сокеты (дескрипторы сокетов). Таким образом, tcp или http сокеты принимаются главным процессом, а на обработку отправляются в один из дочерних. Это в двух словах, подробнее хорошо все написано в доках https://nodejs.org/api/cluster.html
    Ответ написан
    4 комментария
  • Nodejs - и все же как решается задача с многопоточностью?

    edli007
    @edli007
    full stack, team lead
    Вы прочитали сильно устаревшие статьи (очень сильно)
    https://nodejs.org/api/cluster.html
    Ответ написан
    1 комментарий
  • Nodejs - и все же как решается задача с многопоточностью?

    @MrCheater
    Full-Stack JS. В прошлом программист-олимпиадник
    Многопоточность решается так - поднимается кластер из нескольких Node.js контейнеров, а перед ним ставится балансировщик.

    Практически всё кодится на асинхронных функциях без блокировок

    БД можно подключить практически любую. К ним написаны асинхронные либы без блокировок

    NodeJS может всё (а чего не может - можно сделать через внешние программы)
    Длительность операций любая
    Ответ написан
    4 комментария
  • Как правильно реализовать реагирование на изменение записи в таблице БД?

    @d-stream
    Готовые решения - не подаю, но...
    Самая "конечная" точка - триггеры. То есть например в момент реально финализировавшейся транзакции. Но от триггера "прогнать наверх" это событие - сильно зависит от архитектуры взаимодействия. Если есть некая таблица в БД, реализующая очередь уведомлений - то тогда можно триггером добавлять в нее это самое событие изменения... ну а дальше когда-то это уведомление будет вынуто из очереди и отправлено.
    Ответ написан
    5 комментариев
  • Как обеспечить отказоустойчивость БД Postgres?

    Xuxicheta
    @Xuxicheta
    инженер
    Ответ написан
    Комментировать
  • Как обеспечить отказоустойчивость БД Postgres?

    @nrgian
    Никак.

    Можно только приблизится.

    Master-slave, к примеру, поможет не потерять данные PostgreSQL, но это не означает, что система корректно переключится на полноценную работу со slave при выходе из строя master. Принимать решение о переключении придется вручную.
    Ответ написан
    2 комментария
  • Как обеспечить отказоустойчивость БД Postgres?

    Melkij
    @Melkij
    PostgreSQL DBA
    как правильно обеспечить надежность и безотказность ее работы?

    Использовать адекватное железо и не мешать базе работать шаловливыми ручками.

    доступен 24 часа 7 дней в неделю.

    бекап

    Объясните, пожалуйста, как это по вашему мнению между собой связано?
    Бекапы необходимы, но как они связаны с высокой доступностью?

    в случае проблем с доступностью, перезапускать/запускать саму СУБД.

    Простой вопрос: зачем?
    Если база сложилась и даже не смогла подняться самостоятельно - значит проблема капительная и разбираться надо детально. Рестартом по кругу вы можете скорее сделать совсем плохо, чем что-либо починить.
    При том обычно проблемы начинаются от того что разработчики выкатили новую версию приложения и та начинает делать что-то странное. Например, забыли сделать индекс на 50гб табличку и засунули запрос с поиском по ней на главную сайта. Рестартом базы это, разумеется, не исправляется. А делает только больнее.

    Многолетней давности pg_postmaster_start_time() впечатлять не буду - мы периодически ставим минорные апдейты на свои базы. И вам тоже весьма рекомендую обновиться до 10.7 или лучше уже на следующих выходных сразу до 10.8.

    А так, если не трогать - то годами будет работать. Мониторинг и алерты от него, разумеется, нужны. Какая-то автоматика при наступлении алерта - обычно приносит куда больше головной боли, чем помогает.

    какие операции, запросы или их комбинации нежелательны для БД и могут привести к проблемам.

    Большая часть инцидентов с недоступностью сервиса с точки зрения приложения - про уровни блокировок. Кто-нибудь попробует сделать create index вместо create index concurrently и привет ожидание блокировки на всю запись в таблицу. Большинство форм alter table сюда же, но они и чтение заблокируют.
    Ответ написан
    Комментировать
  • В чем отличие при подключении по SSH через Putty и через терминал Ubuntu?

    @BorisKorobkov
    Web developer
    Putty использует кодировку из настроек "Settings" / "Window" / "Translation".

    SSH использует кодировку вашего компа (что говорит locale?). Возможно сервер ее не поддерживает.

    Закомментируйте SendEnv LANG LC_* на вашем компе в файле /etc/ssh/ssh_config
    Ответ написан
    2 комментария
  • В чем отличие при подключении по SSH через Putty и через терминал Ubuntu?

    @lexas
    Вероятнее всего парсеры внутри джава приложения используют кодировку по умолчанию.
    Как вариант решения можно рассмотреть:
    - задать переменные user.language, user.country and user.variant
    пример:
    java -Duser.language=ru -Duser.country=RU -cp ....
    - если исходный код доступен, то я бы убрал использование дефолтных кодировок и явно передавал необходимые кодировки.
    - ну и как вариант можно смотреть. переменные окружения при поделючениях.
    Ответ написан
    1 комментарий
  • Как связать frontend c backend-ом, backend с внешним медленным сервисом для возможности параллельной обработки множества запросов?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Вы намешали все в кучу. Разберем по полочкам:
    1. вы не сказали что у вас за фронтэнд. Обычный JS, полагаю?
    2. Никакой фронтэнд не однопоточный, если только вы сами так не сделали
    3. Микросервисная архитектура это хорошо, делайте, но к вашей задаче не относится никак
    4. Для распараллеливания на бэкэнде для вашей задачи познакомьтесь с Message Broker: RabbitMQ или Kafka, например
    Ответ написан
    3 комментария
  • Кто понял docker?

    @bamaz
    Вы путаете задачи.
    Деплой удобный - это не Докер.

    Дело Докера - сэмулировать окружение операционной системы, чтобы моя программа могла запускаться где угодно. И все. Плюс удобное API.

    Мы вот сейчас используем Yandex Cocaine. Хорошая вещь. Но безпроблемно компилируется только на Ubutnu 14.04. Поэтому мы его просто запускаем в Docker.

    А сам Яндекс Кокаин уже умеет запускать нужные нам приложения ))) Вот такая змея, кусающая себя за хвост, получается. )))

    То есть Докер решает одну из задач Деплоя - воспроизводимость операционного окружения запускаемой программы (не забывайте, что маппирование портов и дисков все же остается снаружи). При этом оно кушает немножко лишнего дискового места (хотя при использании всех образов с единым предком - не так уж и много).

    Запускается довольно быстро.

    То, о чем вы пишете - удобная и воспроизводимая настройка - это к инструментам типа Puppet, Ansible, Chief, Salt.

    Будут ли они при этом использовать Докер или нет - другой вопрос. Скорее, да, будут использовать - для упрощения.

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

    docker-compose - это всего лишь утилита для оркестрации, которая позволяет запустить то, что записано в конфигурационном файле.

    Наш Яндекс-Кокаин даже более комплексное средство оркестрации с дополнительными возможностями - пользоляет использовать Докер, а также содержит в одном флаконе и средства мониторинга, логгирования, распределения нагрузки по кластеру и пр. и пр. Но вещь весьма специфичная.

    Поэтому я бы обратил ваше внимание для оркестрации Докер-контейнеров на продукты HashiCorp, Kubernetes, Mesos.
    Ответ написан
    Комментировать
  • О Docker или отличие от виртуальной машины и немного о Vagrant...?

    @bamaz
    Хотелось бы узнать в чем различие между Virtualbox(VMware) и Docker?


    Docker - строгая изоляция ресурсов внутри операционной системы Linux.
    Не более того. То есть бинарный файл запускается в той же ОС, но не имеет доступа за пределы выделенной ему клетки. Программа (одна-единственная вообще говоря в Докер предполагается программа) может иметь свои-собственные зависимости, более того, допускается использование совсем другой версии Linux внутри Докер-контейнера.

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

    Это делается на уровне API ОС, следовательно, довольно не накладно по производительности. Правда, при неграмотном использовании (когда в качестве предков в образе используются разные образы) накладно по расходу дискового пространства.

    В частности Docker умеет запускать только Linux из под Linux, причем не какие угодно версии годятся, в контейнере Докера может быть только специально подготовленная (облегченная). В других OC - Windows, MacOSX - Докер реализован как полноценная виртуальная машина с Линуксом, следовательно, жрет ресурсов много.

    VirtualBox - это настоящая виртуальная машина, то есть внутри может быть действительно совершенно другая ОС. Не только Linux. Полная изоляция вплоть до эмуляции аппаратных портов-ввода вывода. Изоляция более строгая. Но требует намного больше ресурсов.

    Запуск виртуальной машины сопряжен со значительными затратами времени. Лучшие виртуальные машины откусывают не менее 15% производительности....

    Запуск программы в Docker - сопоставим с запуском обычного бинарного файла внутри обычного операционного окружения (если уж быть точным - то чуть больше, но незначительно).

    При грамотном использовании вы можете запускать на обычном домашнем компьютере хоть сотни Докер-контейнеров.

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

    Если я правильно понимаю, я могу и там и там поднять любую ОС, к примеру ту же Ubuntu и LAMP.


    Внутри Докера - далеко не любую. Выбор ограничен считаным числом специально подготовленных дистрибутивов Линукса.

    Внутри Virtual Box - действительно любую.

    Только разница в том что к Docker я буду иметь доступ сразу же из bash, а к VB через её окно или ssh,


    То, что вы хотите и через Virtual Box легко реализуется с помощью инструмента Vagrant. Будет иллюзия, что вы в Докере работаете.


    плюс если я выйду то в виртуалке все сохранится, а в Docker без коммита все умрет? Или есть другие важные отличия...?


    То, что вы имеете ввиду - можно сделать и внутри полной виртуалки - отключить персистентное сохранение на диски.
    То, о чем вы пишете - это просто концепция стейтлесс-контейнеров. То есть внутри все настроено раз и навсегда. Все изменения контейнер Докера должен делать только на смапированных внешних девайсах. Это гарантирует постоянство внешней среды для программы внутри Докер-контейнера. Крайне важно для повторяемости в продакшене. Чтобы не пришлось в 3 ночи просыпаться и искать отчего ваш сайт с миллионой посещаемостью перестал работать. Ах это потому что какая то софтина не имеющая отношения к вашей программе обновилась и потянула за собой библиотеку, не соместимую по версией с тем, что вы используйте.

    Пишут что Docker активно применяется при программировании и переносе workstations. Тоесть имеется ввиду, я могу работать с кодом прямо в docker image, после коммитить, пушить, а затем все это запускать на сервере без установки зависимостей?


    Нет.
    Концепция повторяемости такова.
    Вы программируете и дизайнере и верстаете как обычно.
    Результат своей работы вы помещаете в контейнер - отлаживаете в контейнере.
    На сервере используется тот же контейнер.
    Это гарантирует какую-то повторяемость условий при которых велась отладка и при которых будет работать все в продакшне.

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

    Vagrant, насколько я понимаю активно применяется при создании images и конфигурировании их же?


    При разработке - да.
    Так как ты можешь работать в несовместимой с docker средой (например, в Windows) и отладка возможна только через виртуальную машину.

    В продакшене - нет. Так как слишком большие накладные расходы на виртуальную машину.

    И последнее, могу ли я:
    Запустить image в Linux, сделать правки в коде (кстати как это сделать, к примеру в том же *storm, Sublime. ... ) и закоммитить.
    После войти в Windows, запустить image и там продолжить разработку?


    Думаю да,
    но это не то, для чего создавался Докер.

    А написание кода внутри виртуальной машины - возможно. Я сам так делаю.
    Ответ написан
    Комментировать