Решение Youzan для прозрачного многоуровневого кэширования (TMC)

Java Redis Kafka etcd

1. Введение

1-1. Что такое ТМС

TMC, или «Прозрачный многоуровневый кэш», — это комплексное решение для кэширования, предоставляемое командой Youzan PaaS для приложений компании.

Основываясь на общем «решении распределенного кэша (например, CodisProxy + Redis, например, собственной системе распределенного кэша ZanKV)», TMC добавила следующие функции:

  • Обнаружение горячих точек прикладного уровня
  • Локальный кеш прикладного уровня
  • Статистика попаданий в кэш прикладного уровня

Чтобы помочь прикладному уровню решить проблему доступа к точке доступа во время использования кеша.

1-2. Зачем ТМС

Есть много продавцов электронной коммерции, использующих сервис Youzan, и продавцы время от времени выполняют некоторые действия по «второму убийству продукта» и «продвижению продукта», что приводит к «маркетинговой деятельности», «детали продукта», «заказу транзакции» и другим приложениям связи. ПоявлятьсяДоступ к кэш-памятиСлучай:

  • Информация, такая как время события, тип события и товары события, непредсказуема, что приводит кДоступ к кэш-памятиситуацию нельзя предсказать заранее;
  • Доступ к кэш-памятиВ течение этого периода небольшое количество **ключей доступа к точкам доступа** на уровне приложения генерировало большое количество запросов на доступ к кэшу: это повлияло на систему распределенного кэша, заняло большую часть полосы пропускания интрасети и, в конечном итоге, повлияло на стабильность приложения. система слоев;

Для того чтобы справиться с вышеперечисленными проблемами,Автоматическое обнаружение горячих точекиДобавить запрос доступа к кешу точки доступа к локальному кешу на прикладном уровне.решение, поэтому TMC родился.

1-3.Болезненные места решений многоуровневого кэширования

На основании вышеприведенного описания делаем следующий выводРешение для многоуровневого кэшированияНеобходимо решить болевые точки:

  • Обнаружение точки доступа: Как быстро и точно найти **ключ доступа к точке доступа**?
  • Согласованность данных: как обеспечить согласованность данных с системой распределенного кэша для локального кэша, предварительно расположенного на уровне приложения?
  • Проверка эффекта: как разрешить прикладному уровню проверять частоту попаданий в локальный кеш, горячую клавишу и другие данные, чтобы проверить эффект многоуровневого кеша?
  • Прозрачный доступ: как общее решение снижает количество вторжений в систему приложений и обеспечивает быстрый и беспрепятственный доступ?

Сосредоточив внимание на вышеуказанных болевых точках, TMC разработала и внедрила комплексное решение. Для поддержки «обнаружения горячих точек» и «локального кэша» он может уменьшить влияние на нижестоящие службы распределенного кэша при доступе к горячим точкам и избежать влияния на производительность и стабильность служб приложений.

2. Общая структура TMC

Общая архитектура TMC показана на рисунке выше и разделена на три уровня:

  • Уровень хранения: предоставление базовых возможностей хранения данных kv и выбор различных сервисов хранения (codis/zankv/aerospike) для разных бизнес-сценариев;
  • Прокси-уровень: предоставление унифицированной записи об использовании кеша и протокола связи для прикладного уровня, а также выполнение работы по переадресации функции маршрутизации после горизонтальной сегментации распределенных данных;
  • Прикладной уровень: предоставить единый клиент для служб приложений, встроенное «обнаружение горячих точек», «локальный кеш» и другие функции, прозрачные для бизнеса;

В этой статье основное внимание уделяется функциям «обнаружения горячих точек» и «локального кэша» клиента прикладного уровня.

3. Локальный кэш TMC

3-1. Как быть прозрачным

Как TMC сокращает количество вторжений в системы бизнес-приложений и обеспечивает прозрачный доступ?

Для корпоративных служб приложений Java существует два типа использования клиента кэша:

  • на основеspring.data.redisупаковка, использованиеRedisTemplateнаписать бизнес-код;
  • на основеyouzan.framework.redisупаковка, использованиеRedisClientнаписать бизнес-код;

Независимо от вышеописанного метода окончательныйJedisPoolсозданныйJedisОбъект взаимодействует с прокси-уровнем кэш-сервера для запросов.

