предисловие
Во время интервью несколько раз назад интервьюер увидел, что я сделалpython
Работа краулера/бэкенда, кстати, задала мне несколько вопросов, связанных с бэкендом:Как вы думаете, что такое бэкэнд?
отправить предложение. В то время мой мозг был заряжен, и я ответил:Логическая обработка и добавление, удаление и изменение данных. . .
Его избили на месте, и ему было стыдно. Поразмыслив над этим вопросом, я подытожил его данными. узнать, что вы узналиRedis
,Elasticsearch
а такжеDNS
По сути, все они относятся к категории внутренних систем знаний.
В этой статье я попробуюВведение во внутреннюю систему, в которой обобщаются требования к внешнему интерфейсу..
Какой бы ни была ваша мотивация, в этой системе есть что-то, что вы хотите узнать или изучить:
- Как сочетаются хранение и услуги?
- Когда (или почему) мне нужно использовать это?
- Как перейти на полный стек?
- Выбор основного фреймворка для каждой технологии
Содержание этой статьи:
- Web / Application Servers
- Балансировщик нагрузки: Балансировщик нагрузки
- Система разрешения доменных имен, DNS
- HTTPS/SSL-сертификат
- База данных, База данных
- Хранилище больших двоичных объектов/файлов
- Сеть доставки контента (CDN)
- Служба кэширования: Служба кэширования
- Очередь сообщений: Очередь сообщений
1. Web / Application Servers
-
Web Servers
Сервер: веб-сервер, использующийhttp
Протоколы предоставляют контент в Сеть. -
Application Servers
: сервер приложений, на котором размещены и представлены бизнес-логика и процессы.
1.1 Серверные языки
Код может быть написан на разных серверных языках:- Например
Node.js,Python,PHP,Java,C#
илиRuby
. - Каждый язык имеет свою собственную «веб-инфраструктуру» (например, Spring на основе Java, Rails на основе Ruby, ASP.NET MVC на основе C# или Express на основе Node.js).
- Эти платформы позволяют разработчикам писать меньше кода для обработки запросов данных.
1.2 Выбор внутреннего языка
На самом деле, у каждого внутреннего языка есть свои особенности и свои сторонники. Какой язык лучше всего подходит для начала работы с внутренними языками, всегда был открытым вопросом. Но для того, чтобы у нас была очень простая концепция каждого языка, ниже приводится список наиболее часто упоминаемых особенностей каждого языка, наиболее критических моментов в разработке и того, какие веб-сайты разрабатываются с помощью этого языка. :
PHP
:
- Есть много пользователей, и это самый популярный внутренний язык.
- Простой в освоении, но критикуется за некоторые старые конструкции.
- Пример веб-сайта:
Facebook
,Wordpress
, Сина Вейбо.
Java
:
- Старый язык, линейка развития. Внутренний и зарубежный спрос на работу стабилен, а уровень заявок широк.
- Разработка идет относительно медленно и не очень подходит для новичков.
- Пример веб-сайта:
Linkedin
,Amazon
, Таобао.
Ruby
:
- Разработка идет быстро, и многие буткемпы в стране и за рубежом обучают бэкенду на этом языке.
- Подходит ли он для начинающих, спорный вопрос.
- Пример веб-сайта:
Airbnb
,Twitter
.
Python
:
- Грамматика проста и удобна для изучения, и есть много приложений, связанных с анализом данных и интеллектуальным анализом данных.
- Использование только Python имеет низкую производительность.
- Пример веб-сайта:
Instagram
,Reddit
Знаю почти.
JavaScript (Node.js)
:
- И интерфейс, и сервер могут использовать JS, а эффективность выполнения чрезвычайно высока в случае высокой параллелизма.
- Не подходит для приложений с интенсивным использованием процессора
- Первый выбор для стартапов
- Пример веб-сайта:
Yahoo
,Walmart
Go
:
-
Google
Сильный толчок, есть очень полная стандартная библиотека, производительность сравнима с серией C. - В настоящее время мало обучающих ресурсов (благодаря большим усилиям станции B, действительно ароматной)
- Пример веб-сайта:
Google
,Youtube
, Bilibili, Toutiao, Tencent Cloud
1.2 Веб-сервер
которыйWeb Server
, в дополнение к размещению пользовательского кода приложения, некоторые архитектуры веб-приложений также используют «процесс веб-сервера», например.Apache HTTP Server
илиNginx
. Эти серверные процессы будут перехватывать клиентские запросы перед доступом к серверному коду. Причин их использования несколько:
- Быстро перенаправлять некоторые запросы без необходимости делать это через бэкэнд-код (страница с кодом состояния 404).
- Статическое содержимое, хранящееся на веб-сервере веб-сервера (например, изображения,
CSS
,JS
) быстрее, чем доступ через внутренний код. - Некоторые серверные языки (например,
PHP
) не имеет встроенного производственного классаWeb
сервер, поэтому необходимо пройти выделенныйWeb
Запускается серверный процесс.
В этот момент возникает вопрос:Apache
,Nginx
,Tomcat
а такжеNode.js
В чем разница между четверкой?
Цитата: apache, node.js, nginx, tomcat, кто может помочь разобраться в отношениях?
Что-то, а не что-то.
В первую очередь они могут создаватьWeb服务器
Но их проблемы не одинаковы.
-
Tomcat
только следуйJava
Сотрудничать,Node.js
только следуйJavaScript
. -
Apache
Совместимость с другими языками (обычно сPHP
В основном), но нужно использовать разные модули. -
Nginx
Это через переадресацию портов, поэтомуApache
а такжеNginx
Может использоваться с различными языками программирования -
Nginx
а такжеApache
чистыйweb
У сервера нет возможности парсить динамические языки (например, файлы php и файлы js). -
Tomcat
а такжеNode.js
Способен анализировать эти языки сценариев, предоставлять службы приложений,Web Server
Это дополнительная функция.
1.3 Форма веб-сервера (носителя)
Установите эти инструменты и серверные проектыWeb
Сам серверный компьютер может принимать следующие формы:
- физическая машина
- Виртуальный частный сервер, который мы обычно называем VPS (например, Huawei Cloud, Alibaba Cloud и т. д.)
Фактически VPS представляет собой автономный сервер, разделенный на несколько частей, каждая из которых продается и используется как отдельный сервер VPS. То есть это относительно независимая машина, которая может запускать несколько веб-приложений (веб-сайты, программное обеспечение и т. д.), при этом каждый пользователь владеет частью ресурсов.
- Управляемые экземпляры ВМ (например, AWS EC2, Google Compute Engine)
- Хостинг «платформа как услуга» (PaaS), поставщики облачных услуг (например, Heroku, AWS Elastic Beanstalk)
VPS
Это технология виртуализации, основанная на программном уровне, в частности на виртуализации операционной системы.VM
Это технология виртуализации, основанная на аппаратном уровне,VM
использование хостаvmware server
строить.
1.4 Dokcer, виртуальная машина и физическая машина
Чтобы проиллюстрировать аналогией:
1. Физическая машина выглядит так:
2. Виртуальная машина выглядит так:
3. Докчер такой:
2. Балансировщик нагрузки:Load Balancer
Балансировка нагрузки является ключевым компонентом сетевой инфраструктуры с высокой доступностью.С помощью балансировки нагрузки мы обычно можем развернуть несколько наших серверов приложений, а затем распределить пользовательские запросы на разные серверы с помощью балансировки нагрузки для улучшения веб-сайта, производительности и надежности приложений, баз данных. , или другие услуги.
Модель балансировщика нагрузки обычно делится на две категории: четвертый уровень (транспортный уровень) и уровень 7 (уровень приложений).
Уровень 4 (транспортный уровень)::
- Работает с данными в протоколах сетевого и транспортного уровня (IP, TCP, FTP, UDP).
- Не знаю протокола http, соответствующего другим приложениям TCP, таким как ERP и другие системы, разработанные на основе C/S.
Уровень 7 (прикладной уровень)::
- Распределяйте запросы на основе данных в протоколах прикладного уровня, таких как HTTP.
- Понимание протокола HTTP, поэтому его приложение в основном основано на системе B / S, разработанная многими веб-сайтами или внутренней информационной платформой.
Балансировщики нагрузки в основном делятся на две категории: аппаратная балансировка нагрузки и программная балансировка нагрузки.
- Аппаратная балансировка нагрузки: соответствует четвертому уровню, например балансировщику нагрузки F5.
- Балансировка нагрузки программного обеспечения: соответствует седьмому уровню, например
LVS
,Nginx
а такжеHAproxy
Оба типа балансировщиков нагрузки принимают запросы и распределяют их по заданным серверам по заданному алгоритму. Вот некоторые стандартные отраслевые алгоритмы:
- круговое планирование,
Round robin,RR
- взвешенный круговой турнир,
Weighted round robin,WRB
- минимальное количество подключений,
Least connections
- минимальное время отклика,
Least response time
существуетWeb
Есть два основных преимущества использования балансировщика нагрузки в приложении:
- Обеспечивая единое
Web
Сервер не будет перегружен всеми запросами, чтобы обеспечить постоянное время отклика, поэтому каждый запрос будет обрабатываться относительно медленно. - Он остается высокодоступным. Если сервер выйдет из строя, все последующие клиентские запросы все равно будут успешными, поскольку они будут перенаправлены на исправный сервер, и пользователь не заметит никаких проблем.
3. Система разрешения доменных имен,DNS
Когда пользователь вводит в адресной строкеURL
, браузер получитURL
доменная часть (например,www.google.com
) И называет DNS. Разрешение DNS Вернуться к IP-адресу сервера сайта (например, 172.217.23.4). После того, как он имеет IP-адреса, он может отправить запрос на фактическую страницу.
- Если ваше веб-приложение использует балансировщик нагрузки, вы должны настроить доменное имя так, чтобы оно указывало на доменное имя или IP-адрес балансировщика нагрузки.
- Если вы не используете балансировщик нагрузки, вы можете напрямую указать доменное имя на доменное имя/IP-адрес сервера приложений.
Большинство служб регистрации доменных имен в Интернете (например,GoDaddy
, Wanwang и т. д.) все предоставляют консоль управления DNS. Они позволяют вам настроить доменное имя (и субдомены) так, чтобы оно указывало на местоположение приложения.
При желании вы также можете передать свои серверы имен облачным провайдерам, таким как Alibaba Cloud, Tencent Cloud, и управлять ими оттуда. Преимущество этого заключается в том, что вся конфигурация среды приложения хранится в одном месте и упрощается автоматизация.
4. HTTPS / SSL
Сертификат
Если вы создаете веб-приложение (или статический веб-сайт), вам необходимо обслуживать его через HTTPS, чтобы обеспечить безопасную связь между пользователем и сервером. используй сейчасHTTPS
Также естьSEO
преимущества, поэтому нет причин не использовать его.
Это означает, что сертификат SSL должен быть установлен на серверной части. В частности, их необходимо установить на любом сервере, который является первой точкой контакта для клиентских запросов. Обычно это означает балансировщики нагрузки и серверы CDN, но также могут быть серверы приложений, если вы не используете балансировщик нагрузки.
- вы можете использовать
LetsEncrypt
Создавайте сертификаты бесплатно. - Если вы используете облачную инфраструктуру, вы можете использовать управляемые службы, такие как
AWS Certificate Manager
.这允许你创建并自动续订SSL证书并将其分发到应用程序服务器,负载平衡器和CDN服务器。 - Только в больших
HTTPS
Центр сертификации будет распознан браузером, в противном случае он будет отображаться как небезопасный, и ему нужно будет доверять вручную.
В настоящее время SSL-сертификаты делятся на три типа в зависимости от уровня проверки.
- SSL-сертификат доменного имени, сокращенно DV SSL
- SSL-сертификат предприятия, сокращенно OV SSL
- Расширенный сертификат SSL, называемый EV SSL.
- Между ними есть определенные различия, и уровни сертификации также разные, и каждый подходит для разных типов установки веб-сайта.
5. База данных, база данных
Почти все веб-приложения должны где-то сохранять данные. В большинстве случаев где-то находится некоторая форма базы данных. Основная задача базы данных — надежно сохранять данные в постоянном хранилище и обеспечивать возможность их извлечения с помощью запросов. Он также может применять некоторые ограничения правил для структур данных, которые он хранит.
5.1 Типы баз данных
В первые дни были популярны три модели баз данных, а именно иерархическая база данных, сетевая база данных и реляционная база данных.
В современном Интернете чаще всего используются две модели баз данных, а именно реляционная (SQL) база данных и нереляционная (NoSQL) база данных.
- реляционные базы данных (например,
MySql,Postgres,SQLServer,Oracle,SQLite
) существует уже более 40 лет и является основой большинства веб-приложений. - И за последнее десятилетие или около того базы данных NoSQL (например, MongoDB, Cassandra, CouchDB, DynamoDB) стали более распространенными в веб-приложениях, в основном из-за их преимуществ масштабируемости и гибкости структуры данных.
5.2 Развертывание базы данных
Вы можете разместить базу данных на одном сервере, но в производственных сценариях чаще всего размещают ее на той или иной форме кластера из 2 или более серверов. Это обеспечивает высокую доступность базы данных и снижает риск потери данных, если, например, хранилище одного сервера будет повреждено.
В последние годы стало доступно несколько облачных «бессерверных баз данных». Это базы данных, которые можно вызывать через API, но вам не нужно настраивать сервер для их размещения. Помимо обработки таких вещей, как автоматическое резервное копирование, облачные провайдеры делают это незаметно для вас. Эти примеры включаютDynamoDB(NoSQL)
,Firebase
база данных в реальном времени (NoSQL
)а такжеAurora
Бессерверный (реляционный).
5.3 Базовая схема базы данных
Независимо от того, является ли базовый уровень реляционной базой данных или базой данных NoSQL, будь то Mysql, Redis или MongoDB, дизайн архитектуры одинаков.
Существует три основных решения для серверов баз данных:
- Основная резервная архитектура (генеральная подготовка)
- Архитектура ведущий-ведомый (главный-ведомый)
- Взаимная архитектура master-slave (мастер-мастер)
1. Одна основная и одна резервная архитектура (активная и резервная)
Архитектура «активный-резервный» является самой простой архитектурой в развертывании с двумя машинами, и почти все системы баз данных на рынке будут иметь эту функцию «активный-резервный».
Идея тоже очень проста:
- Разверните базу данных на две машины, один из которых (кодовый a) - это машина, которая предоставляет ежедневные данные чтения и записи и записи данных, называемых «хост».
- Другая машина (код B) не предоставляет онлайн-сервисы, но будет синхронизировать данные «хоста» в режиме реального времени, что называется «резервной машиной».
- Как только «хост» выйдет из строя, вручную отключите «хост» и измените «резервный» на «хост», чтобы продолжить предоставление услуг.
Достоинства и недостатки такой архитектуры очевидны.Преимущество в том,что практически нет необходимости в разработке и трансформации.Все виды баз данных поддерживают этот режим,развертывание и обслуживание также просты,не вводятся дополнительные системные сложности и узкие места.
Но недостатком является то, что когда «хост» выходит из строя, требуется ручное вмешательство.Эксплуатация и обслуживание студентов очень сложны, и обработка не обязательно своевременна. Другим недостатком является то, что активно-резервная архитектура вызовет серьезную трату ресурсов, ведь «резервную машину» с той же конфигурацией, что и «хост», нужно держать в течение длительного времени, но она не используется как онлайн-сервис.Вы говорите, отходы не отходы. .
Чтобы решить эту проблему растраты ресурсов, мы должны придумать решение, которое также использует «резервную машину»: архитектуру ведущий-ведомый.
2. Архитектура ведущий-ведомый (ведущий-ведомый)
Архитектура ведущий-ведомый в целом похожа на вышеупомянутую архитектуру ведущий-ведомый. Отличие в том, что основная-резервная «резервная машина» обычно не работает, а в основном играет роль резервной. «Резервная машина» ведущий-ведомый была заменена на «ведомую машину», и она также должна предоставлять услуги в обычное время и работает в любое время, как «главная машина».
- Хотя «подчиненный» в архитектуре «ведущий-подчиненный» также предоставляет услуги в любое время, он предоставляет только услуги «чтения» и не предоставляет услуги «записи».
- «Главный» синхронизирует онлайн-данные с «ведомым» в режиме реального времени, чтобы гарантировать, что «ведомый» может выполнять операции чтения в обычном режиме.
- По сравнению с архитектурой master-standby эта архитектура позволяет экономить ресурсы, ведь «ведомый» также предоставляет услуги, поэтому потерь нет. А при выходе из строя «хоста» до ручного вмешательства «ведомый» также может обеспечить операцию «чтения» данных.
- Недостаток в том, что архитектура немного сложнее, ведь и «хост», и «подчиненный» имеют сервисы «чтения», поэтому клиентской бизнес-системе нужно использовать определенную стратегию, чтобы определить, к какому из них маршрутизировать. читать данные. Кроме того, существует проблема с задержкой. Определенная задержка при синхронизации данных от "хост" к "подчиненному" неизбежно будет иметь место. Эта задержка может иметь определенное влияние на услуги, требующие высоких реальных -данные времени.
3. Взаимная архитектура master-slave (мастер-мастер)
Взаимная архитектура «ведущий-ведомый» означает, что обе машины сами являются хозяевами, и обе являются подчиненными друг друга. Обе машины предоставляют полные услуги чтения и записи, поэтому нет необходимости переключаться, клиент может случайным образом выбрать одну из них при вызове, и когда одна из них не работает, другая может продолжать обслуживать.
- Сложность использования взаимной архитектуры master-slave заключается в том, что, поскольку оба хоста принимают записанные данные, необходимо синхронизировать последние данные, записанные друг другу в режиме реального времени, и данные должны реплицироваться в обоих направлениях между двумя хостами.
- Действительная репликация неизбежно приведет к задержке данных и даже потери данных в крайних случаях.
- В реальном бизнесе некоторые бизнес-данные предъявляют очень высокие требования к согласованности и не могут допустить задержки и потери данных, поэтому этот вид бизнеса не подходит для взаимного режима ведущий-ведомый, например финансовый бизнес.
- Тем не менее, большинство сценариев в нашем интернет-бизнесе не имеют таких высоких требований, поэтому этот режим все еще используется довольно часто для общих сценариев.
Что касается решения кластера баз данных, то я пока в нем не разобрался, поэтому писать не буду. . .
6. Blob
/ файловое хранилище
Хотя базы данных часто используются для хранения динамических данных (например, генерируемых конечными пользователями или клиентами API), существуют определенные категории данных (неструктурированные данные), которые не могут быть изменены пользователями или основаны на файлах и не подходят для хранения в базе данных, например. :
- Внешние ресурсы веб-сайта, такие как изображения,
Javascript
,CSS
, шрифты, аудио, видео файлы. - Различные типы файлов, загружаемых пользователями через формы.
Вместо того, чтобы хранить их в базе данных, поставщики облачных услуг предоставляют специальные службы для хранения этих служб, такие какAWS Simple Storage Service(S3)
,Azure
,Google Cloud Storage
и Облако АлибабаOSS
Ждать.
Преимущество этого заключается в том, что облачный провайдер может безопасно хранить файлы и делать их избыточные копии, чтобы свести к минимуму риск потери данных.
6.1 О хранилище BLOB-объектов:
Хранилище BLOB-объектов используется для:
- Подавайте изображения или документы прямо в браузер.
- Храните файлы для распределенного доступа.
- Потоковое видео и аудио.
- Запишите в файл журнала.
- Храните данные для резервного копирования и восстановления, аварийного восстановления и архивирования.
- Храните данные для анализа локально или с помощью управляемых служб Azure.
7. Сеть доставки контента (CDN)
Blob
/служба хранилища файлов позволяет клиентам проходитьHTTP
Файлы доступа к конечной точке. Например, HTML-разметка вашего веб-приложения может просто ссылаться на URL-адреса изображений и файлов CSS, хранящихся в AWS S3.традиционный веб-доступ:
Однако я предполагаю, что пользователь находится в Китае, а мое хранилище S3 расположено на западе США — данные передаются за тысячи километров, поэтому пользователи увидят задержку.
Что такое CDN? Каковы преимущества использования CDN?
- CDN — это услуга, предоставляемая облачными провайдерами, у которых есть «пограничные серверы», распределенные по всему миру.
- Эти пограничные серверы получают копии файлов из «источника» (например, из места хранения BLOB-объектов/файлов). Ваше интерфейсное веб-приложение будет указывать на URL-адрес CDN вместо URL-адреса хранилища BLOB-объектов для статических ресурсов.
- Теперь расстояние между клиентом и «краем» намного меньше, чем несколько тысяч миль туда и обратно, поэтому файл загружается быстрее.
Доступ к сайту через CDN:
7.1 CDN
Рабочий процесс
Выбор оптимального узла осуществляется через авторитетный DNS-сервер, а нагрузка на исходный сайт снижается за счет кэширования.
8. Кэш-сервис:Caching Service
несмотря на то чтоCDN
является формой кэширования статических файлов, ноWeb
Приложениям может потребоваться временно кэшировать динамические данные.
Например, предположим, что есть запрос к базе данных, выполняющий вычисления на основе вчерашних данных, к результатам которых часто обращаются тысячи пользователей каждый день. Нет смысла обращаться к базе данных каждый раз, когда пользователь запрашивает эти данные.
Решением этой проблемы является использование службы кэширования для хранения результатов в течение определенного периода времени после первого запроса пользователя. Последующие запросы на эти данные будут обслуживаться быстрее за счет кэширования.
Служба кэширования — это, по сути, особый тип базы данных.Кэш принимает форму хранилища ключей и значений, где ключ — это строка, которую код приложения использует для запроса данных (например, DailySiteStats_2018-10-17), а значение — фактически кэшированные данные. Кэшированные данные обычно полностью хранятся в памяти, что делает извлечение данных из кеша очень быстрым.
Общие службы кэшированияRedis
а такжеMemcached
. AWS через свойElasticache
Сервис предлагает размещенные версии обоих.
8.1 Redis
а такжеMemcached
В сравнении
Redis
а такжеMemcached
Оба являются основными хранилищами данных в памяти с открытым исходным кодом. Несмотря на то, что они просты в использовании и обеспечивают высокую производительность, существуют важные различия, которые следует учитывать при выборе двигателя.Memcached
предназначен для простоты, в то время какRedis
Предоставляется богатая функциональность, позволяющая использовать его в самых разных случаях использования.
Memcached | Redis | |
---|---|---|
Задержка менее миллисекунды | да | да |
Простота использования для разработчиков | да | да |
раздел данных | да | да |
Многоязычная поддержка | да | да |
Расширенные структуры данных | - | да |
многопоточная архитектура | да | - |
снимок | - | да |
копировать | - | да |
Опубликовать/подписаться | - | да |
Lua-скрипт | - | да |
Геопространственная поддержка | - | да |
Задержка менее миллисекунды:
Redis
а такжеMemcached
Оба поддерживают время отклика менее миллисекунды. Сохраняя данные в памяти, они могут считывать данные быстрее, чем базы данных на дисках.
Простота использования для разработчиков:
Redis
а такжеMemcached
Оба синтаксически просты в использовании и требуют минимального количества кода для интеграции в ваше приложение.
раздел данных:
Redis
И memcached` оба позволяют вам распределять данные по нескольким узлам. Это позволяет вам масштабировать, чтобы лучше обрабатывать больше данных, по мере роста спроса.
Поддерживает широкий спектр языков программирования:
Redis
а такжеMemcached
Существует множество клиентов с открытым исходным кодом для разработчиков. Поддерживаемые языки включаютJava,Python,PHP,C,C ++,C#,JavaScript,Node.js,Ruby,Go
и т.п.
Расширенные структуры данных:
Кроме струн,Redis
Также поддерживаются списки, наборы, отсортированные наборы, хэши, битовые массивы и т. д. Приложения могут использовать эти структуры данных более высокого уровня для поддержки различных вариантов использования. Например, вы можете легко реализовать таблицу лидеров игры, используя отсортированный набор Redis, который поддерживает список игроков, отсортированных по их рангу.
многопоточная архитектура:
из-заMemcached
является многопоточным, поэтому может использовать несколько вычислительных ядер. Это означает, что вы можете выполнять больше операций за счет масштабирования вычислительной мощности.
снимок:
использоватьRedis
, вы можете сохранять данные на диск, используя мгновенный снимок, который можно использовать для архивации или восстановления.
копировать:
Redis
позволяет создаватьRedis
Несколько копий первичной базы данных. Это позволяет масштабировать операции чтения базы данных и иметь высокодоступный кластер.
Опубликовать/подписаться:
Redis
Поддерживает использование сопоставления с образцомPub /Sub
Обмен сообщениями, вы можете использовать его для высокопроизводительных чатов, потоковой передачи комментариев в реальном времени, каналов социальных сетей и взаимодействия с сервером.
Lua-скрипт:
Redis
Позволяет совершать транзакционныеLua
сценарий. Скрипты могут помочь вам повысить производительность и упростить ваше приложение.
Геопространственная поддержка:
Redis
Имеет специализированные команды для обработки геопространственных данных в реальном времени в масштабе. Вы можете делать такие вещи, как находить расстояние между двумя элементами (например, людьми или местами) и находить все элементы в пределах заданного расстояния от точки.
9. Очередь сообщений: Очередь сообщений
Асинхронный обмен сообщениями для пакетных задач и разделенных приложений
Иногда вашей программе необходимо выполнять задачи, не связанные напрямую с реагированием на запросы пользователей.
Например, предположим, что пользователь загружает видео, которое необходимо закодировать и поставить водяной знак. Но это длительная задача, поэтому нет смысла заставлять пользователя ждать, когда она будет выполнена. Лучше сделать это асинхронно. Код вашего веб-приложения создает сообщение о задании в очереди и уведомляет ваших пользователей о том, что они получат электронное письмо (сообщение), когда видео с водяным знаком будет готово.
Затем у вас будет рабочий процесс, который делает следующее:
- Чтение сообщений из очереди.
- Запустите обработку видео.
- После этого сохраните закодированную копию видео.
- Отправлять уведомления по электронной почте (сообщения) пользователям.
- Удалить сообщение из очереди.
Здесь есть 2 архитектурных компонента:
Вы можете добиться этого несколькими способамиworker
Задача:
- расписание
CRON
Задание, запускающее указанный код, установленный на сервере приложений, для чтения из очереди по определенному расписанию. - При добавлении сообщения в очередь используйте
FaaS
Платформа вызывает рабочий код.
9.1 Введение в очередь сообщений
Очередь сообщений — это метод асинхронного межсервисного взаимодействия, подходящий для бессерверных и микросервисных архитектур. Сообщения хранятся в очереди до тех пор, пока они не будут обработаны и удалены. Каждое сообщение может быть обработано пользователем только один раз. Очереди сообщений можно использовать для разделения интенсивной обработки, буферизации или пакетной работы, а также для снижения пиковых рабочих нагрузок.
Теперь часто используемые компоненты MQ:activeMQ
,rabbitMQ
,rocketMQ
,zeroMQ
И самое горячее за последние годыkafka
,В некоторых сценариях это еще и MQ.Конечно,кафка мощнее.Хотя разные MQ имеют свои особенности и преимущества,независимо от того,какой MQ,есть некоторые фичи,которые приходят с самим MQ.
9.2 Основные характеристики MQ
характеристика | иллюстрировать |
---|---|
push или pull доставки | Вытягивание означает непрерывный запрос очереди на наличие новых сообщений. Push — это когда система уведомляет пользователей о доступности сообщений (также известное как публикация/подписка на сообщения). Вы также можете использовать длительный опрос, чтобы заставить запрос ждать определенное количество времени для получения новых сообщений перед завершением. |
Своевременная или задержанная доставка | Поддерживает установку определенного времени доставки для сообщений. Если вам нужно установить одинаковую задержку для всех сообщений, вы можете настроить очередь задержки. |
отправлен хотя бы раз | Очередь сообщений может хранить несколько копий сообщений для обеспечения избыточности и высокой доступности, а также повторно отправлять сообщения в случае сбоя связи или ошибки, чтобы убедиться, что они проходят хотя бы одну доставку. |
ровно один раз | Когда дубликаты недопустимы, очереди сообщений FIFO (первым пришел — первым обслужен) гарантируют, что каждое сообщение будет доставлено ровно один раз (и только один раз) за счет автоматической фильтрации дубликатов. |
Очередь FIFO (первым пришел – первым обслужен) | В этих очередях сначала обрабатывается самая старая (или первая) запись, которую иногда называют «головой очереди». |
приоритет сообщения | Как правило, вы назначаете приоритет сообщению, чтобы определить, куда в очереди добавить его, гарантируя, что сообщения с более высоким приоритетом находятся в начале очереди и обрабатываются первыми. |
9.3 Пример приложения MQ
Источник: Анализ распространенных сценариев применения MQ (очередь сообщений)
Наш реальный сценарий, вероятно, представляет собой систему электронной коммерции, основанную на архитектуре микросервисов, которая разделена на пользовательские микросервисы, товарные микросервисы, микросервисы заказов и микросервисы продвижения.
Для систем, разработанных на основе микросервисной модели, MQ имеет больше сценариев использования. Здесь мы перечисляем некоторые распространенные примеры приложений.
1. Инициализация после регистрации
После регистрации нам может понадобиться выполнить множество операций инициализации, например:
- Позвоните на почтовый сервер, чтобы отправить почту, вызовите услуги рекламные подарочные купоны, выпущенные пользовательские данные в системы отношений клиента.
- Затем в это время мы будем прослушивать MQ для этих операций.Когда регистрация пользователя будет успешной, мы уведомим другие предприятия о необходимости работы через MQ. Обеспечить работоспособность зарегистрированных пользователей.
2. Публикуйте товары в фоновом режиме
При размещении товаров в фоновом режиме:
- Данные о продукте необходимо преобразовать из базы данных в данные поисковой системы (на основе
elasticsearch
) - Затем мы должны записать продукт в базу данных, а затем записать его в
MQ
, Затем слушатьMQ
генерироватьelasticsearch
соответствующие данные.
3. Отмена оплаты сверхурочной работы
После того, как пользователь разместит заказ, если оплата не будет произведена в течение 24 часов, заказ необходимо отменить.
- В прошлом у нас могли быть синхронизированные задачи для циклического запроса, а затем отмены заказа.
- На самом деле, я рекомендую метод, аналогичный отложенному MQ, который позволяет избежать многих недействительных запросов к базе данных и устанавливает MQ для использования потребителями через 24 часа, что может значительно снизить нагрузку на сервер.
4. Уведомление после оплаты
- После завершения платежа необходимо вовремя уведомить подсистему (система выставления счетов, точки обслуживания пользователей, отправка СМС) для следующего шага.
- Однако нам всем необходимо обеспечить высокую производительность для обратных вызовов платежей, поэтому мы должны напрямую изменить состояние базы данных, сохранить его в MQ и позволить подсистеме уведомлений MQ выполнять другие бизнес-операции не в реальном времени. Это может обеспечить эффективную и своевременную основную деятельность.
Отказ от ответственности
Посетите зарубежные сообщества, чтобы увидетьэто, я думаю, что это довольно просто.
Я просто думаю, что это весело, поэтому я переписываю и резюмирую его в соответствии с его планом, и я буду более внимателен, если есть ошибки.
Это означает, что письмо немного грубое, не брызгайте на меня. . .
❤️ После прочтения трех вещей
Если вы найдете этот контент вдохновляющим, я хотел бы пригласить вас сделать мне три небольших одолжения:
- Ставьте лайк, чтобы больше людей увидело этот контент
- Обратите внимание на паблик «Учитель фронтенд-убеждения», и время от времени делитесь оригинальными знаниями.
- Также смотрите другие статьи
- Те шаблоны проектирования, которые вы используете непреднамеренно (1) - шаблоны создания
- «Библиотека визуализации данных короля» D3.js начала ускорять приложения Vue
- Руководство "True® Full Stack Road" для веб-интерфейсной разработки
- «Практика Vue» — плагин Vue CLI за 5 минут
- Вооружите свой интерфейсный проект «Практикой Vue»
- «Intermediate and Advanced Front-End Interview» JavaScript Рукописный код Invincible Cheats
- «Узнайте из исходного кода» ответы на вопросы Vue, которые интервьюеры не знают
- JS-операция «Узнать из исходного кода» в исходном коде Vue
- Правильная позиция для обновления vue-cli3 в проекте "Vue Practice"
- Почему вы до сих пор не можете понять цепочку областей видимости JavaScript?
Вы также можете прийти ко мнеGitHub
Получите исходные файлы всех статей в блоге:
Руководство по убеждению:GitHub.com/Roger-Hi RO/…