Как стать автором
Обновить
38
0
Николай Тузов @JustSkiv

Senior Golang Developer

Отправить сообщение

Сервер на стероидах: FreeBSD, nginx, MySQL, PostgreSQL, PHP и многое другое

Время на прочтение16 мин
Количество просмотров40K
Нравится мне эта картинка, у меня, вот никогда такие красивые графики в какти не получались =(

Введение


С момента написания мной предыдущей статьи по оптимизации этой связки прошло довольно много времени. Тот многострадальный Pentium 4 c 512Мб памяти, обслуживающий одновременно до тысячи человек на форуме и до 150,000 пиров на трекере уже давно покоится на какой-нить немецкой, свалке, а клуб сменил уже не один сервер. Всё сказанное в ней всё ещё остаётся актуальным, однако есть вещи которые стоит добавить.
Статья большая, так что будет поделена на логические блоки:

0. Зачем вообще что-то оптимизировать?
  
1. Оптимизация ОС (FreeBSD)
  1.1 Переход на 7.х 
  1.2 Переход на 7.2
  1.3 Переход на amd64
  1.4 Разгрузка сетевой подсистемы
  1.5 FreeBSD и большое кол-во файлов
  1.6 Softupdates, gjournal и mount options
  
2. Оптимизация фронтенда (nginx)
  2.1 Accept Filters
  2.2 Кеширование
  2.3 AIO
  
3. Оптимизация бэкенда
  3.1 APC
  3.1.1 APC locking
  3.1.2 APC hints
  3.1.3 APC fragmentation
  3.2 PHP 5.3
  
4. Оптимизация базы данных
  4.1 MySQL 
  4.1.1 Переход на 5.1
  4.1.2 Переход на InnoDB
  4.1.3 Встроеный кеш MySQL - Query Cache
  4.1.4 Индексы
  
4.2 PostgreSQL
  4.2.1 Индексы
  4.2.2 pgBouncer и другие.
  4.2.3 pgFouine
  
4.3 Разгрузка базы данных
  4.3.1 SphinxQL
  4.3.2 Не-RDBMS хранилище
  4.4 Кодировки
  4.5 Асинхронность
  
Приложение. Мелочи.
  1. SSHGuard или альтернатива.
  2. xtrabackup
  3. Перенос почты на другой хост
  4. Интеграция со сторонним ПО
  5. Мониторинг
  
 6. Минусы оптимизации

Кому что-нибудь из этого списка интересно, жмём сюда...
Всего голосов 375: ↑368 и ↓7+361
Комментарии105

Я медленно удаляю apache с сервера

Время на прочтение13 мин
Количество просмотров54K
image
Есть у меня серверок (да, да, именно серверок, сервером его назвать сложно). Железо старенькое (2 гига оперативы, AMD Athlon(tm) 64 Processor 3500+, програмный RAID). Админю я его сам, без особых навыков и познаний. Когда-то давным давно (больше года назад) поставил на него Debian 5.0 Lenny (это была вторая в жизни установка linux-системы, до этого ставил только Ubuntu на рабочий ноутбук) и панель управления ISPConfig3 по мануалу. Держу на нем несколько (штук 40) сайтов друзей и клиентов, Redmine, SVN и еще немного по мелочам.
Периодически все это безобразие падает (load average > 20), и приходится на сервере раз в пару часов перегружать apache или высасывать из пальца очередную попытку оптимизации. В общем полный раздрай и разруха. И вот в одну прекрасную субботу я подумал — а почему бы не решить вопрос раз и… И вот в общем.
Под катом — история убитых выходных + предыстория. Интересна в первую очередь мне, чтобы потом легко вспомнить что именно и зачем я ставил. Может быть интересна новичкам в интересном и нелегком (ох, ...) деле серверной оптимизации постепенным(!) переводом сайтов из-под Apache c его ModRewrite под Nginx (кстати, правильно это слово читается «энжинкс»меня поправили, Сысоев на конференциях не раз говорил, что название сервера стоит читать, как «энжин-икс», спасибо bayandin и DorBer ). Возможно, будет интересна более-менее опытным товарищам, оказавшимся в тех же условиях (Debian Lenny, ISPConfig3, слабое железо, несколько хороших, не сильно хороших и разных сайтов). И более опытным может быть интересно зайти, оставить пару комментариев.
Если интересно - нажмите сюда, если нет - нажмите звездочку ниже
Всего голосов 167: ↑137 и ↓30+107
Комментарии184

Запускаем jQuery на движке Node.js вместо браузера

Время на прочтение2 мин
Количество просмотров21K
Библиотека jQuery — это общепризнанное средство манипуляции сразу несколькими форматами данных (XML, HTML, объекты DOM, обыкновенные объекты), да притом работающее посредством удобного (цепного) вызова методов с удобными (краткими) названиями. Поэтому ничуть не удивляют попытки приспособить jQuery не только к одному клиентскому, но также ещё и к серверному джаваскрипту — в частности, к Node.js.

Признаюсь честно, что когда разработчики jQuery превозмогли проблему №7102, то её название («Register jQuery as a CommonJS async module») на какое-то время даже заставило меня обмануться: я сперва подумал было, что и в Node.js (так как модули Node.js и СommonJS имеют немало общего) отныне jQuery станет работать невозбранно. Ан нет, не тут-то было. Пристальное вглядывание в коммит и в запрос на слияние позволяет осознать, что jQuery, в сущности, обрёл возможность регистрироваться только как AMD-модуль и даже проверяет свойства define.amd и define.amd.jQuery перед саморегистрацией.

Собственно говоря, архитектура jQuery «затóчена» под употребление в условиях браузерной DOM: код jQuery полагается на существование объекта window, который служит аргументом главного замыкания, окаймляющего весь код jQuery. Прежде же таких неявных предположений было ещё больше, и только с устранением проблемы №6690 библиотека jQuery перестала полагаться на существование глобальных объектов navigator и location, начав вместо того получать их как свойства объекта window. (Понятно, что такое предположение никак не подходило для Node.js, где глобальные объекты служат свойствами объекта global, а вовсе не window; а равно не подходило и ко многим прочим реализациям CommonJS.)

Потому для запуска jQuery в Node.js применяются готовые реализации браузерной DOM — такие, как пакет jsdom, на основе которого невозбранно работает, например, вот какой код, предлагаемый в качестве примера:

Читать дальше →
Всего голосов 55: ↑40 и ↓15+25
Комментарии19

Знакомство с Gem. Часть первая

Время на прочтение2 мин
Количество просмотров22K
Доброго времени суток!

Введение


Каждый рубист, да и вообще программист, рано или поздно начинает задумываться о написании своих библиотек. Ему начинает надоедать перетаскивание одних и тех же кусков кода в другие проекты. В Ruby лекарством от данного заболевания являются gem'ы. Итак, давайте познакомимся с ним поближе.
Добро пожаловать к нам под хабракат
Всего голосов 41: ↑35 и ↓6+29
Комментарии31

Как уменьшить вероятность ошибки на этапе написания кода. Заметка N4

Время на прочтение9 мин
Количество просмотров1.7K
PVS-Studio vs Firefox
Это уже четвертая заметка, где я хочу поделиться полезными наблюдениями о паттернах ошибок и том, как можно с ними бороться. В этот раз я затрону такую тему, как обработка редких и аварийных ситуаций в программах. Рассматривая множество программ, я пришел к выводу, что код обработки ошибок в Си/Си++ программах — одно из самых ненадежных мест.
К чему приводят такие дефекты? Программа, вместо того, чтобы выдать сообщение «файл X не найден», падает и заставляет пользователя гадать, что он не так делает. Программа для работы с базой данных выводит невразумительное сообщение, вместо того, чтобы сообщить, что неверно заполнено одно из полей. Попробуем сразиться с этой разновидностью ошибок, которые досаждают нашим пользователям.
Читать дальше →
Всего голосов 70: ↑57 и ↓13+44
Комментарии35

Полупроводниковая электроника

Время на прочтение30 мин
Количество просмотров374K


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



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





Иллюстраций: 34, символов: 51 609.



Читать дальше →
Всего голосов 488: ↑479 и ↓9+470
Комментарии152

Быстрочтение featuring Восприятие текста

Время на прочтение8 мин
Количество просмотров79K
Привет всем. Основываясь на предыдущем опыте, считаю нужным сразу расставить все точи над ё. Описанная ниже методика — не мое изобретение. Однако из собственного опыта могу уверить вас, что она работает. Ровно так, как обещано.
Идея, описанная в посте, появилась давно (под катом есть история), в том виде, в каком расскажу ее я, по большей части она представлена в чудесных книгах Тони Бузана Use You Head и The Speed Reading Book (в последней много воды).

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

Написано с подачи пользователя cympak. Посвящается всем кто много читает: будь то деловые документы, художественные произведения или статьи на Хабре типа этой.

Прежде чем приступить к самому главному, прошу вас пройти тест из шести вопросов на Да/Нет.

1. Чтение со скоростью свыше 1000 слов в минуту невозможно?
2. Медленная скорость чтения способствует лучшему пониманию текста?
3. Пропускать слова во время чтения — плохая привычка, ухудшающая понимание текста?
4. По умолчанию мы все читаем с «естественной» для нас скоростью, а следовательно, наилучшей?
5. Если вы не поняли слово или предложение, лучше перечитать его и понять?
6. Ваши глаза находятся в непрерывном движении во время чтения?
За результатами и, наконец-то, интересными штуками добро пожаловать под кат.
Читать дальше →
Всего голосов 169: ↑145 и ↓24+121
Комментарии100

Как мы попали в Кремниевую Долину

Время на прочтение5 мин
Количество просмотров5.7K
image

Все началось в середине сентября. На тот момент, наш стартап работал уже пол-месяца и все, что мы собирались делать в публичном плане – это участвовать в предстоящем в Кишиневе Startup Weekend’e, который намечался на 11-13 ноября. Просматривая организаторов данного мероприятия, у меня в голове была только одна мысль – найти кого-нибудь, кто помог бы нам попасть в Кремниевую Долину. Тогда эта была всего лишь мысль и о том, каким образом и как скоро она реализуется я даже и представить не мог.
Читать дальше →
Всего голосов 242: ↑220 и ↓22+198
Комментарии121

Как создать ТЗ для программиста

Время на прочтение6 мин
Количество просмотров108K
Рекомендации геймдизайнеру от программиста (архитектора).


Вступление

Компьютерные игры — относительно молодая отрасль, которая в перспективе сменит киноиндустрию, так-же как кинофильмы заменили театр. Создание игры — это коллективное творчество, во многом напоминающее создание кинофильма. Кроме того, создание компьютерных игр — одна из самых сложных IT задач, поскольку она включает все себя практические все IT области.

Все слышали про pre poduction, но мало кто знает как именно это происходит. И если про стадию разработки написано много, а про стадию издания — еще больше, то про стадию планирования известно очень мало. В лучшем случае вам посчастливится ознакомится с результатами планирования. А вот как были достигнуты эти результаты? — загадка во тьме.

Этот документ является результатом «разбора полетов» после написания игры Звездная арена для социальных сетей. В этом документе я попытался упорядочить список проблем и решений к которым я и Александр пришли в процессе совместной работы над игрою. Кроме того этот документ является частью большой работы по выстраиванию рабочего процесса создания компьютерных игр.

Я намеренно оставил за кадром другие документы: концепцию, экономическое обоснование и ТЗ для других исполнителей. Это позволило сфокусироваться на одной теме и осветить ее и только ее достаточно подробно.

Читать дальше →
Всего голосов 70: ↑64 и ↓6+58
Комментарии50

Расширение файла средствами PHP

Время на прочтение2 мин
Количество просмотров101K
Получить расширение файла — не самая сложная задача. Но подходов к ее решению может быть несколько. Давайте попробуем рассмотреть несколько возможных вариантов и понять принципы их работы.

Считаете, что вопрос пустяковый и все тут просто как 2 пальца? Может быть, только недавно мне встретилась занятная бредострочка с толстенным регулярным выражением и все для того, что бы просто получить несколько символов в конце строки после последней точки. Зачем? Итак, начнем с пяти наиболее распространенных способов. Без использования регулярных выражений (только не подумайте, что я считаю их злом). Писать буду как просто и доступно, это не научная статья, а авторская заметка.
Поехали?
Всего голосов 37: ↑22 и ↓15+7
Комментарии66

ExtJS/Rails CRUD приложение за 7 минут

Время на прочтение5 мин
Количество просмотров7K
Этот пост покажет вам простые шаги по созданию TODO веб приложения с ипользованием ExtJS, Ruby on Rails и Netzke. Это займет у вас приблизительно 7 минут, и если вам заранее любопытно стоит ли оно того, смотрите сразу последнюю часть (кстати самую большую), где и обсудим результаты. Наша цель заключается в создании веб приложения которое позволит вам добавлять, редактировать и удалять TODO задачи, а также отмечать сделанные. В дополнение к этому вы сможете сортировать и искать задачи, редактировать несколько задач одновременно, и это еще не все. Можете засечь время на своих часах, давайте приступим к работе.
Читать дальше →
Всего голосов 41: ↑38 и ↓3+35
Комментарии17

О большой глупости маленьких компаний

Время на прочтение3 мин
Количество просмотров1K
По долгу службы я, периодически, сталкиваюсь с разного рода должностным несоответствием.
Например с тех.поддержкой которая не знает, как работает поддерживаемый продукт.
Но с таким знакомы все и никого этим не удивишь. Расскажу о совершенно вопиющем случае.

Как я ломал сайты

Оговорюсь сразу: Я знаю о правилах хорошего тона в интернете и о том что нужно сообщать владельцам ресурсов или хостингов о найденных уязвимостях. В данном случае я этого делать НЕ стал, ввиду отсутствия уязвимости и наличия непристойной глупости.

Одним прекрасным утром появилась у меня необходимость проверить, как будет работать сайт одной фирмы на другой площадке, в виду возможного переезда.

Выяснилось, что сайт хостится компанией, которая его и раскручивает. Для управления служит программа DBedit, найти которую на сайте компании оказалось уже проблемой. Успешно справившись я приступил к подключению CMS к сайту. У меня был подробный мануал, созданный для людей совершенно разной компьютерной грамотности. При чтении сего манускрипта у меня и закрались первые сомнения в адекватности компании хостера.
Читать дальше →
Всего голосов 116: ↑98 и ↓18+80
Комментарии23

Делаем приватный монитор из старого LCD монитора

Время на прочтение2 мин
Количество просмотров975K


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

Всё что Вам нужно – это пара старых очков, нож для бумаги и растворитель для краски.

Читать дальше →
Всего голосов 1486: ↑1468 и ↓18+1450
Комментарии327

Малоизвестные особенности Java. Вторая часть

Время на прочтение3 мин
Количество просмотров58K
Как и обещал, предлагаю вашему вниманию следующие пять пунктов.

Малоизвестные особенности Java. Первая часть

6. Конфликт имён.

Если импортированы несколько классов с одним и тем же именем из разных пакетов, возникает конфликт имён. В таком случае при обращении к классу следует указывать его квалифицированное имя, то есть полное имя, включая и имя пакета, например java.lang.String.

Неужели ничего нельзя с этим поделать? Оказывается можно. Следующий код скомпилируется без проблем, несмотря на то, что класс List присутствует и в пакете java.awt, и в пакете java.util:

import java.awt.*;
import java.util.*;
import java.util.List;

public class Класс {
	public static void main(String... аргументы) {
		List простоСписок = Collections.emptyList();
		System.out.println(простоСписок);
	}
}


Достаточно дополнительно импортировать необходимый класс, java.util.List в данном примере.

Тут, как вы заметили, используются кириллические идентификаторы. Да! Для кого-то это станет откровением, но Java… такая Java. Идентификатор может состоять из совершенно любых букв, помимо цифр, знаков подчёркивания и валюты США (однако последний знак ($) использовать не рекомендуется, он предназначен для системных нужд). Но оно нам надо? Разве только в целях обфускации. Только представьте себе, сколько разных идентификаторов можно сгенерировать всего-то из символов «А» английского, русского и греческого алфавитов…

Читать дальше →
Всего голосов 67: ↑61 и ↓6+55
Комментарии42

Тонкости при работе с иностранным заказчиком

Время на прочтение5 мин
Количество просмотров96K
В соседней теме попросили рассказать о нюансах работы с зарубежными клиентами для ИП/ООО. Для физических лиц работа с нерезидентами ничем не отличается работы с резидентами.
Это скорее даже не статья, а заметка/памятка, но возможно кому-нибудь будет хоть немного полезна.

Регистрация счета


Предположим что вы закончили регистрацию ИП/ООО и открыли рублёвый расчетный счет.
Для того чтобы работать с валютой нужно открыть еще один расчетный счет — валютный. Это просто.
При открытии валютного счета вам создадут дополнительно технический транзитный счет. Его реквизиты и нужно сообщать заказчику.

Здесь мы встречаем потенциальный косяк номер раз: как и в случае с рублевым счетом нужно уведомить налоговую в недельный срок (штраф — 5000 рублей [1]). Затем не забыть уведомить и своё отделение ПФР в тот же срок, иначе опять же штраф, но уже меньше — 2000. Если вы зарегистрированы в ФСС, то нужно не забыть так же и их, всё аналогично случаю с ПФР. [2]

ООО нужно уведомить ПФР и ФСС только если есть работники. ИП — обязательно ПФР, но если есть или были работники, то и ФСС.

Некоторые госслужбы «не шарят» и пытаются оштрафовать если не уведомили о транзитном счете. Это противозаконно и легко решает даже в досудебном порядке, не говоря уже о суде. Заявлять нужно только об обычном счете, о транзитном — не нужно.

В принципе здесь всё кристально ясно, единственно вызывает легкое недоумение зачем носить эти бумажки если банк тоже обязан выслать информацию об открытие счетов.
Читать дальше →
Всего голосов 82: ↑81 и ↓1+80
Комментарии172

Версионность и история данных

Время на прочтение5 мин
Количество просмотров128K
При разработке баз данных зачастую требуется обеспечить поддержку версионности и хранения истории объектов. Например, у работника может изменяться должность, у должности в свою очередь может меняться оклад — в многомерном моделировании это называется Slowly changing dimensions(далее SCD) — редко изменяющиеся измерения, то есть измерения, не ключевые атрибуты которых имеют тенденцию со временем изменяться. Всего существует 6 основных типов(методов) SCD, которые определяют как история изменений может быть отражена в модели.

Подробнее...
Всего голосов 64: ↑62 и ↓2+60
Комментарии50

Курс философии для студентов ИТ-специальностей: каким он должен быть?

Время на прочтение3 мин
Количество просмотров13K
Не так давно на хабре появились две весьма интересные дискуссии по проблемам подготовки ИТ-специалистов в современных российских вузах(1 и 2). Участники этих дискуссий критикуют отечественную систему высшего образования, так как она (1) очень сильно оторвана от реальной практики и (2) перегружена общеобразовательными предметами.
Очень многие негативно высказываются о существующей в отечественных вузах практике преподавания философии. Как человек, философию преподававший и проработавший на соответствующей кафедре почти 10 лет, не могу не признать, что столь резкая критика вполне обоснована и справедлива. Во многих российских вузах преподавание философии далеко не соответствует требованиям сегодняшнего дня. Ниже я попытаюсь предложить конструктивное решение проблемы и изложить свои соображения по поводу того, как сделать курс философии интересным для технарей вообще и ИТ-специалистов в частности.
Читать дальше →
Всего голосов 79: ↑62 и ↓17+45
Комментарии141

Tactoom.com изнутри — социальная блог-платформа на NodeJS/NoSQL

Время на прочтение7 мин
Количество просмотров6.5K
Tactoom.com - under the hoodИтак, пришло время раскрыть некоторые карты и рассказать о том, как устроен Tactoom изнутри.

В этой статье я расскажу о разработке и выведении в production веб-сервиса с использованием:
NodeJS (fibers), MongoDB, Redis, ElasticSearch, Capistrano, Rackspace.
Читать дальше →
Всего голосов 174: ↑159 и ↓15+144
Комментарии76

Английский для айтишника? Легко!

Время на прочтение2 мин
Количество просмотров181K
Эта тема не относится к IT напрямую, но все знают, что без нее никуда. К сожалению, далеко не у всех есть возможность изучать английский с преподавателями. Ну что ж, попробуем заняться этим дома и с максимальной отдачей!
Читать дальше →
Всего голосов 165: ↑137 и ↓28+109
Комментарии187

Бакалавриат США: Поступление

Время на прочтение5 мин
Количество просмотров17K
Доброго времени суток, уважаемые хабравчане.

Сегодня я хочу продолжить тему обучения в США, начатую мною довольно давно.

В этой статье я хотел бы перейти от общей информации к более конкретной и начать говорить о процессе непосредственного поступления в Американские ВУЗы на степень бакалавра (undergraduate degree).

Вступление


На самом деле все довольно просто. Процесс такой же как и поступление в Российские ВУЗы, поэтому я не буду рассказывать все дотошно, просто по каждому из пунктов отмечу то, что действительно отличается и то что, на мой взгляд, следует знать. Поехали.

Читать дальше →
Всего голосов 67: ↑61 и ↓6+55
Комментарии66
12 ...
10

Информация

В рейтинге
Не участвует
Откуда
Казахстан
Дата рождения
Зарегистрирован
Активность

Специализация

Backend Developer
Senior
Golang
Git
PostgreSQL
Docker
MySQL
Linux
English
SQL
gRPC