По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Если Вы наконец поняли, что повсюду окружены контейнерами и обнаружили, что они решают массу проблем и имеют много преимуществ: Контейнеры вездесущи - ОС, версии библиотек, конфигурации, папки и приложения помещаются в контейнер. Вы гарантируете, что та же самая задача, которая была протестирована в QA, достигнет производственной среды с таким же поведением. Контейнеры упрощены - объем памяти контейнера невелик. Вместо сотен или тысяч мегабайт контейнер будет выделять память только для основного процесса. Контейнеры быстрые - Вы можете запустить контейнер для начала работы так же быстро, как типичный процесс Linux. Вместо минут можно запустить новый контейнер за несколько секунд. Тем не менее, многие пользователи по-прежнему относятся к контейнерам так же, как к типичным виртуальным машинам, и забывают про важную характеристику: они одноразовые. Мантра о контейнерах: “Контейнеры эфемерны”. Эта характеристика заставляет пользователей поменять свое мышление относительно того, как они должны обращаться с контейнерами и управлять ими; и я объясню, чего НЕ следует делать, чтобы продолжать извлекать наилучшие преимущества контейнеров. 10 вещей, которых следует избегать в Docker контейнерах Не хранить данные в контейнерах - контейнер может быть остановлен, удален или заменен. Приложение версии 1.0, работающее в контейнере, может быть легко заменено версией 1.1 без какого-либо неблагоприятного воздействия или потери данных. Поэтому, если нужно сохранить данные, сделайте это на диске. В этом случае следует также позаботиться о том, чтобы два контейнера записывали данные на один и тот же диск, что может привести к повреждению. Убедитесь, что приложения могут записывать данные в хранилище объектов. Не разделять свое приложение на две части - так как некоторые люди видят контейнеры в роли виртуальной машин и поэтому большинство из них склонны думать, что они должны применять свое приложение только в существующих работающих контейнерах. Это может быть справедливо на этапе разработки, на котором Вам необходимо непрерывно разрабатывать и налаживать процесс; но для непрерывной доставки (CD) в QA и производства, Ваше приложение должно быть частью образа. Помните: Контейнеры нельзя изменить. Не создавать большие образы - большой образ будет труднее распространить. Убедитесь в наличии только необходимых файлов и библиотек для запуска приложения/процесса. Не устанавливайте ненужные пакеты и не запускайте обновления (yum update), которые загружают много файлов на новый слой образы. Не использовать однослойный образ - чтобы эффективно пользоваться многоуровневой файловой системой, всегда создавайте собственный базовый слой образы для операционной системы, а также другой слой для определения имени пользователя, слой для установки во время выполнения, слой для конфигурации и, наконец, слой для приложения. Будет проще воссоздать образ, управлять им и использовать его. Не создавать образы из запущенных контейнеров - другими словами, не используйте слово docker commit для создания образа. Этот способ не приносит пользы, и его следует полностью избегать. Всегда используйте полностью воспроизводимый Dockerfile или любой другой S2I (от источника к изображению) подход, и Вы можете отследить изменения в Dockerfile, если сохранить его в хранилище системы управления версиями (git). Не использовать latest (последний) тег – он подобен SNAPSHOT для пользователей Maven. Метки подключаются из-за слоистой файловой природы контейнеров. Вы ведь не хотите иметь сюрпризы при построении образа несколько месяцев, а потом выяснить, что приложение не может быть запущено, так как родительский слой (из-за Dockerfile) был заменен новой версией, которая не является обратно совместимой, или из кэша сборки была получена неправильная "последняя" версия. Тега latest также следует избегать при применении контейнеров в производстве, так как невозможно отследить, какая версия образа выполняется. Не выполнять более одного процесса в одном контейнере - контейнеры идеально подходят для выполнения лишь одного процесса (HTTP, сервер приложений, база данных), но если имеется более одного процесса, могут возникнуть дополнительные проблемы с управлением, извлечением журналов и обновлением их по отдельности. Не хранить учетные данные в виде образов. Используйте переменные среды, ведь для этого не требуется жестко кодировать имя пользователя/пароль в образе. Используйте переменные среды для получения этой информации вне контейнера. Отличный пример этого принципа - образ Постгреса. Не запускать процессы от имени пользователя root - "По умолчанию docker контейнеры выполняются от имени пользователя root. По мере «взросления» docker контейнеров могут стать доступны секретные по умолчанию параметры. На данный момент требуемый root опасен для других и может быть доступен не во всех средах. Ваш образ должен использовать инструкцию USER, чтобы указать пользователя, не являющегося root, для контейнеров, которые будут запускаться". Не полагайтесь на IP-адреса - каждый контейнер имеет свой собственный внутренний IP-адрес, и он может измениться, если вы запустите и остановите контейнер. Если приложению или микросервису требуется связь с другим контейнером, используйте переменные среды для передачи соответствующего имени хоста и порта из одного контейнера в другой.
img
Появившись на рынке, API произвел настоящих прорыв и навсегда изменил процесс синхронизации информации между различным программным обеспечение. В данной статье мы с вами рассмотрим, что собой представляет интерфейс программирования API, область его применения в сфере написания приложений, примеры его использования и возможные варианты применения API в различных разработках. API (Application Programming Interface) представляет собой совокупность различных инструментов, функций, реализованных в виде интерфейса для создания новых приложений, благодаря которому одна программа будет взаимодействовать с другой. Основной задачей создания API была дать возможность программистам существенно облегчить задачу при разработке различных приложений за счет использования уже готового кода (какой-либо стандартной функции, процедуры, структуры или постоянного значения, которые будут в последующем выполнятся в конечном продукте). API определяет возможную функциональность, которую определенная программа в форме библиотеки или модуля сможет осуществлять, при этом API позволяет абстрагироваться от способа реализации функционала. Различные компоненты программы благодаря API получают возможность взаимодействия друг с другом, формируя при этом, как правило, среди компонентов определенную систему ранжирования, где абсолютно все компоненты, которые выше по рангу используют информацию из более низких по рангу компонентов, которые также используют информацию из нижестоящих рангов. Чем хорош API и где он используется? Следует отметить, что именно по схожему алгоритму сформированы протоколы передачи данных по сети Интернет, где любой уровень использует функционал нижестоящего уровня передачи данных тем самым предоставляя необходимую информацию и функциональные возможности вышестоящему. Интернет протоколы схожи по смыслу с понятием API, являясь абстракцией функциональности, только в одном из случаев суть заключается в передаче данных, а во втором о взаимодействии приложений между собой. Хорошим примером API может быть Twitter, интерфейс посредствам которого способен предоставить Вам информацию, относящуюся к твитам пользователя, кого он читает, кто является его подписчиками, что является небольшой частью реальных возможностей, которые любой желающий сможет осуществить, используя как собственный, так и любой сторонний API. Использование API в наше время Хорошим примером использования API может служить процесс быстрой регистрации в различных приложениях используя аккаунт любой из предложенной социальной сети, когда посредствам специального API социальной сети (например, Вконтакте, Facebook) сторонние компании получают возможность использовать специальный код и API для предоставления Вам оперативного и упрощенного доступа к их продукту. Компания Google за счёт использования API дает потенциальную возможность разработчикам различных приложений использовать интеграцию информации из своих сервисов на своих платформах. Благодаря этому вы сможете просмотреть видео, взятое из видео хостинга YouTube.com прямо внутри приложения. Большое количество коммерческих компании предлагают API в качестве уже готового к использованию продукта. Так, американская компания Weather Underground зарабатывает за счёт продажи доступа к своему API для оперативного получения метеорологических данных в любой точке нашей планеты. В заключении статьи следует отметить то, что в наше время невозможно создать качественные и полезные сервисы без использования библиотек API поскольку они необходимы как программистам для написания программного обеспечения и приложений, так и различным сервисам для предоставления услуг по обслуживанию клиентов и с каждым годом роль и область применения API только расширяется.
img
Привет! Сегодня в статье мы рассмотрим базовую настройку IP-АТС компании Cisco – CME – Call Manager Express, или как теперь он называемся Cisco Unified Communications Manager Express – CUCME. Также мы покажем как зарегистрировать телефоны, работающие по протоколам SCCP и SIP. Чтобы понять, что необходимо настроить, рассмотрим, что происходит во время загрузки телефона. Процесс загрузки IP-телефона Cisco можно разделить на несколько этапов: Телефон получает питание по Ethernet кабелю используя PoE (Power over Ethernet 802.3af), либо через блок питания; Коммутатор присылает информацию о голосовом VLAN’e, используя протокол CDP (Cisco Discovery Protocol); Телефон высылает DHCP запрос в голосовой VLAN, а в ответ DHCP сервер присылает информацию о IP адресации, включая DHCP Option 150, где указан адрес TFTP сервера; Телефон связывается с TFTP сервером и скачивает конфигурационный файл и прошивку. В конфигурационном файле находятся данные об адресе и номере порта CME, а также название прошивки, которую он должен использовать. При первом подключении он отсутствует, и телефон скачивает файл по умолчанию XMLDefault.cnf.xml; На основании IP адреса, указанного в конфигурационном файле телефон связывается с сервером обработки вызовов (в нашем случае это CME); Теперь можем приступать к настройке оборудования. Настройка voice VLAN Чтобы разделить голосовой трафик и трафик с данными необходимо настроить голосовой VLAN на каждом порту коммутатора, который соединяется с IP телефонами. switch#conf t – переход в режим конфигурации switch(config)#interface fa0/1 – переход в режим конфигурации интерфейса switch(config-if)#switchport mode access – настройка порта в качестве access switch(config-if)#switchport voice vlan 100 – создание голосового VLAN с id 100 switch(config-if)#switchport access vlan 200 – создание VLAN данных с id 200 switch(config-if)#spanning-tree portfast – включение протокола STP Настройка DHCP Теперь необходимо настроить роутер Cisco как DHCP сервер для голосового VLAN. Команда Option 150 используется для указания адреса TFTP сервера, где хранятся конфигурационные файлы и прошивки. router#ip dhcp pool VOICE – создание DHCP пула router(dhcp-config)#network 192.168.1.0 255.255.255.0 – выделение подсети router(dhcp-config)#default-router 192.168.1.1 – default gateway router(dhcp-config)#option 150 192.168.1.1 – адрес TFTP сервера router(dhcp-config)#dns-server 4.2.2.2 – адрес DNS сервера Настройка NTP Перейдем к настойке времени c использованием протокола NTP, при помощи которого мы сможем выставить корректные дату и время на всех телефонах. router#conf t router(config)#ntp server 64.209.210.20 – указываем адрес NTP сервера router(config)#clock timezone MSK 3 – указываем временную зону Настройка TFTP Хотя маршрутизаторы Cisco можно использовать в качестве TFTP сервера, стоит заметить что для больших телефонных сетей лучше иметь отдельный TFTP сервер, поскольку файлы прошивки и конфигурации могут быстро заполнить всю доступную flash-память. При использовании маршрутизатора в роли TFTP сервера необходимо вручную указать все файлы для скачивания, которые мы поместили во flash-памяти. В нашем примере файлы находятся в папке phone/7940-7960/ router#conf t router(config)#tftp-server flash:/phone/7940-7960/P00308000500.bin alias P00308000500.bin router(config)#tftp-server flash:/phone/7940-7960/P00308000500.loads alias P00308000500.loads router(config)#tftp-server flash:/phone/7940-7960/P00308000500.sb2 alias P00308000500.sb2 router(config)#tftp-server flash:/phone/7940-7960/P00308000500.sbn alias P00308000500.sbn Здесь в команде tftp-server после alias указываем название файла прошивки, который будет запрашивать телефон, поскольку телефон не знает полный путь до файла, а запрашивает его только по названию. Базовые настройки CME и регистрация телефонов Теперь настроим необходимые параметры IP Source Address, Max-DN (Directory Number) и Max-Ephones для работы с протоколом SCCP. router(config)#telephony-service – режим настройки телефонии router(config-telepony)#ip source-address 192.168.1.1 – адрес, на который должны приходить запросы на регистрацию от телефонов router(config-telepony)#max-ephones 24 – максимальное количество поддерживаемых телефонов router(config-telepony)#max-dn 48 – максимальное количество поддерживаемых номеров Параметры max-ephones и max-dn напрямую влияют на объем памяти, которую резервирует маршрутизатор для поддержки службы CME. При установке значения намного выше, чем необходимо, система может резервировать чрезмерные ресурсы и влиять на другие сетевые службы. Кроме того, параметр max-ephones не должен превышать количество приобретенных лицензий на функции. После этого телефоны начнут процесс регистрации. Проверить статус регистрации можно командой show ephone summary Настройка Ephone и Ephone-DN Для начала попробуем разобраться, что это такое и в чем их отличие. Ephone можно представить в качестве физического телефона с MAC адресом, а Ephone-DN в качестве телефонного номера, который мы связываем с телефонным аппаратом. Создадим номер Ephone-DN с номером 101: router#conf t router(config)#ephone-dn 1 – создание номера router(config-ephone-dn)#number 101 – указываем номер router(config-ephone-dn)#description Alexey Dobronravov – описание в CME router(config-ephone-dn)#name Alexey Dobronravov – описание на телефоне Теперь создадим Ephone и свяжем его с реальным телефоном по MAC-адресу: router#conf t router(config)#ephone 1 – создание образа телефона router(config-ephone)#mac-address 0014.1c48.acb1 – указываем MAC-адрес router(config-ephone)#button 1:1 – привязываем номер к аппарату Мы привязываем номер к телефону на его физические кнопки, которые обычно находятся возле экрана. На них как раз можно привязывать линии, и телефон может одновременно несколько номеров. Синтаксис команды через которую идет привязка телефона выглядит как button [физическая кнопка] : [ephone-dn] . Таким образом, в примере мы привязали первой кнопке на телефоне созданный нами номер ephone-dn 1. Теперь можем подключать наш телефон к сети, он пройдет все шаги загрузки и зарегистрируется на нашем CME. Таким же образом настраиваем другие телефоны и номера, после чего мы сможем совершать звонки между телефонами. Проверить статус телефона можно командой show ephone. Регистрация SIP телефона Теперь настроим CME для работы с телефонами по протоколу SIP. Первым делом разрешим звонки между SIP телефонами: router#conf t router(config)#voice service voip router(config-voice)#allow-connections sip to sip Настраиваем период регистрации телефонов (число – это время в секундах, по умолчанию 3600): router#conf t router(config)#voice service voip router(config-voice)#registrar server expires max 3600 min 3600 Создаем класс кодеков, в котором указываем кодеки, которые будут использованы: router#conf t router(config)#voice class codec 1 router(config-voice)#codec preference 1 g711alaw - кодек первого приоритета router(config-voice)#codec preference 1 g711ulaw - кодек второго приоритета router(config-voice)#codec preference 1 g729br8 - кодек третьего приоритета Создаем DN: router#conf t router(config)#voice register dn 1 – создаем DN router(config-voice-register-dn)#number 201 – указываем номер Настраиваем телефон: router#conf t router(config)#voice register pool 1 router(config-voice-register-pool)#id mac 0014.1c48.acb2 – указываем MAC телефона router(config-voice-register-pool)#number 1 dn 1 – привязываем номер к первой линии router(config-voice-register-pool)#voice-class codec 1 – используем созданный нами набор кодеков router(config-voice-register-pool)#username admin password pass – создаем аутентификационные данные После этого подключаем SIP телефон к сети и заходим по его веб-интерфейс черз бразуер по IP-адресу, находим настройки первой линии, где указываем адрес сервера 192.168.1.1 и логин с паролем admin/password, которые мы создали. Теперь таким образом можно регистрировать SIP телефоны на CME.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59