Search
Write a publication
Pull to refresh
3
0
Send message

Ускоряем Nginx за 5 минут

Reading time5 min
Views298K
image
Попытайтесь повторить это сами

Как правило, настроенный должным образом сервер Nginx на Linux, может обрабатывать 500,000 — 600,000 запросов в секунду. Но этот показатель можно весьма ощутимо увеличить. Хотел бы обратить внимание на тот факт, что настройки описанные ниже, применялись в тестовой среде и, возможно, для ваших боевых серверов они не подойдут.

Минутка банальности.

yum -y install nginx

На всякий пожарный, создадим бэкап исходного конфига.

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.orig
vim /etc/nginx/nginx.conf

А теперь можно и похимичить!
Бдыжь-бдыжь

«Идеальный» www кластер. Часть 1. Frontend: NGINX + Keepalived (vrrp) на CentOS

Reading time9 min
Views113K


Этом цикле статей «Идеальный www кластер», я хочу передать базовые основы построения высокодоступного и высокопроизводительного www решения для нагруженных web проектов для неподготовленного администратора.
Статья будет содержать пошаговую инструкцию и подойдет любому человеку кто освоил силу copy-paste
Ошибки найденые вами, помогут в работе и мне и тем кто будет читать эту статью позже! Так что любые улучшение и правки приветствуются!

Хочу отметить, что эта инструкция родилась в процессе миграции web-систем компании Acronis в высокодоступный кластер. Надеюсь мои заметки будут полезны и для Вас!.

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

На frontend мы будем использоваться связку из двух службы:



keepalived — реализации протокола VRRP (Virtual Router Redundancy Protocol) для Linux. Демон keepalived следит за работоспособностью машин и в случае обнаружения сбоя — исключает сбойный сервер из списка активных серверов, делегируя его адреса другому серверу.

Другими словами, у нас 2 сервера на которых прописано по одному публичному адресу. Если любой из этих серверов падает, то адрес упавшего подхватывается вторым.
Демоны keepalived общаются по протоколу VRRP, посылая друг другу сообщения на адрес 224.0.0.18.
Если сосед не прислал свое сообщение, то по истечению периода он считается умершим и оба адреса обслуживает оставшаяся нода. Как только упавший сервер начинает слать свои сообщения в сеть, все возвращается на свои места


nginx [engine x] — это HTTP-сервер и обратный прокси-сервер, а также почтовый прокси-сервер, написанный Игорем Сысоевым. Уже длительное время он обслуживает серверы многих высоконагруженных российских сайтов, таких как Яндекс, Mail.Ru, ВКонтакте и Рамблер. Согласно статистике Netcraft nginx обслуживал или проксировал 15.08% самых нагруженных сайтов в октябре 2013 года.

Основная функциональность HTTP-сервера

  • Обслуживание статических запросов, индексных файлов, автоматическое создание списка файлов, кэш дескрипторов открытых файлов;
  • Акселерированное обратное проксирование с кэшированием, простое распределение нагрузки и отказоустойчивость;
  • Акселерированная поддержка FastCGI, uwsgi, SCGI и memcached серверов с кэшированием, простое распределение нагрузки и отказоустойчивость;
  • Модульность, фильтры, в том числе сжатие (gzip), byte-ranges (докачка), chunked ответы, XSLT-фильтр, SSI-фильтр, преобразование изображений; несколько подзапросов на одной странице, обрабатываемые в SSI-фильтре через прокси или FastCGI, выполняются параллельно;
  • Поддержка SSL и расширения TLS SNI.


Другие возможности HTTP-сервера

  • Виртуальные серверы, определяемые по IP-адресу и имени;
  • Поддержка keep-alive и pipelined соединений;
  • Гибкость конфигурации;
  • Изменение настроек и обновление исполняемого файла без перерыва в обслуживании клиентов;
  • Настройка форматов логов, буферизованная запись в лог, быстрая ротация логов;
  • Специальные страницы для ошибок 3xx-5xx;
  • rewrite-модуль: изменение URI с помощью регулярных выражений;
  • Выполнение разных функций в зависимости от адреса клиента;
  • Ограничение доступа в зависимости от адреса клиента, по паролю (HTTP Basic аутентификация) и по результату подзапроса;
  • Проверка HTTP referer;
  • Методы PUT, DELETE, MKCOL, COPY и MOVE;
  • FLV и MP4 стриминг;
  • Ограничение скорости отдачи ответов;
  • Ограничение числа одновременных соединений и запросов с одного адреса;
  • Встроенный Perl.


Читать дальше →

Анимация в интерфейсах

Reading time3 min
Views52K
Когда мы создаем статические макеты интерфейсов (будь то сайтов или мобильных приложений) в Photoshop, мы не слишком сильно задумываемся над тем, как этот макет поведет себя в динамике. Стив Джобс как то сказал: «Дизайн это не то как продукт выглядит, это то как он работает». Наше впечатление от продукта формируется на основании многих факторов, но самым важным является комфортное взаимодействие с ним.

Анимация прокрутки


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


Читать дальше →

История ошибок: как мы построили и потеряли бизнес с оборотом 500 000 долларов в год

Reading time4 min
Views363K
В 2009 году я рассказывал, как мы строим наш маленький семейный бизнес с оборотом 1500 долларов в месяц. Прошло четыре года. Бизнес вырос до оборота 500 000 долларов в год, и мы его потеряли. Самое время рассказать о допущенных ошибках.

Что же произошло?


Публикация на хабре позволила нам познакомиться с разными людьми, наш бизнес многим понравился. Так в 2010 году мы продали 50% компании частным инвесторам. После успешной трехлетней совместной жизни в сентябре 2013 года наши партнеры отжали бизнес. Мы остались ни с чем.

Как говорил Франклин, “Опыт — это чудесное умение распознавать ошибку, которую ты допускаешь снова”. Возможно, для кого-то все, написанное ниже, знакомо и понятно. Для нас это было впервые и, оглядываясь назад, я вижу множество ошибок, которые привели к такой ситуации. Буду рад ими поделиться с вами.
Читать дальше →

Проблемы с потоками. Эдвард А. Ли

Reading time33 min
Views26K

Аннотация


Потоки являются прямой адаптацией доминирующей сейчас последовательной модели вычислений к параллельным системам. Языки программирования не требуют (или требуют совсем немного) изменений в синтаксисе, чтобы поддерживать потоки, а операционные системы и архитектуры непрерывно развиваются, чтобы повысить эффективность их использования. Многие технологи (инженеры) стремятся интенсивно использовать многопоточность в программном обеспечении и ожидают получить значительное (предсказанное) увеличение производительности. В этой работе я доказываю, что это не очень хорошая идея. Хотя использование потоков кажется небольшим шагом от последовательных вычислений, фактически, это огромный шаг. Использование потоков разрушает такие неотъемлемые свойства последовательных вычислений как: понятность, предсказуемость и определенность (детерминированность). Потоки, как модель вычислений, являются очень недетерминированными, а работа программ также становится неопределенной. Хотя многие исследованные техники улучшают модель вычислений за счет более эффективного сокращения неопределенности, я доказываю, что они не решают проблему полностью. Вместо того, чтобы сокращать неопределенность, мы должны строить модель вычислений исходя из полного детерминизма во взаимодействии программных компонентов. Неопределенность должна явно и аккуратно вводиться туда, где есть в этом необходимость, вместо того, чтобы удаляться там, где нет необходимости. Я доказываю преимущество разработки параллельных языков координации компонентов. Я верю, что такие языки будут гораздо более надежны, а программы будут более распараллеленные.
Читать дальше →

Мошеннические методы монетизации в free-to-play играх

Reading time11 min
Views137K
Примечание переводчика: После публикации статьи с автором связался коммерческий директор из King.com, создателя Candy Crush Saga, и прояснил несколько моментов, после чего автор добавил пару замечаний. Добавленные абзацы отмечены курсивом.

Принудительная монетизация


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

Согласно исследованиям, добавление даже одной промежуточной валюты между потребителем и реальными деньгами, например «игровых самоцветов» (премиальная валюта), делает потребителя гораздо менее подготовленными к оценке стоимости сделки. Лишние промежуточные предметы, я называю их «наслоения», делают для мозга оценку ситуации очень сложной, особенно под напряжением.

Этот дополнительный стресс часто подаётся в форме того, что Роджер Дики из Zynga называет «весёлыми мучениями». Приём заключается в том, чтобы поставить потребителя в очень неудобное или неприятное положение в игре, а потом предложить ему убрать эти «мучения» в обмен на деньги. Эти деньги всегда замаскированы в слоях принудительной монетизации, поскольку потребитель, столкнувшийся с «реальной» покупкой, скорее всего не поведётся на трюк.
Читать дальше →

Особенности игрового рынка в Китае — часть 3

Reading time3 min
Views13K
В конце июня мне случилось сопровождать вице-президента Азии в Unity Technologies Джона Гудейла в его поездке в Петербург. Я знал о нашем подразделении Unity Games China и о свежеанонсированной поддержке Tizen, поэтому сделал все чтобы впечатлить Джона проектами русских разработчиков и вообще атмосферой российского игропрома, надеялся настроить плодотворное общение с нашими Азиатскими офисами.

Я тогда сильно удивился — буквально у всех вокруг, больших и маленьких, уже был опыт работы с Китаем, но не было хоть сколько-нибудь положительных результатов.

«Удается договориться максимум на 5% от доходов, но в итоге непонятно, как забрать даже тот обещанный мизер, не выходит получить аналитику, данные о пользователях, по сути, любую информацию о своем же приложении», — примерная мысль наших собеседников. В худшем случае в одном из сотен магазинов приложений появлялось приложение-клон, а на том конце переставали отвечать на звонки и письма.

Китай - это как Евросоюз, но в Азии...

История запуска игры в социальных сетях

Reading time5 min
Views34K

Под конец весны 2013 года, я описывал историю плохого старта на Google Play. Пока с iOS заминки, решили закинуть игру в ВК и ОК. В статье я хочу поделиться особенностями запуска приложения под соц-сети, и расскажу про возникшие проблемы до и после релиза.
Читать дальше →

История создания стартапа по разработке мобильных игр

Reading time8 min
Views66K
В мае прошлого года я решил создать стартап по разработке социальных и мобильных игр. Спустя год, можно сказать, что авантюра удалась и немного рассказать о полученном опыте.

image

Читать дальше →

История плохого старта — вариант «Все сам»

Reading time5 min
Views57K
Заглавная картинка Некоторое время назад промелькнула на Хабре вот эта статья о запуске игры. В ней автор делится своим опытом создания первой игры и публикации ее через издателя. На тот момент моя игра уже была выпущена и находилась в GooglePlay около месяца. Правда, я выбрал самостоятельный вариант публикации без какой-либо помощи издателей. А поскольку опыта в этой области у меня не было совсем никакого, то я сделал целый ряд ошибок, которые, по-моему, снизили и так небольшие результаты. Вот об этих ошибках, а также о детальной статистике на текущий момент, я и хотел бы рассказать…
Поучиться на чужих ошибках

Базы данных в онлайн-играх. От Аллодов Онлайн до Skyforge

Reading time7 min
Views161K
Когда говорят про разработку игр, обычно речь идет о шейдерах, графике, AI и т.д. Крайне редко затрагивается серверная часть игровых проектов, а ещё реже — базы данных. Исправим это досадное недоразумение: сегодня я расскажу о нашем опыте работы с базами данных, который мы приобрели в ходе разработки Аллодов Онлайн и нашего нового проекта Skyforge. Обе эти игры — клиентские MMORPG. В первой зарегистрировано несколько миллионов игроков. Вторая разрабатывается студией в строжайшей секретности в недрах Allods Team.

Меня зовут Андрей Фролов. Я ведущий программист Allods Team и работаю в команде сервера. Мой опыт разработки — почти 10 лет, но в игры я попал только в октябре 2009. В коллективе я уже больше трёх лет, с марта 2010. Начинал работу на Аллодах Онлайн, а сейчас на Skyforge. Занимаюсь всем, что так или иначе связано с сервером Skyforge и базами данных. В этой статье я расскажу о базах данных в онлайн-играх на примере Аллодов и Skyforge.



