Как стать автором
Обновить
0
0
Alexander @heizen

Пользователь

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

Как разработчики сидели в Петербурге и тихо ели грибы, а потом написали ОС для систем хранения данных

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


В конце 2008 года на тогда ещё небольшую петербуржскую компанию вышел один западный медиахолдинг примерно так:
— Это вы там упоролись по хардкору и приспособили SSE-инструкции для реализации кода Рида-Соломона?
— Да, только мы не…
— Да мне пофиг. Хотите заказ?

Проблема была в том, что видеомонтаж требовал адовой производительности, и тогда использовались RAID-5 массивы. Чем больше дисков в RAID-5 — тем выше была вероятность отказа прямо во время монтажа (для 12 дисков — 6%, а для 36 дисков — уже 17-18%). Дроп диска при монтаже недопустим: даже если диск падает в хайэндовой СХД, скорость резко деградирует. Медиахолдигу надоело с криком биться головой о стену каждый раз, и поэтому кто-то посоветовал им сумрачного русского гения.

Много позже, когда наши соотечественники подросли, возникла вторая интересная задача — Silent Data Corruption. Это такой тип ошибок хранения, когда на блине одновременно меняется и бит в основных данных, и контрольный бит. Если речь о видео или фотографии — в целом, никто даже не заметит. А если речь про медицинские данные, то это становится диагностической проблемой. Так появился специальный продукт под этот рынок.

Ниже — история того, что они делали, немного математики и результат — ОС для highload-СХД. Серьёзно, первая русская ОС, доведённая до ума и выпущенная. Хоть и для СХД.
Читать дальше →
Всего голосов 209: ↑200 и ↓9+191
Комментарии53

Оптимизируем, оптимизируем и еще раз оптимизируем

Время на прочтение5 мин
Количество просмотров24K
По долгу службы мне периодически приходится пользоваться профайлером, так как требования к производительности серверов задокументированы и не могут опускаться ниже определенного уровня. Помимо некоторых очевидных архитектурных изменений и решений частенько находятся повторяющиеся места от модуля к модулю, от одного проекта к другому, которые создают дополнительную нагрузку на виртуальную машину, которыми и хочу поделиться.
Так уж случилось, что на глаза чаще всего попадался код работы с Date потому с него и начнем:

Date

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

    public boolean isValid(Date start, Date end) {
        Date now = new Date();
        return start.before(now) && end.after(now); 
    }

Казалось бы — вполне очевидное и правильное решение. В принципе, да, за исключением двух моментов:
  • Использовать Date сегодня в java — уже, пожалуй, моветон, учитывая тот факт, что почти все методы в нем уже Deprecated.
  • Нету смысла создавать новый объект даты, если вполне можно обойтись примитивом long:

    public boolean isValid(Date start, Date end) {
        long now = System.currentTimeMillis();
        return start.getTime() < now && now < end.getTIme(); 
    }


SimpleDateFormat

Очень часто в веб проектах возникает задача перевести строку в дату или наоборот дату в строку. Задача довольно типичная и чаще всего выглядит так:

    return new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z").parse(dateString);

Это правильное и быстрое решение, но если серверу приходится парсить строку на каждый пользовательский реквест в каждом из сотен потоков — это может ощутимо бить по производительности сервера в виду довольно тяжеловесного конструктора SimpleDateFormat, да и помимо самого форматера создается множество других объектов в том числе и не легкий Calendar (размер которого > 400 байт).

Ситуацию можно было бы легко решить, сделав SimpleDateFormat статическим полем, но он не является потокобезопасным. И в конкурентной среде легко можно словить NumberFormatException.

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

Но решения есть и их как минимум 2:
  • Старый, добрый ThreadLocal — cоздаем SimpleDateFormat для каждого потока 1 раз и переиспользуем для каждого последующего запроса. Данный подход поможет ускорить парсинг даты в 2-4 раза за счет избежания создания объектов SimpleDateFormat на каждый запрос.
  • Joda и ее потокобезопасный аналог SimpleDateFormat — DateTimeFormat. Хоть йода в целом и медленнее дефолтного Java Date API в парсинге дат они идут наравне. Несколько тестов можно глянуть тут.

Читать дальше →
Всего голосов 50: ↑38 и ↓12+26
Комментарии34

Опции JVM. Как это работает

