По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
В Cisco Unified Communications Manager (CUCM) существует разделение по интерфейсам администратора – каждый из них отвечает за свою область настроек.
В CUCM есть следующие интерфейсы:
Cisco Unified CM Administration (https://[IP_сервера]/ccmadmin);
Cisco Unified Serviceability (https://[IP_сервера]/ccmservice);
Cisco Unified OS Administration (https://[IP_сервера]/cmplatform);
Cisco Unified Reporting (https://[IP_сервера]/ccmservice);
Cisco Unified IM and Presence Reporting (https://[IP_сервера]/cucreports);
Disaster Recovery System (https://[IP_сервера]/drf);
Command Line Interface (CLI);
К каждому из них можно подключиться только по HTTPS (кроме интерфейса командной строки CLI, для него используется SSH), а переключаться между интерфейсами можно через выпадающее меню в правой верхней части экрана.
Логин и пароль администратора платформы, которые задаются при установке (administrator id) используется для доступа в DRS и OS Administration. Также при установке задаются логин и пароль (application user) для входа в CM Administration, Serviceability и Cisco Unified Reporting.
Рассмотрим подробнее эти интерфейсы и что в них включено. Стоит заметить что наличие того или иного пункта в меню зависит от версии CUCM.
Интерфейс Cisco Unified Communications Manager Administration
Меню System: включает в себя конфигурирование групп CM, Presence и Device Mobility, настройку Device Pool, Region, Locations, Survivable Site Telephony (SRST), DHCP, LDAP, сервисных параметров, а также лицензирование;
Меню Call Routing: здесь находятся разделы, отвечающие за маршрутизацию звонков, паттерны, интерком, Dial Rules, меню Class of Control, включающее Calling Search Space и Partitions, а также такие функции как Call Pickup, Call Park и другие;
Меню Media Resources: в этом меню расположены настройки таких ресурсов, как Music on Hold (MOH), Annunciator, Transcoder, Media Termination Point (MTP), а также файловый менеджер MOH;
Меню Advanced Features: тут можно найти настройки Voicemail интеграций, Inter-Company Media Engine Configuration и VPN;
Меню Device: настройка IP-телефонов, шлюзов, гейткиперов, транков, профилей телефонов, функциональных кнопок и многое другое;
Меню Application: содержит мастер конфигурации CUCM и меню настройки плагинов;
Меню User Management: настройка пользователей End User, Application User, User Group и ролей;
Меню Bulk Administration: предоставляет множество возможностей для выполнения повторяющихся задач настройки (например, добавления большого числа пользователей или телефонов) автоматическим способом;
Меню Help: тут собранны полезные статьи о работе в CUCM;
Интерфейс Cisco Unified Serviceability Administration
Меню Alarm: тут находятся конфигурационные опции для системных предупреждений для мониторинга производительности и общего состояния системы;
Меню Trace: настройки трекинга для мониторинга системы и поиска проблем;
Меню Tools: здесь в подменю CDR Analysis and Reporting предоставляет интерфейс для сбора журналов вызовов и отчетов о вызовах, выполненных с использованием системы. Раздел Service Activation предоставляет интерфейс для активации сервисов, установленных в первый раз. Используя этот интерфейс, администраторы могут останавливать, запускать или перезапускать активированные службы. Архив отчетов Serviceability Reports обеспечивает доступ к интерфейсу отчетов для анализа системы. Интерфейс управления CDR позволяет администраторам настраивать и проверять использование дискового пространства для Call Detail Report (CDR). Страница Audit Log Configuration содержит параметры для того, что будет включено в журналы аудита;
Меню SNMP: тут расположены подменю (V1/V2c, V3 и SystemGroup) конфигурации протокола Simple Network Management Protocol (SNMP);
Меню Help: здесь также расположены материалы о CUCM;
Интерфейс Cisco Unified Operating System Administration
Этот интерфейс позволяет администратору следить и взаимодействовать с платформой операционной системы на базе Linux. Административные задачи, которые могут быть выполнены здесь, включают в себя:
Мониторинг использования аппаратного ресурса (центральный процессор, дисковое пространство);
Проверка и обновление версий программного обеспечения;
Проверка и изменение информации об IP-адресе;
Управление IP адресом протокола Network Time Protocol (NTP);
Управление безопасностью сервера, включая IPsec и цифровые сертификаты;
Создание учетной записи удаленной помощи TAC;
Ping других IP-устройств;
Интерфейс Disaster Recovery System
Система аварийного восстановления (DRS) обеспечивает резервное копирование (с планировщиком) и возможность восстановления. Доступ к этому интерфейсу использует учетная запись администрирования платформы, определенная при установке (также как и интерфейс Cisco Unified Operating System Administration). Дополнительные учетные записи могут быть созданы для доступа других лиц.
Резервные копии должны быть записаны на сетевой SFTP-сервер. Планировщик предоставляется для автоматического резервного копирования или может быть выбран немедленный запуск копирования. Также может выполняться резервное копирование отдельного сервера или полного кластера.
Интерфейс Cisco Unified Reporting
Cisco Unified Reporting предоставляет упрощенный метод доступа к системным отчетам. Эти отчеты собирают информацию из существующих журналов и форматируют данные в простые, полезные отчеты с одним щелчком мыши. Данные собираются из журналов через кластер (Publisher и Subscribers), чтобы предоставить обобщенную информацию и выделить проблемы или нарушения, которые могут повлиять на работу кластера. Интерфейс также предупреждает, что запуск конкретного отчета может неблагоприятно повлиять на работу сервера и повлиять на производительность или занять много времени.
Command Line Interface
К CLI обычно получают доступ с использованием SSH, хотя можно напрямую подключить клавиатуру и монитор. Изначально единственной учетной записью, которая может войти в систему с использованием CLI, является учетная запись администрирования платформы, определенная во время установки, хотя для доступа можно создать дополнительные учетные записи.
Команды и функциональные возможности CLI включают все те, которые находятся в интерфейсе OS Administration, плюс следующие (но это далеко не полный список):
Выключение или перезагрузка системы;
Изменение версий после обновления;
Запуск, остановка и перезапуск служб;
Изменение сетевых настроек (IP-адрес, маска, шлюз и так далее.);
Использование сетевых инструментов, таких как ping, traceroute и захват пакетов;
Использование DRS (резервное копирование и восстановление);
Добавление и изменение учетных записей администратора;
Отображение нагрузки на сервер и информации о процессах;
Проверка состояния сервера, включая версии программного обеспечения, процессор, память и использование диска, аппаратную платформу, серийные номера и так далее;
Почитать лекцию №19 про Connection-oriented protocols и Connectionless протоколы можно тут.
Протоколы передачи данных часто бывают многоуровневыми, причем нижние уровни предоставляют услуги по одному переходу, средний набор уровней предоставляет услуги от конца до конца между двумя устройствами и, возможно, набор уровней предоставляет услуги от конца до конца между двумя приложениями или двумя экземплярами одного приложения. Рисунок 1 иллюстрирует это.
Каждый набор протоколов показан как пара протоколов, потому что, как показано в модели рекурсивной архитектуры Интернета (RINA), рассмотренной в предыдущих лекциях, транспортные протоколы обычно входят в пары, причем каждый протокол в паре выполняет определенные функции. В этой серии лекций будут рассмотрены физические протоколы и протоколы передачи данных, как показано на рисунке 1. В частности, в этой лекции будут рассмотрены два широко используемых протокола для передачи данных "точка-точка" в сетях: Ethernet и WiFi (802.11).
Ethernet
Многие из ранних механизмов, разработанных для того, чтобы позволить нескольким компьютерам совместно использовать один провод, были основаны на проектах, заимствованных из более ориентированных на телефонные технологии. Как правило, они фокусировались на передаче токенов и других более детерминированных схемах для обеспечения того, чтобы два устройства не пытались использовать одну общую электрическую среду одновременно. Ethernet, изобретенный в начале 1970-х Bob Metcalf (который в то время работал в Xerox), разрешал перекрывающиеся разговоры другим способом-с помощью очень простого набора правил для предотвращения большинства перекрывающихся передач, а затем разрешал любые перекрывающиеся передачи путем обнаружения и обратного отсчета.
Первоначальное внимание любого протокола, который взаимодействует с физической средой, будет сосредоточено на мультиплексировании, поскольку до решения этой первой проблемы можно решить лишь несколько других проблем. Поэтому эта лекция будет начинаться с описания мультиплексирующих компонентов Ethernet, а затем рассмотрены другие аспекты работы.
Мультиплексирование
Чтобы понять проблему мультиплексирования, с которой столкнулся Ethernet, когда он был впервые изобретен, рассмотрим следующую проблему: в сети с общим носителем вся общая среда представляет собой единую электрическую цепь (или провод).
Когда один хост передает пакет, каждый другой хост в сети получает сигнал. Это очень похоже на беседу, проводимую на открытом воздухе- звук, передаваемый через общую среду (воздух), слышен каждому слушателю. Нет никакого физического способа ограничить набор слушателей во время процесса передачи.
CSMA/CD
В результате система, получившая название множественного доступа с контролем несущей и обнаружением коллизий (CSMA/CD), работает с использованием набора шагов:
Хост слушает среду, чтобы увидеть, есть ли какие-либо существующие передачи; это часть процесса со стороны оператора связи.
Узнав, что другой передачи нет, хост начнет сериализацию (передача битов сериями) битов кадра в сеть.
Эта часть проста - просто слушать перед передачей. Конечно, передачи двух (или более) хостов могут конфликтовать, как показано на рисунке 2. На рисунке 2:
В момент времени 1 (T1) A начинает передачу кадра на совместно используемый носитель. Для прохождения сигнала от одного конца провода к другому требуется некоторое время - это называется задержкой распространения.
В момент времени 2 (T2) C прослушивает сигнал на проводе и, не обнаружив его, начинает передачу кадра на совместно используемый носитель. В этот момент уже произошла коллизия, поскольку оба A и C передают кадр в один и тот же момент, но ни один из них еще не обнаружил коллизию.
В момент времени 3 (T3) два сигнала фактически сталкиваются в проводе, в результате чего они оба деформируются и, следовательно, не читаются.
Столкновение можно обнаружить в точке А в тот момент, когда сигнал от С достигает точки А, прослушав свой собственный сигнал, передаваемый по проводу. Когда сигнал от С достигнет А, А получит искаженный сигнал, вызванный комбинацией этих двух сигналов (результат столкновения). Это часть обнаружением столкновений (участок СD) работы локальные сети CSMA/CD.
Что должен сделать хост при обнаружении столкновения? В оригинальном конструкции Ethernet хост будет посылать сигнал блокировки достаточно долго, чтобы заставить любой другой хост, подключенный к проводу, обнаружить конфликт и прекратить передачу. Длина сигнала блокировки изначально была установлена таким образом, чтобы сигнал блокировки потреблял, по крайней мере, время, необходимое для передачи кадра максимального размера по проводу по всей длине провода. Почему именно столько времени?
Если при определении времени передачи сигнала помехи использовался более короткий, чем максимальный кадр, то хост со старыми интерфейсами (которые не могут посылать и принимать одновременно) может фактически пропустить весь сигнал помехи при передаче одного большого кадра, что делает сигнал помехи неэффективным.
Важно дать хозяевам, подключенным на самом конце проводов, достаточно времени, чтобы получить сигнал помехи, чтобы они почувствовали столкновение и предприняли следующие шаги.
Как только сигнал помехи получен, каждый хост, подключенный к проводу, установит таймер обратного отсчета, так что каждый из них будет ждать некоторое случайное количество времени, прежде чем пытаться передать снова. Поскольку эти таймеры установлены на случайное число, когда два хоста с кадрами, ожидающими передачи, пытаются выполнить свою следующую передачу, столкновение не должно повториться.
Если каждый хост, подключенный к одному проводу, получает один и тот же сигнал примерно в одно и то же время (учитывая задержку распространения по проводу), как любой конкретный хост может знать, должен ли он на самом деле получать определенный кадр (или, скорее, копировать информацию внутри кадра из провода в локальную память)? Это работа Media Access Control (MAC).
Каждому физическому интерфейсу назначается (как минимум) один MAC-адрес. Каждый кадр Ethernet содержит MAC-адрес источника и назначения; кадр форматируется таким образом, что MAC-адрес назначения принимается раньше любых данных. После того, как весь MAC-адрес назначения получен, хост может решить, следует ли ему продолжать прием пакета или нет. Если адрес назначения совпадает с адресом интерфейса, хост продолжает копировать информацию с провода в память. Если адрес назначения не совпадает с адресом локального интерфейса, хост просто прекращает прием пакета.
А как насчет дубликатов MAC-адресов? Если несколько хостов, подключенных к одному и тому же носителю, имеют один и тот же физический адрес, каждый из них будет получать и потенциально обрабатывать одни и те же кадры. Существуют способы обнаружения повторяющихся MAC-адресов, но они реализуются как часть межслойного обнаружения, а не самого Ethernet;
MAC-адреса будут правильно назначены системным администратором, если они назначены вручную.
MAC-адреса назначаются производителем устройства, поэтому дублирование MAC-адресов исключено, независимо от того, сколько хостов подключено друг к другу.
(Поскольку MAC-адреса обычно перезаписываются на каждом маршрутизаторе, они должны быть уникальными только в сегменте или широковещательном домене. В то время как многие старые системы стремились обеспечить уникальность каждого сегмента или широковещательного домена, это обычно должно быть обеспечено с помощью ручной конфигурации, и поэтому в значительной степени было отказано в пользу попытки предоставить каждому устройству глобальный уникальный MAC-адрес, "вшитый" в чипсете Ethernet при создании.)
Первое решение трудно реализовать в большинстве крупномасштабных сетей- ручная настройка MAC-адресов крайне редка в реальном мире вплоть до ее отсутствия. Второй вариант, по существу, означает, что MAC-адреса должны быть назначены отдельным устройствам, чтобы ни одно из двух устройств в мире не имело одного и того же MAC-адреса. Как такое возможно? Путем назначения MAC-адресов из центрального хранилища, управляемого через организацию стандартов. Рисунок 3 иллюстрирует это.
Рис. 3 Формат адреса MAC-48/EUI-48
MAC-адрес разбит на две части: уникальный идентификатор организации (OUI) и идентификатор сетевого интерфейса. Идентификатор сетевомого интерфейса присваивается заводом-изготовителем микросхем для Ethernet. Компаниям, производящим чипсеты Ethernet, в свою очередь, присваиваются уникальный идентификатор организации Институтом инженеров электротехники и электроники (Institute of Electrical and Electronic Engineers -IEEE). До тех пор, пока организация (или производитель) назначает адреса чипсету с его OUI в первых трех октетах MAC-адреса и не назначает никаким двум устройствам один и тот же идентификатор сетевого интерфейса в последних трех октетах MAC-адреса, никакие два MAC-адреса не должны быть одинаковыми для любого набора микросхем Ethernet.
Два бита в пространстве OUI выделяются, чтобы сигнализировать, был ли MAC-адрес назначен локально (что означает, что назначенный производителем MAC-адрес был переопределен конфигурацией устройства), и предназначен ли MAC-адрес в качестве одного из следующих:
Unicast адрес, означает, что он описывает один интерфейс
Multicast-адрес, означает, что он описывает группу получателей
MAC-адрес состоит из 48 бит- при удалении двух битов пространство MAC-адресов составляет 46 бит, что означает, что оно может описывать 246-или 70,368,744,177,664- адресуемых интерфейсов. Поскольку этого (потенциально) недостаточно, чтобы учесть быстрое количество новых адресуемых устройств, таких как Bluetooth-гарнитуры и датчики, длина MAC-адреса была увеличена до 64 бит для создания MAC-адреса EUI-64, который построен таким же образом, как и более короткий 48-битный MAC-адрес. Эти адреса могут поддерживать 262-или 4,611,686,018,427,387,904-адресуемые интерфейсы.
Конец эпохи CSMA / CD
Модель развертывания Ethernet с разделяемой средой в значительной степени (хотя и не полностью!) заменена в большинстве сетей. Вместо общей среды большинство развертываний Ethernet теперь коммутируются, что означает, что одна электрическая цепь или один провод разбивается на несколько цепей путем подключения каждого устройства к порту на коммутаторе. Рисунок 4 демонстрирует это.
На рисунке 4 каждое устройство подключено к разному набору проводов, каждый из которых оканчивается одним коммутатором. Если сетевые интерфейсы на трех хостах (A, B и C) и сетевые интерфейсы коммутатора могут отправлять или получать в любой момент времени вместо того, чтобы делать и то, и другое, A может отправлять, пока коммутатор тоже отправляет. В этом случае процесс CSMA / CD все равно должен соблюдаться для предотвращения коллизий, даже в сетях, где только два передатчика подключены к одному проводу. Такой режим работы называется полудуплексом.
Однако, если наборы микросхем Ethernet могут одновременно прослушивать и передавать данные для обнаружения коллизий, эту ситуацию можно изменить. Самый простой способ справиться с этим - разместить сигналы приема и передачи на разных физических проводах в наборе проводов, используемых в кабеле Ethernet. Использование разных проводов означает, что передачи от двух подключенных систем не могут конфликтовать, поэтому набор микросхем может передавать и принимать одновременно. Чтобы включить этот режим работы, называемый полнодуплексным, витая пара Ethernet передает сигнал в одном направлении по одной паре проводов, а сигнал в противоположном направлении - по другому набору проводов. В этом случае CSMA / CD больше не нужен (коммутатор должен узнать, какое устройство (хост) подключено к каждому порту, чтобы эта схема работала).
Контроль ошибок
CSMA/CD предназначен для предотвращения одного вида обнаруживаемой ошибки в Ethernet: когда коллизии приводят к искажению кадра. Однако в сигнал могут входить и другие виды ошибок, как и в любой другой электрической или оптической системе. Например, в кабельной системе с витой парой, если скрученные провода слишком сильно "разматываются" при установке коннектора, один провод может передавать свой сигнал другому проводу через магнитные поля, вызывая перекрестные помехи. Когда сигнал проходит по проводу, он может достигать другого конца провода и отражаться обратно по всей длине провода.
Как Ethernet контролирует эти ошибки? Оригинальный стандарт Ethernet включал в себя 32-битную циклическую проверку избыточности (Cyclic Redundancy Check-CRC) в каждом кадре, которая позволяет обнаруживать большой массив ошибок при передаче. Однако на более высоких скоростях и на оптических (а не электрических) транспортных механизмах CRC не обнаруживает достаточно ошибок, чтобы повлиять на работу протокола. Чтобы обеспечить лучший контроль ошибок, более поздние (и более быстрые) стандарты Ethernet включили более надежные механизмы контроля ошибок.
Например, Gigabit Ethernet определяет схему кодирования 8B10B, предназначенную для обеспечения правильной синхронизации часов отправителя и получателя; эта схема также обнаруживает некоторые битовые ошибки. Ten-Gigabit Ethernet часто реализуется аппаратно с помощью Reed-Solomon code Error Correction (EC) и системы кодирования 16B18B, которая обеспечивает прямое исправление ошибок (FEC) и синхронизацию часов с 18% -ными издержками.
Схема кодирования 8B10B пытается обеспечить наличие примерно одинакового количества битов 0 и 1 в потоке данных, что позволяет эффективно использовать лазер и обеспечивает встроенную в сигнал тактовую синхронизацию. Схема работает путем кодирования 8 бит данных (8B) в 10 передаваемых битов по проводу (10B), что означает около 25% накладных расходов на каждый передаваемый символ. Ошибки четности одного бита могут быть обнаружены и исправлены, потому что приемник знает, сколько "0" и "1" должно быть получено.
Маршалинг данных
Ethernet передает данные пакетами и кадрами: пакет состоит из преамбулы, кадра и любой конечной информации. Фрейм содержит заголовок, который состоит из полей фиксированной длины и переносимых данных. На рисунке 5 показан пакет Ethernet.
На рисунке 5 преамбула содержит маркер начала кадра, информацию, которую приемник может использовать для синхронизации своих часов для синхронизации с входящим пакетом, и другую информацию. Адрес назначения записывается сразу после преамбулы, поэтому получатель может быстро решить, копировать этот пакет в память или нет. Адреса, тип протокола и передаваемые данные являются частью кадра. Наконец, любая информация FEC и другие трейлеры добавляются в кадр, чтобы составить последний раздел (ы) пакета.
Поле type представляет особый интерес, поскольку оно предоставляет информацию для следующего уровня-протокола, предоставляющего информацию, переносимую в поле data - для идентификации протокола. Эта информация непрозрачна для Ethernet-чипсет Ethernet не знает, как интерпретировать эту информацию (только где она находится) и как ее переносить. Без этого поля не было бы последовательного способа для передачи переносимых данных в правильный протокол верхнего уровня, или, скорее, для правильного мультиплексирования нескольких протоколов верхнего уровня в кадры Ethernet, а затем правильного демультиплексирования.
Управление потоком
В исходной CSMA / CD реализации Ethernet сама совместно используемая среда предоставляла своего рода базовый механизм управления потоком. Предполагая, что никакие два хоста не могут передавать одновременно, и информация, передаваемая по какому-то протоколу верхнего уровня, должна быть подтверждена или отвечена, по крайней мере, время от времени, передатчик должен периодически делать перерыв, чтобы получить любое подтверждение или ответ. Иногда возникают ситуации, когда эта довольно грубая форма регулирования потока не работает- спецификация Ethernet предполагает, что некоторый протокол более высокого уровня будет контролировать поток информации, чтобы предотвратить сбои в этом случае.
В коммутируемом полнодуплексном Ethernet нет CSMA/CD, так как нет общей среды. Два хоста, подключенные к паре каналов передачи, могут отправлять данные так быстро, как позволяют каналы связи. Фактически это может привести к ситуации, когда хост получает больше данных, чем может обработать. Чтобы решить эту проблему, для Ethernet был разработан фрейм паузы. Когда получатель отправляет фрейм паузы, отправитель должен прекратить отправку трафика в течение определенного периода времени.
Фреймы паузы массово не применяются.
Важно
Многие протоколы не содержат все четыре функции, описанных как часть модели рекурсивной архитектуры Интернета (RINA): контроль ошибок, управление потоком, транспортировка и мультиплексирование. Даже среди тех протоколов, которые реализуют все четыре функции, все четыре не всегда используются. Обычно в этой ситуации разработчик протокола и/или сети передает функцию на более низкий или более высокий уровень в стеке. В некоторых случаях это работает, но вы всегда должны быть осторожны, предполагая, что это будет работать без ошибок. Например, существует разница между hop-by-hop шифрованием и end-to-end шифрованием. End-to-end передача хороша для приложений и протоколов, которые выполняют шифрование, но на самом деле не каждое приложение шифрует передаваемые данные. В этих случаях hop-by-hop шифрование может быть полезно для менее безопасных соединений, таких как беспроводные соединения.
gRPC — это мощная платформа для работы с удаленными вызовами процедур (Remote Procedure Calls). RPC позволят писать код так, как будто он будет выполняться на локальном компьютере, даже если он может выполняться на другом компьютере.
Что такое RPC?
RPC — это форма взаимодействия клиент-сервер, в которой используется вызов функции, а не обычный вызов HTTP. Идея в том, что мы можем вызвать и выполнить функцию где-то на удаленной системе, как если бы это была локальная функция.
Он использует IDL (Interface Definition Language - язык описания интерфейса) как форму контракта на вызываемые функции и тип данных.
RPC — это протокол "запрос-ответ", т.е. он следует модели "клиент-сервер":
Клиент делает запрос на выполнение процедуры на удаленном сервере. Как и при синхронном локальном вызове, клиент приостанавливается до тех пор, пока не будут возвращены результаты процедуры. Параметры процедуры передаются по сети на сторону сервера. Процедура выполняется на сервере и, наконец, результаты передаются обратно клиенту.
gRPC воспроизводит этот архитектурный стиль взаимодействия клиент-сервер через вызовы функций.
Таким образом, gRPC технически не является новой концепцией. Скорее, он был заимствован из этой старой техники и улучшен, что сделало ее очень популярной.
Что такое gRPC?
В 2015 году Google открыл исходный код своего проекта, который в конечном итоге получил название gRPC.
Но что на самом деле означает буква «g» в gRPC? Многие люди могут предположить, что это для Google, потому что Google это сделал, но это не так. Google меняет значение «g» для каждой версии до такой степени, что они даже сделали README, чтобы перечислить все значения.
С момента появления gRPC он приобрел довольно большую популярность, и многие компании используют его.
Есть много причин, по которым gRPC так популярен: простая абстракция, он поддерживается во многих языках и он очень эффективный.
И помимо всех вышеперечисленных причин, gRPC популярен потому, что очень популярны микросервисы и имеется большое количество взаимодействий между ними. Именно здесь gRPC помогает больше всего, предоставляя поддержку и возможности для решения типичных проблем, возникающих в таких ситуациях.
А поскольку разные сервисы могут быть написаны на разных языках, gRPC поставляется с несколькими библиотеками для их поддержки.
Архитектура gRPC
Мы сказали что производительность gRPC очень высока, но что делает ее такой хорошей? Что делает gRPC намного лучше, чем RPC, если их дизайн очень похож? Вот несколько ключевых отличий, которые делают gRPC столь эффективным.
HTTP/2
HTTP был с нами очень долго. Сейчас почти все серверные службы используют этот протокол.
HTTP/1.1 долгое время оставался актуальным, затем в 2015 году, появился HTTP/2, который фактически заменил HTTP/1.1 как самый популярный транспортный протокол в Интернете.
Если вы помните, что 2015 год был также годом выхода gRPC, и это было вовсе не совпадение. HTTP/2 также был создан Google для использования gRPC в его архитектуре.
HTTP/2 — одна из важных причин, почему gRPC может работать так хорошо. И в следующем разделе вы поймете, почему.
Мультиплексирование запроса/ответа
В традиционном протоколе HTTP невозможно отправить несколько запросов или получить несколько ответов вместе в одном соединении. Для каждого из них необходимо создать новое соединение.
Такой вид мультиплексирования запроса/ответа стал возможен в HTTP/2 благодаря введению нового уровня HTTP/2, называемого binary framing.
Этот двоичный уровень инкапсулирует и кодирует данные. На этом уровне HTTP-запрос/ответ разбивается на кадры (они же фреймы).
Фрейм заголовков (HEADERS frame) содержит типичную информацию заголовков HTTP, а фрейм данных (DATA frame) содержит полезные данные. Используя этот механизм, можно получить данные из нескольких запросов в одном соединении.
Это позволяет получать полезные данные из нескольких запросов с одним и тем же заголовком, тем самым идентифицируя их как один запрос.
Сжатие заголовка
Вы могли столкнуться со многими случаями, когда заголовки HTTP даже больше, чем полезная нагрузка. И HTTP/2 имеет очень интересную стратегию под названием HPack для решения этой проблемы.
Во-первых, все в HTTP/2 кодируется перед отправкой, включая заголовки. Это помогает повысить производительность, но это не самое важное в сжатии заголовков.
HTTP/2 сопоставляет заголовок как на стороне клиента, так и на стороне сервера. Из этого HTTP/2 может узнать, содержит ли заголовок одно и то же значение, и отправляет значение заголовка только в том случае, если оно отличается от предыдущего заголовка.
Как видно на картинке выше, запрос № 2 отправит только новый путь, так как другие значения точно такие же как и были. И да, это значительно сокращает размер полезной нагрузки и, в свою очередь, еще больше повышает производительность HTTP/2.
Что такое Protocol Buffer (Protobuf)?
Protobuf — это наиболее часто используемый IDL для gRPC. Здесь вы храните свои данные и функциональные контракты в виде так называемого прото-файла. По сути это протокол сериализации данных, такой как JSON или XML.
Выглядит это так:
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
Так мы определили сообщение Person с полями name, id и email
Поскольку это форма контракта то и клиент, и сервер должны иметь один и тот же прото-файл. Файл proto действует как промежуточный контракт для клиента, чтобы вызвать любые доступные функции с сервера.
Protobuf также имеет собственные механизмы, в отличие от обычного REST API, который просто отправляет строки JSON в виде байтов. Эти механизмы позволяют значительно уменьшить полезную нагрузку и повысить производительность.
Что еще может предложить gRPC?
Метаданные
Вместо обычного заголовка HTTP-запроса в gRPC есть то, что называется метаданными (Metadata). Метаданные — это тип данных «ключ-значение», которые можно установить как на стороне клиента, так и на стороне сервера.
Заголовок может быть назначен со стороны клиента, в то время как серверы могут назначать заголовок и трейлеры, если они оба представлены в виде метаданных.
Потоковая передача
Потоковая передача (Streaming) — это одна из основных концепций gRPC, когда в одном запросе может выполняться несколько действий. Это стало возможным благодаря упомянутой ранее возможности мультиплексирования HTTP/2.
Существует несколько видов потоковой передачи:
Server Streaming RPC: когда клиент отправляет один запрос, а сервер может отправить несколько ответов. Например, когда клиент отправляет запрос на домашнюю страницу со списком из нескольких элементов, сервер может отправлять ответы по отдельности, позволяя клиенту использовать отложенную загрузку.
Client Streaming RPC: когда клиент отправляет несколько запросов, а сервер отправляет обратно только один ответ. Например, zip/chunk, загруженный клиентом.
Bidirectional Streaming RPC: клиент и сервер одновременно отправляют сообщения друг другу, не дожидаясь ответа.
Перехватчики
gRPC поддерживает использование перехватчиков для своего запроса/ответа. Они перехватывают сообщения и позволяют вам изменять их.
Это звучит знакомо? Если вы работали с HTTP-процессами в REST API, перехватчики очень похожи на middleware (оно же промежуточное ПО).
Библиотеки gRPC обычно поддерживают перехватчики и обеспечивают простую реализацию. Перехватчики обычно используются для:
Изменения запроса/ответа перед передачей. Это можно использовать для предоставления обязательной информации перед отправкой на клиент/сервер.
Позволяет вам манипулировать каждым вызовом функции, например, добавлять дополнительные логи для отслеживания времени отклика.
Балансировки нагрузки
Если вы еще не знакомы с балансировкой нагрузки, это механизм, который позволяет распределять клиентские запросы по нескольким серверам.
Но балансировка нагрузки обычно делается на уровне прокси (например, nginx). Так причем это здесь?
Дело в том, что gRPC поддерживает метод балансировки нагрузки клиентом. Он уже реализован в библиотеке Golang и может быть легко использован.
Хотя это может показаться какой-то магией, это не так. Там есть что-то типа преобразователя DNS для получения списка IP-адресов и алгоритм балансировки нагрузки под капотом.
Отмена вызова
Клиенты gRPC могут отменить вызов gRPC, когда им больше не нужен ответ. Однако откат на стороне сервера невозможен.
Эта функция особенно полезна для потоковой передачи на стороне сервера, когда может поступать несколько запросов к серверу. Библиотека gRPC оснащена шаблоном метода наблюдателя, чтобы узнать, отменен ли запрос, и позволить ей отменить несколько соответствующих запросов одновременно.