По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Всем привет! В этой статье мы хотим рассказать про то, что такое Extension Mobility в Cisco Unified Communications Manager (CUCM) , и про то, как его настроить. Cisco Extension Mobility позволяет пользователю залогиниться на любой телефон, подключенный к CUCM. Это может использоваться, когда пользователи часто перемещаются с одного рабочего места на другое. Все персональные настройки, такие как номер телефона (Directory Number) и быстрый набор (user-specific parameters) могут быть динамически настроены на телефоне, который будет использоваться, что позволит пользователю не теряя времени начать работу. Стоит отличать Extension Mobility от Device Mobility, который позволяет перенастраивать телефоны в зависимости от их местонахождения. Extension Mobility работает как сервис, и после того как телефон будет на него подписан, у пользователя появится возможность выбрать этот сервис и ввести свой User ID и PIN. После этого CUCM применит Device Profile и перезагрузит телефон. Если пользователь будет пытаться залогиниться на нескольких телефонах одновременно, то есть несколько вариантов: Allow Multiple Logins – Пользователь может войти на несколько телефонов сразу, при этом все телефоны звонят одновременно Deny Login – Пользователь может быть залогиненным только на одном устройстве. Если он попытается войти на другое, то будет выдаваться сообщение об ошибки, до тех пор, пока он не выйдет из первого устройства. Auto-logout - Пользователь также может быть залогиненным только на одном устройстве, но когда он вводит свой данные на втором устройстве, система отключит его на первом. Настройка Extension Mobility Шаг 1. Активация сервиса Cisco Extension Mobility Первым делом нам нужно перейти в раздел Cisco Unified Serviceability и перейти во вкладку Tools – Service Activation. Тут выбираем наш сервер и ставим галочку напротив пункта Cisco Extension Mobility. Шаг 2. Настройка EM Service параметров Возвращаемся в раздел CM Administration и переходим во вкладку System – Service Parameters. Здесь выбираем наш сервер, и из выпадающего меню Service выбираем Cisco Extension Mobility. Ниже в разделе Clusterwide Parameters. Тут можно настроить параметры входа, такие как время работы, возможность множественного входа и другие. Шаг 3. Добавление EM Service. Переходим во вкладку Device – Device Settings – Phone Services и нажимаем Add New. В поле Service Name указываем желаемое имя сервиса. В поле Service URL нужно указать следующую строчку: http://[IP_адрес_CUCM_Publisher]:8080/emapp/EMAppServlet?device=#DEVICENAME# Перед сохранением нужно удостовериться, что галочка в пункте Enable стоит. Также можно активировать пункт Enterprise Subscription, для того чтобы все телефоны подписались на Extension Mobility Service автоматически. Шаг 4. Создание Default Device Profile Default Device Profile со стандартными параметрами используется если модель телефона не совпадает с моделью в Profile. Для настройки переходим во вкладку Device – Device Settings – Default Device Profile и нажимаем Add New. В строке Product Type выбираем модель телефона, которая будет использоваться, а в строке Device Protocol указываем протокол, по которому работает телефон - SCCP или SIP. Доступные настройки зависят от выбранного телефона и протокола. Здесь можно задать настройки Music on Hold, Locale, Phone Button и Softkey Template и другие, которые будут использованы в профиле. Шаг 5. Создание Device Profile Создадим Device Profile, который будет использоваться на телефоне, после того, как пользователь залогинится. Переходим во вкладку Device – Device Settings – Device Profile и в новом окне нажимаем Add New. Так же как и в предыдущем пункте выбираем модель телефона, протокол и задаем параметры профиля (user-specific settings). Затем нажимаем Save. После этого в открывшемся окне в меню Association Info нажимаем на Line [1] – Add a new DN и указываем номер телефона в стоке Directory Number. При необходимости заполняем остальные поля и нажимаем Save и возвращаемся в предыдущее меню. Шаг 6. Подписка Device Profile на EM Service Из меню Device Profile в выпадающем меню Related Links справа сверху выбираем Subscribe/Unsubscribe Services и нажимаем Go. В открывшемся окне в стоке Select a Service выбираем созданный нами сервис и нажимаем Next. Далее указываем имя сервиса и нажимаем Subscribe, а затем Save. Шаг 7. Ассоциируем пользователей End User с Device Profile. Сначала нужно создать учетную запись пользователя. Для этого идем во вкладку User Management – End User и нажимаем Add New. Здесь нужно заполнить поля User ID, Password, PIN, Last Name и остальные, если необходимо. Затем заходим в настройки созданного пользователя и в разделе Extension Mobility из поля Available Profiles переносим созданный нами профиль в поле Controlled Profiles, путем нажатия на кнопку “вниз”. Ниже в поле Device Profile выбираем профиль для пользователя. Шаг 8. Включение EM на телефонах Переходим во вкладку Device – Phone и выбираем телефон, на котором хотим настроить Extension Mobility. Находим раздел Extension Mobility и ставим галочку в пункте Enable Extension Mobility. Далее нужно подписать телефон на сервис. Как и ранее сверху справа находим меню Related Links и выбираем Subscribe/Unsubscribe Services. (этот пункт не обязателен, если при создании сервиса мы поставили галочку в пункте Enterprise Subscription). Тут снова указываем созданный нами сервис и его имя и нажимаем Save. Шаг 9. Тестирование После всех настроек на телефоне, на котором мы настроили EM service. Для этого на телефоне нажимаем кнопку Services. Здесь выбираем наш сервис и вводим Used ID и PIN. После этого телефон перезагрузится и загрузится с новым профилем и номером. Выйти из профиля можно также нажатием кнопки Services.
img
Когда мы только начинаем изучать Python, мы закладываем некоторые вредные привычки при написании кода, о которых мы можем даже не подозревать. Вы можете написать код, который сработает сейчас, но может не сработать в будущем, или вы можете использовать какие-то хитрые ходы вместо встроенной функции, которая могла бы облегчить вашу жизнь. У большинства из нас сохранились не одна из тех вредных привычек при программировании на Python, что формируются в период первых месяцев обучения. Отличная новость в том, что вы можете с легкостью искоренить их, прочитав приведенный ниже текст. 1. Использование import * Каждый раз, когда нам становится лень, то возникает соблазн импортировать все необходимое из модуля с помощью from xyz import *. Это не самый лучший подход по многим причинам. Кот несколько из них: Это может оказаться неэффективно: если в модуле очень много объектов, то вам придется долго ждать, пока все импортируется. Это может вызвать конфликт имен переменных: когда вы используете *, то вы понятия не имеете, какие объекты вы импортируете и как они называются. Как же с этим бороться? Импортируйте либо какой-то конкретный объект, либо весь модуль целиком. # Using import * # Bad from math import * print(floor(2.4)) print(ceil(2.4)) print(pi) # Good import math from math import pi print(math.floor(2.4)) print(math.ceil(2.4)) print(pi) 2. Try/except: отсутствие указания исключения в блоке «except» Я очень долго пренебрегал этим. Сложно посчитать, сколько раз Pycharm давал мне понять (этими противными подчеркиваниями), что не нужно использовать «голое» исключение. Это идет в разрез с рекомендациями PEP8. # Try - except # Bad try: driver.find_element(...) except: print("Which exception?") # Good try: driver.find_element(...) except NoSuchElementException: print("It's giving NoSuchElementException") except ElementClickInterceptedException: print("It's giving ElementClickInterceptedException") Проблема «голых» исключений заключается в том, что оно будет перехватывать исключения SystemExit и KeyboardInterrupt, что затрудняет прерывание программы с помощью Control-C. В следующий раз, когда вы будете использовать try/except, укажите исключение в блоке except. 3. Не использовать Numpy для математических вычислений Очень часто мы забываем, что в Python есть множество пакетов, которые могут значительно облегчить нашу жизнь и сделать ее более продуктивной. Одним из таких пакетов является Numpy – пакет для математических вычислений. Numpy может помочь вам вычислять математические операции быстрее, чем циклы for. Допустим, что у нас есть массив random_scores, и мы хотим получить средний балл тех, кто не сдал экзамен (score>>dict_countries.keys() dict_keys(['USA', 'UK', 'Canada'])>>>dict_countries.values() dict_values([329.5, 67.2, 38]) Проблема тут заключается в том, что мы не всегда используем их должным образом. Например, мы хотим просмотреть словарь и получить ключи. Вы можете использовать метод .keys, но знаете ли вы, что ключи можно получить, просто перебирая словарь? В этом случае использование метода .keys будет излишним. # Not using .keys() properly # Bad for key in dict_countries.keys(): print(key) # Good for key in dict_countries: print(key) Кроме того, можно придумать некоторые хитрости для получения значений словаря, например, с помощью метода .items(). # Not using .items() # Bad for key in dict_countries: print(dict_countries[key]) # Good for key, value in dict_countries.items(): print(key) print(value) 7. Никогда не использовать генераторы (или использовать их всегда) Генератор предлагает более простой синтаксис при создании новой последовательности (списка, словаря и т.д.) на основе уже определенной последовательности. Допустим, мы хотим перевести все элементы в нашем списке countries в нижний регистр. И хотя вы могли бы это сделать просто с помощью цикла for, но также вы можете упростить работу при помощи генератора списка. # Bad countries = ['USA', 'UK', 'Canada'] lower_case = [] for country in countries: lower_case.append(country.lower()) # Good (but don't overuse it!) lower_case = [country.lower() for country in countries] Генераторы – это очень полезно, но не злоупотребляйте ими! Помните правило Дзен Python: «Простое лучше, чем сложное». 8. Использование range(len()) Одни из первых функций, которые мы изучили будучи новичками – это range и len, поэтому не удивительно, почему многие люди имеют дурную привычку писать range(len()) при переборе списков. Допустим у нас есть два списка: countries и populations. Если мы хотим пройтись по обоим спискам одновременно, то, вероятнее всего, вы воспользуетесь range(len()). # Using range(len()) countries = ['USA', 'UK', 'Canada'] populations = [329.5, 67.2, 38] # Bad for i in range(len(countries)): country = countries[i] population = populations[i] print(f'{country} has a population of {population} million people') И хотя это в принципе выполняет свою работу, вы все равно можете упростить задачу, воспользовавшись enumerate (или, что еще лучше, воспользовавшись функцией zip для сопряжения элементов из обоих списков). # OK for i, country in enumerate(countries): population = populations[i] print(f'{country} has a population of {population} million people') # Much Better for country, population in zip(countries, populations): print(f'{country} has a population of {population} million people') 9. Форматирование с помощью оператора + Вероятно, одна из первых вещей, которую мы изучаем в Python, - это то, как соединять строки с помощью оператора +. Это полезный, но не самый эффективный способ соединения строк в Python. Помимо этого, это не очень красиво – чем больше строк вам нужно соединить, тем больше операторов + вы будете использовать. Вместо этого вы можете воспользоваться f-строкой. # Formatting with + operator # Bad name = input("Introduce Name: ") print("Good Morning, " + name + "!") # Good name = input("Introduce Name: ") print(f'Good Morning, {name}') Преимуществом f-строк в том, что они полезны не только для конкатенации, но и для других целей. 10. Использование изменяемых значений в качестве значений по умолчанию Если вы включите изменяемое значение (например, список) в качестве параметра функции по умолчанию, то увидите нечто неожиданное. # Bad def my_function(i, my_list=[]): my_list.append(i) return my_list>>> my_function(1) [1] >>> my_function(2) [1, 2] >>> my_function(3) [1, 2, 3] В приведенном выше коде каждый раз, когда мы вызываем функцию my_function, список my_list сохраняет значения из предыдущих вызовов (а мы, скорее всего, хотим инициировать пустой список при каждом вызове функции). Чтобы избежать такой проблемы, мы должны установить этот параметр my_list равным None и добавить условие if как показано ниже. # Good def my_function(i, my_list=None): if my_list is None: my_list = [] my_list.append(i) return my_list>>> my_function(1) [1] >>> my_function(2) [2] >>> my_function(3) [3]
img
Современные предприятия во многом доверяют технологии контейнеризации, чтобы упростить развертывания сложных приложений и управление ими. Контейнеры собирают необходимые зависимости внутри одного пакета. Таким образом, вам не нужно беспокоится о том, что возникнут какие-либо конфликты зависимостей в эксплуатационной среде. Контейнеры можно переносить и масштабировать, но для последнего маневра вам понадобится инструмент управления контейнерами. На сегодняшний день Docker Swarm и Kubernetes – самые популярные платформы для оркестрации контейнеров. Они оба имеют свое конкретное назначение и определенные преимущества и недостатки. В данной статье мы рассмотрим оба из них, чтобы помочь в выборе инструмента управления контейнерами с учетом ваших требований. Что такое Docker Swarm? Docker Swarm – это платформа оркестрации контейнеров с открытым исходным кодом, встроенная в Docker. Он поддерживает оркестрацию кластеров механизмов Docker. Docker Swarm преобразует несколько экземпляров Docker в один виртуальный хост. Кластер Docker Swarm обычно состоит из трех элементов: Node - нода Service и Task – службы и задачи Load balancer - балансировщик нагрузки Ноды – это экземпляры механизма Docker, контролирующие ваш кластер, а также контейнеры, используемые для запуска ваших служб и задач. Балансировка нагрузки также является частью кластеров Docker Swarm и используется для маршрутизации запросов между нодами. Преимущества Docker Swarm Docker Swarm довольно прост в установке, поэтому он хорошо подходит для тех, кто только начинает осваивать мир оркестрации контейнеров. Он легковесный. В контейнерах Docker Swarm обеспечивает автоматическую балансировку нагрузки. Поскольку Docker Swarm встроен в Docker, то он работает с интерфейсом командной строки Docker. Помимо этого, он без проблем работает с существующими инструментами Docker, такими как Docker Compose. Docker Swarm обеспечивает рациональный выбор нод, что позволяет выбрать оптимальные ноды в кластере для развертывания контейнера. Имеет собственный Swarm API. Недостатки Docker Swarm Не смотря на множество преимуществ, Docker Swarm имеет также несколько недостатков. Docker Swarm сильно привязан к Docker API, что ограничивает его функциональность в сравнении с Kubernetes. Возможности настройки и расширения в Docker Swarm ограничены. Что такое Kubernetes? Kubernetes – это портативный облачный инфраструктурный инструмент с открытым кодом, изначально разработанный Google для управления своими кластерами. Поскольку он является инструментом оркестрации контейнеров, то он автоматизирует масштабирование, развертывание и управление контейнерными приложениями. Kubernetes имеет более сложную структуру кластера, чем Docker Swarm. Kubernetes – это многофункциональная платформа, главным образом потому, что она с выгодой для себя использует активную деятельность мирового сообщества. Преимущества Kubernetes Он способен поддерживать большую рабочую нагрузку и управлять ей. У него большое сообщество разработчиков открытого ПО, поддерживаемого Google. Поскольку он имеет открытый исходный код, то он предлагает широкую поддержку сообщества и возможность работы с разнообразными сложными сценариями развертывания. Его предлагают все основные поставщики облачных услуг: Google Cloud Platform, Microsoft Azure, IBM Cloud и AWS. Он автоматизирован и поддерживает автоматическое масштабирование. Он многофункционален, имеет встроенный мониторинг и широкий спектр доступных интеграций. Недостатки Kubernetes Несмотря на то, что Kubernetes обладает большим набором функций, он также имеет и несколько недостатков: Процесс обучения Kubernetes достаточно сложный, и для освоения Kubernetes требуются специальные знания. Процесс установки достаточно сложен, особенно для новичков. Поскольку сообщество разработчиков открытого ПО работает достаточно продуктивно, Kubernetes требует регулярной установки обновлений для поддержания последней версии технологии без прерывания рабочей нагрузки. Для простых приложений, которые не требуют постоянного развертывания, Kubernetes слишком сложный. Kubernetes VS Docker Swarm Теперь, когда мы узнали все преимущества и недостатки Kubernetes и Docker Swarm, давайте посмотрим, чем же они отличаются друг от друга. Основное различие этих двух платформ заключается в их сложности. Kubernetes хорошо подходит для сложных приложений, а Docker Swarm разработан для простоты использования, что говорит о том, что его предпочтительнее использовать с простыми приложениями. Далее приведем подробное описание нескольких различий между Docker Swarm и Kubernetes: Установка и настройка Kubernetes можно настроить, но сделать это будет не так просто. Docker Swarm установить и настроить намного легче. Kubernetes: в зависимости от операционной системы ручная установка может отличаться. Если вы пользуетесь услугами поставщика облачных технологий, то установка не требуется. Docker Swarm: экземпляры Docker обычно одинаковы для различных операционных систем и поэтому довольно просты в настройке. Балансировка нагрузки Docker Swarm предлагает автоматическую балансировку нагрузки, а Kubernetes – нет. Однако в Kubernetes легко интегрировать балансировку нагрузки с помощью сторонних инструментов. Kubernetes: службы можно обнаружить через одно DNS-имя. Kubernetes обращается к контейнерным приложениям через IP-адрес или HTTP-маршрут. Docker Swarm: поставляется со встроенными балансировщиками нагрузки. Мониторинг Kubernetes: имеет встроенный мониторинг, а также поддержку интеграции со сторонними инструментами мониторинга. Docker Swarm: нет встроенных механизмов мониторинга. Однако он поддерживает мониторинг через сторонние приложения. Масштабируемость Kubernetes: обеспечивает масштабирование в зависимости от трафика. Встроено горизонтальное автомасштабирование. Масштабирование Kubernetes включает в себя создание новых модулей и их планирование для узлов с имеющимися ресурсами. Docker Swarm: обеспечивает быстрое автоматическое масштабирование экземпляров по запросу. Поскольку Docker Swarm быстрее развертывает контейнеры, то это дает инструменту оркестрации больше времени на реакцию, что позволяет масштабировать по требованию. Какую платформу все же выбрать? И Kubernetes, и Docker Swarm служат для конкретного назначения. Какой из них лучше, зависит от ваших текущих потребностей или потребностей вашей организации. При запуске Docker Swarm – это простое в использовании решение для управления вашими контейнерами. Если вам или вашей компании не нужно управлять сложными рабочими нагрузками, то Docker Swarm – правильный выбор. Если же ваши приложения имеют более ключевую роль, и вы хотите включить функции мониторинга, безопасности, высокой доступности и гибкости, то Kubernetes – вот ваш выбор. Подведем итог Благодаря этой статье мы узнали, что такое Docker Swarm и Kubernetes. Также мы узнали об их плюсах и минусах. Выбор между этими двумя технологиями достаточно субъективен и зависит от желаемых результатов.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59