Node.js — это популярный инструмент для построения клиент-серверных приложений. При правильном использовании, Node.js способен обрабатывать большое количество сетевых запросов, используя всего один поток. Несомненно, сетевой ввод — вывод является одной из сильнейших сторон этой платформы. Казалось бы, что используя Node.js для написания серверного кода приложения, активно использующего различные сетевые протоколы, разработчики должны знать, как эти протоколы работают, но зачастую это не так. Виной тому еще одна сильная сторона Node.js, это его пакетный менеджер NPM, в котором можно найти готовое решение практически под любую задачу. Используя готовые пакеты, мы упрощаем себе жизнь, переиспользуем код (и это правильно), но в то же время скрываем от себя, за ширмой библиотек, суть происходящих процессов. В этой статье мы постараемся разобраться в протоколе WebSocket, реализуя часть спецификации, не используя внешних зависимостей. Добро пожаловать под кат.
User
HA-кластер, файловые системы, реплицируемые по сети
3 min
5.2KО чем: делал кластер высокой готовности на двух нодах, с использованием heartbeat. Кластер под веб-сервер (apache, nginx, php, mysql). Здесь не инструкция о поднятии подобного кластера, а заметки по поводу использования кластерных файловых систем, то, чего не хватает в распространенных статьях и описание грабель, на которые наступил я.
+4
Массовая почтовая рассылка через Exim или как не попасть в спам
4 min
97KЖизнь была прекрасна и все было в этом мире хорошо, пока почта с моего сайта не стала активно посылаться в спам практически всеми крупными почтовыми серверами. Особенно усердствовал в этом Gmail. Частенько меня принимали за спамера в Yandex, реже в mail.ru и rambler.
Исходя из совокупности представленных факторов стало понятно, что надо что-то делать с настройками своего почтового сервера Exim. Посмотреть, как это было сделано, приглашаю под хабракат.
Исходя из совокупности представленных факторов стало понятно, что надо что-то делать с настройками своего почтового сервера Exim. Посмотреть, как это было сделано, приглашаю под хабракат.
+72
Cкоростная синхронизация миллиарда файлов
7 min
95KЕсть несколько идентичных серверов (4 ноды) на Amazon EC2 с Ubuntu. Каждый генерирует и хранит у себя на диске кэш, который хотелось бы синхронизировать. Но простой rsync тут не подойдет — файлов несколько миллиардов, nfs — слишком медлителен, и т. д. Полный список рассмотренных вариантов с пояснениями ниже.
К тому же, время от времени нужно удалять устаревшие файлы сразу на всех серверах, что пока делается вручную и занимает несколько суток. Вопрос наиболее быстрой для такого Use Case файловой системы планирую описать позже. Оговорюсь только, что по нескольким причинам была выбрана XFS.
После теста нескольких кластерных технологий и файловых систем, по совету старшего товарища, решили использовать тот же rsync, но в связке с inotify. Немного поискав в интернете готовое такое решение, дабы не изобретать велосипед, наткнулся на csyncd, inosync и lsyncd. На хабре уже была статья о csyncd, но он тут не подходит, т.к. хранит список файлов в базе SQLite, которая вряд-ли сможет сносно работать даже с миллионом записей. Да и лишнее звено при таких объемах ни к чему. А вот lsyncd оказался именно тем, что нам и было нужно.
UPD: Как показала практика, необходимо ощутимое измение и дополние в тексте. Я решил внести лишь незначительные правки в основную часть, а новыми выводами поделиться в конце статьи.
К тому же, время от времени нужно удалять устаревшие файлы сразу на всех серверах, что пока делается вручную и занимает несколько суток. Вопрос наиболее быстрой для такого Use Case файловой системы планирую описать позже. Оговорюсь только, что по нескольким причинам была выбрана XFS.
После теста нескольких кластерных технологий и файловых систем, по совету старшего товарища, решили использовать тот же rsync, но в связке с inotify. Немного поискав в интернете готовое такое решение, дабы не изобретать велосипед, наткнулся на csyncd, inosync и lsyncd. На хабре уже была статья о csyncd, но он тут не подходит, т.к. хранит список файлов в базе SQLite, которая вряд-ли сможет сносно работать даже с миллионом записей. Да и лишнее звено при таких объемах ни к чему. А вот lsyncd оказался именно тем, что нам и было нужно.
UPD: Как показала практика, необходимо ощутимое измение и дополние в тексте. Я решил внести лишь незначительные правки в основную часть, а новыми выводами поделиться в конце статьи.
+55
Многоуровневое дерево с маркерами, сохраняющее состояние (HTML, CSS, jQuery, Cookies)
6 min
19KПродолжается развитие темы о многоуровневом дереве с маркерами.
Теперь дерево выросло и окрепло, стало взрослее и помнит выбранный узел и состояние кажого узла в отдельности.
Страницу можно перезагружать, а дерево все равно будет помнить все что вы открыли и выбрали!
Теперь дерево выросло и окрепло, стало взрослее и помнит выбранный узел и состояние кажого узла в отдельности.
Страницу можно перезагружать, а дерево все равно будет помнить все что вы открыли и выбрали!
+33
Написание своего Session Store Provider ASP.NET использующего Redis
8 min
5.3KПриветствую,
В этой статье я бы хотел поделиться опытом написания собственного Session Store Provider'a с использованием Redis в качестве хранилища.
Про Redis много всего написано. Но если вкратце, то Redis это очень быстрое хранилище в формате ключ-значение (и не только). Как мне кажется, очень хорошо подходит для подобных задач и мне давно было интересно попробовать его в своем проекте.
Так же, для тех кто хочет попробовать результат в деле, я дам ссылку на исходники.
В этой статье я бы хотел поделиться опытом написания собственного Session Store Provider'a с использованием Redis в качестве хранилища.
Про Redis много всего написано. Но если вкратце, то Redis это очень быстрое хранилище в формате ключ-значение (и не только). Как мне кажется, очень хорошо подходит для подобных задач и мне давно было интересно попробовать его в своем проекте.
Так же, для тех кто хочет попробовать результат в деле, я дам ссылку на исходники.
+22
Установка FreeBSD на сервер в Hetzner.de
7 min
11KПосле разочарования в Serverloft поиск провайдера был активно продолжен, и после долгих дискуссий было решено остановиться на hetzner.de. Небольшие недостатки есть, но в целом отзывы о нем очень положительные. Разумеется, требование к серверам было то же — возможность установить FreeBSD. Официально Hetzner не поддерживает автоматическую установку FreeBSD, но уважаемый %username% подсказал, что у них в вики есть статья по установке FreeBSD, используя их Rescue систему. Я бегло проглядел статью в вики — вроде все понятно. Итак, сервер приобретен, подготовлены скрипты для деплоя всего и вся, но… Оказалось, что не все так просто…
Спойлер для тех, кому лень читать полностью: негатив в посте отсутствует, много извращений и хеппи-энд присутствуют :)
+57
Основы репликации в MySQL
10 min
327KС репликацией серверов MySQL я познакомился относительно недавно, и по мере проведения разных опытов с настройкой, записывал, что у меня получалось. Когда материала набралось достаточно много, появилась идея написать эту статью. Я постарался собрать советы и решения по некоторым самым основным вопросам, с которыми я столкнулся. По ходу дела я буду давать ссылки на документацию и другие источники. Не могу претендовать на полноту описания, но надеюсь, что статья будет полезной.
+68
Как загружается Linux
9 min
20KTutorial
Update: Статья и скрипты были обновлены в марте 2013 (прошло 5 лет, старые скрипты не сильно отличаются от текущих, но всё-таки лучше изучать актуальный код, а логика загрузки системы за эти годы немного изменилась — иначе работает udev, появились новые синтетические fs вроде devtmpfs,
Когда я осваивал Linux, мне было очень интересно что происходит при загрузке системы. Попытка разобраться в процессе загрузки привела меня в исходники загрузочных скриптов (
Когда меня окончательно достал RedHat (2001 год), я решил собрать свой дистрибутив на базе LFS. Для своего дистрибутива пришлось самостоятельно разрабатывать загрузочные скрипты, и тут-то выяснилась правда: ничего сложного в процессе загрузки нет!
/var/run
переехал в /run
, etc.).Когда я осваивал Linux, мне было очень интересно что происходит при загрузке системы. Попытка разобраться в процессе загрузки привела меня в исходники загрузочных скриптов (
/etc/inittab, /etc/rc*, /etc/init.d/*, ...
) и их конфигов (/etc/sysconfig/*, /etc/cond.f/*, ...
). Надо отметить серьёзные размеры и сложность этих скриптов — чтобы в них разобраться потребовалось немало времени. Но я в те времена искренне верил, что загрузка это сложный процесс, и что размеры и сложность загрузочных скриптов вполне оправданы.Когда меня окончательно достал RedHat (2001 год), я решил собрать свой дистрибутив на базе LFS. Для своего дистрибутива пришлось самостоятельно разрабатывать загрузочные скрипты, и тут-то выяснилась правда: ничего сложного в процессе загрузки нет!
+67
Использование runit для своих сервисов
3 min
50KСупервизор сервисов runit позиционируется как замена стандартным скриптам инициализации Unix.
Но на практике оказалось, что runit идеален для управления сервисами безотносительно инициализации и т.п.
Супервизор берёт на себя такой функционал, как:
Для большинства операционных систем runit уже входит в репозитории пакетов (apt-get install runit). Кроме того, мы имеем уже готовый набор рецептов для популярных сервисов (nginx, apache etc.).
Но на практике оказалось, что runit идеален для управления сервисами безотносительно инициализации и т.п.
Введение
Супервизор берёт на себя такой функционал, как:
- превращение любого процесса в демон;
- логгирование вывода процесса и ротирование логов;
- запуск, остановка, рестарт, запрос состояния, управляющие скрипты для init.d;
- выключение и запуск сервисов автоматически при появлении новых сервисов в списке либо удалении старых из списка;
- возможность ведения нескольких независимых списков сервисов одновременно (например, для каждого пользователя отдельно и для системы в целом);
- удобный API для управления сервисами.
Для большинства операционных систем runit уже входит в репозитории пакетов (apt-get install runit). Кроме того, мы имеем уже готовый набор рецептов для популярных сервисов (nginx, apache etc.).
+35
Web-интерфейс для runit
1 min
7.3KВы уже используете runit на своих серверах? Теперь у Вас есть возможность наблюдать за состоянием сервисов и управлять ими через минималистичный Web-интерфейс.
Для работы этой утилиты Вам нужно поставить ruby и rubygems, и затем выполнить
Для работы этой утилиты Вам нужно поставить ruby и rubygems, и затем выполнить
gem install runit-man thin
+4
SUID и безопасность
8 min
22KTranslation
Предисловие. Некогда в июне 2001 года в журнале «Системный администратор» (Sys Admin Magazine, June 2001, Volume 10, Number 6) была опубликована статья Томаса Акина «Danger of SUID Shell Scripts», которая не теряет своей актуальности и сегодня. К сожалению, в конце лета 2007 года журнал перестал выходить. По неизвестным мне причинам сайт журнала также прекратил существование — точнее он сейчас переадресовывает посетителей на другой. Было бы здорово, если бы сайт просто «заморозили», сохранив архив всех накопившихся материалов, который бесспорно представил бы собой кладезь полезной практической информации для специалистов сферы ИТ. В Сети можно найти скудные копии статьи, о которой идет речь; у меня же нашелся бумажный вариант оригинала и я хочу представить вольный перевод с небольшим дополнением. Некоторые моменты статьи мне кажутся несколько глупыми (например, использование временных файлов), некоторые — непривычными (оболочки, которые использует автор), но в целом я уверен — в статье есть на что обратить внимание, взять на заметку и не забывать.
+2
Information
- Rating
- Does not participate
- Location
- Донецк, Донецкая обл., Украина
- Date of birth
- Registered
- Activity