Новые «Переговорки»

Dec 07, 2009 16:16

История из внутрикорпоративной технологической жизни.

Как это было

В пятницу 13го мы зарелизили внутренний сервис "Переговорки" версии 1.4 - по сути переписанный на 70% по сравнению с предыдущей версией. Основное изменение - совершенно другой движок.

Раньше "Переговорки" общались с Exchange сразу по двум протоколам: SMTP для бронирования и MAPI для получения новых событий. При такой схеме с отсылкой писем и проверкой их статуса через какое-то время система обладала большими задержками и была менее юзабельна и удобна.

Теперь всё приведено к общему знаменателю, и сервис общается с Exchange через один протокол - SOAP. Благодаря этому бронирование и синхронизация происходят практически мгновенно (в пределах пяти секунд) и сервис стал более отзывчивым и шустрым в интерфейсе для пользователя. Это заметно на глаз.



Ещё одним достижением стала более высокая точность отображения актуальной картины занятости переговорок. Если раньше были случаи пропадания каких-то встреч, встречи-зомби или неправильное отображение времени, то теперь удалось добиться практически 100%-но верного отражения реальной ситуации в Exchange.

Помимо движка и связанных с ним улучшений, "Переговорки" обзавелись ещё приятными фичами. Например, определение текущего офиса пользователя не только по его приписке на Стаффе*, но и по его текущему месту пребывания: сервис умеет определять по IP, в каком офисе находится человек в данный момент.

Теперь немного технических деталей по поводу разработки.


Под капотом

После того, как стало ясно, что требуется переход на SOAP, встал вопрос: как общаться с EWS (Exchange Web Services) из Python. Оказалось (спасибо Саше Покатилову за изначальные исследования), с SOAP-библиотеками не всё так хорошо. Одни слишком запутанные, другие уже не поддерживаются, третьи просто не в состоянии подружиться со строптивым Exchange.

Лучшим претендентом на использование была библиотека Suds. Это довольно молодой SOAP-клиент с динамическим созданием схемы (другие пытаются генерировать статические стабы на базе WSDL) и "питонячим" интерфейсом. Хотя, изучая чуть более глубоко реализацию, у меня родилась фраза - «Java головного мозга». Выводы делайте сами :-)

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

Exchange вообще очень своеобразен. То он умудряется на SOAP-запросы отдать html (скорее даже в этом виноват IIS), то в случае ошибок выдает ответ с кодом 200, то неоднообразно ведет себя в похожих ситуациях: например, удаление события с участниками и без требует разных вызовов. Что из документации на MSDN совсем не очевидно. Сам MSDN - отдельная песня...

Также пришлось на базе Suds сделать интерфейс SOAP-сервера. Сервер нужен для того чтобы Exchange мог пушить (push) оповещения о новых событиях (или об изменении и удалении старых событий). Это упростило процесс синхронизации и сделало его практически мгновенным.

Ещё были лично мои пазлы: и долгое подбирание уникальных ключей для таблиц, и подстава с дефолтным collation для строк в MySQL, и ещё куча глупых программистских промахов :-)

После месяца активной возни мне удалось заставить общаться сервис и Exchange на одном языке.

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

Теперь у нас есть знание, опыт и реализация общения с Exchange по SOAP!

***

Отдельное спасибо Сереже Андрюхину за активную помощь, в том числе, и за моральную поддержку в трудные минуты борьбы с продуктами компании Microsoft.

Надеюсь этот релиз поможет Переговоркам отвоевать долю внутреннего рынка у Outlook. Впереди ещё несколько новых фич, которые должны окончательно поставить конкурента на колени :-)

Ни для кого не секрет, что в каждой крупной компании есть свой собственный, внутренний интернет, со своими собственными, внутренними ресурсами. И Яндекс не исключение. Долгое время для планирования встреч мы пользовались Microsoft Exchange, что было удобно, но только пользователям Windows. Остальным же приходилось как-то выкручиваться, пытаясь придумать способ забронировать переговорку или назначить встречу. В какой-то момент стало понятно, что жить так больше нельзя и был разработан внутренний сервис "Переговорки", частично решавший эту проблему. И, как всякий интернет-сервис Яндекса, "Переговорки" тоже развиваются и улучшаются.

Весь этот текст - так называемые release notes, внутреннее сообщение о том, что изменилось в сервисе и как происходила разработка. Мне показалось, что вам будет интересно увидеть, как выглядит Яндекс изнутри.

P.S.
* "Стафф" - корпоративная адресная книга.

Александр Кошелев, борец за удобство переговоров


Оригинал и комментарии в блоге Яндекса

yandex-team, технологии

Previous post Next post
Up