Время на прочтение7 мин
Количество просмотров95K
С каждым днем слово java все больше и больше воспринимается уже не как язык, а как платформа благодаря небезызвестному invokeDynamic. Именно поэтому сегодня я бы хотел поговорить про виртуальную java машину, а именно — об так называемых Performance опциях в Oracle HotSpot JVM версии 1.6 и выше (server). Потому что сегодня почти не встретить людей, которые знают что-то больше чем -Xmx, -Xms и -Xss. В свое время, когда я начал углубляться в тему, то обнаружил огромное количество интересной информации, которой и хочу поделится. Отправной точкой, понятное дело, послужила официальная документация от Oracle. А дальше — гугл, эксперименты и общение:

-XX:+DoEscapeAnalysis


Начну, пожалуй, с самой интересной опции — DoEscapeAnalysis. Как многие из Вас знают, примитивы и ссылки на объекты создаются не в куче, а выделяются на стеке потока (256КБ по умолчанию для Hotspot). Вполне очевидно, что язык java не позволяет создавать объекты на стеке на прямую. Но это вполне себе может проделывать Ваша JVM 1.6 начиная с 14 апдейта.

Про то, как работает сам алгоритм можно прочитать тут (PDF). Если коротко, то:

  • Если область видимости объекта не выходит за область метода, в котором он создается, то такой объект может быть создан на фрейме стека вместо кучи (на самом деле не сам объект, а его поля, на совокупность которых заменяется объект);
  • Если объект не покидает область видимости потока, то к такому объекту другие потоки не имеют доступа и следовательно все операции синхронизации над объектом могут быть удалены.


Для реализации данного алгоритма строится и используется так называемый — граф связей (connection graph), по которому на этапе анализа (алгоритмов анализа — несколько) осуществляется проход для нахождения пересечений с другими потоками и методами.
Таким образом после прохода графа связей для любого объекта возможно одно из следующих следующих состояний:

  • GlobalEscape — объект доступен из других потоков и из других методов, например статическое поле.
  • ArgEscape — объект был передан как аргумент или на него есть ссылка из объекта аргумента, но сам он не выходит из области видимости потока в котором был создан.
  • NoEscape — объект не покидает область видимости метода и его создание может быть вынесено на стек.


После этапа анализа, уже сама JVM проводит возможную оптимизацию: в случае если объект NoEscape, то он может быть создан на стеке; если объект NoEscape или ArgEscape, то операции синхронизации над ним могут быть удалены.

Следует уточнить, что на стеке создается не сам объект а его поля. Так как JVM заменяет цельный объект на совокупность его полей (спасибо Walrus за уточнение).

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

    for (int i = 0; i < 1000*1000*1000; i++) {
        Foo foo = new Foo();
    }

скорость выполнения может увеличится в 8-15 раз. Хотя, на казалось бы, очевидных случаях из практики о которых недавно писалось (тут и тут) EscapeAnalys не работает. Подозреваю, что это связано с размером стека.

Кстати, EscapeAnalysis как раз частично ответственен за известный спор про StringBuilder и StringBuffer. То есть, если Вы вдруг в методе использовали StringBuffer вместо StringBuilder, то EscapeAnalysis (в случае срабатывания) устранит блокировки для StringBuffer'а, после чего StringBuffer вполне превращается в StringBuilder.
Читать дальше →
Всего голосов 72: ↑70 и ↓2+68
Комментарии18

Все о String.intern()

Время на прочтение4 мин
Количество просмотров121K
Думаю, что многие Java-разработчики знают или хотя бы слышали о методе String.intern(). Но далеко не каждый использует его в своих приложениях или представляет в каких случаях он полезен и полезен ли вообще. Так было и со мной до тех пор пока я не столкнулся с этим методом в одном из проектов. В тот момент я захотел узнать смысл и особенности его использования и набрел на одну весьма интересную статью ведущего разработчика Yahoo! по имени Ethan Nicholas, переводом которой теперь хочу поделиться с той частью Хабра-сообщества, которая не безразлична к языку Java.

Тем, кто знает об этом методе лишь понаслышке, добро пожаловать под кат.
Читать дальше →
Всего голосов 56: ↑49 и ↓7+42
Комментарии33

Измерение пропускной способности Ethernet канала

Время на прочтение4 мин
Количество просмотров146K
Возникла задача измерить пропускную способность Ethernet канала и предоставить отчет, причем измерения нужно проводить 24 часа. Какими способами это можно сделать?

