Чему я научился за последний месяц

DataEngineeringВсе истории Shopp
Автор: 10.01.2019 No Comments
Облака, крыло самолета

Привет и с Новым годом Вас! 🎊🎉🎄🎉🎊

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

Я начал изучать новую и абсолютно незнакомую для меня область.

С первого дня развития Shopp я придерживаюсь одной единственной цели — помочь людям найти то, что они ищут здесь и сейчас. Т.к. вся архитектура продукта будет строиться вокруг «местоположений», «геолокации» и «гео-поиска», я понял, что я связался с тем, в чем я абсолютно не разбираюсь — GIS (Geographic Information System). Если быть конкретнее, то GIS это чуть ли не целая наука о сборе, хранений, обработке, анализе пространственных или географических данных. В нашем случае, каждое объявление в Shopp имеет метки геопозиции (широта и долгота), чтобы в дальнейшем совершать такие действия, как выборка и сортировка объявлений в радиусе запрашиваемого. Казалось бы, сейчас БД (напр. PostgreSQL + PostGIS) могут сортировать гео-записи, искать их и возвращать по любым запросам. Однако, использование только одной БД недостаточно для мгновенного и нагруженного поиска. Что будет, если не 100 а 1,000 или 10,000 в минуту пользователей будут запрашивать гео-поиск (что вполне является реалистичным кейсом)? Чем больше запросов, тем сложнее БД обрабатывать каждый. Представьте, у вас в системе 100,000,000 объявлений и каждую секунду кто-то запрашивает объявления в радиусе 5, 10, 15, 20 км от их местоположения. Таким образом БД необходимо проходить через каждые 100,000,000 объявлений, сверять дистанцию с пользовательским и возвращать результаты. Да, это все делается очень быстро (менее 1 секунды для всего), но все равно очень долго для пользователя. Я начал изучать принципы работы с GIS с большими данными и нагрузками. Как вариант, я решил полностью отказаться от каких-либо гео-запросов в основную БД и перенести нагрузку в Redis и Elasticsearch. В итоге, я разработал алгоритм, способный менее чем за 0,05 сек (!) найти и рассортировать сотни тысяч объявлений по заданному радиусу. Это учитывая, что мы будем получать 800,000 — 900,000 запросов в секунду. Впечатляет, не правда ли? Я произвел пару необъективных тестов на скорость возврата данных (скорость поиска объявлений) среди OLX, Market, Satu и Shopp. Худшим оказался OLX, заставив ждать результаты более 5 секунд. Лучшим оказался Shopp, уложившись в менее чем 0,2 сек. Сделаю отдельный пост об этом позже.
 

Я ушел со всех соц. сетей и вы не поверите насколько продуктивен я стал.

Вот уже вторую или третью неделю я заблокировал для себя абсолютно все соц. сети. Как итог, я получил дополнительные 3 часа в день. Именно столько я туплю в Инстаграме, Фейсбуке, ВК и где-либо еще. Единственную социалку, которую я не трогаю — YouTube. В нее я захожу смотреть скучные ролики о разработке высоконагруженных систем. К моему удивлению, я получил не только дополнительное время, но и чистый разум. Я перестал париться о том, кто что постит, кто что напишет, кто лайк поставит, кто зашерит. Т.к. потребляемый мною контент резко изменился, пару дней я все же чувствовал себя диким. Но потом ОК.
 

В перерывах я подсел на «Черное Зеркало» и …

Это был взрыв мозга. Я слышал об этом сериале еще с 2011, но не придавал значения, т.к. не люблю тратить время на сериалы, телеки и т.д. Т.к. Новый год я отмечал один, ради интереса я решил посмотреть одну серию. Как итог, я досмотрел все четыре сезона с открытым ртом. Насколько же Чарли Брукер обезумел, написав такой сумасшедший скрипт. Точнее, абсолютные разные скрипты к каждой серии. Если вкратце, серии «Черного Зеркала» ничем не связаны между собой. Ни героями, ни местом, ни сюжетом. Единственное, что сохранялось в каждой серии — это то, насколько мы может утонуть в кстати в этих самых социальных сетях и новых технологиях. Сериал зашел. Я не ожидаю что-то лучшее в ближайшие годы точно.