Sparkfun.com Бесплатный День Или *Как Вы Относитесь К Рекапче*

Вдохновение .

Хотя 55% ненавидят. И я выбрал «другое».

Потому что я люблю.

Но не потому что я считаю это удобнее других, а потому что.

Раз в год американская компания sparkfun.com, хорошо известная всем домашним мастерам, проводит (почти) лотерею.

Последний, или, как говорят десантники, последний раз они это делали 10 января этого года.

Идея проста — вы заходите на сайт и за определенное время решаете те самые ненавистные рекапчи.

Некое устройство случайным образом выбирает одну из решенных капч и выдает автору сертификат на 100 долларов — на эти деньги на Sparkfan можно заказать что угодно, оплачивается только доставка.

То есть абсолютно честная раздача.

И вот, в 9 утра по колорадскому времени группа людей со всего мира села гадать рекапчу.

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

На самом деле там, в Колорадо, люди не сидят и смеются над решателями, а всеми силами пытаются побороть этот хабра-эффект. Я выиграл - после получаса набора рекапчи:

Sparkfun.com БЕСПЛАТНЫЙ день или *как вы относитесь к рекапче*

Представляю, сколько людей уже перестали читать и испортили мою карму.

Теперь что-то вкусненькое для самых стойких.

Перевод репортажа с сайта sparkfan:



Отчет о свободном дне

12 января 2012 г.



Sparkfun.com БЕСПЛАТНЫЙ день или *как вы относитесь к рекапче*

Снова январь и очередной свободный день.

Независимо от того, выиграете вы или проиграете, мы надеемся, что всем было весело.

Мы получили массу удовольствия от его организации – это точно! Числа: Немного цифр, потом расскажу, как мы это организовали.

6 437 592 правильных решения рекапча.

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

Если предположить, что среднестатистический человек тратит на капчу 4 секунды, то все уже потрачено на все.

7188 часов , то есть рядом 10 месяцев время! Каждая капча обрабатывалась сервером Sparkfan, то есть 300 капч в секунду в течение 355 минут, когда мы раздавали деньги.

32 137 уникальных посетителей на сайте (по данным отчетов Analytics).

С некоторой ошибкой это количество игроков.

Средний, каждый выполнил 208 капч .

Знать, что такое капча – это очень много! 704 617 просмотров страниц на месте в течение дня Был распространен 2000 промокодов , из них 473 были заклеймены в один день .

Первый заказ отправился на доставку в 10:45, т.е.

менее чем через 2 часа после начала мероприятия.

Мы выдали промокоды примерно раз в 5,6 минут В этот день было зарегистрировано 7776 аккаунтов

Еще цифры для знающих

Максимально обработанный MySQL 13 380 запросов в секунду Максимальная пропускная способность нашей сети составила 1214,35 Мбит/с Достигнута максимальная ширина канала до провайдера чуть более 76 Мбит/с В максимуме у нас было 84 220 активных TCP-соединений .

Мы запретили 32 бота .

Ставим внешний сайт, перенаправляющий на него слишком много трафика (Извините, Пачубе !)

Sparkfun.com БЕСПЛАТНЫЙ день или *как вы относитесь к рекапче*



Фактическая использованная настройка

Как мы это сделали – опять же для гиков.

Если вы участвовали в первых двух акциях, возможно, вы заметили, что в этом году акция прошла намного лучше.

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

Что изменилось по сравнению с предыдущими годами? Мы добавили некоторое программное и аппаратное обеспечение на наши серверы.

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

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

Мы также перешли с Apache на Nginx, где всю обработку выполнял PHP-FPM. До всего этого Varnish еще тусовался, кешируя все, что выходит - что оказалось невероятно полезно для продвижения.

Также в прошлые годы мы заметили, что чаще всего лаги были вызваны тормозами MySQL, поэтому кое-где подкрепили MongoDB. Для некоторых (особенно иерархических данных) это имело смысл.

Это помогло нам отображать страницы очень быстро.

К сожалению, из-за небольшой ошибки в драйвере PHP Mongo, в первые минуты акции у нас возник сбой.

Раньше мы предоставляли весь контент прямо с нашего сервера.

Когда нагрузка нормальная, то все ок — страницы загружаются нормально и мы съедаем небольшой канал.

Естественно, во время Свободного дня все меняется.

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

В этом случае, естественно, нагрузка ложится на них, а не на нас.

Но это тоже особо не помогает. 76 Мбит/с, которые мы пропускали через наши серверы, представляли собой в основном текст, упакованный в gzip.

Счетчик Гейгера?



Sparkfun.com БЕСПЛАТНЫЙ день или *как вы относитесь к рекапче*

Хорошо что? Любой, кто знаком с информатикой, скажет вам, что случайные числа, генерируемые компьютером, на самом деле являются псевдослучайными числами.

Их можно предсказать – даже если шанс на успех составляет 1 на миллион, это все равно шанс.

Так как же нам построить полностью случайную систему? Мы выбрали счетчик Гейгера для измерения радиационного фона.

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

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

Вот код для duni:

   

#include <Ethernet.h> #include <SFEbarGraph.h> #include <SPI.h> // Default 'ino MAC address byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192, 168, 0, 2 }; int up = 8; int down = 7; int upstate = 0; int downstate = 0; // replace with your server byte server[] = { 192, 168, 0, 1 }; EthernetClient client; SFEbarGraph BG; volatile int counter = 0; int oldcount = 0; int target = 8; int multiplier = 2; void setup() { BG.begin(1, 9); // Interrupt from the Geiger tube attachInterrupt(0, detect, RISING); Serial.begin(9600); Ethernet.begin(mac, ip); // set up buttons pinMode(up, INPUT); digitalWrite(up, HIGH); pinMode(down, INPUT); digitalWrite(down, HIGH); delay(1000); } void loop() { // read up button if(LOW == digitalRead(up)) { if(0 == upstate) { target++; redraw(); upstate = 1; } } else { upstate = 0; } // read down button if(LOW == digitalRead(down)) { if(0 == downstate) { target--; redraw(); downstate = 1; } } else { downstate = 0; } if(counter == oldcount) { delay(1); return; } oldcount = counter; // handle wins if(counter >= target) { win(); counter = 0; oldcount = 0; return; } redraw(); } // for the interrupt void detect() { counter++; } void redraw() { // boundaries if(target > (30 / multiplier)) target = (30 / multiplier); if(target < 1) target = 1; BG.clear(); BG.send(); BG.barGraph(counter * multiplier, target * multiplier); } void win() { Serial.println("WINNER"); for(int i = target * multiplier; i >= 0; i--) { BG.barGraph(i, target * multiplier); delay(35); } if ( ! client.connected()) { Serial.println("connecting."); if (client.connect(server, 5555)) { Serial.println("connected"); } else { Serial.println("connection failed"); } } // Print a 1 to the Ethernet server for every win client.print("1"); }

Ну и чтобы закрыть тему, вот битовый серверный код , который Бен написал для обработки сотен запросов в секунду.

Он тестировал его при нагрузках до 600 тысяч запросов в секунду.

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

Там вы узнаете, нравится ли людям капча.



Sparkfun.com БЕСПЛАТНЫЙ день или *как вы относитесь к рекапче*

От переводчика и автора поста: перевод вполне вольный - не обессудьте.

Настроение такое: либо так, либо никак.

Теги: #высокая нагрузка #сделай сам #сделай сам #случайные числа #стартапы #шалости #электроника #arduino #Nginx #тестирование IT-систем

Вместе с данным постом часто просматривают: