Pull to refresh
  • by relevance
  • by date
  • by rating

Какая боль! Толпы против Веб — 2:0. Эпизод один — высокоскоростная очередь

Website development *
Тов. phpdude открыл блогом «PHP+MySQL оптимизация» интересную тему, захватывающую большую аудиторию. Расскажу я о том, как я Веб 2.0 убил два моих сервера (из-за моей глупости в т.ч.) и еще планирует поубивать.

Все началось осенью 2006 года, когда я решил открыть небольшой сайтик с 70 миллионами страничек. И нет, они не были бы сделаны по цепям Маркова, а именно были бы полезными. Почему 70 миллионов? Потому что столько .com/.net/.org доменов в тот момент я смог найти.
Читать дальше →
Total votes 88: ↑70.5 and ↓17.5 +53
Views 345
Comments 104

Очереди в Сбербанках по новому

Interfaces *
Хочу дать несколько советов по улучшению Электронных очередей.
Сейчас в некоторых Сбербанках города Москвы реализована система «Электронных очередей».

В нашем центральном Зеленоградском Сбербанке это выглядит следующим образом:
На входе стоит аппарат, в котором одним кликом (на необходимую тебе операцию) можно получить чек c номером.
Ты садишься в кресло и ждёшь, пока робот назовёт твой номер и к какому окну тебе необходимо подойти.

Всё оставляет приятные впечатления, кроме нескольких вещей, которые (даже сейчас, простым обновлением ПО) можно и нужно улучшить.

Читать дальше →
Total votes 39: ↑35 and ↓4 +31
Views 1.4K
Comments 58

Unclesocky podcast — Выпуск #34

Lumber room
— Система дала сбой
— Эффект «очереди»
— Экономист и его теория
— Идеальное или реальное рабочее место?
— У истоков системы с транзактами
— Неоднозначность в лабе
— Пишем прогу по командам
— МСК — Кодиак 3:3
— Футбол как один из смыслов жизни
— Авангард — Кодиак 3:1
— 3 отрицательных момента + з/п
— Работа + велосипед?

unclesocky podcast34 / 17.6 Мб / 38:27 / MP3, 64 kbps
Download

Офф. сайт подкаста

RSS подкаста
Total votes 1: ↑0 and ↓1 -1
Views 177
Comments 0

AMQP по-русски

Website development *
Сегодня довольно мало информации о протоколе AMQP (Advanced Message Queueing Protocol) и его применении, особенно на русском языке. А вообще это — замечательный, уже достаточно широко поддерживаемый открытый протокол для передачи сообщений между компонентами системы с низкой задержкой и на высокой скорости. При этом семантика обмена сообщениями настраивается под нужды конкретного проекта. Такие решения существовали и ранее, но это первый стандарт, для которого существует большое количество свободных реализаций.

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

Сегодня тема доставки информации в реальном времени является крайне актуальной (достаточно вспомнить хотя бы Twitter, Google Wave). И здесь системы передачи сообщений могут служить внутренним механизмом обмена данными, который обеспечивает доставку данных (изменений данных) клиентам.

Я не ставлю своей целью сегодня рассказать о том, как писать приложения для AMQP. Хочу лишь немного рассказать о том, что это совсем не страшно, не очень сложно, и действительно работает, хотя стандарт находится еще в развитии, выходят новые версии протокола, брокеров и т.п. Но это уже вполне production-quality. Расскажу лишь базовые советы, чтобы помочь “въехать” в протокол.
Читать дальше →
Total votes 35: ↑34 and ↓1 +33
Views 68K
Comments 31

Простой способ организации очереди из AJAX-запросов

Lumber room
Постановка задачи

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

Однако в такой системе неизбежно возникает следующий момент: пользователь может подряд быстро нажать на несколько ссылок «подробнее», в то время как сервер будет долго обрабатывать входящие запросы. Если в AJAX используется только один объект XMLHttpRequest (обычно так и есть), то все запросы свалятся в нем «в кучу», и результат запроса отобразится не там, где нужно. Таким образом, встает задача организовать очередь из однотипных асинхронных запросов к серверу, так, чтобы последующий выполнялся только после того, как закончится предыдущий.