Читать дальше →

Мобильные устройства Apple в корпоративном секторе. Профили конфигурации

Reading time9 min
Views34K
Первое, что приходит в голову при мысли о мобильном оборудовании для сотрудника крупной компании – это ноутбук типа HP EliteBook и смартфон BlackBerry. Подавляющее большинство считает, что MacBook очень далек от корпоративных стандартов, и подходит только для дизайнеров, инди-разработчиков и продвинутых домохозяек. iPhone считается стильным гаджетом для написания твиттов и фотографирования «луков» для модного Инстаграма.

ruVPN

Сейчас я попытаюсь развеять подобные стереотипы и рассказать, на что способны мобильные устройства знаменитой компании из Купертино.
Читать дальше →

Voldemort типы в D

Reading time4 min
Views18K
Данный пост расскажет об уникальной фишке D — Voldemort типы. Типы, которые можно использовать, но нельзя назвать. Данное название не очень подходит им, но Walter Bright очень любит так их называть. Voldemort типы очень часто встречаются в стандартной библиотеке Phobos, особенно в модулях std.algorithm и std.array. Осваивающие D могут часами штудировать документацию в поисках типа, возвращаемого из splitter или joiner, а возвращают они именно Voldemort типы. После этого поста можно смело открывать исходники std.algorithm, ибо никакие Сами-Знаете-Кто вам будут не страшны.

Он самый

Иногда, взаимодействие существующих возможностей может привести к неожиданным сюрпризам. Мне нравится считать, что мы изначально заложили Voldemort типы в D, но на самом деле они были найдены Андреем Александреску. Что это за Voldermort типы? Читайте дальше.

Читать дальше →

Памятка юнге (набор советов для тех, кто собирается идти в игровую индустрию)

Reading time14 min
Views62K


Что побудило меня написать это статью?


Первое. Зачем художнику рассказывать о тяготах жизни и о трудном пути, если у него вроде как все хорошо? Во-первых не так уж и хорошо (потому что всегда может быть лучше), а во вторых, для того чтобы идущие следом – не повторяли ошибок, стало быть не тратили свое драгоценное время. Сколько бы нам не было отпущено – все равно на все не хватит. Стоит постараться выделить важные вещи, и опустить незначительные.

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

Третье, но далеко не последнее. Еще одним «чиркашом» для моей сегодняшней спички послужила эта статья. Имею свой особый взгляд на игровую индустрию, игровые конторы, не имеющий ничего общего с изложенной точкой зрения. Хочу предложить тем кто решился идти в игровую индустрию нечто более осязаемое. Конкретику. То, что может быть использовано для достижения цели. Не будет волшебных пилюлек, ласковых Розовых оттенков еще не разбитых очков, политеса и прописных истин. Там где Истины все же отметятся – зайдут по делу, выпьют чарку рому и пойдут дальше.

Поскольку я кое-что знаю об арте, графическом контенте и других горшочках с дегтем и медом, — излагать буду взгляд в первую очередь на игровую индустрию и поиск работы в ней со своей колокольни. Артовой. Отмечу также, что могу оказаться донельзя субъективным. Насколько мне помешал мой субъективизм – решать вам.

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

Читать дальше →

Опасности обучения по книгам

Reading time3 min
Views44K
Сегодня разработчики находятся в состоянии постоянного давления. Желание добиться высокого уровня владения новыми языками и инструментами, боязнь однажды выпасть из информационного потока может затмевать всё. Действительно, с риском потери конкурентоспособности сталкиваются как программисты, не следящие за тенденциями и движениями индустрии, так и постоянно читающие технические новости для ориентации: какие навыки выучить при наличии времени, какие игнорировать, какие методы следует использовать.

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

Видел я и других разработчиков, склонных учиться в иной манере. Они также немного читают (обычно документацию продукта и краткое руководство) и сразу переключаются на более практический подход. Как только они приобретают базовое понимание языка или инструмента, они пытаются что-нибудь создать.
Читать дальше →