Чем


  • Сервис speedtest.net — измеряет ширину канала Интернет до некого сервера. Нам не подходит так как данный сервис меряет не конкретный канал связи, а всю линию до определенного сервера, так же измеряемый канал связи не имеет выхода в Интернет;
  • Скачать объемный файл из одного конца канала в другой. Не совсем подходит так как отсутствует необходимая точность измерения;
  • Iperf — клиент-серверная утилита, позволяющая проводить измерения заданное время с предоставлением простенького отчета. С ней мы сейчас и поработаем.

Читать дальше →
Всего голосов 12: ↑8 и ↓4+4
Комментарии24

Ненадёжный Ethernet

Время на прочтение7 мин
Количество просмотров49K
В продолжение предыдущей статьи "Ethernet & FC", хотел бы дать конкретные рекомендации по оптимизации Ethernet сети для работы с СХД NetApp FAS. Хотя, полагаю, многие вещи описанные здесь могут быть полезны и для других решений.

Читать дальше →
Всего голосов 13: ↑9 и ↓4+5
Комментарии24

NetApp FAS оптимизация производительности

Время на прочтение21 мин
Количество просмотров21K
В этой статье я сфокусируюсь на оптимизации производительности систем NetApp FAS.

Объектами оптимизации с точки зрения СХД могут быть настройки:
  • SAN в СХД
  • Ethernet в СХД
  • NAS в СХД
  • Дисковой подсистемы на Back-End СХД
  • Дисковой подсистемы на Front-End СХД
  • Проверка совместимости прошивок
  • Ускорители



Для поиска узкого места обычно выполняют методику последовательного исключения. Предлагаю перво-наперво начать с СХД. А дальше двигаться СХД -> Сеть (Ethernet / FC) -> Хост ( Windows / Linux / VMware ESXi 5.Х и ESXi 6.X ) -> Приложение.
Читать дальше →
Всего голосов 5: ↑3 и ↓2+1
Комментарии0

Прокачка debian/ubuntu сервера для маленьких

Время на прочтение9 мин
Количество просмотров185K
Всем привет. Недавно появилась необходимость поднятие VPS на debian 7 за скромные деньги.
О плясках с бубенчиком я бы хотел описать тут в подробностях.
Всё в этом посте было собрано на просторах интернета, доработано, разжевано и скинуто в одну статью.


Выбор пал на https://account.nt-vps.ru/register/ из-за низких цен и неплохой стабильности за эти деньги(правда 2 дня были серьезные проблемы с сетью). Был взят VPS за 5 рублей в сутки(или за 150р в месяц) с небольшими конфигурациями ОЗУ 128mb и 10Гб на диске.

В автоматическом режиме был установлен Debian 7.0 x86-64 Wheezy и VPS была готова к работе.
64 битная сиcтема была выбрана лишь для моих личных нужд, а вам же советую, на этом VPS, ставить x86.

Далее
Всего голосов 159: ↑119 и ↓40+79
Комментарии95

Установка и настройка TeamSpeak 3 сервера на VDS

Время на прочтение3 мин
Количество просмотров178K
В данной статье речь пойдет об установке сервера TeamSpeak 3, эта программа предназначена для использования голосовой связи различными сообществами. В моем примере будет использоваться Linux Debian 6.0 x64, для ТС3 сервера также оптимален VDS с предустановленной Ubuntu, разрядность значения не имеет, принцип действия одинаковый.
Читать дальше →
Всего голосов 19: ↑10 и ↓9+1
Комментарии17

Оптимизируем VPS за 5$ (512MB RAM / 1 CPU) так, что сайт на wordpress выдерживает нагрузку в 42,735,587 хитов в день

Время на прочтение9 мин
Количество просмотров96K
Когда вы приобретаете сервер VPS с 256MB или 512MB оперативной памяти на борту и лишь часть мощности процессора, то использовать для таких сервисов как MySQL/PHP/Apache настройки по умолчанию является очень плохой идеей. В настоящее время у меня запущено 3 сайта на самом дешевом тарифном плане с 512MB RAM/1 CPU. Не уверен полностью, но посещаемость составляет порядка 5-10 тысяч посетителей в день. Далее я хочу поделиться инструкцией как оптимизировать LAMP используя всего лишь 512 MB и при этом не уходя в swap. Обычно при такой настройки используется 256 – 378Mb памяти и все работает довольно быстро.

Определяем доступную память и активность swap.

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

$ free -m

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

$ ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -r | less


Настраиваем LAMP сервер для потребления малого количества оперативной памяти. Останавливаем, отключаем ненужные сервисы

