Не бойтесь свернуть горы, история обновления архитектуры мобильной технологии QQ
Не бойтесь свернуть горы, история обновления архитектуры мобильной технологии QQ

Эта статья Заключительная глава серии технологических туров, посвященных 25-летию QQ,существуют в первых двух статьях,Мы используем《QQ 25-летний технологический тур 丨Свежий дизайн, основанный на технологических исследованиях, для создания легкого и простого QQ9 》и«QQ 9 — это «тупо быстро, тупо быстро»? ! Позвольте мне показать вам технические секреты, стоящие за этим».как заголовок,Представляем QQ Исследование команды в области визуальной доработки и оптимизации производительности. Эта статья будет посвящена мобильным телефонам. QQ Техническая история обновления технической архитектуры.

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

01. Исторический багаж

За последние 20 лет QQ Mobile превратился из простого инструмента для обмена мгновенными сообщениями в платформу, предоставляющую множество услуг, таких как пространства, каналы, короткие видеоролики, супершоу и дополнительные услуги. По мере того как бизнес становится все более и более сложным, первоначально разработанная техническая архитектура становится все более непригодной, а связь между бизнесами становится все более серьезной. Часто одна проблема решается, а возникает N проблем, и проблему невозможно исправить. ., долг по коду накапливается, и бремя истории словно гора лежит перед каждым участником мобильного QQ-проекта.

В 2020 году мы начали модернизировать архитектуру. Учитывая очень большую сложность бизнеса и размер кода Mobile QQ, рабочая нагрузка по обновлению архитектуры оценивалась как ошеломляющая, поэтому мы приняли стратегию поэтапного и постепенного развития для обновления архитектуры. В целом график обновления архитектуры Mobile QQ выглядит следующим образом:

02. Развязка и реконструкция

2.1 Проектирование архитектуры разделения и реконструкции

Хотя исторический багаж подобен большой горе, у участников проекта Mobile QQ также есть воля и решимость свернуть горы. В 2020 году Mobile QQ запустила проект обновления технической архитектуры под названием «Промышленная практика», который ознаменовал первый случай, когда проект Mobile QQ систематически проводил обновления границ бизнеса, разъединения и реконструкции.

Mobile Q старая архитектура

Как видно из приведенного рисунка, старая архитектура хоть и является модульной и подключаемой, но имеет следующие недостатки:

  1. Основной проект содержит в себе основу и большую часть бизнес-кода, в результате чего границы между основой и бизнес-кодом становятся нечеткими.
  2. Базовые базовые классы продолжают расширяться, а зависимости кода между предприятиями становятся необоснованными.
  3. Низкая эффективность разработки. Увеличение количества модификаций кода приводит к высоким затратам на CR, разрешению конфликтов и проблемам с расположением, а также замедляет компиляцию.

В ответ на вышеперечисленные недостатки проект мобильного QQ был переработан. В новой архитектуре модули разделены по бизнес-моделям. Бизнес-модули отделены друг от друга, а связь между ними осуществляется посредством интерфейсов и маршрутизации. При этом он разделен по иерархической схеме. Уровни зависят сверху вниз. Модули верхнего уровня могут опираться на модули нижнего уровня, но модули нижнего уровня не могут быть обратно зависимыми от верхних. Модули уровня.

Новая архитектура Mobile Q

Основные преимущества новой архитектуры:

  1. Модуль стал более связным, и сфера влияния разработки новых функций постепенно сужается внутри модуля, что повышает эффективность исследований и разработок.
  2. Интерфейс стал понятнее, количество зависимостей уменьшено, а тестируемость улучшена. Легче обеспечить корректность логики кода посредством модульного тестирования и тестирования интерфейса, а также улучшить качество продукта.

2.2 Эволюция разделения и реконструкции

Различные направления проекта мобильного QQ очень зависят друг от друга. Разъединение и реконструкция не могут быть достигнуты в одночасье. Цели необходимо ставить поэтапно и оптимизировать шаг за шагом. После разбора развязка и реконструкция проекта мобильного QQ делится на три этапа:

  • Этап 1 (2020.11 – 2021.2)

Разделение примерно 3 миллионов строк основного кода в основном завершено. В общей сложности было отделено около 30 базовых модулей и 40 базовых компонентов, а также основные бизнес-модули. При разработке новых функций, поскольку реализация интерфейса и службы изолированы, код, зависящий от интерфейса, больше не будет жестко связан.

  • Этап 2 (2021,3–2021,6 гг.)

