{"id":38344929,"url":"https://github.com/zkryaev/social_network_system_design","last_synced_at":"2026-01-17T03:02:29.148Z","repository":{"id":317040637,"uuid":"1059572521","full_name":"zkryaev/social_network_system_design","owner":"zkryaev","description":"System design project","archived":false,"fork":false,"pushed_at":"2025-11-10T15:49:12.000Z","size":284,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-10T17:29:24.755Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zkryaev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-18T16:16:15.000Z","updated_at":"2025-10-14T07:31:30.000Z","dependencies_parsed_at":"2025-09-28T13:26:57.877Z","dependency_job_id":null,"html_url":"https://github.com/zkryaev/social_network_system_design","commit_stats":null,"previous_names":["zkryaev/social_network_system_design"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zkryaev/social_network_system_design","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkryaev%2Fsocial_network_system_design","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkryaev%2Fsocial_network_system_design/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkryaev%2Fsocial_network_system_design/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkryaev%2Fsocial_network_system_design/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zkryaev","download_url":"https://codeload.github.com/zkryaev/social_network_system_design/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkryaev%2Fsocial_network_system_design/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28492593,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T02:39:23.645Z","status":"ssl_error","status_checked_at":"2026-01-17T02:34:19.649Z","response_time":85,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-17T03:02:29.035Z","updated_at":"2026-01-17T03:02:29.124Z","avatar_url":"https://github.com/zkryaev.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cоциальная сеть для путешественников [DONE ✔️]\n\n## Функциональные требования\n  1. Создание поста, с 1 фотографией, описанием и тэгом местоположения;\n  2. Оценка и комментирование поста; \n  3. Подписка на других путешественников, для отслеживание их активности;\n  4. Поиск популярных мест для путешествий, выдача постов связанных с этим местом (тэгом местоположения);\n  5. Просмотр ленты других путешественников, ленты конкретного пользователя, основанной на подписках в обратном хронологическом порядке;\n\n## Нефункциональные требования\n  - **Аудитория**:\n    1. **DAU**: *10.000.000*\n    2. **Активность пользователя *в среднем***:\n        - *Публикует 0,45 постов в день*\n        - *Просматривает суммарно 20-30 постов в день из ленты (1 лайк - 1 комментарий):*\n          1. Оценивает 5-15 постов (50%)\n          2. Комментирует 3-4,5 постов (15%)\n          3. Читает 10 комментариев\n        - *Подписывается на 0,2 новых путешественника в день*\n        - *Смотрит страницу путешественника 5 раз в день*\n        - *Выполняет поиск мест для путешествий 3-5 раз в день*\n    3. **Регион:** *СНГ*\n  - **Особенности приложения**:\n    1. **Сезонности в приложении:** *Есть всплески в сезоны отпусков. Множитель: 2*\n    2. **Доступность:** *99.95*\n    3. **Условия хранения данных:** *Храним всегда*\n    4. **Лимиты и ограничения:**\n       1. *Загружать не более 10 постов в день*\n       2. *Смотреть, оценивать и комментировать не более 1000 постов в день*\n       3. *Оставлять не более 1000 комментариев*\n       4. *Размер изображения: \u003c= 2 Мб*\n       5. *Текст поста: \u003c= 1000 символов*\n       6. *Текст комментария: \u003c= 500 символов*\n       7. *Пост содержит: \u003c= 5 изображений*\n       8. *Максимальное длина запроса не более 100 символов*\n       9. *Максимальное количество подписчиков: \u003c= 100_000*\n       10. *Максимальное количество подпис**ок**: \u003c= 10_000*\n    5. **Временные ограничения:**\n       1. *Создание поста: 3с*\n       2. *Получение в ленте 10 постов: 2с*\n       4. *Поиск постов: 2с*\n       3. *Операция оценки/комментирования/подписки: 1с*\n\n## Верхнеуровневое представление системы\n1. Нотация: [C4-Model](https://c4model.com/)\n2. Инструмент визуализации [PlantText](https://www.planttext.com/) на основе [PlantUML Doc](https://github.com/plantuml-stdlib/C4-PlantUML)\n\n### **Level 1.** System context diagram\n![system context](https://github.com/zkryaev/social_network_system_design/blob/main/architecture/diagrams/system_context.svg)\n\n### **Level 2.** Container diagram\n#### 1. Post system\n![post system](https://github.com/zkryaev/social_network_system_design/blob/main/architecture/diagrams/containers/posts_container.svg)\n\n#### 2. User system\n![user system](https://github.com/zkryaev/social_network_system_design/blob/main/architecture/diagrams/containers/users_container.svg)\n\n#### 3. Reactions system\n![reactions system](https://github.com/zkryaev/social_network_system_design/blob/main/architecture/diagrams/containers/reactions_container.svg)\n\n#### 4. Media system\n![media system](https://github.com/zkryaev/social_network_system_design/blob/main/architecture/diagrams/containers/media_container.svg)\n\n#### 5. Geo system\n![geo system](https://github.com/zkryaev/social_network_system_design/blob/main/architecture/diagrams/containers/geo_container.svg)\n\n## Оценка нагрузки\n\n### Расчет RPS\n\nDAY = 86400\n\n#### Посты\n- RPS(write) = DAU * 0.45 * / DAY = 52\n- RPS(read) = DAU * 30 / DAY = 3472\n\n#### Комментарии\n- RPS(write) = DAU * 4.5 / DAY = 520\n\n- RPS(read) = DAU * 10 / DAY = 1157\n\n#### Лайки\n*Читает лайков столько же сколько посмотрел постов*\n\n- RPS(write) = DAU * 15 / DAY = 1736 \n\n#### Подписка\n- RPS(write) = DAU * 0.2 / DAY = 23\n- RPS(read) = DAU * 5 / DAY = 579 // пусть в среднем столько же, сколько просмотров профилей\n\n#### Просмотр страниц путешественников\n- RPS = DAU * 5 / DAY = 579\n\n#### Поиск\n- RPS = DAU * 5 / DAY = 579\n\n### Расчет трафика\n#### Write\n\nПоскольку в СНГ превалирующее число языков занимает 2 байта в utf-8, поэтому считаю так: число символов * 2 байта\n\n```\nCreatePost [~2Kb] {\n    id (8)\n    user_id (8) \n    text ~ 2Kb (1000 * 2B)\n    geo_tag_id (8) // например [Россия, Байкал] = 20141251\n    created_at (8)\n}\n\nUploadImage [~3Mb] {\n  post_id\n  user_id\n  image ~ 3 Mb\n}\n\nLike [40B] {\n    id\n    user_id\n    post_author_id\n    post_id\n    created_at\n}\n\nComment [~1Kb] {\n    id\n    user_id\n    author_id\n    post_id \n    title  ~ 1Kb (500 * 2B)\n    created_at\n}\n\nSubcribe [32B] {\n    id\n    user_id\n    target_id\n    created_at\n}\n```\n**Результаты трафика Запись:**\n\n`Posts = 52 * 2Kb = 104 Kb/s`\n\n`Image = 52 * (5 изображений на пост) * 3Mb = 780 Mb/s`\n\n`Comments = 520 * 1Kb = 520 Kb/s`\n\n`Likes = 1736 * 40B = 70 Kb/s`\n\n`Subscribes = 23 * 32B = 736 B/s`\n\n#### Read\n\n```\n// Посты получаем пачками до 10 штук\nFetchPosts [2Kb*10 = 20Kb] {\n    id\n    user_id\n    posts: [\n        post [~2Kb]: {\n            post_id\n            author_id\n            likes_amount\n            geo_tag_id\n            created_at\n            text ~ 2Kb\n            image_url ~ 30B // -\u003e GetImage, если пользователь тыкнет по изображению отдаем уже фулл качество\n            image_preview_url ~ 30B // кропнутая версия изображения\n        }\n        еще 9...\n    ]\n    cursor\n    total\n}\n\nGetLikes [24B] {\n    id\n    post_id\n    total\n}\n\nGetComments [10Kb] {\n    id\n    post_id\n    comments: [\n        \"example\", ~ 1Kb\n        ...\n    ]\n    cursor\n    total\n}\n\nGetProfile [~20,7Kb] {\n  id\n  user_id\n  profile_id\n  name ~ 50B\n  last_name ~ 50B\n  profile_img_url ~ 30B\n  description ~ 500B\n  posts: FetchPosts [20Kb]\n}\n\nGetSubcribes [104B] {\n    user_id \n    targets [10]target_id ~ 10*8 = 80B\n    page\n    total\n}\n\n// Есть список тегов, пользователь вводит условно Байкал и ему выпадает этот тег,\n// он его выбирает и получает посты связанные с этим тегом\n\nSearch [240B] {\n  id\n  user_id\n  title ~ 200B\n  geo_tag_id\n  cursor\n  total\n}\n\nGetImage [~3Mb] {\n    image ~ 3Mb\n}\n```\n**Результаты трафика Чтение:**\n\n`Posts = 3472 * 20Kb ~ 69 Mb/s`\n\n`Images = 3472 * (5 изображений на пост) * 3Mb ~ 52 Gb/s`\n\n`Comments = 1157 * 10Kb ~ 12Mb/s`\n\n`Likes = 1157 * 24B ~ 28Kb/s`\n\n`Profile = 579 * 4.5Mb ~ 12 Mb/s`\n\n`Subscribes = 579 * 104B ~ 60Kb/s`\n\n`Search = 579 * 240B = 139 Kb/s`\n\n### Расчет одновременных соединений\n\n- Connections = 10 000 000 \\* 0.1 = 1 000 000\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzkryaev%2Fsocial_network_system_design","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzkryaev%2Fsocial_network_system_design","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzkryaev%2Fsocial_network_system_design/lists"}