Google и Time запустили сервис, показывающий, как изменилась планета за 30 лет

Reading time1 min
Views133K
image

Благодаря новому проекту Google и журнала Time появилась возможность увидеть, как изменялась поверхность Земли последние 30 лет. В сотрудничестве с Геологической службой США (USGS) и НАСА они собрали вместе изображения планеты, сделанные из космоса за более четверть века, и составили из них интерактивную покадровую карту.

Эту карту, которая, как пишут в блоге Google, состоит из миллионов спутниковых снимков и триллионов пикселей, можно посмотреть на сайте Timelapse. Кроме истории расширения родного города, можете увидеть, как строились искусственные Пальмовые острова в Дубае, как отступает ледник Колумбия на Аляске, как вырубались леса Амазонки и как рос Лас-Вегас с 1984 по 2012 год.
Читать дальше →

Игровая механика: давайте разберём ядро игры по косточкам

Reading time11 min
Views116K
Термин «игровая механика» имеет много значений, но сегодня я буду говорить об игровой механике как об абстракции, определяющей состояние игры. Очень упрощённо это выглядит вот так:



Есть только два фактора, которые определяют любое текущее состояние игры: механика (правила) и игроки своими действиями.

Уровень ядра


Такт 1: определение состояния
Всегда есть некое текущее состояние системы (например, начало хода). Оно определяется на первом такте инициализирующей последовательностью, когда игроки «загружают» игру, раскладывая поле, выбирая фишки, распределяя начальные ресурсы и так далее. Затем оно меняется в зависимости от происходящего в игре.
Читать дальше →

RBAC Авторизация в YII и LDAP

Reading time12 min
Views98K

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

К сожалению стандартный мануал по RBAC в YII оставляет больше вопросов чем ответов. Эту ситуацию я и намереваюсь исправить.
Я расскажу о создании “правильной” иерархии: как делать не стоит. А в завершении я приберёг инструкцию, о том как подружить LDAP авторизацию (из ActiveDirectory ) с Yii и RBAC.

Все кто заинтересовался, добро пожаловать под кат!
Читать дальше →

Успех в инди: руководство для начинающих

Reading time10 min
Views82K
image

Вот чем меня точно не удивишь, так это вопросом, как стать профессиональным независимым разработчиком игр и достичь на этом пути успеха. Если честно, слышать его — по-прежнему большая честь для меня, поэтому сначала я каждый раз благодарю задавшего этот вопрос. Но вот дальше… черт, если я действительно собираюсь помочь человеку стоящим советом, то это потребует от меня немалых усилий. Я, конечно, всегда могу «отмазаться», сказав что-то вроде «Дерзай! Старайся! Следуй только за своим сердцем!» — и, на самом деле, это будет не самый плохой ответ. Впрочем, пользы от него тоже будет немного.

Сегодня перед вами именно то, что вы хотели узнать. Теперь я всегда буду ссылаться на эту статью, когда услышу подобные вопросы; повторение одного и того же раз за разом стало отнимать у меня слишком много времени. Я надеюсь, что эти советы смогут пригодиться всем начинающим независимым разработчикам в реальной жизни.

Приятного вам чтения!
Читать дальше →

PHPUnit: Mock объекты

Reading time7 min
Views94K
Довольно часто при написании модульных тестов нам приходится сталкиваться с тем, что тестируемый класс зависит от данных из внешних источников, состояние которых мы не можем контролировать. К таким источникам можно отнести далеко расположенную общедоступную базу данных или службу, датчик какого-нибудь физического процесса и пр. Либо нам необходимо убедиться, что некие действия выполняются в строго определенном порядке. В этих случаях к нам на помощь приходят Mock объекты (mock в переводе с английского — пародия), позволяя тестировать классы в изоляции от внешних зависимостей. Использованию Mock объектов в PHPUnit посвящается эта статья.
Читать дальше →

Information

Rating
Does not participate
Location
Одесса, Одесская обл., Украина
Date of birth
Registered
Activity