Как стать автором
Обновить
57.63
Сначала показывать

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

Время на прочтение15 мин
Количество просмотров664

Управление поиском цен на отели в сервисе бронирования — это как ремонт работающего двигателя. Работа с запросами происходит в реальном времени, и простого варианта «отель N на майские» недостаточно, чтобы получить то, что нужно. Скрейпинг, массовые запросы, настройка баланса просмотров и бронирований при работе с самописными базами поставщиков и их ограниченными серверными мощностями — задача почти невыполнимая. Почти…

Привет, Хабр! Меня зовут Иван Чернов. Я 12 лет в IT, 6 из них работаю в «Островок!». В этой статье расскажу, как справиться с нагрузкой и поддерживать бесперебойную работу системы. Рассмотрим масштабирование Redis, использование Aerospike, фильтр Блума и решим задачку со звёздочкой. Поговорим о маленьком кусочке схемы, который непосредственно работает с поставщиками в поиске. Это самая нагруженная часть, где возникают наибольшие проблемы с highload. Но именно она нужна, чтобы пользователи получили лучшие цены.

Читать далее
Всего голосов 7: ↑7 и ↓0+8
Комментарии0

В поисках хорошего стиля. Часть 1. Зачем нам свои линтеры на Go в Островке

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров1.2K

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

Всем привет! Меня зовут Артём Блохин, я Golang-разработчик в команде интеграций Островка.

Если бы «Рождественская история» Чарльза Диккенса была про стиль кода, то получилось бы как-то так:

«Начнём сначала: код‑стайл умер. Сомневаться в этом не приходилось. Свидетельство о его погребении было подписано девопсом, архитектором и тимлидом. Оно было подписано разработчиком Островка.»

Отправиться на поиски хорошего стиля
Всего голосов 8: ↑8 и ↓0+10
Комментарии4

Data Science в travel-tech. Часть 1. Поиск и бронирование

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров1.6K

Привет! Меня зовут Иван Елфимов, я Developer Advocate в Островке. В прошлом месяце мы опубликовали пост о том, чем занимаются ML-инженеры в Островке. В этот раз рассказываем про Machine Learning (ML) и Data Science (DS) с точки зрения продукта.

Команда Data Science появилась в Островке в 2014 году, задолго до расцвета больших языковых моделей. За это время она успела сделать десятки проектов с computer vision, NLP и сложными классическими моделями.

Ажиотаж вокруг языковых моделей заставил многих из нас забыть, что Data Science — это не только трансформеры (General Pretrained Transformers, GPT). Мы используем картинки, текстовые и табличные данные для построения моделей, которые работают в реальном времени или обрабатывают статистические данные. Они помогают нам подбирать лучшие отели для вашего следующего путешествия.

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

Читать далее
Всего голосов 9: ↑9 и ↓0+12
Комментарии1

Обратная сторона умного поиска заказов

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров797

Всем привет, меня зовут Иван Елфимов, я Developer Advocate в Островке. До DevRel-ства я 5 лет руководил командой разработки партнёрских интеграций. 

Мы в Островке создаём платформы бронирования тревел-услуг не только для индивидуальных путешественников, но и для корпоративных клиентов и тревел-агентств — наших B2B-партнёров.

У B2B-партнёров может быть много клиентов и бронирований. По каждому бронированию нужна подробная информация — стоимость, комиссия, статус оплаты, кто основной гость и т. д. Всем этим наши партнёры управляют в личном кабинете. Я расскажу вам, как мы подключали в личном кабинете B2B-партнёров умный поиск по заказам. Умный, потому что может подстраиваться под поисковый запрос и иногда даже делать полнотекстовый поиск.

Узнать, как править всеми
Всего голосов 4: ↑3 и ↓1+4
Комментарии1

О! Фридайвинг: как я стал фридайвером и почему это больше чем хобби

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров8.4K

Аригато в хату! Меня зовут Денис Божок, я руководитель департамента платформенной разработки в Островке, но сегодня, внезапно, я здесь не как технарь, а как фридайвер. Так что все, кто давно задавался вопросом, чем занимаются айтишники в свободное время, в чём разница между погружениями с баллоном и без; безопасно ли нырять на глубину только с маской; какой мировой рекорд по задержке дыхания; как прокачаться, если хочешь профессионально плавать с маской; что нужно купить и как получить благословение Посейдона, то сегодня про всё это и расскажу. 

Нырнуть глубже
Всего голосов 20: ↑17 и ↓3+16
Комментарии31

Киберсани к адвенту: угадываем IT-города России и помогаем доставить подарки

Время на прочтение1 мин
Количество просмотров3.6K

Только вы помогли Хабраслизню разобраться с ловушками роботов, как из-за магнитной бури произошёл сбой в ЦОДе Навигационного центра Фабрики подарков. Киберсани могут доставить подарки даже без водителя, но для этого им нужна работающая навигационная система. Так что поднять сани в воздух можно, только настроив базу данных по новой, сопоставив описания городов с их реальной геопозицией.

Но Хабраслизень и магические жители не справятся с этой задачей в одиночку. Им снова нужна ваша помощь!

Восстановить карту
Всего голосов 12: ↑9 и ↓3+15
Комментарии1

Курс проложит аналитик: проверьте, какими SQL-скилами вы экипированы

Время на прочтение1 мин
Количество просмотров22K

Если вы не первый год в аналитике, то знаете, каково это — прокладывать дорогу сквозь неопределённость. Рассматривать гипотезы и принимать ту, по которой работать, — это как выбирать дорогу, по которой идти всей команде. Волнительно и непросто отправляться на неосвоенные земли.

Вот вы — хороший штурман? Готовы встретиться с вызовами? Перетряхнём же рюкзак, посмотрим, чем он набит, и есть ли там самое важное, без чего не выжить в пути.

Пройти тест
Всего голосов 14: ↑10 и ↓4+22
Комментарии26

Отправляем письма с помощью asyncio и aiohttp из Django приложения

Время на прочтение7 мин
Количество просмотров12K
Всем привет!

Я занимаюсь разработкой и поддержкой сервиса уведомлений в Ostrovok.ru. Сервис написан на Python3 и Django. Помимо транзакционных писем, пушей и сообщений, сервис также берёт на себя задачи по массовым рассылкам коммерческих предложений (не спам! trust me, отписки у нас работают лучше подписок) пользователям, давшим на это согласие. Со временем база активных получателей разрослась до более миллиона адресов, к чему почтовый сервис не был готов. Я хочу рассказать о том, как новые возможности Python позволили ускорить массовые рассылки и сэкономить ресурсы и с какими проблемами нам пришлось столкнуться при работе с ними.


Читать дальше →
Всего голосов 9: ↑9 и ↓0+9
Комментарии4

Типизируй все

Время на прочтение8 мин
Количество просмотров5.9K

Всем привет!


У нас уже есть одна статья про развитие типизации в Ostrovok.ru. В ней объясняется, зачем мы переходим с pyContracts на typeguard, почему переходим именно на typeguard и что в итоге получаем. А сегодня я расскажу подробнее о том, каким образом происходит этот переход.


Читать дальше →
Всего голосов 8: ↑8 и ↓0+8
Комментарии23

Трюки для обработки метрик в Kapacitor

Время на прочтение7 мин
Количество просмотров5.9K
Скорее всего, сегодня уже ни у кого не возникает вопрос, зачем нужно собирать метрики сервисов. Следующий логичный шаг – настроить алертинг на собираемые метрики, который будет оповещать о любых отклонениях в данных в удобные вам каналы (почту, Slack, Telegram). В сервисе онлайн-бронирования отелей Ostrovok.ru все метрики наших сервисов льются в InfluxDB и отображаются в Grafana, там же настроен базовый алертинг. Для задач типа «нужно посчитать что-то и сравнить с этим» мы используем Kapacitor.


Kapacitor – часть TICK-стека, который умеет обрабатывать метрики из InfluxDB. Он может соединить несколько измерений между собой (join), из полученных данных вычислить что-то полезное, записать результат обратно в InfluxDB, отправить алерт в Slack/Telegram/почту.

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

Поехали!
Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии6

Как мы YouTube Live с Zoom интегрировали

Время на прочтение6 мин
Количество просмотров17K
Всем привет! Это вторая часть серии статей от IT-команды сервиса бронирования отелей Ostrovok.ru об организации онлайн-трансляции корпоративных презентаций и мероприятий в одном отдельно взятом помещении.

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



И вроде всё было хорошо, но спустя некоторое время в наш отдел прилетела новая задачка – давайте сделаем наши трансляции более интерактивными! Всё наше ТЗ заключалось в одном предложении – нужно было дать удаленным сотрудникам возможность подключаться к встречам команд, то есть не только смотреть, но и активно участвовать: показывать презентацию, задавать вопросы в режиме реального времени и т.д. Проанализировав ситуацию, мы решили использовать конференцсвязь Zoom.
Читать дальше →
Всего голосов 8: ↑7 и ↓1+6
Комментарии4

Организация онлайн-трансляций в особых условиях

Время на прочтение5 мин
Количество просмотров5.2K
Всем привет! В этой статье я бы хотел рассказать о том, как IT команда сервиса онлайн-бронирования отелей Ostrovok.ru настраивала онлайн-трансляции различных корпоративных мероприятий.

В офисе Ostrovok.ru существует особая переговорная комната – «Большая». Каждый день в ней проходят рабочие и неформальные мероприятия: встречи команд, презентации, тренинги, мастер-классы, интервью с приглашенными гостями и прочие интересные события. Штат компании насчитывает более 800 человек – многие из них работают удаленно в других городах и странах, и далеко не у всех есть возможность физически присутствовать на каждой встрече. Поэтому задача организовать онлайн-трансляции внутренних встреч не заставила себя долго ждать и прилетела в команду IT. Расскажу подробнее о том, как мы это делали.


Читать дальше →
Всего голосов 17: ↑16 и ↓1+15
Комментарии13

Не ORMом единым

Время на прочтение8 мин
Количество просмотров5.3K

Не ORMом единым


Всем привет! Я руковожу отделом партнерской разработки (Partners Development) в сервисе бронирования отелей Ostrovok.ru. В этой статье я хотел бы рассказать про то, как на одном проекте мы использовали Django ORM.


На самом деле я слукавил, название должно было быть "Не ORMом единым". Если вам интересно, почему я так написал, а также если:


  • У вас в стеке Django, и вам хочется выжать из ORM максимум возможностей, а не просто Model.objects.all(),
  • Вы хотите перенести часть бизнес-логики на уровень баз данных,
  • Или вы хотите узнать, почему самая частая отмазка разработчиков в B2B.Ostrovok.ru "так исторически сложилось",

… добро пожаловать под кат.


кдпв

Читать дальше →
Всего голосов 18: ↑16 и ↓2+14
Комментарии14

Как написать вредное API

Время на прочтение5 мин
Количество просмотров6.8K

Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.


Всем привет!


Я работаю тимлидом команды Integration Development в сервисе онлайн-бронирования отелей Ostrovok.ru и сегодня хотел бы поделиться своим опытом работы с различными API.



Как разработчик системы, работающей с внешними поставщиками, я часто встречаюсь с различными API – чаще всего это SOAP/REST или что-то на них похожее. Однако от работы со многими из них остается впечатление, что их писали, не руководствуясь ни техническими правилами, ни здравым смыслом – как будто бы по книге “Вредные советы” Григория Остера. В данной статье я постараюсь описать такие случаи в стиле “вредных советов” и рассмотрю примеры, связанные с XML. Комментарии и обсуждение приветствуются.

Читать дальше →
Всего голосов 20: ↑18 и ↓2+16
Комментарии8

История типизации на примере одного большого проекта

Время на прочтение5 мин
Количество просмотров5.6K
Всем привет! Сегодня я расскажу вам историю развития типизации на примере одного из проектов в Ostrovok.ru.



Эта история началась задолго до хайпа о typing в python3.5, более того, она началась внутри проекта, написанного еще на python2.7.

2013 год: совсем недавно был релиз python3.3, мигрировать на новую версию смысла не было, так как каких-то конкретных фичей она не добавляла, а боли и страдания при переходе принесла бы очень много.

Я занимался проектом Partners в Ostrovok.ru – этот сервис отвечал за все, что связано с партнерскими интеграциями, бронированиями, статистикой, личным кабинетом. У нас использовались как внутренние API для других микросервисов компании, так и внешнее API для наших партнеров.
Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии13

I’m going deeper underground, или о чем стоит знать, оптимизируя работу сетевого приложения

Время на прочтение5 мин
Количество просмотров6.7K
Приветствую, друзья!

В предыдущих двух статьях (раз, два) мы погружались в сложность выбора между технологиями и искали оптимальные настройки для нашего решения в Ostrovok.ru. Какую тему поднимем сегодня?

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


Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии11

История блужданий по документации Haproxy, или на что стоит обратить внимание при его конфигурации

Время на прочтение8 мин
Количество просмотров34K
И снова здравствуйте!

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


Читать дальше →
Всего голосов 24: ↑24 и ↓0+24
Комментарии3

Пробы и ошибки при выборе HTTP Reverse Proxy

Время на прочтение6 мин
Количество просмотров31K
Всем привет!

Сегодня мы хотим рассказать о том, как команда сервиса бронирования отелей Ostrovok.ru решала проблему роста микросервиса, задачей которого является обмен информацией с нашими поставщиками. О своем опыте рассказывает undying, DevOps Team Lead в Ostrovok.ru.

Читать дальше →
Всего голосов 30: ↑29 и ↓1+28
Комментарии7

Чем живет мобильный Островок

Время на прочтение13 мин
Количество просмотров14K
Всем привет. Меня зовут Макс Дегтерев (у меня тут нет аккаунта, так что вот мой twitter: @suprMax и сайт maxdegterev.name ). Мы недавно запустили новую классную версию мобильного сайта. Про него-то я вам сейчас и расскажу.
Читать дальше →
Всего голосов 81: ↑51 и ↓30+21
Комментарии18

Как мы создавали «Отель на эту ночь!»

Время на прочтение4 мин
Количество просмотров15K
Привет, хабр!

Мы запустили новую фичу в нашем мобильном приложении — «Отель на ночь!». Это функция, которая помогает человеку забронировать отель в последнюю минуту. Зачем мы это сделали, как и что из этого получилось мы решили рассказать на хабре. Будем рады вашем отзывам и комментариям о том, что можно еще улучшить в новой функции и в целом в приложениях.
Читать дальше →
Всего голосов 42: ↑29 и ↓13+16
Комментарии19
1

Информация

Сайт
ostrovok.ru
Дата регистрации
Дата основания
2010
Численность
501–1 000 человек
Местоположение
Россия
Представитель
Иван Елфимов