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 все еще продолжается...