По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Привет всем! В сегодняшней статье мы хотим рассказать об одном крайне полезном трюке, который поможет сохранить время Вам и клиентам, позвонившим в Вашу компанию. Демонстрировать этот функционал мы будем на IP-АТС Asterisk через графический интерфейс FreePBX 14. Данная статья будет особенно актуальна для тех, кто пользуется переадресацией входящих звонков на мобильный телефон. Возможно, кто-то уже использует данный способ, но многие могут о нем и не знать. Кейс Итак, представим себе такую гипотетическую ситуацию: К нам в компанию позвонил клиент; Звонок поступил на ринг группу 345, в которой находится 3 внутренних номера; Звонки с этих внутренних номеров переадресовываются на мобильные номера менеджеров; И вот на своём мобильном телефоне звонок клиента принял менеджер Алексей; Они общаются, и тут у клиента возникает вопрос к инженеру, клиент просит перевести его на инженера; Алексей может находиться вне офиса и не за стационарным телефоном и не может перевести звонок клиента обратно; Он просит клиента перезвонить на общий номер компании и донабрать внутренний номер инженера; Ситуация вполне нормальная, но мы вынуждены просить нашего клиента звонить повторно, донабирать номер, тратить свое время и так далее. Вот бы было здорово иметь возможность перевести звонок клиента на нужный номер прямо с мобильного? А ещё лучше, если мы сможем поговорить с человеком, на которого нужно перевести звонок и узнать не занят ли он, прежде чем делать трансфер! Такая возможность есть и сейчас мы объясним как её реализовать. Решение Дело в том, что когда звонки с нашей IP-АТС переводятся на мобильный телефон, то канал между ними не разрывается. Например, если у вас включена запись, то вы можете увидеть, что такие звонки также записываются. А значит, мы можем контролировать такие звонки на любом устройстве, даже на мобильном телефоне. Делать трансфер, ставить на ожидание, парковать и так далее. Для того, чтобы открылась возможность сделать трансфер на другой номер, находясь в звонке, нужно передать приложению Asterisk Dial() нужный аргумент. Во FreePBX это настраивается в Settings → Advanced Settings в разделе Dialplan and Operational. Здесь есть два поля - Asterisk Dial Options, в котором можно добавить аргументы Dial() при совершении внутренних звонков и Asterisk Outbound Trunk Dial Options, который отвечает за обработку аргументов Dial() при совершении внешних звонков через транк, как раз это поле нам и нужно. По умолчанию в данном поле всего один аргумент - большая буква T. Этот аргумент позволяет позвонившей стороне сделать трансфер используя feature code - ## Сервисный код ## соответствует функции “слепого” трансфера -In-Call Asterisk Blind Transfer Однако, когда мы принимаем звонок на мобильном телефоне, то являемся вызываемой стороной, поэтому нам нужен другой аргумент – маленькая буква t. С помощью данного аргумента, мы сможем делать трансфер находясь в звонке, используя всё тот же feature code - ##. Итак, можно добавить аргумент t в поле Asterisk Outbound Trunk Dial Options, но тогда этот функционал распространится на все транки, которые созданы на вашей IP-АТС. Есть более безопасный способ включить трансфер на принимающей стороне. Для этого переходим в Connectivity → Trunks и в настройках транка на вкладке General ищем опцию Asterisk Trunk Dial Options По умолчанию, в данной опции мы так же увидим аргумент T, так как стоит параметр System, который просто подтягивает значения аргумента из Asterisk Outbound Trunk Dial Options в Advanced Settings Выбрав параметр Override, мы можем записать сюда какие угодно аргументы и они будут действовать только для данного конкретного транка. Запишем сюда маленькую t. Итак, теперь, если Вы приняли вызов на мобильном телефоне, а человек, с которым Вы разговариваете просит перевести его на другого сотрудника, Вы можете просто: Нажать ## на своём мобильном телефоне, после чего Вы услышите в трубке сообщение “перевод”; Набрать нужный номер (например - 529). В это время позвонивший будет слышать музыку на ожидании; Вызов автоматически завершится, а звонок будет переадресован тому, чей номер Вы набрали; Profit; А помните мы говорили, что можно ещё поговорить с тем, кому нужно перевести вызов, прежде чем его переводить, чтобы уточнить не занят ли этот человек? Так вот такая возможность при принятии звонка на мобильном тоже есть! Если мы откроем возможные сервисные коды (feature code) функций трансфера, то увидим, что их два - ## - In-Call Asterisk Blind Transfer, который мы уже знаем, и *2 - функция консультативного трансфера - In-Call Asterisk Attended Transfer. Таким образом, можно также пользоваться консультативным трансфером, в этом случае нужно: Нажать *2 на своём мобильном телефоне, после чего Вы услышите в трубке сообщение “перевод”; Набрать нужный номер (например - 529). В это время позвонивший будет слышать музыку на ожидании; Дождаться, пока человек, которому нужно перевести вызов, ответит и узнать у него можно ли делать перевод. Если он сбросит или не возьмёт трубку, то ваш разговор с ожидающим на линии абонентом возобновится и Вы сможете объяснить ему, что соединиться не удалось; Если человек, которому нужно перевести вызов готов поговорить с ожидающим на линии абонентом, то нужно просто завершить вызов. Тогда разговор продолжится уже между ними; Кстати! Номер, который Вы набираете после того или иного сервисного кода, не обязательно должен быть внутренним. Это может быть любой другой номер (например, мобильный - *289012345678). Главное набирать его в таком формате, чтобы Ваша IP-АТС могла до него дозвониться.
img
Почитать лекцию №15 про управление потоком пакетов в сетях можно тут. Совокупность проблем и решений, рассмотренных в предыдущих лекциях, дает некоторое представление о сложности сетевых транспортных систем. Как системные администраторы могут взаимодействовать с очевидной сложностью таких систем? Первый способ - рассмотреть основные проблемы, которые решают транспортные системы, и понять спектр решений, доступных для каждой из этих проблем. Второй - создание моделей, которые помогут понять транспортные протоколы с помощью: Помощь администраторам сетей в классификации транспортных протоколов по их назначению, информации, содержащейся в каждом протоколе, и интерфейсам между протоколами; Помочь администраторам сетей узнать, какие вопросы задавать, чтобы понять конкретный протокол или понять, как конкретный протокол взаимодействует с сетью, в которой он работает, и приложениями, для которых он несет информацию; Помощь администраторам сетей в понимании того, как отдельные протоколы сочетаются друг с другом для создания транспортной системы. Далее будет рассмотрен способ, с помощью которого администраторы могут более полно понимать протоколы: модели. Модели по сути являются абстрактными представлениями проблем и решений. Они обеспечивают более наглядное и ориентированное на модули представление, показывающее, как вещи сочетаются друг с другом. В этой лекции мы рассмотрим этот вопрос: Как можно смоделировать транспортные системы таким образом, чтобы администраторы могли быстро и полностью понять проблемы, которые эти системы должны решать, а также то, как можно объединить несколько протоколов для их решения? В этой серии лекции будут рассмотрены три конкретные модели: Модель Министерства обороны США (United States Department of Defense - DoD) Модель взаимодействия открытых систем (Open Systems Interconnect - OSI) Модель рекурсивной интернет-архитектуры (Recursive Internet Architecture - RINA) Модель Министерства обороны США (DoD) В 1960-х годах Агентство перспективных исследовательских проектов Министерства обороны США (DARPA) спонсировало разработку сети с коммутацией пакетов для замены телефонной сети в качестве основного средства компьютерной связи. Вопреки мифу, первоначальная идея состояла не в том, чтобы пережить ядерный взрыв, а скорее в том, чтобы создать способ для различных компьютеров, используемых в то время в нескольких университетах, исследовательских институтах и правительственных учреждениях, чтобы общаться друг с другом. В то время каждая компьютерная система использовала свою собственную физическую проводку, протоколы и другие системы; не было никакого способа соединить эти устройства, чтобы даже передавать файлы данных, не говоря уже о создании чего-то вроде "Всемирной паутины" или кросс-исполняемого программного обеспечения. Эти оригинальные модели часто разрабатывались для обеспечения связи между терминалами и хостами, поэтому вы могли установить удаленный терминал в офис или общественное место, которое затем можно было использовать для доступа к общим ресурсам системы или хоста. Большая часть оригинальных текстов, написанных вокруг этих моделей, отражает эту реальность. Одной из первых разработок в этой области была модель DoD, показанная на рисунке 1. DoD разделяла работу по передаче информации по сети на четыре отдельные функции, каждая из которых могла выполняться одним из многих протоколов. Идея наличия нескольких протоколов на каждом уровне считалась несколько спорной до конца 1980-х и даже в начале 1990-х гг. На самом деле одним из ключевых различий между DoD и первоначальным воплощением модели OSI является концепция наличия нескольких протоколов на каждом уровне. В модели DoD: Физический уровень отвечает за получение "0" и "1" модулированных или сериализованных на физическом канале. Каждый тип связи имеет свой формат для передачи сигналов 0 или 1; физический уровень отвечает за преобразование 0 и 1 в физические сигналы. Интернет-уровень отвечает за передачу данных между системами, которые не связаны между собой ни одной физической связью. Таким образом, уровень интернета предоставляет сетевые адреса, а не локальные адреса каналов, а также предоставляет некоторые средства для обнаружения набора устройств и каналов, которые должны быть пересечены, чтобы достичь этих пунктов назначения. Транспортный уровень отвечает за построение и поддержание сеансов между коммутирующими устройствами и обеспечивает общий прозрачный механизм передачи данных для потоков или блоков данных. Управление потоком и надежная транспортировка также могут быть реализованы на этом уровне, как и в случае с TCP. Прикладной уровень - это интерфейс между Пользователем и сетевыми ресурсами или конкретными приложениями, которые используют и предоставляют данные другим устройствам, подключенным к сети. В частности, прикладной уровень кажется неуместным в модели сетевого транспорта. Почему приложение, использующее данные, должно считаться частью транспортной системы? Потому что ранние системы считали пользователя-человека конечным пользователем данных, а приложение - главным образом способом изменить данные, которые будут представлены фактическому пользователю. Большая часть обработки от машины к машине, тяжелая обработка данных перед их представлением пользователю и простое хранение информации в цифровом формате даже не рассматривались как жизнеспособные варианты использования. Поскольку информация передавалась от одного человека другому, приложение считалось частью транспортной системы. Два других момента могли бы помочь включению прикладного уровня сделать его более осмысленным. Во-первых, в конструкции этих оригинальных систем было два компонента: терминал и хост. Терминал тогда был дисплейным устройством, приложение располагалось на хосте. Во-вторых, сетевое программное обеспечение не рассматривалось как отдельная "вещь" в системе, маршрутизаторы еще не были изобретены, как и любое другое отдельное устройство для обработки и пересылки пакетов. Скорее, хост был просто подключен к терминалу или другому хосту; сетевое программное обеспечение было просто еще одним приложением, запущенным на этих устройствах. Со временем, когда модель OSI стала чаше использоваться, модель DoD была изменена, чтобы включить больше уровней. Например, на рисунке 2, на диаграмме, взятой из статьи 1983 года о модели DoD ("Cerf and Cain, "The DoD Internet Architecture Model"), есть семь слоев (семь почему-то являются магическим числом). Были добавлены три слоя: Уровень утилит - это набор протоколов, "живущих" между более общим транспортным уровнем и приложениями. В частности, простой протокол передачи почты (SMTP), протокол передачи файлов (FTP) и другие протоколы рассматривались как часть этого уровня. Сетевой уровень из четырехслойной версии был разделен на сетевой уровень и уровень интернета. Сетевой уровень представляет различные форматы пакетов, используемые на каждом типе канала, такие как радиосети и Ethernet (все еще очень Новые в начале 1980-х годов). Уровень межсетевого взаимодействия объединяет представление приложений и протоколов утилит, работающих в сети, в единую службу интернет-дейтаграмм. Канальный уровень был вставлен для того, чтобы различать кодирование информации на различные типы каналов и подключение устройства к физическому каналу связи. Не все аппаратные интерфейсы обеспечивали уровень связи. Со временем эти расширенные модели DoD потеряли популярность; модель с четырьмя слоями является той, на которую чаще всего ссылаются сегодня. На это есть несколько причин: Уровни утилит и приложений в большинстве случаев дублируют друг друга. Например, FTP мультиплексирует контент поверх протокола управления передачей (TCP), а не как отдельный протокол или слой в стеке. TCP и протокол пользовательских дейтаграмм (UDP) со временем превратились в два протокола на транспортном уровне, а все остальное (как правило) работает поверх одного из этих двух протоколов. С изобретением устройств, предназначенных в первую очередь для пересылки пакетов (маршрутизаторы и коммутаторы), разделение между сетевым и межсетевым уровнями было преодолено определенными событиями. Первоначальная дифференциация проводилась в основном между низкоскоростными дальнемагистральными (широкозонными) и короткозонными локальными сетями; маршрутизаторы обычно брали на себя бремя установки каналов в широкополосные сети вне хоста, поэтому дифференциация стала менее важной. Некоторые типы интерфейсов просто не имеют возможности отделить кодирование сигнала от интерфейса хоста, как было предусмотрено в разделении между канальным и физическим уровнями. Следовательно, эти два уровня обычно объединены в одну "вещь" в модели DoD. Модель DoD исторически важна, потому что Это одна из первых попыток систематизировать функциональность сети в модели. Это модель, на которой был разработан набор протоколов TCP / IP (на котором работает глобальный Интернет); Артефакты этой модели важны для понимания многих аспектов проектирования протокола TCP / IP. В нее была встроена концепция множественных протоколов на любом конкретном уровне модели. Это подготовило почву для общей концепции сужения фокуса любого конкретного протокола, позволяя одновременно работать многим различным протоколам в одной и той же сети.
img
JIT-компиляция – это метод повышения производительности интерпретируемых программ. JIT расшифровывается как Just-in-time. Во время выполнения программа может быть скомпилирована в машинный код для повышения ее производительности. Также этот метод известен как динамическая компиляция. Динамическая компиляция имеет несколько преимуществ перед статической. При запуске приложений на JAVA или C# среда выполнения может профилировать приложение во время его исполнения. Это позволяет создавать более оптимизированный код. Если поведение приложения меняется во время его исполнения, то среда выполнения может перекомпилировать код. Есть некоторые недостатки, заключающиеся в задержках при запуске или непроизводительных издержках при компиляции во время выполнения. Чтобы ограничить эти издержки, многие JIT-компиляторы компилируют только пути кода, которые часто используются. Обзор Традиционно существует два метода преобразования исходного кода в форму, которую можно запустить на платформе. Статистическая компиляция преобразует код в язык для конкретной платформы. Интерпретатор непосредственно выполняет исходный код. JIT-компиляция пытается использовать преимущества обоих. В то время как выполняется интерпретируемая программа, JIT-компилятор определяет участки часто используемого кода и компилирует его в машинный код. В зависимости от компилятора это можно сделать для метода или меньшего участка кода. Впервые динамическая компиляция была описана в статье о языке LISP Дж. Маккарти в 1960 году. Компиляция на лету, JIT или динамическая компиляция – это компиляция, которая выполняется непосредственно во время исполнения программы, а не до этого. Что в этот момент происходит? Перевод в машинный код. Преимущества JIT-компиляции заключаются в том, что поскольку компиляция происходит во время выполнения, то JIT-компилятор имеет доступ к динамической информации времени выполнения, а это в свою очередь позволяет ему оптимизировать процесс (например, встраивать функции). Что важно понимать, когда речь идет о JIT-компиляции? Она скомпилирует байт-код в инструкции машинного кода работающего компьютера. Это означает, что полученный машинный код оптимизирован для архитектуры процессора конкретного компьютера. В качестве примеров JIT-компиляторов можно привести JVM (Java Virtual Machine - виртуальная машина Java) на Java и CLR (Common Language Runtime – общеязыковая исполняющая среда) на C#. История Изначально компилятор отвечал за преобразование языка высокого уровня (выше, чем ассемблер) в объектный код (машинные инструкции), который затем должен был быть связан (линкером) с исполняемой программой. В какой-то момент эволюции языков компиляторы начали компилировать язык высокого уровня в псевдокод, который затем интерпретировался (интерпретатором) для запуска программы. Это исключило объектный код и исполняемые программы и позволило перенести эти языки на несколько операционных систем и аппаратных платформ. Одним из первых был Pascal (который скомпилирован в P-Code); более современными примерами являются Java и C#. Со временем термин P-Code был заменен на байт-код, поскольку большинство псевдоопераций имеют длину в один байт. JIT-компилятор – это функция интерпретатора, которая вместо интерпретации байт-кода при каждом вызове компилирует байт-код в инструкции машинного кода работающей машины, а затем вызывает этот объектный код. В идеальном варианте эффективность выполнения объектного кода должна превзойти неэффективность перекомпиляции программы при каждом ее запуске. Обычный сценарий Исходный код полностью преобразуется в машинный код. JIT-сценарий Исходный код преобразуется в структуру на языке ассемблера, например, IL (промежуточный язык) для C#, ByteCode для Java. Промежуточный код преобразуется в машинный только тогда, когда приложение нуждается в том, чтобы необходимые коды были преобразованы в машинный код. JIT или не JIT При JIT-компиляции не весь код преобразуется в машинный код. Для начала преобразуется только необходимая часть кода. Затем, если вызываемый метод или выполняемые функции находятся не в виде машинного кода, то они тоже будут преобразованы в машинный код. Это снижает нагрузку на ЦП. Поскольку машинный код будет генерироваться во время выполнения, то JIT-компилятор создаст машинный код, оптимизированный для запуска архитектуры ЦП машины. Ниже приведены некоторые примеры JIT-компиляторов: Java: JVM (Java Virtual Machine – виртуальная машина Java) C#: CLR (Common Language Runtime – общеязыковая исполняющая среда) Android: DVM (Dalvik Virtual Machine – виртуальная машина Dalvik) или ART (Android RunTime – среда выполнения Android-приложений) в новых версиях Виртуальная машина Java (JVM) выполняет байт-код и ведет подсчет времени выполнения функции. Если это значение превышает предустановленный порог, то JIT-компилятор компилирует код в машинный код, который в дальнейшем может быть выполнен непосредственно процессором (в отличие от случая, когда javac компилирует код в байт-код, а затем интерпретатор интерпретирует этот байт-код построчно, переводя его в машинный код, и выполняет его). Кроме того, при следующем вычислении функции тот же скомпилированный код выполняется снова, в отличие от обычной интерпретации, когда код повторно интерпретируется построчно. Это значительно ускоряет процесс выполнения программы.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59