Изучение архитектуры кэша трафика на 100 миллионов уровней (1)

Java

предисловие

Текст был включен в мой репозиторий GitHub, добро пожаловать, звезда:GitHub.com/bin39232820…
Лучшее время посадить дерево было десять лет назад, затем сейчас
Я знаю, что многие люди не играютqqТеперь, но с ностальгией, добро пожаловать в группу Six Meridian Excalibur по изучению Java для новичков, номер группового чата:549684836Поощряйте всех вести блог на пути к технологиям

болтовня

Как насчет этого плана? В основном решение, которое используют компании первого эшелона.Конечно, наша компания не может выйти на этот уровень, но она тоже использует некоторые решения.Потом я вижу эту систему, изучаю ее, а потом сам сделаю , Давайте запишем это, я не говорю, что я следую этому шаг за шагом, но я определенно должен научиться думать. Итак, мы должны усвоить одну вещь, и, прежде чем я на самом деле буду практиковать ее, я думаю, нам просто нужно понаблюдать за великим путем. Здесь я также примерно узнаю общую идею и записываю ее, если у вас есть различные детали, вам нужно разбить технические моменты, чтобы достичь этого. Это просто запись обучения.В этой программе есть несколько важных моментов.

  • Redis High Availability Высокопроизводительная архитектура кэша
  • высокопроизводительный веб-сервер openrestry

Страница сведений о продукте

Требования к архитектуре страницы сведений о продукте -> высокая доступность, -> высокая производительность, -> высокий параллелизм; Вообще говоря, отрасль делится на основные решения

  • Подробный план страницы для малых и средних компаний
  • Схема главы крупной компании

Подробный план страницы для малых и средних компаний

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

А как быть с малыми и средними компаниями? Хотя компания невелика, у нее по-прежнему сотни тысяч ежедневных операций. Тогда миллионы пользователей, такого рода компания, является немного более крупной компанией, используется информация об их продуктах, и решением может быть глобальная статическая страница, подобная этой.

  • Что это обозначает? То есть мы сделали страницу сведений о продукте сразу в статическую страницу, а потом каждый раз полное обновление, все данные статически помещаются в nginx, и каждый раз, когда данные меняются, мы рендерим это через Java-сервис данных, а затем отправить эту статическую страницу на сервер nginx. (Я никогда не делал этого пуша, я думал о том, могу ли я положить сгенерированную статическую страницу на oss, а затем настроить определенный URL-адрес правила для доступа к этой статической странице напрямую через nginx)
    • Недостаток этой схемы в том, что если товаров много, время рендеринга будет очень долгим, и эффекта реального времени добиться не удастся.
    • Он может обрабатывать только некоторые статические вещи.Если есть много динамических данных, таких как инвентаризация, вы не можете сказать, что они каждый раз рендерятся, а затем отправляются на сервер nginx.Разве это не медленнее?

Основная идея страницы сведений о продукте для крупной компании

Как вы на самом деле это говорите? Картинка выше может объяснить его основную идею, а здесь Сяо Люлю объяснит ее вам за несколько шагов.

  • Первый шаг — переход пользователя на домашнюю страницу. Я зашел на домашнюю страницу, а затем увидел продукт. В настоящее время я могу видеть только часть информации о продукте. Я только что запросил URL-адрес, здесь Xiaoliuliu приводит лишь несколько примеров, например: www.hqjy.com/goods/10086;
  • Второй шаг, как насчет этого URL? Сначала он пройдет через наш lb lvs, потом зайдет в наш кластер nginx, а потом nginx найдет статичный шаблон страницы сведений о товаре, а потом в нем есть lua-скрипт, который может зайти на nginx для просмотра динамические данные продукта, id которого равен 10086. Если для этого продукта 10086 нет кеша nginx, то lua может запросить redis в это время, если нет redis, то он напрямую вызовет службу кеша продукта (tomcat), а затем служба продукта будет проверять mysql es и другие базы данных, чтобы найти данные, а затем кэшировать их в Redis, а затем кэшировать в nginx, таким образом образуя замкнутый цикл ссылки,
  • Преимущества: не обновлять полностью и достигать кэша n-уровня, как можно достичь высокой доступности, высокой производительности и высокой параллелизма.

Архитектура Redis

На самом деле, что является ключом к успеху приведенной выше схемы страницы сведений о продукте? Правильно, это наша архитектура Redis.Ваше Redis qps может достигать сотен тысяч в секунду, а затем вы можете выполнять резервное копирование данных в режиме реального времени и обеспечивать доступность 99,99% сервиса.

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

На самом деле это знания, связанные с Redis, но Redis необходим в сценариях с высокой степенью параллелизма.Для использования Redis, высокой доступности, архитектуры разделения чтения-записи я не буду здесь говорить об этом.В любом случае, Redis является краеугольным камнем высокий параллелизм.

Несколько алгоритмов распределенного хранения данных

  • Простейший алгоритм хеширования

  • Согласованный хэш

  • hash slot

Что такое Openresty?

Что такое опенресты?

OpenResty® — это веб-платформа, основанная на Nginx и Luajit.

OpenResty (также известный как ngx_openresty) — полнофункциональный сервер веб-приложений. Он упаковывает стандартное ядро ​​Nginx, множество распространенных сторонних модулей и большинство их зависимостей.

Объединив множество хорошо спроектированных модулей Nginx, OpenResty эффективно превращает сервер Nginx в мощный сервер веб-приложений, на основе которого разработчики могут использовать язык программирования Lua для написания сценариев ядра Nginx и различных существующих модулей Nginx C. веб-приложения, которые могут обрабатывать более 10 000 одновременных запросов.

С помощью управляемой событиями модели Nginx и неблокирующего ввода-вывода можно реализовать высокопроизводительные веб-приложения. Более того, OpenResty предоставляет большое количество компонентов, таких как Mysql, Redis, Memcached и т. д., что делает разработку веб-приложений на Nginx более удобной и простой. В настоящее время Jingdong, Taobao, Qunar и другие используют архитектуру Nginx+Lua.

Скачайте и установите Openresty

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

Скачать исходный пакет

Я установил его здесь на основе Centos

  • Первый шаг — создать каталог, например, я
mkdir /data/openresty 
  • Второй шаг — загрузить пакет и разархивировать его.
  wget https://openresty.org/download/openresty-1.15.8.2.tar.gz
  tar -zxvf openresty-1.15.8.2.tar.gz 
  • Третий шаг - установка некоторых библиотек.Вы должны установить эти библиотеки perl 5.6.1+, libpcre, libssl на свой компьютер. Для Linux вам необходимо обязательно использовать команду ldconfig, чтобы найти их в пути вашей системной среды.
yum install pcre-devel openssl-devel gcc curl
  • четвертый шаг
 ./configure 

  • Шаг 5 сделать
make
  • Шаг 6
sudo make install

Когда вы выполнили вышеуказанные шаги, теперь вы можете установить openrestry,

После этого вы переходите в /usr/local/openresty, в котором находится весь проект.

привет слово

Создайте несколько каталогов

mkdir ~/work
cd ~/work
mkdir logs/ conf/

conf/nginx.conf

worker_processes  1;
error_log logs/error.log;
events {
    worker_connections 1024;
}
http {
    server {
        listen 8080;
        location / {
            default_type text/html;
            content_by_lua_block {
                ngx.say("<p>hello, world</p>")
            }
        }
    }
}

Предполагая, что у вас установлен OpenResty в /usr/local/openresty (по умолчанию), мы будем обслуживать установленный OpenResty исполняемый файл nginx в среде: PATH

PATH=/usr/local/openresty/nginx/sbin:$PATH
export PATH

Затем мы запускаем сервер nginx со следующим файлом конфигурации:

nginx -p `pwd`/ -c conf/nginx.conf

Затем мы выключаем сервер

конец

Сегодня я представил архитектуру кеша Redis и самую простую запись в Openresty, за которой следует Openresty=nginx+lua, так что давайте учиться вместе с Xiaoliuliu. Часть содержания статьи представляет собой краткое изложение поисков Сяолиулиу названия на станции B.

ежедневные комплименты

Хорошо всем, вышеизложенное является полным содержанием этой статьи. Люди, которые могут видеть это здесь, всенастоящий порошок.

Творить нелегко. Ваша поддержка и признание — самая большая мотивация для моего творчества. Увидимся в следующей статье.

Six Meridians Excalibur | Text [Original] Если в этом блоге есть какие-то ошибки, прошу покритиковать и посоветовать, буду очень признателен!