TMC для нативных пакетов jedisJedisPoolиJedisКласс был преобразован, и функция TMC «обнаружение горячих точек» + «локальный кеш» интегрирована в процесс инициализации JedisPool.Hermes-SDKЛогика инициализации пакета, чтобыJedisКогда клиент взаимодействует с прокси-уровнем кэш-сервера, он сначала связывается сHermes-SDKВзаимодействие, чтобы завершить прозрачный доступ к функции «обнаружение горячих точек» + «локальный кеш».

Для служб приложений Java вам нужно использовать только определенную версию пакета jedis-jar, без изменения кода вы можете получить доступ к TMC и использовать функцию «обнаружение горячих точек» + «локальный кеш», что обеспечивает минимальное вторжение в система приложений.

3-2 Общая структура

3-2-1 Модульное деление

Общая структура локального кэша TMC разделена на следующие модули:

  • Jedis-Client: Прямой вход для приложения Java для взаимодействия с сервером кеша, определение интерфейса такое же, как и у родного Jedis-Client;
  • Hermes-SDK: Самостоятельно разработанный пакет SDK для функции «обнаружение горячих точек + локальный кеш», и Jedis-Client интегрирует соответствующие возможности, взаимодействуя с ним;
  • Кластер серверов Гермес: получить данные о доступе к кэшу, сообщаемые Hermes-SDK, выполнить обнаружение горячих точек и передать ключ горячей точки в Hermes-SDK для локального кэширования;
  • кеш-кластер: он состоит из прокси-уровня и уровня хранения, предоставляя единую запись службы распределенного кэша для клиентов приложений;
  • основные компоненты: кластер etcd, центр конфигурации Apollo, предоставляющий возможности «кластерного продвижения» и «унифицированной конфигурации» для TMC;

3-2-2.Основной поток

1) Приобретение ключевой ценности

  • вызов Java-приложенияJedis-ClientКогда интерфейс получает кэшированное значение ключа,Jedis-ClientспрошуHermes-SDKявляется ли ключ в настоящее времягорячая клавиша;
  • загорячая клавиша,Напрямую изHermes-SDKизМодуль точки доступаПолучить значение ключа точки доступа, кэшированное локально, без доступа к немукеш-кластер, так что запрос доступа предшествует прикладному уровню;
  • для не-горячая клавиша,Hermes-SDKпройдетCallableПерезвониJedis-ClientРодной интерфейс, откеш-кластерполучить значение значения;
  • заJedis-Clientдля каждого запроса на доступ к значению ключа,Hermes-SDKчерез егоКоммуникационный модульбудетсобытие доступа к ключуАсинхронно отчитываться передКластер серверов Гермес, чтобы он мог выполнять «обнаружение горячих точек» на основе сообщаемых данных;

2) Срок действия ключа истекает

  • вызов Java-приложенияJedis-Clientизset() del() expire()При использовании интерфейса соответствующее значение ключа будет недействительным.Jedis-Clientбудет вызываться синхронноHermes-SDKизinvalid()Метод сообщает о своем событии «значение ключа недопустимо»;
  • загорячая клавиша,Hermes-SDKизМодуль точки доступаСначала он аннулирует значение значения ключа в локальном кеше для достижения локальных данных.сильное согласие. в то же времяКоммуникационный модульБудет асинхронно передавать событие «аннулирование значения ключа» черезкластер etcdОтправка в другие кластеры приложений JavaHermes-SDKузел;
  • разноеHermes-SDKузлаКоммуникационный модульПосле получения события «неверное значение ключа» оно будет вызваноМодуль точки доступаСделать недействительным локально кэшированное значение ключа для доступа к данным кластера.в конечном итоге последовательный;

3) Обнаружение горячих точек

  • Кластер серверов Гермеспродолжай собиратьHermes-SDKсообщилсобытие доступа к ключу, выполнять периодический (каждые 3 секунды) анализ и расчет данных доступа к кешу различных кластеров бизнес-приложений для обнаружения данных доступа к кешу в кластерах бизнес-приложений.горячая клавишасписок;
  • для обнаруженныхгорячая клавишасписок,Кластер серверов Гермеспройти через этокластер etcdПеренесены в разные кластеры бизнес-приложенийHermes-SDK Коммуникационный модуль, уведомить егогорячая клавишаСписок кэшируется локально;