Цель: продолжить разделение бизнес-модулей и создать механизм предотвращения ухудшения качества.

Результаты:

  1. Доля API-кода и количество зависимостей не увеличится.
  2. Завершить создание механизма предотвращения деградации для предотвращения необоснованных изменений на этапе интеграции.
  3. Улучшение динамических возможностей,оптимизация Механизм связи между плагином и хостом и эффективность релиза.
  • Этап 3 (после 2021.7 г.)

Цель: дальнейшее усовершенствование основных модулей и компонентов и реализация субинжиниринга.

Результаты:

  1. Улучшить базовый модуль и публичные компоненты Рефакторинг,Установите базовый процесс выпуска компонентов модуля.
  2. Внедряйте субинжиниринг канальных и малых мировых сервисов, а также компилируйте и запускайте их независимо.

2.3 Преимущества разделения и рефакторинга

На основе реконструкции были разобраны зависимости, повышен уровень модульности в три этапа, улучшена скорость компиляции и эффективность НИОКР, а время компиляции конвейера увеличено на 50%. Конфликты кода также были значительно улучшены. Сравнивая данные до и после рефакторинга, количество конфликтующих файлов сократилось на 60%, а количество конфликтов — на 30%, что значительно повысило эффективность разработки.

03. Обновление архитектуры NT

После успешного первого шага реформы мы обратили внимание на проблему фрагментации версий, с которой столкнулся мобильный QQ. Различные цели развиваются независимо, образуя так называемую структуру «дымохода», в которой повторное использование кода крайне мало. Такая структура приводит к таким проблемам, как несогласованность работы нескольких терминалов, неравномерность ведения бизнеса внутри терминала, а также высокие затраты на разработку и обслуживание каждого обновления версии. Чтобы решить эти проблемы и добиться прорыва в улучшении пользовательского опыта, оптимизации производительности и повышении эффективности исследований и разработок, нам необходимо глубоко задуматься. Именно эти неотложные потребности и проблемы побудили нас начать второй этап реформы – проект обновления мобильной архитектуры QQ NT.

В начале проектирования архитектуры NT мы твердо верили, что нам не следует продолжать исправлять ситуацию, а следует принять новейшие и разумные технические концепции, отказавшись от простого метода внесения исправлений. Эта модернизация — это не только кардинальная технологическая трансформация, но и продуманная технологическая трансформация. Мы придаем большое значение формулированию четкого и осуществимого пути реализации, не вызывая крупномасштабных потрясений в архитектуре. Целью является достижение более высокой эффективности работы и результатов при меньших затратах рабочей силы, обеспечивая эффективность и надежность в процессе модернизации. Такой подход не только обеспечивает плавное развитие проекта, но и закладывает прочную основу для будущего развития технологий и итераций.

3.1 Трудности реализации архитектуры NT

Из-за долгой истории QQ Mobile и большой базы пользователей проект продемонстрировал значительную сложность как на уровне бизнеса, так и на уровне пользователей. В частности, проблемы на уровне проекта включают в себя:

  1. Огромное количество кода:сотовый Телефон содержит почти десять миллионов строк кода, образуя технического гиганта.
  2. Высокая сложность тестирования: много тест-кейсов, сложные функции, отсутствуют некоторые документы.
  3. Устаревшие зависимые компоненты: проект опирается на некоторые устаревшие и плохо поддерживаемые компоненты, а также на большое количество неподдерживаемых бинарных библиотек.
  4. Гарантия процесса НИОКР: существует Обновление архитектурыв то же время,Должен обеспечить плавный переход рабочих процессов НИОКР,Чтобы не повлиять на эффективность НИОКР.

Проблемы на уровне пользователя включают в себя:

  1. В процессе обновления, который длится больше года, ежедневные версии требуют обычных итераций.
  2. Локальный контент пользователя огромен, например, локальная база данных сообщений превышает 10 ГБ.
  3. Проект требует существования технологии оптимизации при одновременном улучшении пользовательского опыта и активности.,Убедитесь, что технология оптимизациисуществовать для клиента приносит пользу.

Столкнувшись с этими сложностями, основные трудности проекта в основном сосредоточены на следующих трех аспектах:

  1. Обновление масштабных функциональных проектов структурыи Унификация: для общего обновления всех терминалов, всех функций и всех проектных групп, чтобы обеспечить Обновление В процессе проектирования ничего не может быть упущено. сотовый телефон QQ дасуществоватьразвитый20Тщательно выполняемая в течение многих лет Рефакторинг,Беспрецедентная сложность,Нет никакой информации, на которую можно было бы ссылаться.
  2. IM Переписывание и обновление полносвязной архитектуры: устранение старого технического долга, оптимизация архитектуры сообщений, плавный перенос данных истории пользователей и повышение производительности сообщений. QQ Новости У Архитектуры старый технический долг, и его немало QQ В исторической версии нет единого послания ID Создать правила,Не существует единого решения для хранения и индексирования.,Типы сообщений также расширяются не по порядку. так,Необходимо переписать всю оптимизацию IM link,В то же время существует процесс,Все еще нужно Плавный перенос данных истории пользователей,Наконец-то завершил обновление,Защитите пользователей и пользовательский опыт от воздействия.
  3. Улучшение пользовательского опыта и активное улучшение данных: постепенная оптимизация работы основных функций.,Не влияет на привычки пользователей,Ускорьте рост данных о продуктах за счет улучшения опыта. Переписать код невозможно сразу. Основной функциональный опыт должен быть сохранен.,постепеннооптимизация,Это не может повлиять на привычки использования пользователей.

Эти проблемы не только иллюстрируют сложность проекта обновления архитектуры мобильного телефона QQ NT, но и доказывают нашу решимость противостоять беспрецедентным техническим трудностям.

3.2 Проектирование архитектуры NT

Чтобы добиться обновления и унификации архитектуры, команда проекта сначала использовала C++ для разработки кросс-платформенного уровня ядра с основными функциями QQ IM: интеграция основной бизнес-логики IM (логика сообщений, такая как друзья, группы, каналы и т. д.), логика цепочки данных и взаимосвязей, изображения, голос и видео и т. д. Логика приемопередатчика Rich Media, логика аудио и видео в реальном времени и т. д.), общие компоненты QQ (база данных, кодек протокола, сетевая передача и т. д.), а также поток/сеть/IO и другие общие модули управления ресурсами и части инкапсуляции операционной системы, которые являются собственными для реализации каждой платформы и унифицированы вплоть до C++. Межплатформенный уровень.

Чтобы контролировать риски качества проекта, к кросс-платформенному ядру NT сначала подключается относительно небольшое количество пользователей, а настольная часть, которая имеет высокую степень срочности выполнения функций, полностью переписана с использованием новой архитектуры.

После успешного завершения функциональной проверки и тестирования качества на десктопной стороне мы начали миграцию на мобильную часть и успешно завершили интеграцию платформ iOS и Android.

Конечно, мобильный доступ далеко не так прост, как показано на рисунке. Решения и основные процессы будут представлены далее.

3.3 Перезапись и обновление полной ссылки IM

Базовым технологическим обновлением QQ, основанным на новой архитектуре NT, является обновление полного канала IM. Источники данных IM-сообщений сложны и имеют тяжелую историческую нагрузку. Первая трудность, возникающая в процессе обновления, — это преобразование данных и перенос существующих данных в новую версию.

  • В старой версии QQ сообщения друзей не имели уникального идентификационного поля, что сильно влияло на импорт и дедупликацию.
  • В версиях до 2012 года групповые сообщения не поддерживали роуминг, а сообщения не имели уникальных полей.
  • Формат сообщений на каждой платформе разный,Высокая сложность,iOS и Android Соответственно существует около 200 типов сообщений.
  • Мультимедийные ресурсы (изображения, видео, голоса, файлы) хранятся в различных структурах каталогов и имеют разные имена.
  • Специальные сообщения, такие как структурированные сообщения, Ark Сообщение, маленькая серая полоса сообщения,Нужно сделать конвертацию,Завершите работу по сортировке и удалению бизнеса.
  • Существуют также проблемы с устаревшими версиями, вызванные изменениями в различных функциях.,Например, группы и дискуссионные группы, которые были отозваны или расформированы.

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

Основываясь на унифицированных форматах и ​​оптимизированных типах для всех терминалов, мы начали разрабатывать новую клиентскую базу данных, унифицированную для всех платформ, используя комплексное оптимальное решение по размеру, производительности и безопасности, а затем обдумали, как плавно обновить данные из старая БД в новую БД. Мобильный терминал отличается от настольного терминала. Активные пользователи находятся в сети круглый год. Размер файлов БД локальных текстовых сообщений на некоторых мобильных телефонах превышает 10 ГБ. Вместе с мультимедийными данными, файлами и т. д. общий объем данных превышает 100 ГБ. Кроме того, мобильный терминал имеет небольшой объем памяти и энергопотребление. Из-за различных ограничений, таких как чувствительность и процессы фонового уничтожения, необходимо разработать тщательную стратегию обновления, чтобы защитить основные данные пользователей от потери.

