Группы

g

Материалы и архитектура реализации групп

В основе функционирования групп лежит реляционная база данных PostgreSQL с горизонтальным шардированием по идентификатору группы. Первичный ключ — 64-битный unsigned integer, генерируемый распределенным счетчиком на основе etcd. Схема данных группы включает поля: id (BIGINT UNSIGNED), owner_id (BIGINT UNSIGNED, внешний ключ к таблице пользователей), title (VARCHAR(128), валидация через regex: /^[a-zA-Zа-яА-Я0-9\s]{3,128}$/), slug (VARCHAR(64), уникальный, генерируется автоматически из title с транслитерацией и дедупликацией), category_id (SMALLINT UNSIGNED, внешний ключ к справочнику категорий), member_count (INT UNSIGNED, денормализованное поле, обновляется через триггеры), created_at (TIMESTAMP), updated_at (TIMESTAMP). Индексация: B-tree по owner_id, category_id, updated_at. Для полнотекстового поиска используется GIN-индекс по tsvector-полю title_search.

Спецификации и отличия от альтернатив

В отличие от «страниц-аналогов» (News Feed pages), группы имеют гранулярную систему прав доступа на уровне строк. Каждый пост в группе проверяется через ACL-сервис на основе RBAC-модели (роли: owner, admin, moderator, member, banned). Альтернативные решения (например, списки рассылки) используют pull-архитектуру, тогда как группы работают по push-модели: при создании поста триггер отправляет событие в Apache Kafka, откуда его потребляют микросервисы ленты новостей и уведомлений. Заявки на вступление обрабатываются через очередь RabbitMQ с приоритетами (ручная модерация — приоритет 1, автоматическое одобрение по whitelist доменов email — приоритет 0).

Производственный процесс и качество реализации