Первый и очевидный вопрос, который необходимо задать — это «какие сервисы мне не нужны в использовании?». Недавно, я обнаружил очень удобную утилиту для управления сервисами. Она называется "sysv-rc-conf" и управляет сервисами при помощи псевдографики и флажками. Выгдялит вот так:



Здесь представлен список сервисов, которые я изменил.

  • Postfix. Этот сервис позволяет отправлять и получать почтовые email сообщения для домена. Я использую для этих целей Google Apps для отправки почты и mailchimp для новостных подписчиков. Таким образом я остановил и отключил этот сервис.
  • Bind9. Он нужен для управления DNS записями Вашего домена. Его можно отключить, так как все DNS записи хранятся у хостера.
  • SSHD. Имеются и другие реализации, которые используют гораздо меньше памяти, но они не поддерживают sftp, поэтому данный сервис я оставил без изменений.


Не запускайте X-сервер, выключите все ненужные сервисы и настройте Apache, MySQL, PHP только с базовой необходимой функциональностью.
Читать дальше →
Всего голосов 131: ↑81 и ↓50+31
Комментарии85

Перестройка экосистемы ЦОД

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


Недавно Роб Обер (Rob Ober), системный архитектор LSI, дал подробное интервью китайскому журналу CEO & CIO, в котором были затронуты многие интересные вопросы. Я бы хотел представить вашему вниманию перевод ключевых моментов этого интервью, поскольку Роб очень четко описывает будущее индустрии.
Читать дальше →
Всего голосов 7: ↑6 и ↓1+5
Комментарии0

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

Время на прочтение19 мин
Количество просмотров258K
Есть один курс, который я бы добавил в программу обучения по всякой инженерной специальности, и он не о компиляторах или сложности алгоритмов. Это “Введение в реальность индустрии”, ибо об этом не говорят и это приводит к никому не нужным обломам. Эта статья претендует стать README.txt для молодого инженера в деле построения карьеры. Ее цель — сделать вас счастливее, заполнив пробелы в образовании относительно того, как работает реальный мир. Я не призываю следовать написанному как подробному руководству, но я надеюсь, что эта информация окажется для вас более ценной, чем то ничто, что вам рассказали об этом в университете.
Читать дальше →
Всего голосов 251: ↑212 и ↓39+173
Комментарии175

Создание файл-сервера на базе FreeBSD с авторизацией в AD

Время на прочтение5 мин
Количество просмотров39K
В этой статье я опишу создание файл-сервера с установленной FreeBSD 9.2 (Samba-3.6) с авторизацией в домене Windows 2003.

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

image
Читать дальше →
Всего голосов 17: ↑10 и ↓7+3
Комментарии19

Особенности клонирования в учебном заведении

Время на прочтение7 мин
Количество просмотров10K
У нас есть 300 компьютеров, объединенных в корпоративную сеть и 48 часов для того, чтобы установить на эти компьютеры операционную систему и 65 единиц ПО. О том, как мы будем пытаться совершить этот подвиг, и будет рассказано далее.

Конечно же, в совершении подвига нам поможет Clonnezilla, предназначенная для клонирования и создания дисков и/или разделов. Так же мы остановимся на некоторых нюансов инсталляции ПО в рамках компьютерных классов. Но прежде уточним условия нашей задачи. 300 компьютеров — это компьютеры, находящиеся в 16-ти компьютерных классах нашего университета. В рамках одного компьютерного класса находятся компьютеры одной конфигурации. В целом же классы отличаются друг от друга различным железом ну и, конечно же, возрастом. Компьютеры включены в windows домен.
Читать дальше →
Всего голосов 16: ↑9 и ↓7+2
Комментарии11

ЦОД: модель для сборки

Время на прочтение6 мин
Количество просмотров29K
Меня зовут Сергей Кубасов, я заместитель технического директора Mail.Ru Group. Недавно на форуме DCDE я рассказывал о нашем опыте создания и организации собственного центра обработки данных. Теперь я решил поделиться нашими открытиями с читателями Хабра.


Как это было


В начале истории нашего собственного ЦОДа мы сотрудничали с пятью сервисными организациями, которые обслуживали кондиционирование и вентиляцию, дизель-генераторные установки, источники бесперебойного питания, автоматику по электричеству и систему газового пожаротушения. На тот момент казалось, что это лучшее решение, т.к. «одни и те же люди» строят и эксплуатируют — то есть знают систему от и до.
Читать дальше →
Всего голосов 56: ↑52 и ↓4+48
Комментарии9