4) Чтение конфигурации

  • Hermes-SDKВо время запуска и работыЦентр конфигурации АполлонаПрочитайте информацию о конфигурации, о которой он заботится (например: конфигурация запуска и завершения работы, конфигурация черного и белого списков, адрес etcd...);
  • Кластер серверов ГермесВо время запуска и работыЦентр конфигурации АполлонаПрочтите интересующую его информацию о конфигурации (например, список бизнес-приложений, конфигурацию порога точки доступа, адрес etcd...);

3-2-3 Стабильность

Стабильность локального кэша TMC проявляется в следующих аспектах:

  • Асинхронная отчетность данных:Hermes-SDKиспользоватьrsyslog技术Асинхронная отчетность о «событиях доступа к ключу» не будет блокировать бизнес;
  • Изоляция потока модуля связи:Hermes-SDKизКоммуникационный модульИспользуйте независимый пул потоков + ограниченную очередь, чтобы гарантировать, что операции ввода-вывода для отчетов и мониторинга событий изолированы от потоков выполнения бизнеса, а основные бизнес-функции не будут затронуты даже в случае возникновения непредвиденных исключений;
  • Управление кэшем:Hermes-SDKизМодуль точки доступаВерхний предел размера локального кеша контролируется таким образом, чтобы использование памяти не превышало 64 МБ (LRU), чтобы предотвратить возможность переполнения кучи памяти JVM;

3-2-4.Консистенция

Когерентность локального кэша TMC проявляется следующим образом:

  • Hermes-SDKизМодуль точки доступатолько кэшгорячая клавишаданных, подавляющее большинство данных, не являющихся горячими ключами, предоставляетсякеш-кластерместо хранения;
  • горячая клавишаКогда изменение приводит к тому, что значение становится недействительным,Hermes-SDKСинхронно аннулировать локальный кеш, чтобы гарантироватьсильная локальная согласованность;
  • горячая клавишаКогда изменение приводит к тому, что значение становится недействительным,Hermes-SDKпройти черезкластер etcdШироковещательные события, чтобы асинхронно аннулировать локальные кэши других узлов в кластере бизнес-приложений, чтобы гарантироватьКластер в конечном итоге согласован;

4. Обнаружение точки доступа TMC

4-1. Общий процесс

Процесс обнаружения точек доступа TMC разделен на четыре этапа:

  • Сбор данных:собиратьHermes-SDKсообщилсобытие доступа к ключу;
  • Тепловое раздвижное окно: для каждого ключа приложения поддерживать колесо времени для записи тепла доступа на основе скользящего окна в текущий момент;
  • Тепловая конвергенция: для всех ключей приложения, начиная с<key,热度>в видеСводка по горячей сортировке;
  • Обнаружение точки доступа: Для приложения, отСводка сортировки горячими клавишамивыбрано из результатовГорячая клавиша TopN, нажать наHermes-SDK;

4-2. Сбор данных

Hermes-SDKместнымrsyslogбудетсобытие доступа к ключуоформить в формате протоколаkafka,Кластер серверов ГермесКаждый узел потребляет сообщения kafka и получает их в режиме реального времени.событие доступа к ключу.

Формат протокола события доступа следующий:

  • appName: бизнес-приложение, которому принадлежит узел кластера.
  • uniqueKey: бизнес-приложениесобытие доступа к ключуключ
  • sendTime: бизнес-приложениесобытие доступа к ключувремя возникновения
  • вес: бизнес-приложениесобытие доступа к ключузначение доступа

Кластер серверов Гермесузел будет собиратьсобытие доступа к ключуХранящаяся в локальной памяти структура данных памятиMap<String, Map<String, LongAdder>>, соответствующее деловое значение отображается какMap< appName , Map< uniqueKey , 热度 >>.

4-3 Тепловое раздвижное окно

4-3-1.Скользящее окно времени

Кластер серверов ГермесNode для каждого ключа каждого приложения поддерживаетколесо времени:

  • Всего есть 10 Колесов Времени.квант времени, каждый временной интервал записывает общее время доступа к текущему ключу, соответствующее 3-секундному периоду времени;
  • Накопление записей 10 временных отрезков колеса времени означает общее количество обращений к текущему ключу во временном окне на 30 секунд вперед от текущего времени;

4-3-2. Картирование задач

Кластер серверов Гермесузел для каждого приложениякаждые 3 секундыгенерироватьзадача карты, переданный узлу"Кэширование пула потоков карты"воплощать в жизнь.задача картыСодержание следующее:

  • Для текущего приложения отMap< appName , Map< uniqueKey , 热度 >>выигратьappNameСоответствующая картаMap< uniqueKey , 热度 >>;
  • траверсMap< uniqueKey , 热度 >>ключ, выньте его тепло для каждого ключа и сохраните его вколесо временив соответствующем временном отрезке;

4-4 Тепловая конвергенция

После завершения второго шага «Горячее скользящее окно»,задача картыПродолжайте работать над «горячей конвергенцией» текущего приложения:

  • Перемещайтесь по ключам приложения и конвертируйте ключи каждого ключаколесо времениТеплота суммируется (то есть общая течка в 30-секундном временном окне), чтобы получить время обнаружения.Скользящее окно общего тепла;
  • будет< key , 滑窗总热度 >Хранится в отсортированном набореСлужба хранилища Redisв, т.е.Результаты агрегации тепла;

4-5. Обнаружение горячих точек

  • На первых нескольких шагахкаждые 3 секундыоднаждызадача картыВыполнить, копия текущего момента будет сгенерирована для каждого приложенияРезультаты агрегации тепла;
  • Кластер серверов ГермесУзел «Обнаружение горячих точек» вРезультаты агрегации теплаВыньте список ключей TopN, достигших порога нагрева, и вы сможете получить список ключей этого обнаружения.Список горячих клавиш;

Общий процесс обнаружения точки доступа TMC выглядит следующим образом:

4-6. Обзор функций

4-6-1. В режиме реального времени

Hermes-SDKОтчетность в режиме реального времени на основе rsyslog + kafkaсобытие доступа к ключу.задача карты3 секунды для завершения работы «тепловое скользящее окно» + «тепловая конвергенция», когда естьСценарий доступа к точке доступаКорреспонденция может быть обнаружена до 3 секунд, когда она появляетсягорячая клавиша.

4-6-2 Точность

ключиРезультаты агрегации теплаОн агрегируется «скользящим окном на основе колеса времени», которое относительно точно отражает текущее и недавнее распределение доступа.

4-6-3.Расширяемость

Кластер серверов ГермесУзлы не имеют состояния, и количество узлов можно масштабировать по горизонтали в зависимости от количества разделов в kafka.

Процесс «Горячее скользящее окно» + «Горячее схождение» является многопоточным в одном узле в зависимости от количества приложений.

Пять, фактический боевой эффект TMC

5-1. Маркетинговая деятельность торговцев Куайшоу

Продавцы Youzan осуществляют действия для продукта через платформу прямых трансляций Kuaishou, что приводит к централизованному доступу к продукту за короткий период времени и созданию точек доступа.

5-1-1. Запрос кэша и кривая частоты попаданий основного приложения

  • Синяя линия на рисунке выше — это вызов кластера приложений.get()Время кэширования доступа к методу
  • Зеленая линия на рисунке выше — это количество обращений операции кэширования к локальному кэшу TMC.

  • На приведенном выше рисунке показана кривая частоты попаданий в локальный кэш.

Видно, что количество запросов к кешу и количество попаданий в локальный кеш значительно увеличились во время события, а частота попаданий в локальный кеш достигла почти 80% (то есть было перехвачено 80% запросов к кешу в кластере приложений). локальным кэшем TMC).

5-1-2 Эффект ускорения кэша точек доступа на доступ приложений

  • На приведенном выше рисунке показана кривая QPS интерфейса приложения.

  • На приведенном выше рисунке показана кривая RT интерфейса приложения.

Видно, что объем запросов интерфейса приложения значительно увеличился во время события, а RT интерфейса приложения уменьшилось из-за влияния локального кеша TMC.

5-2.Частичное применение отображения эффекта TMC во время Double Eleven

5-2-1. Эффект основного приложения товарной области

5-2-2 Эффект основного приложения активного домена

Шесть, перспектива функции TMC

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

Предоставляя основные возможности «обнаружения горячих точек» + «локальный кэш», TMC также предоставляет гибкие параметры конфигурации для служб приложений. Службы приложений могут сочетать фактические бизнес-условия в «пороге горячих точек», «номере обнаружения ключа горячих точек», Размер «обнаружение горячих точек» «черный и белый список» может быть свободно настроен для достижения лучшего эффекта использования.

Наконец, итерация TMC все еще продолжается...