Перейти к содержанию

Архитектура Календаря VK WorkSpace

Введение

В настоящем документе приведено описание архитектуры продукта Календарь VK WorkSpace.

Данный документ предназначен для технических специалистов, которые внедряют или поддерживают приведенные технологические решения:

  • системные администраторы;
  • специалисты по информационной безопасности.

Документ предполагает наличие технических знаний в области проектирования систем, однако будет полезен и специалистам бизнес-подразделений.

Сокращения и определения

Наименование Определение
БД База данных
Сайдкар Разделение функций приложения в отдельный процесс
CalDAV Протокол для синхронизации данных календаря и адресной книги между почтовым сервером и клиентом
Шардирование Принцип проектирования базы данных, при котором данные разбиваются на части и размещаются на разных шардах, что способствует масштабируемости приложения

Верхнеуровневая архитектура

Запросы пользователей поступают на балансировщик, который отвечает за прием и распределение пользовательских запросов на бэкенд Календаря VK WorkSpace, в свою очередь балансировщик отправляет запросы на отдачу динамически генерируемых веб-страниц и статических файлов для передачи в веб-клиент.

Бэкенд Календаря VK WorkSpace состоит из множества различных компонентов (будут рассмотрены ниже), которые отвечают за определенную часть бизнес-логики: межсистемное взаимодействие, миграции, отправка уведомлений и т.д.

Примечание

Авторизация и аутентификация пользователей выполняется группой сервисов swa на стороне продукта Почта VK WorkSpace.

Сервисы системы

Сервисы обработки входящих запросов

Все входящие запросы поступают на сервис балансировки и проксирования calendar-nginx, который, в свою очередь, перенаправляет запрос на необходимый сервис.

Сервис calendar-nginx взаимодействует с :

  • caldavapi — для синхронизации календаря с внешними клиентами по протоколу CalDav;
  • calendar-gobi — для получения изменений из Exchange при синхронизации;
  • calendarapi — для обработки входящих запросов и перенаправления на необходимый сервис.

Сервисы бэкенда

Сервисы для синхронизации по CalDAV

Для реализации протокола CalDAV реализован микросервис caldavapi, на который приходят запросы клиентов для синхронизации данных, сaldavapi взаимодействует с сервисами:

  • icser — при необходимости парсинга ics от клиента;
  • calendarapi-internal — для выполнения любых действий над данными в БД (calendarpg);
  • zubr — для авторизации в cube (входит в группу сервисов аутентификации и аторизации swa).

Общая схема сервисов приведена на рисунке ниже:

vk-calendar-description

Описание сервисов приведено в таблице ниже:

Наименование сервиса Назначение
caldavapi Сервис, реализующий сетевой протокол CalDAV. Используется для синхронизации календаря с внешними клиентами
calendarapi-internal Основной API для межсерверного общения
zubr Cайдкар для работы с профилями пользователей
icser Cервис для разбора .ics файлов

Сервисы уведомлений

Общая схема сервисов приведена на рисунке ниже:

vk-calendar-description

Описание сервисов приведено в таблице ниже:

Наименование сервиса Назначение
calendarapi Основной API для межсерверного общения
calendar-notifyapi Сервис уведомлений. Получает информацию о создании и изменении настроек оповещений событий. Складывает их в очередь
calendar-notifier-zubr Прокси-сервис для доступа к Tarantool. Содержит в себе логику работы с шардированием
calendar-notify-tnt-queue Очередь рассылки уведомлений Календаря
calendar-notifyd Демон, разбирающий очередь уведомлений. Получает актуальные на текущий момент оповещения и передает в почтовую и push-системы

Сервисы синхронизации с MS Exchange

Общая схема сервисов приведена на рисунке ниже:

vk-calendar-description

Описание сервисов приведено в таблице ниже:

Наименование сервиса Назначение
calendar-exodus Cервис для миграции календарей из Exchange и подписки на синхронизацию календарей
exodus-cli Клиент для работы с exodus и gobi. Поддерживает как миграцию, так и подписку на изменения
calendar-gobi CallBack сервис для получения изменений из Exchange. Выполняет аналогичную с exodus работу, отличается перманентной работой с изменениями Exchange
calendar-caspi Сервис служит публичным API для сервиса cexsy. Возвращает информацию о синхронизированных календарях
calendar-cexsy-tar Очередь синхронизации событий календаря при миграции из других систем
cexsy-zubr Прокси-сервис для доступа к Tarantool. Содержит в себе логику работы с шардированием
calendar-cexsy-worker Сервис, отправляющий календарные изменения в Exchange
calendar-cexsy-replicator Сервис-реплика calendarpg, для получения всех изменений основной календарной базы для отправки их в воркера
exchange-sync-pg БД для синхронизации календаря с MS Exchange

Сервисы обработки .ics запросов

Общая схема сервисов приведена на рисунке ниже:

vk-calendar-description

Описание сервисов приведено в таблице ниже:

Наименование сервиса Назначение
icser Cервис для разбора .ics файлов
ics-router Балансировщик нагрузки между сервисами icser
calendarapi-internal Основной API для межсерверного общения
calendarpg Главная БД Календаря