Устройство минималистичных посадочных страниц

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


Предыдущий перевод (Landing page, которая работает), посвященный дизайну качественных посадочных страниц набрал больше 150 000 просмотров. С тех пор прошло уже много времени и подход к дизайну изменился – все больше становится минималистичных страниц, о которых и пойдет речь в статье.
Читать дальше →
Всего голосов 48: ↑41 и ↓7+34
Комментарии23

Минимализм при создании landing page

Время на прочтение8 мин
Количество просмотров43K
За последние несколько лет веб-дизайнеры постепенно пришли к тому, что «захламление» сайтов несущественными элементами — плохая идея. Такие элементы веб-дизайна, как бессмысленные изображения, запутанные навигационные системы, бесчисленные кнопки социального обмена и прочее уводят пользователей от основных целей веб-страницы.

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

Несколько примеров минимализма целевых страниц

Давайте рассмотрим минимализм landing page некоторых успешных веб-приложений:


Читать дальше →
Всего голосов 18: ↑11 и ↓7+4
Комментарии5

Алгоритмы обработки видео на процессоре TI DM368

Время на прочтение5 мин
Количество просмотров17K
Начинаем серию статей на Хабре, посвященную видеопроцессорам TI DM368, DM369 и разработке алгоритмов на их основе.
Pассмотрим основные блоки обработки видеопотока от сенсора до сетевого “вещателя”, более подробно остановимся на алгоритмах автоэкспозиции, баланса белого и автофокуса (3A), гамма коррекции, а так же расширенном динамическом диапазоне HDR или WDR, и, наконец, детекторе движения и аналитике на его основе.
Примеры картинок будут представлены для сенсора SONY IMX136, так же алгоритм проверен на сенсорах Aptina MT9P006, AR0331, MT9M034.
До После

Внимание под катом одни картинки
Всего голосов 26: ↑24 и ↓2+22
Комментарии9

Хороший дизайн интерфейсов. Часть 3

Время на прочтение5 мин
Количество просмотров76K
Это третья часть переведённых заметок «Good User Interface». Первые 16 частей уже ранее перевели наши коллеги из ADV на Хабре, а вторые 11 перевели мы.

Идея 28


Используйте варианты по-умолчанию, не заставляя людей выбирать


Выбор по-умолчанию или самозаполняющиеся поля с обучением сокращают объем работы, которую должен проделать пользователь. Это стандартная техника, помогающая людям продвигаться по формам быстрее, учитывая, что их время ограничено. Одна из наиболее отвратительных вещей с точки зрения дизайна интерфейсов и конверсии посетителей в клиентов — это снова и снова просить пользователей предоставить данные, которые они уже указали ранее. Старайтесь делать поля, которые будут сами заполняться самыми популярными или уже известными значениями, а не просите людей их каждый раз заполнять. Чем меньше работы — тем лучше.

Остальные 10 заметок далее
Всего голосов 88: ↑81 и ↓7+74
Комментарии36

Превращаем Zalman в Noctua (или upgrade вентилятора)

Время на прочтение4 мин
Количество просмотров80K
Привет, тебе, <%username%>.

Дисклаймер
  • Да, знаю, что заголовок отдаёт в желтизну — ну это для привлечения толики внимания.
  • Если обезличенное обращение <%username%> уже набило оскомину, есть отличное решение от Wott
  • Ну и напоследок — это мой первый пост (не только на Хабре, но и вообще...) так что, если хочется попинать, пинайте


В процессе доводки до ума относительно старенького системного блока пришла мне на ум мысль модернизировать систему охлаждения центрального процессора. Причина банальна — шум от вентилятора.
В своё время при покупке был установлен Zalman CNPS9300 AT. Кулер красивый и достаточно холодный для AMD Phenom II X4 BE, но как выяснилось сразу и подтвердилось в дальнейшем множеством отзывов в интернете, — крайне шумный даже на низких оборотах.
Т.к. к радиатору претензий не было, плюс руки чесались что-нибудь покрутить, да и подрастающему поколению захотелось какой-нибудь урок преподать, решил я не менять весь холодильник полностью, а попробовать заменить только вентилятор.
Если сделать очень краткий реферат всей статьи, то он уместится в две фотографии:

Для дотошных: посмотреть превращение
Всего голосов 63: ↑43 и ↓20+23
Комментарии27

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность