Цель данного сообщения поделиться своими впечатлениями о написании проекта, от реализации которого я получил долю адреналина и помочь студентам DLS, выбравшим эту тему.
Александр Календарев @akalend
Ламер с 20 летнем стажем
Web-Оповещения в нагруженных проектах
3 min
9KВ современном WEB Конструировании очень часто возникают задачи, когда необходимо оповестить пользователя о каком-нибудь событии: пришло новое сообщение, изменился курс на бирже или статус заказа, с конвертировался видео-контент или подскочила температура больной бабушки.
Есть несколько вариантов решения такого класса задач. Наиболее оптимальное и распространенное решение – это подписка на события. Как это реализуется в нагруженных проектах?
Есть несколько вариантов решения такого класса задач. Наиболее оптимальное и распространенное решение – это подписка на события. Как это реализуется в нагруженных проектах?
+11
Система рейтингов в высоконагруженном проекте
9 min
11KРассказ будет про один контентный проект, в котором мне пришлось переделать архитектуру. Ранее была реализована классическая Лампа-схема (Linux-Apache-MySQL-PHP). Но кол-во посетителей прибавлялось и прибавлялось, уже стало подходить к 1М хостов и сервер БД переставал справляться. Первым делом, я предложил докупить еще один серак, но в данном сегменте конвертация в партнерских программах довольно низкая, так что, руководство проекта немного пожмотилось.
Если, интересно, как мне пришлось изменить архитектуру и при этом еще прикрутить систему ротации и рейтингов, то добро пожаловать под кат.
Если, интересно, как мне пришлось изменить архитектуру и при этом еще прикрутить систему ротации и рейтингов, то добро пожаловать под кат.
+9
Из говнокода в Highload. Используем ТАРАНtool. 5 рецептов повышения производительности
14 min
33KКо мне обратился один руководитель стартапа социальной игры с просьбой увеличить производительность своего проекта. На этом этапе был сделан и запущен прототип проекта. И надо отдать должное разработчикам, что проект работал и даже приносил какую-то прибыль. Но, запускать рекламную компанию не имело смысло, так как проект не выдерживал ни каких нагрузок. Валился MySQL (35% ошибок).
Код проекта… В общем у меня осталось впечатление, что писал его недоученный студент… И это, немотря на то, что уже был сделан частичный рефакторинг другим программистом. Единственное, что радовало, то это то, что не использовался какой-либо фреймворк. Конечно, это вечно флеймовый вопрос: Иисус или Магомед? Быть или не Быть? Unix или Windows? Использовать или не Использовать? ИМХО, Моё мнение: фреймворки заточены под узкий круг типовых задач. Социальный проект — задача, как правило, не типовая… Но, в целом, мне проект показался интересным и я решил взяться за улучшение. На этом вступление можно закончить…
Наверно, про повышение производительности и тему highload не писал только ленивый WEB разработчик, знающий хоть что-то в этой области. Принципиально, что-то нового, в данной статье вы не найдёте. Основные идеи разработки highload проектов, были мною изложены в цикле статей HighLoad. Три кита.. Если вам интересно, как я увеличил производительность PHP проекта, используя NoSQL хранилище tarantool, то Добро пожаловать под кат.
Хотя, принципиально можно использовать другое, подходящее под данный круг задач, key/value хранилище, и реализация серверной логики может быть на любом другом скриптовом языке.
Код проекта… В общем у меня осталось впечатление, что писал его недоученный студент… И это, немотря на то, что уже был сделан частичный рефакторинг другим программистом. Единственное, что радовало, то это то, что не использовался какой-либо фреймворк. Конечно, это вечно флеймовый вопрос: Иисус или Магомед? Быть или не Быть? Unix или Windows? Использовать или не Использовать? ИМХО, Моё мнение: фреймворки заточены под узкий круг типовых задач. Социальный проект — задача, как правило, не типовая… Но, в целом, мне проект показался интересным и я решил взяться за улучшение. На этом вступление можно закончить…
Наверно, про повышение производительности и тему highload не писал только ленивый WEB разработчик, знающий хоть что-то в этой области. Принципиально, что-то нового, в данной статье вы не найдёте. Основные идеи разработки highload проектов, были мною изложены в цикле статей HighLoad. Три кита.. Если вам интересно, как я увеличил производительность PHP проекта, используя NoSQL хранилище tarantool, то Добро пожаловать под кат.
Хотя, принципиально можно использовать другое, подходящее под данный круг задач, key/value хранилище, и реализация серверной логики может быть на любом другом скриптовом языке.
+9
Тезисы к докладу на Highload++ «Опыт создания собственных key/value хранилищ для небольших высоконагруженных проектов»
1 min
5KПод катом тезисы, хочется знать, что из этого вызовет интерес, а что сократить
+3
Confetti — простая и быстрая конфигурация Вашего проекта
5 min
1.1KЕсли Вы пишете проект чуть более среднего, то как правило сталкиваетесь с настройками и конфигурированием. Есть не мало решений на С/С++, хочу рассказать еще про одно довольно-таки простое и красивое решение от Компании mail@Ru, которое я использовал в своем проекте
Сам я пользовался разными парсерами конфига, в последних проектах использовал re2c (конфиг был похож на конфиг nginx). У re2c есть даже немного общего с Конфети — это кодогенерация:
никаких настроечных файлов и структур кодить не надо, все за вас сделает Маг Confetty.
К сожалению, документации ни какой, иначе не было бы этой статьи. Интересующим, милости просим…
Сам я пользовался разными парсерами конфига, в последних проектах использовал re2c (конфиг был похож на конфиг nginx). У re2c есть даже немного общего с Конфети — это кодогенерация:
никаких настроечных файлов и структур кодить не надо, все за вас сделает Маг Confetty.
К сожалению, документации ни какой, иначе не было бы этой статьи. Интересующим, милости просим…
+2
+24
Tarantool Данные и Протокол
5 min
6.1KTarantool это замечательное высокопроизводительное no-Sql решение, разработка компании Mail.Ru. Исходники
Данное решение позволяет использовать как режим key/value, так и выборку множества записей в рекордсет по одному или нескольким критериям (полям поиска). Аналогов в рунете и не только, я пока не встречал. С натяжкой можно сравнить редис. Но в редисе — списковые данные и их нельзя выбирать по ключу. Судя до утверждениям разработчиков, скорость доступа по ключу превосходит memcache, при этом еще в бэдграунде осуществляется постоянное сохранение данных на диск. Но к сожалению, данная разработка имеет единственный perl клиент для доступа к данным, из-за чего не имеет такой популярности, как например у redis или memcache.
В doc/box-protocol источников есть описание Протокола, которое я в настоящее время переработал для написания клиента на Си и PHP. Изучив Протокол, вы можете реализоать нативный клиент на любимом Вам языке. Надеюсь, данная статья в этом Вам пригодится.
+34
HandlerSocket на AddConf Санкт-Петербург 29-30 апреля
1 min
1KНа AddConf будет мой доклад «Ускоряем MySQL в десятки раз с использованием HandlerSocket».
В докладе будут рассмотрены практические вопросы использования HandlerSocket в системе билинга и сбора статистики, будет рассмотрен протокол HandlerSocket, рассказаны приемы отладки, применяемые утилиты и методы, возможные острые углы.
А так же будет обозрение и результаты использования совместно с технологией sphinx и в качестве модуля nginx и обзор аналогичной технологии innoDb-memcache.
Хочется услышать пожелания к материалам доклада (что добавить а что наф. не нужно), а так же приглашаю его прослушать в живую.
Презентация
PS. Графика при конвертации немного сбилась. В оригинале этого нет.
Промокод на 5% скидку «Александр Календарев — читаю» .
ссылки по теме:
Первый опыт работы с Handler Socket & php_handlersocket
Некоторые тонкости Update & Insert в Handler Socket
nginx модуль
В докладе будут рассмотрены практические вопросы использования HandlerSocket в системе билинга и сбора статистики, будет рассмотрен протокол HandlerSocket, рассказаны приемы отладки, применяемые утилиты и методы, возможные острые углы.
А так же будет обозрение и результаты использования совместно с технологией sphinx и в качестве модуля nginx и обзор аналогичной технологии innoDb-memcache.
Хочется услышать пожелания к материалам доклада (что добавить а что наф. не нужно), а так же приглашаю его прослушать в живую.
Презентация
PS. Графика при конвертации немного сбилась. В оригинале этого нет.
Промокод на 5% скидку «Александр Календарев — читаю» .
ссылки по теме:
Первый опыт работы с Handler Socket & php_handlersocket
Некоторые тонкости Update & Insert в Handler Socket
nginx модуль
+20
http_handlersocket_json_module
3 min
1.8KО назначении модуля можно догодаться из названия. О HandlerSocket говорят много и на разных языках (в основном на японском, английском и последнее время немного на русском).
Модуль NGX_HTTP_HANDLERSOCKET_JSON_MODULE обращается к данным MySQL через протокол HandlerSocket и отдает данные в формате JSON. Область применения AJAX.
Исходники
О конфигурации, особенностях и ограничениях можно почиать ниже.
Модуль NGX_HTTP_HANDLERSOCKET_JSON_MODULE обращается к данным MySQL через протокол HandlerSocket и отдает данные в формате JSON. Область применения AJAX.
Исходники
О конфигурации, особенностях и ограничениях можно почиать ниже.
+32
Некоторые тонкости Update & Insert в Handler Socket
2 min
3.1KВ продолжение статьи Первый опыт работы с Handler Socket & php_handlersocket некоторые особенности Update & Insert
+6
Первый опыт работы с Handler Socket & php_handlersocket
4 min
10KНемного вскружилла голову статья Использование MySQL как NoSQL — История о том, как достичь 750,000 запросов в секунду (Перевод моего друга Вадима). Есть и другие материалы по этой теме. И вот дошли руки до экспериментов.
Под PHP разработано три разных клиента:
extension code.google.com/p/php-handlersocket
PEAR openpear.org/package/Net_HandlerSocket
PHP native github.com/tz-lom/HSPHP
Ниже приведены мои впечатления о первых экспериментах.
+40
Быстрый автокомплит с использованием libscgi
3 min
1.7KНедавно была опубликована статья "libscgi — эффективное решение для простых и быстрых скриптов". Хотелось бы продолжить ранее представленую тему с более практической стороны. Как уже догадались из название — речь пойдет об скрипте автокомпита.
Пользователей, и меня в частности, всегда разражали эти уж медленные автокомплиты. Бывает наберешь уже почти все слово, как появляется выпадающая менюшка. Понятно, что JavaScript сам по себе медленный. Но если еще автокомплит будет тормозить на стороне сервера, то вообще как-то кисло получается. Выход есть, если на серверной части использовать, что-то более быстрое, как вариант можно использовать бинарный скрипт с использованием libscgi. Исходники тут. Чуть ниже подробности.
Пользователей, и меня в частности, всегда разражали эти уж медленные автокомплиты. Бывает наберешь уже почти все слово, как появляется выпадающая менюшка. Понятно, что JavaScript сам по себе медленный. Но если еще автокомплит будет тормозить на стороне сервера, то вообще как-то кисло получается. Выход есть, если на серверной части использовать, что-то более быстрое, как вариант можно использовать бинарный скрипт с использованием libscgi. Исходники тут. Чуть ниже подробности.
+2
libscgi — эффективное решение для простых и быстрых скриптов
4 min
4.8KОчень часто необходимо реализовать простое легкое решение, которое должно отработать довольно быстро. А с использованием технологии AJAX это стало еще актуальнее. Это может быть как скрипт автокомплита, скрипт специфического поиска, вывод информации из справочника. Ранее использовались cgi скрипты. При больших нагрузках они оказались не очень эффективными и были разработаны протоколы fcgi и scgi. Следует заметить что производительность scgi сервера довольно-таки высокоя (более 1500 запр/сек) и памяти занимает всего 600K.
Протокол Simple Common Gateway Interface (SCGI) — это протокол по взаимодействию приложений с веб (http) серверами. Большинство современных WEB-серверов (Apache/nginx/lighttpd) имеют встроенную поддержку scgi. Ниже дано краткое описание использование простой библиотечки, которая представляет собой scgi сервер.
Исходники тут.
Протокол Simple Common Gateway Interface (SCGI) — это протокол по взаимодействию приложений с веб (http) серверами. Большинство современных WEB-серверов (Apache/nginx/lighttpd) имеют встроенную поддержку scgi. Ниже дано краткое описание использование простой библиотечки, которая представляет собой scgi сервер.
Исходники тут.
+23
Повышение производительности за счет блочного кеширования
5 min
5.7KТема блочного кеширования и ssi не раз проскакивала на Хабре. Ниже я представлю еще одну реализацию, использующего блочное кеширование, а также исходники фреймворка, использующего эти принципы, которые можно найти тут. А как это работает — прочитать ниже.
+42
Сервер подсчета кликов
2 min
3.2KЕсли ваш проект использует подсчет кликов и на нем есть какая-либо солидная нагрузка, то вы наверно задумывались об отдельном решении.
История разработки уходит в один проект торгово-рекламной площадки, где необходимо было учитывать кол-во переходов. Было решение на РНР. Но это давало видимую задержку в 0.5-1 сек, что очень раздражало разработчиков (в частности меня) и я думаю пользователей тоже.
По этому, когда пришлось разрабатывать аналогичный проект, мне пришлось искать альтернативы.
История разработки уходит в один проект торгово-рекламной площадки, где необходимо было учитывать кол-во переходов. Было решение на РНР. Но это давало видимую задержку в 0.5-1 сек, что очень раздражало разработчиков (в частности меня) и я думаю пользователей тоже.
По этому, когда пришлось разрабатывать аналогичный проект, мне пришлось искать альтернативы.
+58
Домашний датацентр или как начать не имея за душой ни гроша
3 min
2.1KВы молоды, амбициозны, полны сил и идей, и готовы перевернуть весь Мир! Но как правило, все хорошие начинания всегда заканчивается на самом банальном — нет средств для их реализации. Инвесторы готовы вложить в Ваш проект средства, но им нужно доказать «как Вашу состоятельность, так и состоятельность Вашего проекта». А, имея мешок идей и ничего за плечами — есть большая вероятность, что в «Вас Не Поверят». Как начать, не имея стартового капитала?
+45
AMQP-REST
2 min
6.8Kпро AMQP говорили много. Очередная разработка, ориентированная на AJAX.
Возможности:
Данные возвращаются в JSON.
Возможности:
- читать из очереди одно сообщение
- читать из очереди все сообщения
- узнать длинну очереди
- публиковать сообщение в обмен
Данные возвращаются в JSON.
+4
Служба мгновенных собщений своими руками
6 min
1.8KВсе мы привыкли пользоваться аськой, многие этот функционал реализуют в своих проектах, кто-то использует БД, или сервер очередей, например memcacheq. Есть готовые решения, типа eJabber.
Если интересно, как можно сделать это самому, то wellcom под каст, где будет рассмотрена серверная часть «Службы мгновенных сообщений». С клиентской, я надеюсь, разберетесь сами…
Если интересно, как можно сделать это самому, то wellcom под каст, где будет рассмотрена серверная часть «Службы мгновенных сообщений». С клиентской, я надеюсь, разберетесь сами…
0
Библиотека amqpcpp. Часть 2 — Очереди
6 min
3.1KВ статье «Lib amqpcpp wrapper for librabbitmq» был обзор публикации сообщений по протоколу AMQP. Данная статья является ее продолжением, в которой ниже описывается как использовать Очереди.
+5
Information
- Rating
- Does not participate
- Location
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Date of birth
- Registered
- Activity
Specialization
Software Architect, Database Architect
Lead
From 325,000 ₽
PostgreSQL
Golang
C++
Python
Database
Designing application architecture
Creating project architecture
Database design
Object-oriented design
Code Optimization