Читать дальше →
Total votes 11: ↑6 and ↓5 +1
Views 2K
Comments 11

Прием граждан: опыт внедрения «электронной очереди» в государственной организации

Legislation in IT
Добрый день, друзья!

Так или иначе, всем нам приходится обращаться в государственные органы. Взять справку, поставить на учет, снять с учета, зарегистрировать и т.д. И каждый раз приходится выстаивать многочасовые очереди ради одной-двух заветных бумажек или печатей. В сегодняшней статье я хотел бы рассказать о том, как лично мы боремся с проблемой очередей (в нашем Управлении [УФРС по Курганской области] довольно большой поток посетителей, так что задача довольно актуальна).

Сразу хочу оговориться о целях статьи:

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

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

Читать дальше →
Total votes 85: ↑84 and ↓1 +83
Views 3.6K
Comments 71

Прием граждан: опыт внедрения «электронной очереди» (часть 2)

Legislation in IT
Добрый день, дорогие друзья!
Прошло три месяца с моей предыдущей заметки про то, как мы внедрили в нашем Управлении «электронную очередь» для приема граждан. За три месяца проделан очередной большой объем работы. Во-первых, конечно же, обкатка и «доработка напильником» всей системы в «боевых условиях». И, во-вторых — буквально на днях была запущена система для самостоятельной (!!) записи заявителей в очередь. Обо всех этих «вкусностях» читайте под катом. Кроме того, для всех интересующихся я подготовил видеопрезентацию, позволяющую вживую посмотреть, как все это работает.

Читать дальше →
Total votes 40: ↑38 and ↓2 +36
Views 1.3K
Comments 43

Очередь на «Аватар» в Минске

Lumber room
Вчера открылся первый в Беларуси 3D-кинотеатр, и в первый же день после открытия там должна была состояться премьера фильма «Аватар». Как сообщают информагентства, ещё до рассвета перед кинотеатром начала собираться очередь…


Читать дальше →
Total votes 146: ↑115 and ↓31 +84
Views 418
Comments 395

Вас тут не стояло

Lumber room
Пожалуй каждый визит в любую государственную организацию начинается с очереди. Люди ждут часами, толпясь и толкаясь в узких коридорах, а порой и выясняют силой кто за кем стоял…
image

Порой доходит до безумия:


Непотяно, почему-же до сих пор у нас не принято решение проблемы которым пользуются многие другие страны? Почему у нас нет электронной очереди?
Читать дальше →
Total votes 40: ↑34 and ↓6 +28
Views 301
Comments 85

Google Nexus 4 закончился в магазинах Google Play в США, Европе и Австралии

Smartphones IT-companies
Согласно сообщениям информагенств и моим личным наблюдениям, смартфон Google Nexus 4, появившийся 13 ноября в продаже в магазинах Google Play, был распродан в течение буквально нескольких десятков минут. В частности, всего через 10 минут после начала продаж в магазине Великобритании обе модели коммуникатора уже показывались как распроданные. В Австралии 16Гб версия закончилась через 22 минуты после старта продаж. Подобное произошло и в США.

Читать дальше →
Total votes 67: ↑52 and ↓15 +37
Views 47K
Comments 116

Структуры данных, PHP

PHP *
Translation
Tutorial
Данный пост является переводом и предназначен для новичков. Ну или для тех, кто забыл лекции с начальных курсов своих вузов. Скорее всего, данный материал уже попадался на хабре в той или иной модификации, но здесь упор на PHP и его особенности.

Структуры данных или Абстрактный Тип Данных (ADT) — это модель, определенная как некий набор операций, которые могут быть применены к самой себе и ограничена тем, какой результат дают эти операции.
Большинство из нас сталкиваются со стеком и очередью в повседневной жизни, но что общего между очередью в супермакете и структурой данных? В этом мы и попробуем разобраться в данной статье, где также будут описаны деревья.

http://www.thisiscolossal.com/2013/01/a-wooden-domino-tree-by-qiu-zhijie/



UPD: s01e02

Осторожно, трафик! Очень много текста!
Total votes 57: ↑44 and ↓13 +31
Views 71K
Comments 17

GPSS-WORLD основы имитационного моделирования на живых примерах

Mathematics *
Tutorial
Доброй пятницы уважаемые читатели Хабра.
В данном посте я предлагаю вам бегло ознакомиться с возможностью создания имитационной модели процессов в программе GPSS-WORLD. Данный пост нельзя считать полноценным туториалом, но я поделюсь с Вами теми крупицами, что знаю и вполне возможно что уже через пол часа после прочтения статьи Вы проявив фантазию создадите свою собственную имитационную модель. Как говориться в народе: «Тяжело в учении легко в бою».
И пусть местами, данный «туториал» придерживается принципа: «битый не битого везет», но я всё же донесу до вас те знания, которые у меня есть, ну а вы уж сами вольны решать, стоить ли мне доверять или лучше проверять. В любом случае я буду рад аудиту кода от знатоков GPSS-WORLD. Все материалы статьи размещены на GItHub
Изучать самые азы будем сразу на живых примерах — доступных, понятных и близких сердцу многим сотрудникам проводящим свои законные 8 часов в офисах.
От конкретики перейдем к лирике, пятница традиционно располагает задаваться безумными вопросами, и в этот раз мы с моим коллегой DrZugrik задались вопросом: «Сколько нужно сотрудников тех поддержки, чтобы рассказать, как вкрутить лампочку?».
За подробностями сего мысленного эксперимента прошу под кат.

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


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

первоначальная иллюстрация



Читать дальше →
Total votes 10: ↑7 and ↓3 +4
Views 156K
Comments 6

Lock-free структуры данных. Очередной трактат

Programming *C++ *

Как вы, наверное, догадались, эта статья посвящена lock-free очередям.

Очереди бывают разные. Они могут различаться по числу писателей (producer) и читателей (consumer) – single/multi producer — single/multi consumer, 4 варианта, — они могут быть ограниченными (bounded, на основе предраспределенного буфера) и неограниченными, на основе списка (unbounded), с поддержкой приоритетов или без, lock-free, wait-free или lock-based, со строгим соблюдением FIFO (fair) и не очень (unfair) и т.д. Подробно типы очередей описаны в этой и этой статьях Дмитрия Вьюкова. Чем более специализированы требования к очереди, тем, как правило, более эффективным оказывается её алгоритм. В данной статье я рассмотрю самый общий вариант очередей — multi-producer/multi-consumer unbounded concurrent queue без поддержки приоритетов.
Читать дальше →
Total votes 74: ↑71 and ↓3 +68
Views 44K
Comments 8

Lock-free структуры данных. Диссекция очереди

Programming *C++ *Concurrent computing *

Со времени предыдущего поста из жизни lock-free контейнеров прошло немало времени. Я рассчитывал быстро написать продолжение трактата об очередях, но вышла заминка: о чем писать, я знал, но реализации на C++ этих подходов у меня не было. «Не годится писать о том, что сам не попробовал», — подумал я, и в результате я попытался реализовать в libcds новые алгоритмы очередей.
Сейчас настал момент, когда я могу аргументированно продолжить свой цикл. В данной статье закончим с очередями.

Кратко напомню, на чем я остановился. Были рассмотрены несколько интересных алгоритмов lock-free очередей, а под занавес приведены результаты их работы на некоторых синтетических тестах. Главный вывод — всё плохо! Надежды на то, что lock-free подход на магическом compare-and-swap (CAS) даст нам пусть не линейный, но хотя бы какой-то рост производительности с увеличением числа потоков, не оправдались. Очереди не масштабируются. В чем причина?..
Читать дальше →
Total votes 53: ↑52 and ↓1 +51
Views 25K
Comments 16

Настольная игра для самых маленьких программистов (от 7 лет)

Мосигра corporate blog Programming *Game development *
Мы тут весь год общались с детскими психологами и вообще много думали о теме детского образования. Как один из результатов — сделали игру на развитие логики.



В общем, юному программисту нужно будет написать стек действий для таксиста. Чтобы довезти пассажира куда надо с первого раза. Сразу говорю — можно играть и с 4-5 лет. Как обычно, если ребёнок — сын инженера, смело вычитайте 2 года из минимального возраста.
Читать дальше →
Total votes 95: ↑88 and ↓7 +81
Views 56K
Comments 76

Conveyor — поэлементная обработка данных с временной задержкой

JavaScript *Node.JS *
Sandbox

Что и зачем


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

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

Далее я вспомнил, что надо парсить разные разделы этого сайта и понял, что становится уже слишком неудобно. Поэтому сделал инструмент Conveyor, умеющий обрабатывать некие «элементы данных» (т.е. применять функцию-обработчик к заданных объектам) с временной задержкой между обработкой. Удобным это оказалось и для «тяжёлых» вычислений, которые могут долго выполняться в цикле.

Код Conveyor лежит на гитхабе, поставить можно через npm (называется dataconveyor). Более структурированная справка также на гитхабе. Использовать его можно как угодно и где угодно, без ограничений.

Ниже описание инструмента Conveyor.
Читать дальше →
Total votes 6: ↑5 and ↓1 +4
Views 2K
Comments 2

Структуры данных. Неформальный гайд

Programming *Algorithms *
Translation


Конечно, можно быть успешным программистом и без сакрального знания структур данных, однако они совершенно незаменимы в некоторых приложениях. Например, когда нужно вычислить кратчайший путь между двумя точками на карте, или найти имя в телефонной книжке, содержащей, скажем, миллион записей. Не говоря уже о том, что структуры данных постоянно используются в спортивном программировании. Рассмотрим некоторые из них более подробно.
Читать дальше →
Total votes 91: ↑83 and ↓8 +75
Views 157K
Comments 31

Asyncio Tarantool Queue, вставай в очередь

VK corporate blog Python *Tarantool *


В одной из своих статей я рассказывал об асинхронной работе с Tarantool на Python. В данной статье продолжу эту тему, но внимание хочу уделить обработке информации через очереди на Tarantool. Мои коллеги опубликовали несколько статей о пользе очередей (Инфраструктура обработки очередей в социальной сети Мой Мир и Push-уведомления в REST API на примере системы Таргет Mail.Ru). Хочу дополнить информацию об очередях на примере решений наших задач, а также рассказать о работе с Tarantool Queue на Python и asyncio. Почему мы выбираем именно Tarantool, а не Redis или RabbitMQ?
Читать дальше →
Total votes 34: ↑32 and ↓2 +30
Views 18K
Comments 14

Сортировка очереди без использования дополнительных ресурсов

Algorithms *
Sandbox
Недавно столкнулся с такой задачей: «Объединить две очереди таким образом, чтобы суммарная очередь была отсортирована». Причём требование для сортировки такое: не использовать никаких промежуточных объектов, кроме одной переменной, каким бы медленным алгоритм ни был. Первые попытки составить алгоритм сортировки очереди приводили к вопросу о том, как выйти из бесконечного цикла, но в конечном итоге я получил необходимый алгоритм, о котором и пойдёт речь.
Читать дальше →
Total votes 14: ↑12 and ↓2 +10
Views 15K
Comments 23

Уничтожаем очередь обращений. Часть 1

Usedesk corporate blog
В начале декабря, глядя на статистику продаж, Николай потирал руки: заказов было в два раза больше, чем в ноябре, и месяц обещал январский отпуск в Красной поляне. К 20 числу продажи начали падать. Почтовый ящик поддержки превратился в горшочек из сказки, который варил без остановки и никакие волшебные слова не помогали. Пришлось самому сесть за письма, но поддержка все равно не справлялась: отвечали долго, клиенты злились и заказывали в другом магазине. Что помешало команде Николая выдержать наплыв обращений перед новым годом? Николай не учел нагрузку. В университете он прогуливал Теорию массового обслуживания и теперь не рассчитал, сколько сотрудников ему понадобится во время пика обращений. Кроме того, команда хаотично обрабатывала заявки без четкого плана и не смогла удержать очередь за хвост.
Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Views 5K
Comments 1
1