Контекст

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

Выбраться было рискованно. Сходи по магазинам, еще один.

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

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

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

Причина почему

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

Становление людей в очереди перед торговыми центрами и аптеками заставило меня задуматься. Почему бы не создать своего рода трекинг на основе данных Google Maps? Вроде как работает для трафика.

Итак, цель состояла в том, чтобы создать карту с различными достопримечательностями, такими как: еда, пекарни, аптеки, супермаркеты, магазины спиртных напитков и т. Д., На которой отображалось время ожидания, полученное Google (в то время, когда этот API не был общедоступным, это То есть, не было конечной точки, а теперь это *) дает пользователю возможность добавить временную обратную связь для магазина, в котором он находился.

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

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

* Теперь Google отображает данные об ожидании в одном месте прямо в Картах.

Расходы

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

Вначале весь проект, то есть Redis, бэкэнд API на Python и интерфейс, находился на моей модели Raspberry PI 3B. Примерно через 7 дней после публикации в Интернете, сайт уже насчитывал около 10 тысяч посещений в день, и Raspberry больше не мог одновременно удовлетворять запросы.

Поэтому я решил перенести все в облако, используя OVH и DigitalOcean для бэкэнда и Github Pages для внешнего интерфейса.

Бэкэнд с Redis и API на Python я реплицировал на 4 VPS в облаке, разделенных следующим образом: 3 DigitalOcean (Нью-Йорк, Лондон, Сан-Франциско) и OVH (Европа).

Характеристики были почти такими же, это 2 ГБ оперативной памяти и двухъядерный процессор с частотой 3,2 ГГц.

В общей сложности я тратил около 25 долларов в месяц. Итого 75 долларов за 3 месяца.

Для домена, не являющегося коммерческим проектом, я повторно использовал свой прежний домен thejoin.tech, создав поддомен https://covid19-waiting-time.thejoin.tech/

Включенный трафик составлял 10 ГБ в месяц, так что это не было внутренней проблемой.

Импортируя через git, все настройки в облаке позволили мне удовлетворить (за весь жизненный цикл) более 1 млн пользователей и более 2,1 млн сеансов за 3 месяца жизни проекта с более чем 1,5 тыс. Современных Пользователь.

Как это работало

Я кратко объясню идею и механизм, лежащий в ее основе. По более технической части оставляю вам ссылку на пост. Репозиторий Github доступен в моем профиле: https://github.com/TheJoin95/covid19-market-waiting-times

Идея родилась с простой картой, созданной на JS (с использованием Leaflet.js), куда были добавлены различные маркеры различных точек интереса, ранее извлеченные из Here и Google API.

Данные сохранялись в Redis и, благодаря оператору Geo, их можно было легко найти с помощью геопространственных запросов, чтобы предоставить геолокационные данные и маркеры.

Redis был наиболее логичным выбором для обеспечения быстрых и точных ответов и с TTL для постоянства на различные запросы, чтобы не перегружать память.

Все функции, от поиска по местоположению или по адресу / месту до WebIAM, до навигации по карте и функций краудсорсинга, разрабатывались постепенно и благодаря помощи некоторых участников для графической части. Все это в течение 25 дней, после 8 часов работы.

Интерфейс не использует никаких фреймворков, кроме исполнителя задач Grunt, чтобы иметь возможность включать различные части html, минимизировать файлы css / js / html и веб-работников, чтобы иметь возможность использовать его в форме PWA (прогрессивная сеть приложение). Этот выбор сделал разработку очень быстрой без проблем с зависимостями или совместимостью. Тем не менее, совместимость гарантирована как на мобильных устройствах (отзывчивость), так и благодаря полифилу.

Вместо этого API-интерфейсы были разработаны на Python и развернуты на 4 упомянутых выше экземплярах и используют Flask в качестве микросхемы для API и uWSGI в качестве веб-сервера.

Я должен сказать, что uWSGI был лучшим выбором из-за низкого уровня конфигурации, которую он нам предоставляет.

Подъемы

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

Это, безусловно, был один из лучших проектов, над которым я работал, и я имел удовольствие посвятить время, а также свою страсть. Понимание того, как прототип был выпущен локально на Raspberry дома, чтобы затем быть опубликованным для друзей, а затем глобально научил меня многому ... этот проект был нацелен на то, чтобы помочь мне самому, но, в конце концов, он помог и другим людям. Возможно, я не решил много проблем или сложностей, но свидетельства дают мне понять, что была небольшая помощь… и этого для меня достаточно.