Хотя 55% ненавидят. И я выбрал «другое».
Потому что я люблю.
Но не потому что я считаю это удобнее других, а потому что.
Раз в год американская компания sparkfun.com, хорошо известная всем домашним мастерам, проводит (почти) лотерею.
Последний, или, как говорят десантники, последний раз они это делали 10 января этого года.
Идея проста — вы заходите на сайт и за определенное время решаете те самые ненавистные рекапчи.
Некое устройство случайным образом выбирает одну из решенных капч и выдает автору сертификат на 100 долларов — на эти деньги на Sparkfan можно заказать что угодно, оплачивается только доставка.
То есть абсолютно честная раздача.
И вот, в 9 утра по колорадскому времени группа людей со всего мира села гадать рекапчу.
Сайт сразу вылетает. На его место вешают заглушку, которая извиняется за недоступность магазина и выбрасывает на отдельную страницу для решения капчи.
На самом деле там, в Колорадо, люди не сидят и смеются над решателями, а всеми силами пытаются побороть этот хабра-эффект.
Я выиграл - после получаса набора рекапчи:
Представляю, сколько людей уже перестали читать и испортили мою карму.
Теперь что-то вкусненькое для самых стойких.
Перевод репортажа с сайта sparkfan:
Отчет о свободном дне
12 января 2012 г.
Снова январь и очередной свободный день.
Независимо от того, выиграете вы или проиграете, мы надеемся, что всем было весело.
Мы получили массу удовольствия от его организации – это точно! Числа: Немного цифр, потом расскажу, как мы это организовали.
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 бота .
Ставим внешний сайт, перенаправляющий на него слишком много трафика (Извините, Пачубе !)
Фактическая использованная настройка
Как мы это сделали – опять же для гиков.Если вы участвовали в первых двух акциях, возможно, вы заметили, что в этом году акция прошла намного лучше.
Если исключить тот факт, что сайт захлебнулся в первые минуты, когда начался самый большой наплыв участников, то сайт вполне за себя отвечал, при этом фактически обрабатывая огромный трафик.
Что изменилось по сравнению с предыдущими годами? Мы добавили некоторое программное и аппаратное обеспечение на наши серверы.
Теперь у нас есть пара толстых веб-серверов, каждый из которых имеет 16 ядер и 32 гигабайта оперативной памяти, и у нас есть жесткие балансировщики нагрузки.
Кроме того, мы оптимизировали собственный код для работы с нашим оборудованием и изменили некоторые программы с открытым исходным кодом.
Мы также перешли с Apache на Nginx, где всю обработку выполнял PHP-FPM. До всего этого Varnish еще тусовался, кешируя все, что выходит - что оказалось невероятно полезно для продвижения.
Также в прошлые годы мы заметили, что чаще всего лаги были вызваны тормозами MySQL, поэтому кое-где подкрепили MongoDB. Для некоторых (особенно иерархических данных) это имело смысл.
Это помогло нам отображать страницы очень быстро.
К сожалению, из-за небольшой ошибки в драйвере PHP Mongo, в первые минуты акции у нас возник сбой.
Раньше мы предоставляли весь контент прямо с нашего сервера.
Когда нагрузка нормальная, то все ок — страницы загружаются нормально и мы съедаем небольшой канал.
Естественно, во время Свободного дня все меняется.
В этом году мы разместили весь статический контент на Amazon Cloudfront. Cloudfront — это глобальная CDN, которая работает на базе известной службы хранения S3 и загружает контент с пограничных серверов пользователям по всему миру.
В этом случае, естественно, нагрузка ложится на них, а не на нас.
Но это тоже особо не помогает. 76 Мбит/с, которые мы пропускали через наши серверы, представляли собой в основном текст, упакованный в gzip.
Счетчик Гейгера?
Хорошо что? Любой, кто знаком с информатикой, скажет вам, что случайные числа, генерируемые компьютером, на самом деле являются псевдослучайными числами.
Их можно предсказать – даже если шанс на успех составляет 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 тысяч запросов в секунду.
Ну кто знает английский - не откажите себе в удовольствии прочитать комментарии к этот записывай и смотри видео .
Там вы узнаете, нравится ли людям капча.
От переводчика и автора поста: перевод вполне вольный - не обессудьте.
Настроение такое: либо так, либо никак.
Теги: #высокая нагрузка #сделай сам #сделай сам #случайные числа #стартапы #шалости #электроника #arduino #Nginx #тестирование IT-систем
-
Mozilla Увеличила Выручку До $66,8 Млн
19 Oct, 24 -
Хабрамосква. Отчет. Часть 2.
19 Oct, 24 -
Quake 3 На Платформах Moorestone
19 Oct, 24 -
Скайп – Что Произошло 16 Августа
19 Oct, 24 -
Аср «Запрос-Биллинг»
19 Oct, 24