Как с помощью технологий Azure повысить явку на выборы президента США

в 11:58, , рубрики: api, asp.net mvc, azure, knockout, odata, windows azure, Блог компании EastBanc Technologies, Облачные вычисления, метки: , , , ,

Как с помощью технологий Azure повысить явку на выборы президента США
Одним из самых захватывающих опытов в истории EastBanc Technologies стала совместная с Microsoft и Bing работа над проектом Polling Place Locator — облачным Azure-приложением, которое 6 ноября 2012 года помогло 6 миллионам американцев найти свои избирательные участки. В этот день произошло два исторических события — 1) президентом Соединенных Штатов Америки во второй раз стал Барак Обама; 2) наше приложение выдержало колоссальную нагрузку в 1,5 млн уникальных визитов и 6 млн API-запросов за один день, в течение которого Polling Place Locator показывался на каждой странице американского сегмента Facebook, на mashable.com и на сайтах нескольких кандидатов в президенты.

Газета Los Angeles Times назвала Polling Place Locator «возможно, самым полезным инструментом поиска избирательных участков», а телеканал CNN рассказал о приложении в прайм-тайм.

Историю о том, как EastBanc Technologies внес свою лепту в развитие американской демократии, читайте далее! Под хабракатом мы рассказываем о технической реализации приложения, применении Windows Azure в высоконагруженных приложениях и о том, как приложение работало, и как мы сделали так, чтоб отпустило пожалуйста что ничего не упало даже в пиковые нагрузки.

Как с помощью технологий Azure повысить явку на выборы президента США

Почему в Штатах сложно найти свой избирательный участок

В США отсутствует институт прописки, миграционные потоки внутри страны мониторятся через водительские права, социальные карты (ID) и платежные системы. Гражданин США может проголосовать в одном из определенных мест рядом с его домом, при этом он обязан предъявить документ, удостоверяющий личность (а какой конкретно — ID или водительские права — индивидуально для каждого штата) и какое-либо доказательство его проживания на этом участке, например, оплаченный счет за коммунальные услуги.

Всё это может создавать определенную путаницу (у нас-то все проще – мы можем голосовать лишь в одном месте, которое определяет нам наша прописка, и только по предъявлению паспорта). В Штатах же у вас было бы несколько таких мест, причем располагаться избирательные пункты могут в супермаркетах, школах или даже просто на улицах.

Как обеспечить явку при такой сложной системе

Чтобы американские избиратели не плутали и всегда приносили с собой нужные документы, по инициативе некоммерческой приправительственной организации Pew в 2010 году компанией EastBanc Technologies при поддержке MSN и Bing был создан сервис Voting Information Project (VIP), призванный сделать информацию о любых государственных и муниципальных выборах (будь то выборы президента, сенатора или шерифа) более доступной. С помощью VIP граждане имеют возможность: забив в строку поиска свой адрес, получить маршрут ко всем определенным для этого адреса избирательным пунктам и узнать время их работы; прочесть информацию о кандидатах; узнать, какие документы нужно взять с собой; получить контакты административных работников, курирующих участки; работать с приложением на одном из 50 предложенных языков, в том числе на таких экзотических как гаитянский, креольский, тагальский, хинди и язык одной из китайских народностей — хмонг.

Как с помощью технологий Azure повысить явку на выборы президента США
Путь до ближайшего избирательного пункта

Как с помощью технологий Azure повысить явку на выборы президента США
Какие документы с каким содержанием предъявить

Как с помощью технологий Azure повысить явку на выборы президента США
Подтверждение адреса с помощью счета за газ

VIP оказался эффективным инструментом, который помог миллионам людей выполнить гражданский долг с минимумом хлопот и путаницы. Об этом можно судить уже по статистике 2010 года, когда более 300 веб-сайтов разместили виджет VIP, который собрал 20 миллионов просмотров и около 7 млн случаев поискового запроса.

В «мирные» годы VIP работал под вполне себе обычной нагрузкой. Самый интересный момент настал, когда на выборы глобально собралась вся страна Америка…

Что мы сделали, чтобы приложение не упало под тоннами реквестов

При разработке приложения были использованы следующие ингредиенты:

  • платформа — Microsoft Azure
  • веб-протокол — OData
  • реализация UI — на knockout и ASP.NET MVC
  • решение по масштабированию API — APIPhany
  • железо — 90 ядер и 127 баз данных.

От заказчика (Pew) мы получали данные в виде exml, которые закачивались в нашу базу.

Специально для эффективной загрузки фидов на ASP.NET было написано приложение MVC, в котором по расписанию раз в час перегружались URL-ы.

Сначала, в тестовом режиме, чтобы разнести нагрузку по базам, мы разбили их на 4 региона — Middle East, West, South, Northeastern States. При переключении на боевой режим 6-го ноября 2012 года количество баз было увеличено до 127. Работали они так: одна база определяла, из какого штата пришел запрос, и переключала на ту, что отвечает за этот штат.

Для примера: юзер обозначает, что живет в городе Нью-Йорк. Через сервер OData отправляется запрос к главной базе, которая определяет, что за штат у этого города и выдает данные нью-йоркской базы, — мол, документы принеси такие-то, голосовать идти можешь по таким-то адресам.

В таком напряженном режиме приложение проработало до 7 ноября 01:00 ночи по Вашингтону. Потом мы всё и отключили, вернувшись к нормальной жизни и, наконец, выпив заслуженный стакан валерьянки кофе.

Амбула и амораль

6 ноября 2012 года 6 миллионов избирателей из 50 штатов США почти одновременно воспользовались приложением Polling Place Locator — 99% трафика пришло с Facebook, 1% — с mashable.com и сайтов кандидатов. С каждого штата было загружено до 20 Гб данных.

Приложение выполняло поиск по различным форматам данных. Для работы с адресами поддерживались:

  1. неформатированный пользовательский ввод;
  2. формат запросов Bing;
  3. внутренний формат в государственных базах данных.

При этом — сервер у нас ни разу не упал, а время на поиск составляло буквально доли секунды! И вообще, обошлось без особых эксцессов: конечно, в саппорт приходили жалобы, но их быстро разруливала вашингтонская сторона, в целом всё прошло почти без седины в волосах всех участников проекта.

Почему Azure оказался идеальным для наших целей?

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

Что мы хотели бы подчеркнуть особо: на жизненном пути, в разговорах с соискателями, в пресс-релизах различных ИТ-компаний часто встречались люди, которые говорили: «Мы сделали ASP-шный сайт и задеплоили в Azure. Поэтому, зовите теперь это Azur’ом! Хоть туда и заходит три человека в день».

При всем уважении — это заблуждение.

Реально «ажурным» решение становится только тогда, когда количество запросов к нему вырастает до такого, что физически ни один сервер не может этого выдержать, начинает работать сама инфраструктура Azure и начинается масштабирование. Вы не найдете точного определения нагрузки, при котором система становится высоконагруженной. Мы же для себя эмпирическим путем выяснили, что это происходит в момент, когда на систему пиково обрушивается количество запросов больше, чем может выдержать один (даже самый хороший и дорогой) сервер.

Но самое главное, что мы получили в результате этого проекта:

  1. Выяснили для себя, что Azure в условиях, когда надо недорого и на конечный промежуток времени принять огромный поток запросов, — идеальная вещь.
  2. Поучаствовали в выборах президента США-2012 и помогли людям оптимизировать исполнение гражданского долга.
  3. Срубили славы на малой Родине (здесь, здесь и здесь:).

Автор: eastbanctech

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js