Некоторое время назад во время интервью я столкнулся с проблемами, связанными с интерфейсом публикации в градациях серого.Незадолго до этого компания разработала интерфейсную схему публикации в градациях серого.Эта схема также была проверена на нескольких системах.У меня есть время разобраться недавно.Сейчас тоже выношу для общения с вами.В конце еще оставил для вас несколько реализаций кода.Заинтересованные партнеры могут ознакомиться.
tips
Некоторые крупномасштабные алгоритмы для правил оттенков серого также относительно легко найти. В этой статье о Panda основное внимание уделяется не обсуждению алгоритмов, а внедрению решений в оттенках серого, более соответствующих реальным сценариям. алгоритмы могут самостоятельно искать связанные алгоритмы, утечка ведра, алгоритм токена и т. д.
Что такое публикация в оттенках серого
Отпустите определенную функцию в оттенках серого (постепенно увеличивайте громкость) для определенной онлайн-группы, чтобы избежать рисков, связанных с полным запуском новых функций.
В просторечии проект сейчас в версии 1.0, но я хочу обновить версию 1.1.Проблем с внутренним тестом версии 1.1 нет.Однако из-за изменений в ключевых функциях я хочу добиться только части пользовательский опыт в Интернете. Проверьте отзывы. В настоящее время некоторым пользователям в сети необходимо продолжать использовать версию 1.0, а некоторым пользователям необходимо использовать версию 1.1.Если проблема с полученной обратной связью версии 1.1 достаточно серьезна, чтобы повлиять на работу в сети, версия 1.0 будет отброшена, а затронутый диапазон пользователей относительно невелик.Если версия 1.1 стабильная, то прямой переход на версию 1.1 для всех пользователей. Для достижения этого эффекта сцены используется публикация в оттенках серого.
Что такое правило оттенков серого? Правило оттенков серого может содержать бизнес-информацию или информацию об устройстве, такую как уровень пользователя, пол, регион, клиент и т. д. Например, если правило оттенков серого установлено на версию 1.1 для пользователей в Гуандуне, пользователь из провинции Гуандун столкнется с правилом оттенков серого, когда доступ к проекту. , перевести их на версию 1.1, а пользователи в других регионах продолжают использовать версию 1.0
Общие схемы публикации в оттенках серого
Существуют различные схемы оттенков серого, есть как разнообразие, так и контраст, нет лучшего, только наиболее подходящий для вашего собственного бизнес-сценария, вот несколько схем для сравнения и выбора
1. Простое шунтирование ngxin (рекомендуемый индекс: ⭐️)
Шунтирование, которое полагается только на сам nginx, не является выпуском в оттенках серого, но мне довелось поболтать с другом о реализации нахальной операции их небольшой компании, и я сказал, что они хотят, чтобы я написал это, сказав, что они уже протестировали Это.
- Две копии кода, развернутые отдельно
- Контролируйте процент доступа с помощью взвешенного циклического перебора nginx (при условии, что файл cookie клиента не существует)
- Фронтенд ввел sdk (Панда заглянул в исходники, на самом деле он для хранения случайного неповторяющегося (или только неповторяющегося с высокой вероятностью) логотипа в куки
- При втором посещении nginx возвращает соответствующую версию через уникальный идентификатор в куки
преимущество:Простые, не требующие внутренних операций
недостаток:
- Вы можете просто полагаться на взвешенный процент опроса nginx для управления трафиком.Это полностью зависит от внешнего интерфейса и не может быть объединено с бизнесом для разгрузки трафика.
- Управляемость слабая, при проблемах с серой версией пользователь может только откатить версию, изменив конфигурацию nginx.
- Плохая способность собирать проблемы, можно только ждать отзывов пользователей
- После очистки файла cookie клиента пользователю необходимо повторно войти через взвешенный циклический перебор nginx, возможно, ему будет назначена версия, отличная от предыдущей.
2. nginx + lua + redis (рекомендуемый индекс: ⭐️⭐️)
Советы: Этот план может быть связан с тем, что Panda не нашла нужной информации или недостаточно глубоко понимает этот план. Panda считает, что гибкости несколько не хватает, и трудно делать слишком много логических суждений в оттенках серого в сочетании со сложным бизнесом. Если вы прошли этот план, пожалуйста, дайте мне знать.
- Когда запрос пользователя достигает внешнего прокси-сервиса nginx, встроенный модуль lua анализирует код скрипта lua в файле конфигурации nginx.
- Переменная lua получает IP-адрес клиента, чтобы запросить, есть ли встроенное значение в кеше Redis, если есть возвращаемое значение, выполнить логику серой версии, в противном случае выполнить текущую версию рабочей среды.
В интернете тоже много информации по схеме nginx+lua+redis.Вы сами можете разобраться.Хотя Панда не до конца разбирается в схеме,с точки зрения всей теории длины ссылки,эффективность этой схемы должна быть относительно высоким, поэтому я дам его вам.
Справочная статья 1
Справочная статья 2
Справочная статья 3
3. Шунт рендеринга на стороне сервера (Рекомендация: ⭐️⭐️⭐️)
Решение серверного рендеринга и разгрузки на самом деле является решением, которое, как мне кажется, проще в использовании.Здесь я сначала дам краткое описание процесса, а затем я сделаю некоторые введения в него отдельно.
- Две части кода, упакованные во внешнем интерфейсе, развертываются на сервере соответственно (здесь в качестве примера используется одностраничное приложение, если есть несколько страниц, некоторые другие детали необходимо обрабатывать отдельно).
- Управление добавлением версий в фоновом режиме (на самом деле пусть сервер читает index.html одной страницы)
- Клиент обращается к серверу, сервер устанавливает файл cookie в соответствии с правилами оттенков серого и сохраняет его в Redis и возвращает соответствующую версию index.html.
- Когда второй визит проходит через сервер, если есть файл cookie и соответствующая информация о версии уже существует в Redis, он вернется напрямую, в противном случае снова выполните процесс в градациях серого.
Преимущества: гибкий и управляемый, может быть объединен с бизнес-системой для создания правил оттенков серого. Недостатки: это почти шаттл на бэкенде, который давит на сервер и требует дополнительных сопутствующих оптимизаций, неудобно использовать многостраничные приложения.
4. Оценка клиентской аннотации (сложнее в обслуживании) (рекомендуемый индекс: нажимная полоса, не рекомендуется)
Клиент составлен по условию аннотации, на самом деле, функциональность какой версии отображается в соответствии с правилами оттенков серого, и эта программа также имеет компанию в использовании, функцию оттенков серого, но больше, это крайне сложно поддерживать , Не рекомендуется , здесь больше представлено
5. nginx + server + redis + [front-end sdk] (рекомендуемый индекс: ⭐️⭐️⭐️)
Общий обзор программы
- Сначала мы называем стабильную онлайн-версию стабильной версией, а новая функциональная версия, выпущенная на этот раз, называется бета-версией.
- Разработчики запустили службу nginx для стабильной и бета-версий соответственно, а также запустили уровень входа службы nginx на уровне эксплуатации и обслуживания в качестве пересылки.
- Клиент получает доступ к проекту через доменное имя, запрашивает правило оттенков серого, выбирает правило оттенков серого и устанавливает файл cookie в качестве идентификатора для клиента, сохраняет идентификатор пользователя в Redis и перенаправляет пользователя на указанную версию.
- Когда интерфейс правила оттенков серого запрашивает, если у него уже есть файл cookie, он напрямую возвращает соответствующую версию. Если файла cookie нет, перейдите к Redis. Если в Redis есть соответствующая информация, он вернется напрямую. Если он не существует , пройдите процесс идентификации правила оттенков серого.
- Интерфейсная функция SDK: используется для контроля времени инициирования запросов правил оттенков серого, операций обратного вызова и других бизнес-операций.
В проекте необходимо активировать функцию оттенков серого в определенное время, нажать кнопку или войти на определенную страницу.Например, некоторые приложения будут открывать всплывающее окно, чтобы сообщить пользователю, что есть внутренняя бета-версия версия и нужно ли им ее испытать. Нажмите, чтобы согласиться, прежде чем перейти к версии в градациях серого.
Схема проектирования
код существительного
- стабильная: официальная производственная среда (версия 1.0)
- Бета: серогое версия (версия 1.1)
- UUID: в демонстрации кода нет системы учетной записи и отсутствует систему входа в систему, поэтому процесс выполняется путем приведения UUID в качестве идентификатора пользователя на URL
Конкретная реализация (простая демонстрация)
- Создайте два HTML-кода соответственно, предполагая два проекта, бета-версия новой функции в оттенках серого, стабильная версия — текущая версия рабочей среды.
- Внедрить sdk в front-end (front-end sdk не требуется, см. использование бизнес-сценариев)
- Внешний интерфейс инициирует запрос на получение информации о версии (если используется SDK, этот шаг можно выполнить с помощью конфигурации)
4. Логика серверной службы:
Код фоновой реализации
//这里只是演示,直接通过链接获取用户id,实际场景应该是通过获取用户会话去判别用户相关信息
const uuid = ctx.query.uuid;
//可以进入灰度版本的uuid,在数据库存放
const uuids = ['123','456','789']
//redis 中存放了的的用户id,如果清理了redis,则意味着,取消用户的版本标识,这里简单的用数组存放,实际应用场景根据各自的业务信息考虑是否需要多集合存放
const redisUuids = [{id: '789', version: 'beta'}, {id: '333', version: 'stable'}];
Логика приведенного выше кода заключается в том, чтобы применить правило оттенков серого, когда uuid равен 123, 456 или 789, и войти в бета-версию.
Пользователи с uuid 789 и 333 были сохранены в Redis
- Эффект:
Операции обработки проблем в оттенках серого
- В: Если после подключения к сети возникла серьезная проблема с версией в градациях серого, требуется операция экстренного отката. Ответ: Отключите функцию оттенков серого прямо в фоновом режиме, очистите Redis и завершите сеанс входа пользователя (собственно, операцию очистки куки клиента)
- Q: Нужно указать пользователя для входа в определенную версию
Ответ. Измените информацию Redis в фоновом режиме и завершите сеанс входа пользователя. - В: Оттенки серого включены только на определенной странице в указанном проекте. Ответ. Вы можете обработать соответствующую логику во внешнем SDK и использовать соответствующий путь страницы в качестве списка для идентификации внешнего интерфейса (SDK лучше всего импортировать динамически, а SDK размещается на CDN)
код
Серверная часть компании реализована с помощью java. Panda здесь, чтобы помочь вам лучше понять весь процесс, и он также реализован с помощью узла. Заинтересованные друзья могут перейти непосредственно к просмотру кода.github, общая идея дизайна та же
будь осторожен:Чтобы облегчить запуск и просмотр демонстрации, Panda запускает композицию докеров, В соответствии с предпосылкой докеров и компоновки докеров, вы можете запустить пример непосредственно через команду
docker-compose build
docker-compose up -d
localhost:8000
задвинуть
Отсканируйте QR-код, чтобы просмотреть таблицу рекрутинговой ямы:
Эпилог
Схем тысячи, просто выберите подходящую для себя.В демонстрационном коде Panda просто написал какой-то логический код, а не ту логику, которую можно заложить в проект.Его нужно подгонять под реальную сцену проекта. front-end sdk и Код java части Панды не выпущен, так как программа реализована в компании, поэтому выпускать ее неудобно.Можно написать по общему замыслу.Если есть какие вопросы, добро пожаловать к обсуждению с Пандой.Что-то не так в тексте или есть лучший способ План также надеюсь, что вы дадите мне свой совет