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

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

Как это было

В пятницу 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.
* "Стафф" - корпоративная адресная книга.


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

 

41 комментарий
Прочитал кат - порвал моск.
Андрей Чувелёв
26 ноября 2015, 18:27
действительно, зачем нам exchange?
А сделать замену exchange не хотите чтоб больше не мучиться?
У вас же есть уже зачаток - я.календарь
Да, это вторая сторона вопроса "как связать Я.Календарь и MS Exchange". Переговорки делали именно как Proof of Concept возможности наладить взаимодействие между этими двумя инструментами.
Безусловно интересно. Теперь есть (знаешь кого) спросить при случае да и форк, думаю, не лишний будет в общей кладовой. Спасибо, в общем :)
Интересно. А не думали над размещение этого в нано-проекты? Для тех, других, у которых тоже есть внутри Exchange и есть не только вин-ползователи?
Переговорки для доменов? Хм... :-)
Нее... не для доменов. Я имел ввиду что-то, что можно взять и развернуть у себя. Типа как тот же Склонятора, только хостить его не в Я, а у себя )
Мне кажется такого вида сервис очень структурно-специфичен для конкретной компании, поэтому, наверно, сделать его универсальным невозможно. Но за идею спасибо;-)
Незачто ) И да, он конечно специфичен... И для самых упорных вполне хватит bitbucket'а. Его не надо делать "коробочным". Достаточно к тому, что есть уже на bitbucket добавить чуть описания... и уже будет хорошо.
Чебурашка
26 ноября 2015, 18:27
Замечательная запись, очень ценная, в девятый по популярности блог рунета несомненно надо выложить внутренние новости, которые никого не касаются. Так держать! 5 баллов!
Иванов Роман
26 ноября 2015, 18:27
Вам неинтересна изнанка, внутренняя кухня Яндекса, при помощи которой создаются наши сервисы?
Чебурашка
26 ноября 2015, 18:27
Мне интересна изнанка, мне неинтересно как вы переговорные бронируете.
Иванов Роман
26 ноября 2015, 18:27
Ну так тут довольно много про технологическую изнанку, мне кажется.
Так это и есть изнанка. Пусть техническая, но часть работы компании. Скандалы, интриги, расследования в следующих сериях.
Простите, а что заставило выбрать такое... решение? какие-то договорённости с MS?
Ну вот есть CommuniGate Pro — используется многими крупными университетскими/научными центрами, может общаться по протоколу SOAP... совместим с любой ОС и любым клиентом, есть версия GPL, что позволяет совершенствовать сервис и за одно приобретать вес и популярность как поставщику open source решений.
Это исторически так сложилось. Про CommuniGate Pro ничего не скажу - не пробовал. А Exchange - это не только почтовое взаимодействие.
Знаю ещё, что переход на другую платформу в большой компании очень сложен организационно - нужно многих пересадить на другое, не привычное ПО, а если учесть зоопарк ОС у пользователей (Mac, Linux, FreeBSD, Windows) - то иногда и просто невозможно.
Речь же про сервер. А CGP может с любым клиентом общаться, вплоть до КПК (в т.ч. Аpple, с которым MS Exchange не связывается). А миграция c MS Exchange там у них заложена изначально.
К тому же... э... что касается безопасности и надёжности. MS Exchange едва ли...
И по скорости обработки событий CGP и без SOAP лидирует.
Да, а как у вас там с VoIP? (автоматическая регистрация сообщений и всё такое) :)
Я задал ваш вопрос коллегам, которые могут помнить причины почему именно так сложилось.
Меня опередили, но я тоже предложу пообщаться на основе Коммьюнигейт. Коммьюнигейт, кстати, под совершенно разные платформы существует. Попробуйте для начала хотя бы в узкой компании. Если пойдёт - то только в путь!
А он поддерживает работу с календарями? информацию о доступности пользователя?
Всё зависит от того, какие модули включить и использовать. Я же его использовал лиь в качестве мейлсервера.

А на сервере есть T&B версия, так что всё равно ничего не теряете - можно хоть на домашней тачке поставить и всё проверить, и совсем не надо качать релиз )
Дело в том, что такая серьезная смена платформы может не оправдать себя по затратам сил. Да средств тоже :)
Так вот для этого и предлагаю поставить T&B на одну из тачек в ограниченной компании (до 10 человек), зато увидите подходит продукт для перехода или же у вас совершенно другие требования. В конце концов, вы потратите только время.
почитайте merkurov.com - Антон "тащится" от коммьюнигейта. сервис коммьюнигейта под названием unified messaging находится в закрытой бете. попробовать стоило бы.
А почему не воспользовались стандартной фичей Exchange - Outlook Web Access? Его облегченная версия работает и не под IE и AFAIK там есть календарь в конференс румах?
Не все сотрудники имеют ящик в Exchange, поэтому не все могут использовать OWA. А переводить всех на Exchange - не интересно :)
зоопарк из двух почтовиков, очевидно, поддерживать легче, чем "переходить на "новое" решение".
OWA в облегченной форме очень некрасив и малофункционален.. если бы MS реализовало полноценный OWA интерфейс (как для IE) кросс-платформенным, тогда это было бы уже интересным решением..
MS, кстати, обещает это сделать в след. Exchange (2010), вроде как.
Удивительно написано. Интересно. Наверное это надо уметь, написать так красиво, хотя смысла не особо много (конечно, он есть). Ещё раз спасибо, было интересно.

А вот расскажите кто с этим живет. То что изначально - без mouseover - не видно никакой информации кроме "занято"/"свободно" - это удобно?

Может хотя бы "я должен быть там" отображается?

Ещё интересно, что означает каждый из четырёх цветов?

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

Вообще на сервисе ещё можно изучить план этажа и как пройти до переговорки. Так же можно посмотреть какое оборудование есть в конкретной переговорке.
Саша все верно написал, и я дополню про задачу: сервис помогает быстро увидеть свободные переговорки в нужное время, и тут же забронировать (в 2-3 клика). В Аутлуке и других почтовых клиентах бронирование занимает чуть больше времени и движений.
Сергей Бережной
26 ноября 2015, 18:27
фраза «Java головного мозга» родилась всёже у другого человека -- http://plakhov.livejournal.com/104252.html
Так паттерн "что-то там головного мозга" уже давно в народе:-) Родилась = пришла на ум.
Такая задача как раз стоит сейчас перед моей компанией. Запускать данный сервис "для всех" не собираетесь?
Таких планов не было. И я так понимаю, что Переговорки могут быть интересны не в виде публичного сервиса, а в виде коробочного решения, которое можно поставить у себя внутри компании, не пуская никого постороннего к своим серверам.
откуда муха? раздрожает на главной странице яндекса
Это случайно не вы продукт из этого сделали? https://www.yarooms.com/