Основные пункты плана:

  • Возобновление с точки останова. В мобильном сценарии процесс может быть остановлен или завершен в любое время. Убедитесь, что сообщения не потеряны и не дублируются.
  • Рейтинг пользователя: Размер данных последующего сообщения,Пользователи делятся на три категории,Сделайте другой опыт оптимизации,Уменьшите влияние на пользователей.
  • оптимизациятепло и энергопотребление: ограничить скорость импорта,Не допускайте нагрева сотового телефона. сотовый телефон перестает импортировать после обрезки фона. Пользователи с большим количеством сообщений,Помогите пользователям настроить существующий фоновый импорт.
  • Мониторинг: отслеживайте и сообщайте о различных исключениях при импорте, а также отслеживайте отзывы пользователей в любое время.

Благодаря хорошо продуманной стратегии обновления, множеству раундов внутренних отчислений, внешнему масштабированию со 100-го уровня, всестороннему мониторингу и стратегии сокрытия, гарантирующей, что никакая информация не будет потеряна. Наконец, в сочетании с данными мониторинга и данными отзывов пользователей, был завершен плавный перенос всех данных всех пользователей в новую БД.

3.4 Оптимизация и улучшение основных функций

Не только новости: в процессе переписывания и обновления архитектуры NT основные функции QQ также были более тщательно реконструированы. Собственные функции мобильного QQ были крупномасштабно разделены, а общие части были оптимизированы и интегрированы. в унифицированные собственные компоненты NT-Runtime (служба компонентов NT и уровень инфраструктуры). На основе реконструированной архитектуры также полностью оптимизирована производительность.

Во-первых, это оптимизация основных модулей, связанных с сообщениями. Логика сообщений переносится на кросс-платформенный язык C++, что также способствует обновлению архитектуры на верхнем уровне. Возьмем в качестве примера окно чата (AIO), основанное на идеях дизайна новой архитектуры потока данных + предварительная загрузка данных + распараллеливание логики пользовательского интерфейса, одностороннее управление потоком данных, асинхронная загрузка и рендеринг. Системные ресурсы полностью предоставляются. Улучшен список сообщений AIO и конечный показатель производительности. Очевидно, что просмотр, переход и перемещение сообщений в AIO происходят плавно и плавно. План оптимизации основных технологий:

  • Принять односторонний поток данных на основе MVI Архитектура, реализующая развязку бизнеса.
  • Предварительная загрузка и асинхронный рендеринг обеспечивают плавное перемещение сообщений.
  • Загрузка сообщений распараллелена, чтобы сократить время загрузки при первом экране и прокрутке.
  • Сообщения динамически загружаются и выпускаются, оптимизация использования памяти.
  • Более 200 бизнес-компонентов с отложенной загрузкой,Реализуйте многоуровневое представление данных и загрузку по требованию.

Другие основные сцены QQ, такие как страница списка сообщений, отправка и получение сообщений и мультимедиа, просмотр изображений и видео и т. д., также оптимизируются с использованием того же пути, а конечная производительность значительно улучшается.

04. Резюме

При разработке мобильного QQ на протяжении более 20 лет постоянное расширение функций приложения и постоянный рост объема кода накопили огромный технический долг, который лег тяжелым бременем на исходную архитектуру. Благодаря серии архитектурных изменений и технологических обновлений QQ Mobile успешно превратилась из раздутой в модульную, эффективную и стабильную систему.

Клиентская архитектура была постепенно обновлена ​​с архитектуры дымохода каждого терминала до архитектуры NT для многотерминального и кроссплатформенного повторного использования, что снижает трудозатраты на обслуживание нескольких терминалов, повышает эффективность полнофункциональной разработки QQ и закладывает прочную основу для дальнейшего развития QQ и внедрения новых технологий.

Заглядывая в будущее, QQ продолжит двигаться вперед по пути технологических инноваций на основе архитектуры NT, продолжит оптимизацию архитектуры и обновление технологий, а также предоставит пользователям более плавную и стабильную работу с продуктом.

-End-

Оригинальный автор | Хэ Цзиньюань

Расскажите мне о том, как QQ вырос вместе с вами. Есть ли какие-нибудь интересные истории, которые вас впечатлили?

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose