Русский
Русский
English
Статистика
Реклама

Saas

Бесплатные аналоги популярных SaaS решений

05.10.2020 14:22:06 | Автор: admin


Мы подготовили небольшой обзор бесплатных альтернатив популярных в России платформ SaaS. С небольшими усилиями зачастую можно добиться практически такой же функциональной отдачи, но с меньшими финансовыми затратами.

OnlyOffice вместо Office 365


Когда мы говорим о бесплатной альтернативе MS Office, то первое, что приходит на ум это пакет офисных программ OpenOffice / LibreOffice. Действительно OO/LO справляется со своей задачей на отлично, однако в качестве достойной замены облачного сервиса Office 365 вряд ли может быть полезен. Для этого больше подходит OnlyOffice.

Офисный редактор имеет целый ряд достоинств, с которыми нельзя не считаться.

  • Совместимость с файловыми форматами MS Office на высшем уровне.
  • Продукт с открытым исходным кодом, разработка ведется на Гитхабе.
  • Может работать на всех устройствах: рабочих станциях с Windows, Linux и MacOS, мобильных платформах Android и MacOS;
  • Полный набор инструментов форматирования и совместного редактирования.

Собственно подписка использования OnlyOffice в качестве SaaS платная, но так как продукт распространяется с открытыми исходниками, можно самостоятельно развернуть собственный сервер документов из контейнера.

sudo docker run -i -t -d -p 80:80 \
-v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice \
-v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data onlyoffice/documentserver


Element вместо Slack


Element является новой инкарнацией Riot.im безопасного и открытого мессенджера, основанного на протоколе Matrix. С первого же стабильного релиза Element является солидной альтернативой Slack за счет нескольких ключевых преимуществ.

  • Поддержка разных платформ и архитектур.
  • Защита от сбора данных со стороны рекламных агентств.
  • Безопасность, сквозное шифрование по умолчанию.
  • Поддержка расширений через платформу Element App Store.
  • Поддержка самостоятельного размещения.

Есть несколько реализаций серверной части Matrix протокола, среди которых наиболее распространен Synapse. Существует различные варианты установки сервера Synapse, в том числе из контейнера Docker и Ansible playbook. Инструкции сборки и бинарные пакеты Synapse существуют для основных дистрибутивов Linux, а также Windows, macOC и OpenBSD.

Установка клиентской части предельно проста в любом дистрибутиве Linux.

$ sudo emerge -av riot-desktopLocal copy of remote index is up-to-date and will be used.These are the packages that would be merged, in order:Calculating dependencies... done![binary  N     ] dev-db/sqlcipher-4.0.1::gentoo  USE="readline -debug -libedit -libressl -static-libs -tcl -test" ABI_X86="(64) -32 (-x32)" 1397 KiB[binary  N     ] net-im/riot-desktop-1.6.6::calculate  USE="emoji" 74770 KiBTotal: 2 packages (2 new, 2 binaries), Size of downloads: 76167 KiBWould you like to merge these packages? [Yes/No]

Wire вместо Teams


Еще одной альтернативой Slack, а заодно и Microsoft Teams является Wire приложение для зашифрованной связи и совместной работы, созданное Wire Swiss. Он доступен для платформ iOS, Android, Windows, macOS, Linux, а также в качестве веб приложения. Wire предлагает пакет для совместной работы, включающий мессенджер, голосовые и видео звонки, конференц-связь, обмен файлами и совместную работу все это защищено сквозным шифрованием.
Стоит также обратить внимание, что исходный код неоднократно подвергался проверке безопасности со стороны независимых аудиторов.


Сравнительная таблица Slack и други
х мессенджеров.


Мессенджер можно использовать на платной основе, как облачный сервис и в таком качестве он обойдется дешевле, чем Slack. Однако главное отличие состоит в том, что Wire полностью открыл как клиентский, так и серверный код и ведет разработку на портале GitHub.

Серверная часть мессенджера устанавливается через Kubernetes и менеджер пакетов Helm. Установка клиента для DEB дистрибутивов намного проще:

(1:26)$ wget https://wire-app.wire.com/linux/debian/pool/main/wire_3.3.2872_amd64.deb(1:27)$ sudo dpkg -i wire_3.3.2872_amd64.deb

Ghost портив WordPress


Популярный проект платформы для блогов Ghost после удачной кампании на Kickstarter успел наделать много шума. C самого начала Ghost стремился потеснить WordPress с позиций основной площадки ведения блогов. Из достоинств:

  • простота и удобство настройки;
  • открытый исходный код;
  • обширные возможности по интеграции и расширениям благодаря гибкому JSON API;
  • поддержка автоматической публикации постов по графику;

Ghost Pro доступен в качестве PaaS, на данный момент цена размещения начинается от 29 USD в месяц. Впрочем, на цене можно существенно сэкономить, если самостоятельно разместить платформу на выделенном сервере.


Интерфейс Ghost-а.

Если развернуть Ghost с помощью Kubernetes, можно уложиться в тариф за 1000 р. в месяц. Кроме того, сам Ghost много ресурсов не займет и на том же сервере можно будет выполнять и другие задачи по мере необходимости. По ссылке процесса контейнерной сборки и установки блог-хоста. Сам docker образ можно напрямую скачать и запустить с .

Postfix/Exim вместо GSuite


Отличительной особенностью Postfix является акцент на безопасность. Создатель программы Wietse Zweitze Venema разработал почтовый сервер для собственных нужд во время работы в научно-исследовательском отделе IBM. Более того, Postfix изначально разрабатывался для устранения уязвимостей, присущих устаревшему Sendmail. Если безопасность MTA имеет высший приоритет, то Postfix ваш выбор.


Архитектура MTA Postfix.

Благодаря продуманной архитектуре с централизованным диспетчером qmgr Postfix хорошо масштабируется и подходит для работы с большими очередями и под значительной нагрузкой. С точки зрения производительности Postix также находится в выигрышном положении по отношению к Exim.

С точки зрения настроек и гибкости Postfix также на высоте. Единый конфигурационный файл /etc/postfix/main.cf вполне понятен даже новичку. Всё же Postfix не так разнообразен и универсален, как Exim хоть и имеет множество опций для тонкой настройки под себя.

Почтовый сервер Exim отлично подходит для маленьких и средних организаций и идеально вписывается в качестве MTA для WordPress и других веб-приложений. По сравнению с PostFix, Exim более универсален, имеет отличные средства интеграции и может обеспечить требуемый функционал системным администраторам. Exim в том, или ином виде поддерживает большинство функций MTA. Exim также доступен из cPanel распространенной панели управления для владельцев доменов.


Сравнительная таблица MTA..

Почтовый сервер Postfix доступен во всех дистрибутивах Linux, как и Exim.

(1:681)$ eix -e mail-mta/postfix;eix -e mail-mta/exim* mail-mta/postfix     Available versions:  3.5.6 ~3.5.7 [M]~3.6_pre20200925 {+berkdb cdb dovecot-sasl +eai hardened ldap ldap-bind libressl lmdb mbox memcached mysql nis pam postgres sasl selinux sqlite ssl}     Homepage:            http://www.postfix.org/     Description:         A fast and secure drop-in replacement for sendmail* mail-mta/exim     Available versions:  4.93.0.4-r1 ~4.94-r1 {X arc +dane dcc +dkim dlfunc dmarc +dnsdb doc dovecot-sasl dsn exiscan-acl gnutls idn ipv6 ldap libressl lmtp maildir mbx mysql nis pam perl pkcs11 postgres +prdr proxy radius redis sasl selinux spf sqlite srs +ssl syslog tcpd +tpda ELIBC="glibc"}     Homepage:            https://www.exim.org/     Description:         A highly configurable, drop-in replacement for sendmail

Полное внедрение современного почтового сервера включая в себя дополнительные модули и сервисы.

  • IMAP и POP3 сервер Dovecot.
  • SpamAssassin
  • Настройки для того, чтобы иметь возможность проверить подлинность домена отправителя.
  • Настройки .
Подробнее..

Как мы делали поддержку виджетов для приложений в МоемСкладе

21.03.2021 04:16:09 | Автор: admin

Всем привет! В эфире Маркетплейс МоегоСклада. В прошлый раз мы рассказывали о том, как мы запустили маркетплейс приложений в SaaS-сервисе МойСклад. Сегодня продолжим о том, как мы даем возможность приложениям расширять пользовательский интерфейс сервиса. Наверное, многие сталкивались в десктопных приложениях с подобными плагинами, которые при подключении добавляют в приложение какие-то свои кнопочки, пункты меню и даже целые наборы новых окон и диалогов, а также встраивают свои собственные UI-блоки в существующие экраны. А как сделать такое в SaaS-сервисе, UI которого работает в браузере?

Зачем вообще нужно встраивание в UI?

На старте Маркетплейса для приложений общего назначения единственный доступный способ интеграции приложений с МоимСкладом это интеграция по данным через общее JSON API. Через это API серверные части вендорских приложений могут получать и изменять пользовательские данные. Таким образом, на старте у нас была возможность только интеграции бэкендов приложений и МоегоСклада между собой. Добавить кнопочку или виджет на форму редактирования приложения не могли.

Изначально было очевидно, что этого не достаточно для предоставления конечным пользователям максимального удобства в использовании приложений. С другой стороны, внешним разработчикам и интеграторам приходилось колхозить свои механизмы в UI у них был выбор или непосредственно встраиваться в HTML веб-приложения МоегоСклада через плагины браузера или делать отдельные интерфейсы (UI) на своей стороне, во многом дублирующие функциональные возможности экранов в МоемСкладе (например, списки документов с фильтрами).

Вендоры, если посмотреть в целом это тоже разработчики продукта МойСклад, только внешние по отношению к компании (если сравнивать со штатными сотрудниками). Вендоры тоже добавляют в сервис новую функциональность это и интеграции с внешними системами, дополнительные отчеты, дополнительная автоматизация рутинных операций и прочее. В идеале с точки зрения возможностей интеграции приложений в основной продукт хочется, чтобы эти возможности для внешних разработчиков (вендоров) приближались к возможностям штатных разработчиков, которые работают непосредственно с исходных кодом продукта.

В общем, уже на старте было понятно, что UI-плагины это must have фича, которую надо делать.

Для начала на самом старте мы сделали простейшую возможность приложению встраивать свой iframe на отдельной вкладке. Этого позволяло закрыть такие базовые сценарии как, например, настройка приложения пользователем после установки. Но хотелось большего.

И вот пришло время занятся UI-плагинами для приложений уже по-серьезному.

Виджеты. Начало

Мы начали с того, что сформулировали общее видение возможных вариантов встраивания, зафиксировали базовые технические требования и посмотрели как обстоит дело в других SaaS-сервисах.

Первой фичей мы решили сделать поддержку виджетов на экранах редактирования сущностей и документов. Виджет представляет собой прямоугольный блок в UI, содержимое которого определяется приложением.

Пример виджета на экране редактирования контрагента:

Основной сценарий работы с виджетами выглядит так:

  1. Разработчик приложения указывает в дескрипторе приложения в какие места он хочет вставить виджеты

  2. Пользователь МоегоСклада устанавливает это приложение

  3. Пользователь заходит в то место, в которое приложение встраивает свой виджет

  4. Система отображает обычный интерфейс МоегоСклада для этого места со встроенным в него виджетом приложения

Из важных технических требований мы определили следующие:

  • Изоляция виджетов. Виджеты не должны иметь техническую возможность сломать верстку основной страницы. Как понятно, это ограничивает гибкость встраивания, но зато позволяет оставить за собой (в бОльшей степени) контроль за стабильностью работы UI (очень важно для наших пользователей) и его удобством (UX).

  • Отсутствие дергания при загрузке страницы. При открытии экрана с виджетами не должно быть дергания элементов на экране. То есть, например, виджеты должны открываться на экране сразу в нужном размере, а не скакать на экране при подгрузке в них кода и контента.

  • Однократная загрузка/инициализация кода виджета. Учитывая, что UI МоегоСклада это SPA, то хотелось бы воспользоваться преимуществами этого и для виджетов: загружать код виджета и строить DOM-дерево виджета один раз за время жизни вкладки браузера, тем самым ускоряя работу UI в целом по сравнению с полной загрузкой виджета с нуля при очередном открытии формы редактирования документа с виджетом. Тем более, что для наших внутренних компонентов и экранов у нас уже использовался подобный подход с кэшированием.

Как у других?

Для анализа мы выбрали несколько зарубежных SaaS-сервисов (Jira, Salesforce, Zendesk) и несколько наших российских (amoCRM, Битрикс24, InSales). Задача была посмотреть с технической точки зрения как устроено там и учесть этот опыт в нашем решении вопроса.

На что мы обращали внимание при анализе:

  1. Что собой представляет само приложение: SPA ли это как у нас или что-то другое?

  2. Как устроено взаимодействие виджетов и хост-окна (хост-окном называем родительское окно, куда встраивается iframe с виджетом), как разработчик указывает куда именно встраивать виджет, есть ли SDK для разработчиков (в части встраивания в UI)?

  3. Обеспечивается ли изоляция виджетов, откуда загружается код виджетов?

  4. Каким образом передается информация о текущем контексте в виджет. Под контекстом понимаем информацию о текущем пользователе, открытом экране и открываемом/редактируемом объекте или объектах.

Подробное изложение особенностей реализации в каждой системе тянет на отдельную статью. Здесь приведем некоторые общие выводы, которые мы сделали по результатам анализа.

В основном, рассматриваемые системы представляют собой SPA-приложения или частичные SPA (частичные это когда, например, в рамках некоторых экранов UI работает без перезагрузки как SPA, но в каких-то случаях навигации по приложению может произойти и полная перезагрузка страницы хотя внешне бывает сложно отличить полную перезагрузку страницы от частичной). UI МоегоСклада полноценное классическое SPA.

Почти везде виджеты сторонних разработчиков работают изолировано внутри iframeов. При этом с точки зрения степени изоляции здесь возможны два варианта:

  1. Содержимое виджета загружается в iframe с того же домена, что и сам сервис (что обычно требует размещения клиентского кода на серверах сервиса, хотя это не обязательно можно просто проксировать). И если при этом в атрибуте sandbox iframea указать ключевое слово allow-same-origin, то в этом случае есть возможность доступа к DOMу виджета из хост-окна и наоборот. Кто-то из сервисов использует это, например, для передачи контекста открытия виджету через JavaScript-переменную. Нам такой вариант изоляции не подходит (слабоват).

  2. Содержимое виджета загружается в iframe с домена вендора (или отсутствует указание allow-same-origin) в этом случае обеспечивается наиболее полная изоляция, при которой отсутствует доступ к DOM-дереву хост-окна из виджета и наоборот. Это как раз нужный нам уровень изоляции. В этом случае взаимодействие хост-окна с виджетом возможно только сообщениями через postMessage, что, конечно, менее прямолинейно, чем прямые JavaScript-вызовы между хост-окном и виджетом. Тем не менее, если завернуть на стороне виджета вызовы postMessage и прием сообщений в удобное JS SDK то это не будет практически ничем отличаться от прямых JavaScript-вызовов.

И большинство проанализированных сервисов имеют такое JS SDK. У нас тоже были планы сразу начать делать такое JS SDK и предоставлять вендорам API взаимодействия в его терминах, но ограниченность ресурсов и насущная потребность выкатить виджеты на прод внесли свою корректировку и мы решили начать делать наше API на голом postMessage и сериализуемых JavaScript-сообщениях.

На фоне остальных выделяется amoCRM, в котором сторонние виджеты встраиваются непосредственно в DOM-документ хост-окна. При таком подходе, конечно, можно достичь большей гибкости встраивания, но это влечет и соответствующие риски знающие люди рассказывали нам о случаях, когда виджеты приложений ломали верстку общего UI. И потом поди еще разберись, какой из виджетов в этом виноват. Тем не менее, такой подход несомненно имеет право на жизнь и, если вы выбираете его, то можно посмотреть на веб-компоненты как технологическую основу реализации виджетов приложений.

Что касается описания параметров встраивания виджетов (например, куда встраивать и прочие требуемые системой параметры) для этого обычно используется JSON-структура (манифест). Мы здесь пошли немного другим путем и применяем XML технические параметры интеграции приложений с МоимСкладом разработчики описывают в виде XML-дескриптора (являющегося аналогом JSON-манифеста). Почему мы предпочли XML в эру повсеместного распространения JSONa об этом расскажем ниже.

XML-дескриптор приложения

Сразу приведем пример дескриптора приложения, чтобы было понятно, о чем далее пойдет речь:

<ServerApplication xmlns="http://personeltest.ru/aways/online.moysklad.ru/xml/ns/appstore/app/v2"                                 xmlns:xsi="http://personeltest.ru/away/www.w3.org/2001/XMLSchema-instance"                                 xsi:schemaLocation="http://personeltest.ru/aways/online.moysklad.ru/xml/ns/appstore/app/v2                          https://online.moysklad.ru/xml/ns/appstore/app/v2/application-v2.xsd">    <iframe>        <sourceUrl>https://example.com/iframe.html</sourceUrl>        <expand>true</expand>    </iframe>    <vendorApi>        <endpointBase>https://example.com/dummy-app</endpointBase>    </vendorApi>    <access>        <resource>https://online.moysklad.ru/api/remap/1.2</resource>        <scope>admin</scope>    </access>    <widgets>                <entity.counterparty.edit>                        <sourceUrl>https://example.com/widget.php</sourceUrl>                        <height>                                <fixed>150px</fixed>                        </height>            <supports>                <open-feedback/>                <save-handler/>            </supports>            <uses>                <good-folder-selector/>            </uses>                          </entity.counterparty.edit>        </widgets>    <popups>        <popup>            <name>somePopup</name>            <sourceUrl>https://example.com/popup.php</sourceUrl>        </popup>        <popup>            <name>somePopup2</name>            <sourceUrl>https://example.com/popup-2.php</sourceUrl>        </popup>    </popups></ServerApplication>

Итак, почему же мы выбрали именно XML, а не JSON? Основной наш поинт был в том, что для XML есть стандартизованный широко распространенный формальный способ описания схемы XML Schema. Для JSON тоже есть аналоги например, JSON Schema. Но для JSON-схем (в отличие от XML-схем) нам были не совсем понятны их текущий статус развития, уровень поддержки в библиотеках и прочих инструментах, таких как IDE. Также мы не знали, насколько гибкие JSON-схемы функционально. Все это требовало дополнительного анализа, в то время как опыт работы с XML-схемами у нас уже был. В итоге мы решили не тратить ресурс на изучение возможностей JSON-схем, расценив, что сама по себе форма текста XML или JSON особой разницы для наших целей не имеет, а гибкости XML-схем нам должно хватить до определенного уровня.

Какие же преимущества дает нам наличие формальной схемы описания дескриптора? Основных два:

  1. Наличие формальной схемы позволяет нам использовать автоматические библиотечные валидаторы, снижая трудозатраты на разработку. Конечно, в любом случае мощность декларативного языка описания схем ограничена, и мы изначально были готовы к тому, что часть логики валидации где-то нам придется писать самим. Но чем больше можно описать в самой схеме тем меньше валидаций дописывать нам.

  2. Имея поддержку code completion для схемы в IDE мы по сути получаем на халяву UI для редактирования дескрипторов вендорами. Это позволяет нам использовать контекстно-зависимые структуры в дескрипторе (об этом ниже), максимизируя преимущество первого пункта без ущерба для удобства написания дескриптора вендором.

Вот, например, Intellij IDEA нам подсказывает, какие вообще точки расширения доступны для виджетов:

Так выглядит в IDE точка расширения только с поддержкой протокола open-feedback (что такое протоколы - расскажем ниже):

А так выглядит точка расширения с более полным набором доступных протоколов:

Также формальная схема является полезным подспорьем к обычной текстовой документации.

Модель описания виджетов в XML-дескрипторе

Приложения могут встраивать виджеты в разные места (точки расширения) системы. Например, у нас пару десятков (или даже больше) типов документов. Для каждого типа документа свой экран редактирования и это отдельные точки встраивания. Хотелось бы добавлять новые точки расширения итеративно, так как каждая новая точка расширения требует разработки и тестирования. Оптимально было бы в первую очередь сделать и зарелизить точки расширения, наиболее востребованные вендорами. И уже потом доделывать остальные. Или может даже отложить доделку в пользу более приоритетных продуктовых задач. Хорошо бы иметь возможность на уровне схемы дескриптора задавать какие точки расширения есть в наличии на сейчас.

В разных точках расширения виджетам может быть доступен разный функционал. Другими словами, каждая точка расширения теоретически может иметь свой набор параметров. Здесь примерно такая же ситуация, как с точками расширения если мелкие фичи достаточно легко добавлять сразу во все точки расширения, то крупную фичу, затратную в разработке, стоит сначала сделать и запустить для одной точки, посмотреть для начала как она взлетит, получить обратную связь от вендоров, возможно что-то доработать и потом уже масштабировать на всю систему. Или, например, в каких-то точках расширения может быть специфичный только для этих точек функционал, который просто не применим в других местах. Хорошо бы иметь возможность на уровне схемы дескриптора для конкретной точки расширения описывать доступный в ней функционал.

Учитывая два вышеизложенных соображения мы остановили свой выбор на следующей структуре описания, в которой имя точки расширения является XML-тегом:

<widgets>    <some.extension.point1>...</some.extension.point1>    <some.extension.point2>...</some.extension.point2></widgets>

Вместо, например, такой возможной:

<widgets>    <widget location="some.extension.point1">...</widget>    <widget location="some.extension.point2">...</widget></widgets>

Выбранный вариант позволяет нам явно и просто определять в XML-схеме свои собственные структуры (подсхемы) для каждой точки расширения по отдельности. Если для каких-то точек расширения подсхемы одинаковые то эти точки расширения в схеме могут ссылаться на один и тот же тип. С учетом этого, а также возможности наследования для сложных типов в XML-схеме, мы эффективно избавляемся от дублирования кода в самой XML-схеме.

О каком функционале в точках расширения идет речь и зачем вообще это выносить в дескриптор? Почему бы просто для каждой точки расширения в документации не указать, что может делать виджет, какой функционал ему доступен и какие параметры он может задать для виджета в этой точки расширения?

Рассмотрим на примере:

<document.customerorder.edit>    <sourceUrl>https://example.com/widget.php</sourceUrl>    <height>        <fixed>150px</fixed>    </height>    <supports>...</supports>    <uses>...</uses></document.customerorder.edit>

Здесь sourceUrl и height являются общими параметрами для всех виджетов. Параметр sourceUrl задает откуда будет загружен код виджета в iframe, а height описывает высоту блока виджета (как вы помните, у нас есть требование про отсутствие дергания поэтому начали мы с поддержки только фиксированный высоты для виджета, которую пока нельзя изменять, а ширина у нас одинаковая для всех виджетов по дизайну UI).

Если мы захотим сделать поддержку динамической высоты (определяемой виджетом при открытии страницы с ним) в какой-то специфичной точке расширения (где, например, дёргание страницы несущественно), то мы сможем на уровне схемы дескриптора сделать так, что указывать <height><dynamic/></height> можно будет только для этой точки расширения. И вендор уже на этапе написания дескриптора будет знать это работает только здесь. Это снижает риск того, что вендор не уследит, сделает виджет в расчете на <dynamic/> и обнаружит, что оно не работает в требуемой точке расширения на более позднем этапе разработки при тестировании или отладке.

С supports и uses ситуация интересней. Об этом далее.

Протоколы и сообщения

Для описания интерфейсов взаимодействия МоегоСклада с виджетами мы используем понятия протоколов и сообщений (на самом деле модель описания API чуть сложнее, но в рамках данной статьи опустим второстепенные детали):

Рассмотрим на примере следующего описания виджета в дескрипторе:

<document.customerorder.edit>    <sourceUrl>https://example.com/widget.php</sourceUrl>    <height>        <fixed>150px</fixed>    </height>    <supports>        <open-feedback/>        <save-handler/>        <change-handler>            <expand>agent</expand>            <expand>positions.assortment</expand>        </change-handler>    </supports>    <uses>        <good-folder-selector/>    </uses></document.customerorder.edit>

Итак.

Протокол это конкретный набор спецификаций взаимодействия приложения, расширяющего UI МоегоСклада и МоегоСклада, как платформы. Протокол может включать в себя в общем случае разные типы взаимодействия, например такие как HTTP и обмен сообщениями по postMesssage. В протокол может входить несколько сообщений.

Протоколы мы делим на несколько типов.

Основной протокол это протокол, который обязательно должен поддерживать виджет/плагин определенного типа (зависит от типа плагина). Не требует явного объявления виджетом. Например, для виджетов основной протокол включает в себя указание параметров sourceUrl и height, загрузку кода виджета в iframe по HTTP с передачей контекста текущего пользователя и отправку хост-окном postMessage-сообщения Open с указанием идентификатора открываемой пользователем сущности или документа.

Пример встраивания виджета в DOM-дерево страницы МоегоСклада:

Пример сообщения Open:

{  "name": "Open",  "messageId": 12345,  "extensionPoint": "entity.counterparty.edit",  "objectId": "8e9512f3-111b-11ea-0a80-02a2000a3c9c",  "displayMode": "expanded"}

Дополнительный протокол это дополнительный (к основному) протокол, который может поддерживать плагин. Требует явного объявления в теге supports в дескрипторе (в блоке плагина). Перечень доступных дополнительных протоколов зависит от точки расширения.

В нашем примере выше в теге supports для виджета указаны три дополнительных протокола. Посмотрим на них подробнее.

оpen-feedback (протокол без параметров) поддержка виджетом этого протокола означает, что при открытии экрана редактирования система закрывает виджет заглушкой и убирает заглушку, отображая содержимое виджета, только при явном получении сообщения OpenFeedback от виджета. Это нужно для того, чтобы виджет успел перерисовать свое содержимое для вновь открываемого объекта. Иначе вследствии кэширования виджета пользователь может какое-то время видеть состояние для объекта, который пользователь открывал до этого.

Заглушка выглядит как простая рамка с таким же серым фоном как и сама страница:

Пример сообщения OpenFeedback:

{  "name": "OpenFeedback",  "correlationId": 12345}  

save-handler (протокол без параметров) если виджет указывает поддержку этого протокола, то хост-окно при нажатии пользователем кнопки Сохранить отправляет виджету сообщение Save.

Пример сообщения Save:

{  "name": "Save",  "messageId": 32109,  "extensionPoint": "entity.counterparty.edit",  "objectId": "8e9512f3-111b-11ea-0a80-02a2000a3c9c"}

сhange-handler (протокол с параметрами) на примере этого протокола, который на момент написания статьи еще находится в разработке, можно видеть, что есть возможность определять параметры для дополнительных протоколов (аналогично параметрам для основных протоколов). Виджет, объявляющий поддержку протокола change-handler, начинает получать от хост-окна данные о редактируемом пользователем объекте в режиме онлайн при изменении какого-либо атрибута объекта (например, при добавлении нового товара в заказ покупателя) хост-окно отправляет виджету сообщение Change с JSONом с данными объкета. С помощью параметров протокола expand вендор может дополнительно запросить замену ссылок на объекты аналогично тому, как это делается у нас в JSON API (в первом релизе change-handler будет без поддержки допольнительных параметров expand).

Сервисный протокол это протокол, который реализует хост-окно с целью предоставления плагину некоторого сервисного функционала. Перечень доступных сервисных протоколов зависит от точки расширения. Для использования сервисного протокола плагином требуется явное объявление указание сервисного протокола в теге uses в дескрипторе (в блоке плагина). Сервисы похожи на дополнительные протоколы, но отличаются своей узкой направленностью взаимодействия виджет -> хост-окно в режиме запрос-ответ.

Пример сервисного протокола good-folder-selector. Этот сервис виджетам приложений переиспользовать существующий в МоемСкладе селектор группы товаров с получением виджетом результата выбора пользователя. Работает это так:

1. Виджет отправляет хост-окну сообщение SelectGoodFolderRequest (например, при нажатии пользователем какой-либо кнопки в виджете):

{  "name": "SelectGoodFolderRequest",  "messageId": 12345}

2. Хост-окно открывает встроенный в МойСклад селектор:

3. Пользователь совершает выбор и хост-окно возвращает виджету результат в сообщении SelectGoodFolderResponse:

{  "name": "SelectGoodFolderResponse",  "correlationId": 12345,  "selected": true,  "goodFolderId": "8e9512f3-111b-11ea-0a80-02a2000a3c9c"}

Обязуя вендора статически указывать для виджета поддерживаемые дополнительные протоколы и используемые виджетом сервисы мы получаем следующие возможности и преимущества:

  1. Возможность указания вендором параметров протокола, если таковые у протокола имеются.

  2. С помощью XML-схемы дескриптора вендор может узнать в каких точках расширения какие протоколы поддерживаются, а мы можем статически провалидировать дескриптор на корректность при (при загрузке вендором дескриптора в систему).

  3. Также статическим анализом по дескрипторам мы всегда можем легко можем посмотреть/замерять метрики, какие виджеты какой функционал используют и с какими параметрами. Привет контрактным тестам: например, если вдруг окажется, что какую-то фичу виджеты перестали использовать, то мы будем это знать точно и сможем ее безопасно выпилить или зарефакторить, если решим, что это актуально.

  4. Зная, какой именно дополнительный и сервисный функционал используют виджеты мы можем оптимизировать работы хост-окна. Например, если виджеты на экране не используют change-handler, то хост-окно может вообще не инициализировать соответствующий функционал, экономя ресурсы компьютера пользователя (чтобы может быть важно для больших масштабных SPA-приложений типа нашего).

Альтернативой статического указания протоколов для виджета в дескрипторе могло бы быть динамическая регистрация при загрузке виджета (например, через какое-нибудь сообщение Init через postMessage, которое бы виджет отправлял при загрузке своего кода в iframe. Конечно, все вышеперечисленные пункты возможностей и преимуществ статического способа можно повторить и в динамическом, но это может потребовать больше ресурсов для разработки (нужно собирать метрики из браузера), больше ресурсов в рантайме (процессор, память на клиенте и сетевой трафик). При этом, ориентируясь только на динамические метрики, мы уже не так достоверно сможем определять что именно используют виджеты например, если где-то в уголке лежит редко используемое пользователями приложение, запускаемое раз в месяц (и которое запускалось последний раз месяц назад). Тем не менее, динамические метрики тоже полезны и хорошо дополняют статические в плане реальной картины происходящего на проде.

Как работают виджеты

Как это работает всё вместе и какие именно функциональные возможности есть у наших виджетов на текущий момент можно прочитать в документации. Дублировать это здесь наверное будет излишним.

Что дальше?

Что у нас есть еще на текущий момент и какие дальнейшие планы?

Из интересного хотелось бы отметить кастомные попапы. Это возможность виджету открыть большое попап-окно с содержимым, определяемым приложением. Попап-окно по завершению своей работы может вернуть результат виджету. Кастомные попапы являются основным протоколом аналогично виджетам. В открываемом попапе находится iframe, в который загружается код попапа аналогично коду виджета. Виджет взаимодействует с попапом используя postMessage-сообщения через посредничество хост-окна. Подробнее о кастомных попапах с примерами можно посмотреть в документации.

На момент написания статьи активно работаем над упомянутом выше протоколом change-handler. В планах дальнейшее развитие этого направления протокол update, который позволит виджетам обновлять данные редактируемого объекта в хост-окне.

Идеи на перспективу:

  • Завернуть голое взаимодействие через postMessage в удобное JavaScript/TypeScript Widget SDK для вендоров

  • Постепенное распространение поддержки виджетов и соответствующих протоколов на всех экранах МоегоСклада

  • Новые типы UI-плагинов (новые типы точек расширения) например, такие как:

    • Кнопки действий, пункты в выпадающих или контекстных меню

    • Столбцы в гридах

    • Кастомные вкладки

  • Стандартные модальные диалоги

  • Дальнейшее развитие возможности использования виджетами существующих интерфейсных объектов МоегоСклада

  • Взаимодействие между виджетами одного приложения

  • Навигация внутри UI МоегоСклада

  • Доступ к эндпоинтам RESP API через Widget SDK

Объем работы по расширению возможностей интеграции в UI нашего сервиса огромный мы планомерно двигаем наш SaaS-продукт в сторону гибкой, максимально расширяемой и удобной платформы для разработчиков приложений.

При этом МойСклад активно помогает вендорам с продвижением и продажей приложений рассказывает пользователям МоегоСклада о новых приложениях в email-рассылках и соцсетях, проводит совместные с вендорами вебинары для пользователей МоегоСклада, продвигает приложения баннерами внутри сервиса.

Если вы хотите попробовать свои силы в разработке приложений для крупного SaaS-сервиса сделать первый шаг проще простого достаточно заполнить небольшую анкету, дальнейшие инструкции придут вам на почту.

Подробнее..

Изоляция и бункер (Silos) для хранилищ данных в мультиарендных (multitenant) решениях

01.07.2020 06:12:44 | Автор: admin

В одной из прошлых статей мы разобрали несколько ключевых моментов настройки мультиарендного (далее multitenant) кластера Amazon EKS. Что касается безопасности, то это очень обширная тема. Важно понимать, что безопасность касается не только кластера приложений, но и хранилища данных.

AWS в качестве платформы для SaaS решений обладает большой вариативностью для хранилищ данных. Но, как и везде, грамотная настройка безопасности, проработка multitenant-архитектуры под неё, настройка различных уровней изоляций требуют определенных знаний и понимания специфики работы.

Multitenant хранилища данных


Управлять multitenant данными удобно с помощью бункеров, Silo. Основная особенность разделение арендных данных (далее tenant) в multitenant решениях SaaS. Но перед тем, как поговорить о конкретных кейсах, затронем немного общей теории.

Скрытый текст
Термин бункер еще не окончательно прижился в русском сленге IT-специалистов, но мы будем использовать именно его, по аналогии с озером данных.

Доступ должен быть только у одного tenant


Безопасность данных это приоритет для SaaS решений. Нужно защитить данные не только от внешних вторжений, но и от взаимодействия с другими tenant. Даже в случае, когда два арендатора сотрудничают друг с другом, а доступ к общим данным контролируют и настраивают согласно бизнес-логике.

Отраслевые стандарты шифрования и безопасности


Стандарты tenant могут отличаться в зависимости от отрасли. Некоторые требуют шифрования данных с четко определенной частотой смены ключей, в то время как остальным вместо общих ключей нужны tenant ориентированные. Благодаря идентификации массивов данных с конкретными tenant, разные стандарты шифрования и настроек безопасности можно применять к отдельным tenant в качестве исключения.

Настройка производительности на основании подписки tenant


Обычно, провайдеры SaaS рекомендуют общий рабочий процесс для всех tenant. С точки зрения практики, это не всегда может быть удобно по отношению к конкретной бизнес-логике. Поэтому можно сделать по-другом. Каждому tenant присваивают разные наборы свойств и пределы производительности в зависимости от стандарта TIER. Чтобы клиенты получали ту производительность, которая заявлена в соглашении SaaS провайдерам приходиться отслеживать использование индивидуальных tenant. Благодаря этому все клиенты получают равноценный доступ к ресурсам.

Скрытый текст
Естественно, это отразится на счетах клиента. Тот, кто использует больше ресурсов, заплатит больше.

Управление данными


С ростом SaaS-сервиса растет и количество tenant. Если клиент меняет провайдера, чаще всего он хочет, чтобы все данные перезалили на другой ресурс, а старые удалили. Если первое желание можно оспорить, то исполнение второго гарантируется Общими правилами Евросоюза по защите данных. Для корректного исполнения правил, SaaS провайдер должен изначально идентифицировать массивы данных отдельных tenant.

Скрытый текст
Почему стоит упомянуть именно регламент Евросоюза и касается ли он компаний из России?! Да, если жители Евросоюза будут пользоваться услугами компаний, которые собирают персональные данные. А это примерно треть крупных компаний из России. Но подобную тему стоит наверное выделить в отдельную статью и расписать подробнее.

Как превратить обычное Хранилище данных в multitenant


Сразу хочется отметить, что волшебного кода не существует. Нельзя так просто взять и настроить tenant бункер хранилища данных. Нужно учитывать следующие аспекты:

  • Соглашение об обслуживании;
  • Шаблоны доступа для чтения и записи;
  • Соответствие нормативам;
  • Расходы.

Но есть ряд общепринятых практик разделения и изоляции данных. Рассмотрим эти кейсы на примере реляционной БД Amazon Aurora.

Секционирование tenant данных в общих хранилищах и инстансах



Таблица используется всеми tenant. Индивидуальные данные разделены и идентифицированы ключом tenant_id. Авторизация в реляционной БД реализована на уровне строк (row-level security). Доступ к приложению работает на основании политики доступа и учитывает конкретный tenant.

Плюсы:

  • Это недорого.

Минусы:

  • Авторизация на уровне базы данных. Это подразумевает несколько механизмов авторизации в рамках решения: AWS IAM и политики БД;
  • Для идентификации tenant придется разработать логику приложения;
  • Без полной изоляции невозможно обеспечить выполнение соглашения TIER об обслуживании;
  • Авторизация на уровне БД ограничивает возможности отслеживания доступа с помощью AWS CloudTrail. Это можно компенсировать только добавлением информации извне. А лучше бы заниматься отслеживанием и устранением неполадок.

Изоляция данных на общих instance



Арендность (tenancy) по-прежнему расшаривается на уровне инстанса. Но при этом бункеризация данных происходит на уровне базы данных. Благодаря этому возможна аутентификация и авторизация AWS IAM.

Плюсы:

  • Это недорого;
  • За аутентификацию и авторизацию полностью отвечает AWS IAM;
  • AWS IAM позволяет вести журнал аудита на AWS CloudTrail без костылей в виде отдельных приложений.

Минусы:

  • Базовые инстансы БД шарятся между tenant, в связи с этим возможен отток ресурсов, что не позволяет полностью исполнить соглашение TIER об обслуживании.

Изоляция инстансов базы данных для tenant



На схеме показана реализация tenant базы данных при изоляции инстансов. На сегодняшний день это, наверное, лучшее решение, сочетающее в себе безопасность и надежность. Здесь есть и AWS IAM, и аудит от AWS CloudTrail, и полная изоляция tenant.

Плюсы:

  • AWS IAM обеспечивает как аутентификацию, так и авторизацию;
  • Есть полноценный аудит;
  • Четкое распределение ресурсов между tenant.

Минусы:

  • Изоляция БД и инстансов среди tenant это дорого.

Как реализован доступ приложений к multitenant данным


Обеспечить правильный доступ приложений к данным важнее, чем хранить данные в модели арендной изоляции (tenant), которая соответствует бизнес-требованиям. Это не сложно, если использовать AWS IAM для управления доступом (см. примеры выше). Приложения, которые обеспечивают доступ к данным для tenant также могут использовать AWS IAM. Это можно рассмотреть на примере Amazon EKS.

Чтобы обеспечить доступ к IAM на уровне pod в EKS, прекрасно подойдёт OpenID Connect (OIDC), вместе с аннотациями к учетной записи Kubernetes. В результате произойдет обмен JWT с STS, что создаст временный доступ приложений к необходимым облачным ресурсам. При таком подходе нет необходимости вводить расширенные разрешения для базовых рабочих узлов Amazon EKS. Вместо этого можно настроить только разрешения IAM для учетной записи, связанной с pod. Это делается на основе фактических разрешений приложения, которое работает как часть pod. В итоге получаем полный контроль разрешений приложений и pod.

Скрытый текст
А благодаря тому, что AWS CloudTrail регистрирует каждое обращение EKS pod к API, можно вести детальный журнал событий.

Интеграция IAM поддерживает комплексную систему авторизации для доступа tenant к хранилищам данных. В этом случае доступ к БД контролируется только через аутентификацию, а значит, нужно вводить еще один уровень безопасности.

Amazon EKS получает доступ к multitenant БД AWS DynamoDB




Пристальней посмотрим на multitenant доступ, как приложение, работающее на Amazon EKS, получает доступ к multitenant базе данных Amazon DynamoDB. Во многих случаях multitenant процессы в Amazon DynamoDB реализуют на уровне таблиц (в соотношении таблиц и tenant 1:1). Как пример рассмотрим принцип AWS IAM (aws-dynamodb-tenant1-policy), который отлично иллюстрирует шаблон доступа, где все данные связаны с Tenant1.

{   ...   "Statement": [       {           "Sid": "Tenant1",           "Effect": "Allow",           "Action": "dynamodb:*",           "Resource": "arn:aws:dynamodb:${region}-${account_id}:table/Tenant1"       }   ]}


Следующий шаг связать эту роль с учетной записью кластера EKS, которая использует OpenID.

eksctl utils associate-iam-oidc-provider \      --name my-cluster \      --approve \      --region ${region}

eksctl create iamserviceaccount \      --name tenant1-service-account \      --cluster my-cluster \      --attach-policy-arn arn:aws:iam::xxxx:policy/aws-dynamodb-tenant1-policy \      --approve \      --region ${region}

Определение pod, содержащее необходимую спецификацию serviceAccountName, поможет использовать новую учетную запись службы tenant1-service-account.

apiVersion: v1kind: Podmetadata: name: my-podspec:serviceAccountName: tenant1-service-account containers: - name: tenant1

Несмотря на то, что учетная запись и политика IAM tenant ориентированы, статичны и управляются с помощью таких инструментов, как Terraform и Ansible, спецификацию pod можно настроить динамично. Если вы используете генератор шаблонов, например, Helm, serviceAccountName можно установить в качестве переменной в соответствующие учетные записи tenant служб. В итоге у каждого tenant будет свое выделенное развертывание одного и того же приложения. Фактически, у каждого tenant должно быть выделенное пространство имен, где и будут запускаться приложения.

Скрытый текст
Эти же методы можно реализовать с помощью Amazon Aurora Serverless, Amazon Neptune и контейнеров Amazon S3.

Заключение


Для SaaS-услуг важно хорошо продумать, как будет осуществляться доступ к данным. Следует учесть требования к хранилищу, шифрованию, производительности и управлению со стороны tenant. В multitenant нет какого-то одного предпочтительного способа разделения данных. Преимуществом выполнения multitenant рабочих нагрузок на AWS является AWS IAM, который можно использовать для того, чтобы упростить контроль доступа к tenant данным. К тому же, AWS IAM поможет настроить доступ приложений к данным в динамическом режиме.

Описанные особенности и приемы, которые могут пригодиться, затронули немного теории. Но частных случаях всегда необходимо самостоятельно анализировать исходную информацию и создавать персонализированные решение.
Подробнее..

Построение сетевой инфраструктуры на базе Nebula. Часть 1 задачи и решения

24.09.2020 12:15:14 | Автор: admin


В статье пойдет речь о проблемах организации сетевой инфраструктуры традиционным способом и о методах решения тех же самых вопросов при помощи облачных технологий.


Для справки. Nebula облачная среда SaaS для удаленного поддержания сетевой инфраструктуры. Все устройства, поддерживающие Nebula, управляются из облака через безопасное соединение. Можно управлять крупной распределенной сетевой инфраструктурой из единого центра, не затратив усилия по его созданию.


Для чего нужен очередной облачный сервис?


Основная проблема при работе с сетевой инфраструктурой это не проектирование сети и закупка оборудования, и даже не монтаж в стойку, а все то остальное, что с этой сетью в дальнейшем предстоит делать.


Сеть новая заботы старые


При вводе в эксплуатацию нового узла сети после монтажа и подключения оборудования начинается первоначальная настройка. С точки зрения большого начальства ничего сложного: Берем рабочую документацию по проекту и начинаем настраивать... Это так здорово говорится, когда все сетевые элементы стоят в одном ЦОД. Если же они разбросаны по филиалам, начинается головная боль с обеспечением удаленного доступа. Такой вот замкнутый круг: чтобы получить удаленный доступ по сети, нужно настроить сетевое оборудование, а для этого нужен доступ по сети...


Приходится придумывать различные схемы для выхода из вышеописанного тупика. Например, ноутбук с доступом в Интернет через USB 4G модем подключается через патчкорд к настраиваемой сети. На этом ноутбуке поднимается VPN клиент, и через него сетевой администратор из штаб-квартиры пытается получить доступ к сети филиала. Схема не самая прозрачная даже если привезти ноутбук с заранее настроенным VPN на удаленную площадку и попросить его включить, далеко не факт что всё заработает с первого раза. Особенно если речь о другом регионе с другим провайдером.


Получается, самый надежный способ держать на другом конце провода хорошего специалиста, который сможет настроить свою часть согласно проекту. Если такого в штате филиала не имеется, остаются варианты: либо аутсорсинг, либо командировка.


Ещё нужна система мониторинга. Её требуется установить, настроить, обслуживать (хотя бы следить за местом на диске, и регулярно делать резервные копии). И которая ничего не знает о наших устройствах, пока мы ей не сообщим. Для этого нужно прописать настройки для всех единиц оборудования и регулярно следить за актуальностью записей.


Замечательно, когда в штате есть свой человек-оркестр, который, помимо специфических знаний сетевого администратора, умеет работать с Zabbix или с другой аналогичной системой. В противном случае берем ещё одного человека в штат или отдаем на аутсорсинг.


Примечание. Самые печальные проколы начинаются со слов: Да что там этот Zabbix (Nagios,OpenView и т.д.) настраивать? Я сейчас вот его быстренько подниму и готово!


От внедрения к эксплуатации


Рассмотрим конкретный пример.


Получено тревожное сообщение о том, что где-то не отвечает точка доступа WiFi.


Где она находится?


Разумеется, у хорошего сетевого администратора есть свой личный справочник, в котором всё записано. Вопросы начинаются, когда этой информацией нужно делиться. Например, надо срочно послать гонца, чтобы разобраться на месте, а для этого нужно выдать что-то вроде: Точка доступа в бизнес-центре на улице Строителей, дом 1, на 3-м этаже, кабинет N 301 рядом с входной дверью под потолком.


Допустим, нам повезло и точка доступа питается через PoE, а коммутатор позволяет её перезагрузить удаленно. Ехать не надо, но нужен удаленный доступ до коммутатора. Остается настроить проброс портов через PAT на маршрутизаторе, разобраться с VLAN для подключения извне и так далее. Хорошо, если все настроено заранее. Работа, может, и не сложная, но делать нужно.


Итак, точку по питанию перезагрузили. Не помогло?


Допустим, что-то не так в аппаратной части. Теперь ищем информацию о гарантии, начале эксплуатации и других интересующих деталях.


Кстати о WiFi. Использование домашнего варианта WPA2-PSK, в котором один ключ на все устройства в корпоративной среде не рекомендуется. Во-первых, один ключ на всех это попросту небезопасно, во-вторых, когда один сотрудник увольняется, то приходится менять этот общий ключ и заново выполнять настройки на всех устройствах у всех пользователей. Чтобы избежать подобных неприятностей, существует WPA2-Enterprise с индивидуальной аутентификацией для каждого пользователя. Но для этого нужен RADIUS сервер ещё одна инфраструктурная единица, которую надо контролировать, делать резервные копии и так далее.


Обратите внимание, на каждом этапе, будь то внедрение или эксплуатация, мы пользовались вспомогательными системами. Это и ноутбук со сторонним выходом в Интернет, и система мониторинга, и справочная база по оборудованию, и RADIUS как система аутентификации. Помимо сетевых устройств, приходится обслуживать ещё и сторонние сервисы.


В таких случаях можно услышать совет: Отдать в облако и не мучиться. Наверняка есть облачный Zabbix, возможно где-то есть облачный RADIUS, и даже облачная база данных, чтобы вести список устройств. Беда в том, что это нужно не порознь, а в одном флаконе. И всё равно встают вопросы организации доступа, первоначальной настройки устройств, безопасности и многое другое.


Как это выглядит при использовании Nebula?


Разумеется, первоначально облако ничего не знает ни о наших планах, ни о приобретенном оборудовании.


Сперва создается профиль организации. То есть вся инфраструктура: штаб-квартира и филиалы вначале прописывается в облаке. Указываются реквизиты, создаются учетные записи для делегирования полномочий.


Зарегистрировать используемые устройства в облаке можно двумя способами: по старинке просто вписав серийник при заполнении веб-формы или отсканировав QR-код при помощи мобильного телефона. Всё что нужно для второго способа смартфон с камерой и доступом в Интернет, в том числе через мобильного провайдера.


Разумеется, необходимую инфраструктуру для хранения информации, как учетной, так и настроек предоставляет Zyxel Nebula.



Рисунок 1. Отчет безопасности Nebula Control Center.


А что с настройкой доступа? Открытием портов, пробросом трафика через входящий шлюз, всем тем, что администраторы безопасности ласково называют: наковырять дырок? К счастью, этого всего делать не нужно. Устройства под управлением Nebula устанавливают исходящее соединение. И администратор для настройки подключается не к отдельному устройству, а к облаку. Nebula выступает посредником между двумя соединениями: с устройством и с компьютером сетевого администратора. Это означает, что этап с вызовом приходящего админа можно свести к минимуму, либо пропустить вовсе. И никаких дополнительных дырок на файрволе.


А как же RADUIS сервер? Ведь нужна какая-то централизованная аутентификация!


И эти функцию тоже берет на себя Nеbula. Аутентификации учетных записей для доступа к оборудования идет через защищенную базу данных. Это сильно упрощает делегирование или изъятие прав по управлению системой. Нужно передать права заводим пользователя, назначаем роль. Нужно отобрать права выполняем обратные действия.


Отдельно стоит сказать о WPA2-Enterprise, для которого нужен отдельный сервис аутентификации. У Zyxel Nebula есть собственный аналог DPPSK, который позволяет использовать WPA2-PSK с индивидуальным ключом для каждого пользователя.


Неудобные вопросы


Ниже попробуем дать ответы на наиболее каверзные вопросы, которые часто задают при вхождении в облачный сервис


А это точно безопасно?


При любом делегировании контроля и управления для обеспечения безопасности важную роль играют два фактора: анонимизация и шифрование.


Использование шифрования для защиты трафика от посторонних глаз это читателям более или менее знакомо.


Анонимизация скрывает от персонала облачного провайдера информацию о владельце и источнике. Персональная информация удаляется, а записям присваивается безликий идентификатор. Ни разработчик облачного ПО, ни администратор, обслуживающий облачную систему не могут знать владельца запросов. Откуда это пришло? Кого это может заинтересовать?, такие вопросы останутся без ответа. Отсутствие данных о владельце и источнике делает инсайдинг бессмысленной тратой времени.


Если сравнивать данный подход с традиционной практикой передачи на аутсорсинг или найма приходящего админа очевидно, что облачные технологии безопаснее. Приходящий ИТ специалист знает о своей подопечной организации достаточно много, и может волей или неволей нанести существенный вред в плане безопасности. Ещё надо решить вопрос увольнения или завершения договора. Иногда, помимо блокировки или удаления учетной записи, это влечет глобальную смену паролей для доступа к сервисам, а также аудит всех ресурсов на предмет забытых точек входа и возможных закладок.


Насколько Nebula дороже или дешевле приходящего админа?


Всё познается в сравнении. Базовые функции Nebula доступны бесплатно. Собственно, что может быть ещё дешевле?


Разумеется, совершенно обойтись без сетевого администратора или лица, его заменяющего не получится. Вопрос в количестве людей, их специализации и распределении по площадкам.


Что же касается платного расширенного сервиса, то ставить прямой вопрос: дороже или дешевле такой подход всегда будет неточным и однобоким. Правильнее будет сравнить множество факторов, начиная от денег на оплату работы конкретных специалистов и заканчивая затратами по обеспечению их взаимодействия с подрядной организацией или физлицом: контроль качества выполнения, составление документации, поддержание уровня безопасности и так далее.


Если же говорить на тему выгодно или не выгодно приобретать платный пакет услуг (Pro-Pack), то примерный ответ может звучать так: если организация маленькая, можно обойтись базовой версией, если организация растет, то имеет смысл подумать о Pro-Pack. Различие между версиями Zyxel Nebula можно посмотреть в таблице 1.


Таблица 1. Различия наборов функций базовой версии и версии Pro-Pack для Nebula.



Это и расширенная отчетность, и аудит пользователей, и клонирование конфигурации, и многое другое.


А что с защитой трафика?


Nebula использует протокол NETCONF для обеспечения безопасности работы с сетевым оборудованием.


NETCONF может работать поверх нескольких транспортных протоколов:



Если сравнивать NETCONF с другими методами, например, управление через SNMP следует отметить, что NETCONF поддерживает исходящее TCP-соединение для преодоления барьера NAT и считается более надежным.


Что с поддержкой оборудования?


Разумеется, не стоит превращать серверную в зоопарк с представителями редких и вымирающих видов оборудования. Крайне желательно, чтобы оборудование, объединенное технологией управления, закрывало все направления: от центрального коммутатора до точек доступа. Инженеры Zyxel позаботились о такой возможности. Под управлением Nebula работает множество устройств:


  • центральные коммутаторы 10G;


  • коммутаторы уровня доступа;


  • коммутаторы с PoE;


  • точки доступа;


  • сетевые шлюзы.



Используя широкий спектр поддерживаемых устройств можно строить сети под различные типы задач. Особенно это актуально для компаний, которые растут не вверх, а вширь, постоянно осваивая новые площадки для ведения бизнеса.


Постоянное развитие


Сетевые устройства с традиционным методом управления имеют только один путь совершенствования изменение самого устройства, будь то новая прошивка или дополнительные модули. В случае с Zyxel Nebula есть дополнительный путь для улучшений через совершенствование облачной инфраструктуры. Например, после обновления Nebula Control Center (NCC) до версии 10.1. (21 сентября 2020) пользователям доступны новые возможности, вот некоторые из них:


  • владелец организации теперь может передать все права владения другому администратору в той же организации;


  • новая роль под названием Представитель владельца, которая имеет те же права, что и владелец организации;


  • новая функция обновления прошивки в масштабах всей организации (функция Pro-Pack);


  • в топологию добавлены две новые опции: перезагрузка устройства и включение и выключение питания порта PoE (функция Pro-Pack);


  • поддержка новых моделей точек доступа: WAC500, WAC500H, WAC5302D-Sv2 и NWA1123ACv3;


  • поддержка аутентификации по ваучерам с печатьюQR-кодов (функцияPro-Pack).



Полезные ссылки


  1. Telegram chat Zyxel


  2. Форум по оборудованию Zyxel


  3. Много полезного видео на канале Youtube


  4. Zyxel Nebula простота управления как основа экономии


  5. Различие между версиями Zyxel Nebula


  6. Zyxel Nebula и рост компании


  7. Сверхновое облако Zyxel Nebula экономичный путь к безопасности?


  8. Zyxel Nebula Options for Your Business


Подробнее..

SaaS и ALEPIZ мониторинг и управление инфраструктурой

20.05.2021 12:07:50 | Автор: admin

Я системный администратор, более 20 лет занимаюсь управлением и мониторингом критичной в масштабах страны инфраструктуры. Услуги, которые я администрирую, предоставляются по модели SaaS (Software as a Service аренда ПО). Это моя первая публикация, я решил поделиться своими наработками в этой области, возможно кому-то это будет полезно.

ALEPIZ распространяется бесплатно по лицензии GPL v3ALEPIZ распространяется бесплатно по лицензии GPL v3

Существует много программного обеспечения для управления и мониторинга. Проблема большинства таких решений состоит в том, что, если инфраструктура построена не по стандартам, заложенным в программный продукт, применять его либо сложно, либо вообще невозможно.
С другой стороны, заниматься мониторингом и управлением даже в небольших организациях без применения автоматизации непросто. В статье пойдет речь о программном решении, которое я разработал с учетом опыта эксплуатации существующего на рынке программного обеспечения.

Хочу заметить, что эта статья не является рекламой. Я пишу ее как частное лицо и не представляю какую-либо организацию. Решение доступно вместе с исходным кодом и находится в свободном доступе. Вы можете использовать его совершенно бесплатно по своему усмотрению.

История

Первую систему мониторинга мы разработали сами. Она оказалась очень сложной для эксплуатации в условиях быстро развивающейся инфраструктуры. Поэтому, через несколько лет было принято решение о переходе на один из представленных на рынке продуктов.

В начале 2000 мы начали внедрять, как тогда казалось подходящую нам и довольно распространенную систему мониторинга. В процессе её адаптации через некоторое время стало понятно, что использовать систему как есть не получится. Пришлось заниматься доработкой. В результате, за 10 лет эксплуатации и разработки мы получили систему по управлению и мониторингу с организацией рабочих процессов между подразделениями. В качестве ядра системы использовалась выбранная нами система мониторинга и ее БД.

Обновить ее мы не могли, потому что разработчики системы мониторинга меняли структуру БД, к которой было жестко привязано наше ПО. Несколько лет назад производительности системы стало существенно не хватать. Появилось много неудобств, связанных с недостаточно проработанной архитектурой как системы мониторинга, так и наших доработок.

Я решил учесть ошибки и разработать новую систему. Большинство продуктов создаются разработчиками ПО, а я системный администратор. Я хуже знаю процесс разработки, но проектирование и реализация системы для системных администраторов в данном случае сделана системным администратором, с учетом нюансов нашей работы. Считаю, что это положительно сказалось на конечном результате

В своей организации я разрабатывать систему не мог, потому что у меня на это нет времени и в мои обязанности не входит разработка какого-либо ПО. Я решил сделать создание системы своим хобби и занимался ей в свободное от работы время. Начал заниматься разработкой в 2014 году. Когда я все это планировал, я не думал, что это хобби потребует от меня столько времени и ресурсов. Несмотря на все сложности, я все-таки смог довести процесс до конца. В настоящее время у системы есть реальные внедрения и большая часть запланированных функций реализована.

ALEPIZ

Новая система получила название ALEPIZ. Я не планировал ее распространять, но создание системы затянулось. Чтобы не платить за средства разработки я выполнил условия для их бесплатного использования: выложил ПО на GitHub под лицензией GPL v3 и создал сайт alepiz.com.

Data Browser служит для отображения собранных исторических данныхData Browser служит для отображения собранных исторических данных

Архитектура системы

Для того, чтобы не столкнуться с проблемами масштабируемости, архитектура системы построена вокруг микроядра, для которого разрабатываются различные модули.

Тестирование и эксплуатация ведется под ОС Microsoft Windows. Выбор ОС продиктован архитектурой программного обеспечения, которое используется в моей организации.

Для возможности портирования в будущем на другие архитектуры, в качестве платформы были выбраны JavaScript и NodeJS. Это так же позволило унифицировать разработку backend и frontend и использовать асинхронность JavaScript для достижения требуемой производительности. Применение потоков (threads) в NodeJS невозможно из-за отсутствия поддержки во многих модулях, поэтому используется схема с запуском нескольких процессов.

В ALEPIZ встроен Web сервер и сервер БД на основе быстрой и простой SQLITE. При развертывании системы нет необходимости в установке дополнительного ПО: ALEPIZ включает все требуемые компоненты. Для ускорения работы с БД реализована система кэширования, разработанная специально для ALEPIZ.

Есть периодическая очистка старых исторических данных, которая позволяет сделать размер БД близким к постоянному. Реализованы встроенная репликация и резервное копирование БД, система интеллектуального пропуска похожих данных, автоматическая ротация логов, система настройки прав ролевого доступа для пользователей и многое другое.

Сейчас ALEPIZ обслуживает одновременно более 250 000 метрик. Их количество постоянно увеличивается. Сбор данных по метрике происходит примерно раз в 3060 секунд. Исторические данные хранятся три месяца и база данных занимает около 1Тб. Для работы используется сервер с двумя процессорами Intel, по двенадцать ядер в каждом. Суммарная загрузка процессоров около 40% и зависит от количества расчетов, выполняемых ALEPIZ. Потребление памяти 64Gb. В качестве дисковой подсистемы используется RAID10 из 8 HDD 10 000 Rpms. Репликация и резервное копирование БД производится по сети на другой сервер.

Системные требования

Для работы ALEPIZ требуется компьютер архитектуры Intel x64 с установленной ОС Microsoft Windows версии не ниже Windows Server 2012 или Windows 10. После установки ALEPIZ использует 200Mb дискового пространства. Потребление оперативной памяти на сервере с 12 ядрами CPU составляет 1Gb. При меньшем количестве ядер потребление памяти будет уменьшено.

Описание возможностей

ALEPIZ позволяет осуществлять сбор и хранение данных. Отличие от многих систем мониторинга заключается в том, что сбор данных происходит по определенным условиям. Например, если сервис остановлен, не будет осуществляться сбор данных по использованию сервисом памяти и процессора.

Кроме сбора данных ALEPIZ позволяет генерировать события. Обычно это какие-то пороговые значения. Например, мало свободной памяти или повышенное использование процессора. Это стандартная функция для большинства систем мониторинга. В случае с ALEPIZ, модуль для обработки событий реализован так, чтобы обеспечить организацию рабочих процессов в подразделениях компании.

Dashboard позволяет обрабатывать произошедшие событияDashboard позволяет обрабатывать произошедшие события

ALEPIZ является не только системой мониторинга, но и системой для управления инфраструктурой. Для этого существуют специальные модули - действия. Например, действием может быть запуск или остановка внешнего сервиса, редактирование файла настроек, выполнения запросов к БД или копирование файлов для обновления ПО. Можно разрабатывать собственные действия.

Действия можно объединять в задачи и запускать их в определенное время, либо в зависимости от различных условий. Например, обновление сервиса должно запускаться только если он остановлен. Таким образом можно автоматизировать управление инфраструктурой.

Описание возможностей системы есть на сайте ALEPIZ и доступно на русском языке.

Сущности системы

Чтобы получить больше информации о принципах работы системы и ее возможностях, немного погрузимся в ALEPIZ.

Коллекторы

Для сбора данных используются модули, которые называются коллекторами (collectors). Например, коллектор PING используется для проверки доступности хостов по протоколу ICMP. Коллектор SNMP необходим для сбора данных по одноименному протоколу. MSSQL служит для выполнения запросов к БД MSSQL и т.п. На момент написания статьи в ALEPIZ реализован 21 коллектор. Можно разработать собственный. Информация о разработке коллектора и средства для разработки встроены в ALEPIZ.

Counter settings служит для настройки каунтераCounter settings служит для настройки каунтера

Каунтеры

Каунтеры (counters) это коллекторы с параметрами, которые определяют, какие данные необходимо собирать. Например, для того чтобы коллектор PING начал собирать информацию, ему в качестве параметра необходимо передать имя хоста, доступность которого требуется проверять. Параметры для коллекторов настраиваются в каунтерах.

Также, в каунтерах настраиваются зависимости от других каунтеров, рассчитываются переменные и условия для их работы.

Активные и пассивные коллекторы. Зависимости в каунтерах

Коллекторы могут быть активные и пассивные. Каунтеры, содержащие активные коллекторы, собирают данные самостоятельно по алгоритмам, заложенным в коллекторы. Каунтеры с пассивными коллекторами настраиваются как зависимые от активных и собирают данные в случае срабатывания каунтеров с активными коллекторами.

Например, каунтер с активным коллектором Timer генерирует данные через определенные интервалы времени. Если от него сделать зависимым каунтер с пассивным коллектором SNMP, то данные по протоколу SNMP будут собираться через определенные каунтером интервалы времени. Если от каунтера с SNMP сделать зависимым каунтер с коллектором Events generator, то в случае превышения установленного порогового значения, в Dashboard появится предупреждение о возможной проблеме.

Есть и другие, более сложные схемы настройки зависимостей, которые позволяют решить сложные задачи мониторинга и управления.

Объекты

Объекты (objects) это сущность с именем. Объектом может быть хост, сервис, исполняемый файл, база данных, дата центр и т. д. Объекты могут включать другие объекты, выступая в качестве каталогов.

Object editor необходим для редактирования объектов и их привязки к каунтерамObject editor необходим для редактирования объектов и их привязки к каунтерам

Связь объектов и каунтеров

Каунтеры не могут существовать сами по себе. Каждый каунтер должен быть привязан к одному или нескольким объектам. У объектов можно настроить свойства, которые будут использовать каунтеры для сбора или генерации информации. Например, объект хост может содержать свойство IP адрес, который будет использован каунтером с коллектором PING для проверки доступности этого хоста. Каунтер с коллектором PING можно привязать к нескольким объектам- хостам и он будет собирать данные в зависимости от настроенных свойств (IP адреса) для каждого из объектов.

Действия

Действия (actions) это модули ALEPIZ, которые используются для управления как непосредственно сущностями ALEPIZ, так и внешней инфраструктурой. Например, действием может быть модуль для создания нового объекта или каунтера ALEPIZ, или для запуска и остановки сервиса Windows, или для просмотра собранной исторической информации, или данных по различным событиям и т. п.

Можно разработать собственные действия. Информация и средства для разработки встроены в ALEPIZ.

Задачи

Задачи (tasks) это несколько действий, объединенных в группу. Задачи могут запускаться вручную, или в определенное время. A так же в зависимости от состояния определенных каунтеров и даже непосредственно из каунтеров.

С помощью задач можно автоматизировать управление инфраструктурой и организовать процессы для взаимодействия между различными подразделениями организации.

Tasks maker используется для управления задачамиTasks maker используется для управления задачами

Остальные возможности

Кроме того, в ALEPIZ есть такие модули, как лаунчеры для различных способов запуска действий, средства связи для передачи информации по email, SMS и т.п. Есть встроенный процессор с набором функций для обработки полученных данных, условий в каунтерах и формирования зависимостей на основе этих условий, система обработки произошедших событий с возможностью организации рабочих процессов в организации, средства отладки и т.д. Полное описание возможностей есть на сайте или в справке по ALEPIZ на русском языке.

Заключение

На мой взгляд, ALEPIZ может удовлетворить потребности как в мониторинге, так и в автоматизации управления для очень разных инфраструктур. При необходимости расширения, возможна разработка собственных модулей, ориентированных на конкретные условия эксплуатации.

Не обязательно использовать сразу все возможности ALEPIZ. Если у Вас небольшая инфраструктура, или в настоящее время нет потребности в автоматическом управлении, можно использовать только часть функций, например, только мониторинг. В дальнейшем у Вас будет возможность расширения и внедрения автоматизации в систему управления инфраструктурой.

Хотел бы еще раз повторить: ALEPIZ распространяется бесплатно по лицензии GPL v3. Вы можете использовать его на свое усмотрение. Я не знаю способов монетизации системы, поэтому принял решение сделать его доступным для всех.

Если Вы решили поставить систему у себя, проще всего скачать и запустить установочный пакет для ОС Microsoft Windows со страницы https://alepiz.com/help/download.pug. В этом случае установка и первичная настройка системы произойдет автоматически. ALEPIZ можно поставить даже на персональный компьютер или ноутбук под управлением Windows 10.

Несмотря на то, что ALEPIZ эксплуатируется, он продолжает разрабатываться и находится в статусе beta тестирования. Если Вы обнаружите дефект или у Вас будут какие-либо пожелания к дальнейшему развитию системы, можете написать мне.

У меня не много времени для полноценной поддержки системы. Поэтому, возможно, буду отвечать не сразу. Но я постараюсь реагировать на сообщения и учитывать пожелания.

Спасибо за прочтение, надеюсь, ALEPIZ поможет Вам и Вашему бизнесу в достижении новых целей.

Подробнее..

Бесплатные сервисы для разработчиков огромный список

06.04.2021 12:11:10 | Автор: admin

Бесплатное хранилище артефактов PackageCloud

Удивительно, но в интернете сотни сервисов, которыми разработчик может пользоваться совершенно бесплатно. Бесконечное время (пока компания не обанкротится или не изменит условия), без рекламы, пробного периода и других подводных камней.

Недавно мы обсуждали эту тему в статье Боль разработчика: Никогда не давайте пользователям бесплатный тариф. Речь шла о том, что на самом деле бесплатный план вовсе не бесплатен приходится тратить массу времени и усилий на поддержку этих тарифов.

Но для некоторых бесплатный тариф единственный способ завлечь новых клиентов. Это просто замечательно с точки зрения самих пользователей. Ведь перед нами десятки бесплатных хостингов, API, CMS, CDN, сервисов обработки данных, поисковых движков, репозиториев, инструментов проверки кода и других. Бесплатный тариф идеален для опенсорс-разработчиков, любительских и некоммерческих проектов, маленьких стартапов. Ни за что не надо платить.

Например, огромный список бесплатных сервисов для разработчиков ведётся в репозитории free-for-dev. Список составлен пул-реквестами более 900 участников.

Важно подчеркнуть, что конкретно в этом списке отсутствуют альтернативы на своём хостинге (о них см. ниже). Здесь исключительно онлайновые сервисы, то есть SaaS, PaaS, IaaS.

Приведены только сервисы с честным бесплатным тарифом, которым можно пользоваться без ограничения по времени, без перехода на платную подписку. Обычно такой честный тариф ограничен только по объёму услуг.

Для примера вот несколько тематических категорий.

Основные облачные провайдеры


Ниже указано, в каком объёме предоставляются бесплатные услуги.

Google Cloud Platform

  • App Engine 28 часов фронтенд-инстансов в день, 9 часов бэкенд-инстансов в день
  • Cloud Firestore 1ГБ места, 50000 чтений, 20000 записей, 20000 удалений в день
  • Compute Engine 1 невытесняемый инстанс f1-micro, 30ГБHDD, 5ГБ для снапшотов (не для всех регионов), сеть 1ГБ из Северной Америки во все регионы (кроме Китая и Аргентины) в месяц
  • Cloud Storage 5ГБ, трафик 1ГБ
  • Cloud Shell веб-терминал Linux и базовая IDE с хранилищем на 5ГБ. Лимит 60 часов в неделю
  • Cloud Pub/Sub 10ГБ сообщений в месяц
  • Cloud Functions 2 млн вызовов в месяц (включая все фоновые и HTTP-вызовы)
  • Cloud Run 2 млн запросов в месяц, 360000гигабайт-секунд памяти, 180000 vCPU-секунд вычислительного времени, трафик 1ГБ в месяц из Северной Америки в другие регионы
  • Google Kubernetes Engine отсутствие платы за управление для одного зонального кластера. Но при этом все узлы оплачиваются по стандартной цене Compute Engine
  • BigQuery 1ТБ запросов в месяц, 10ГБ хранилище на месяц
  • Cloud Build 120 минут сборки в день
  • Cloud Source Repositories до 5 пользователей, хранилище 50ГБ, трафик 50ГБ
  • Полный список бесплатных тарифов Google Cloud

Amazon Web Services

  • Amazon DynamoDB СУБД NoSQL на 25ГБ
  • Amazon Lambda 1млн запросов в месяц
  • Amazon SNS 1млн нотификаций в месяц
  • Amazon Cloudwatch 10 пользовательских метрик и 10 предупреждений
  • Amazon Glacier 10ГБ долговременного хранилища объектов
  • Amazon SQS 1 млн запросов из очереди сообщений
  • Amazon CodeBuild 100 минут сборки в месяц
  • Amazon Code Commit 5 активных пользователей в месяц
  • Amazon Code Pipeline 1 активный конвейер в месяц
  • Полный список бесплатных тарифов AWS

Microsoft Azure

  • Virtual Machines 1 виртуальная машина B1S под Linux, одна B1S под Windows
  • App Service 10 приложений (веб, мобильные или API)
  • Functions 1 млн запросов в месяц
  • DevTest Labs среда разработки и тестирования
  • Active Directory 500000 объектов
  • Active Directory B2C хранилище на 50000 пользователей в месяц
  • Azure DevOps 5 активных пользователей, неограниченные приватные репозитории Git
  • Azure Pipelines 10 бесплатных параллельных задач с неограниченным временем выполнения для опенсорсных проектов под Linux, macOS и Windows
  • Microsoft IoT Hub 8000 сообщений в день
  • Load Balancer 1 бесплатный публичный IP (VIP) с балансировкой нагрузки
  • Notification Hubs 1млн пуш-нотификаций
  • Bandwidth внешний трафик 5ГБ в месяц
  • Cosmos DB 5ГБ хранилище и обеспеченная пропускная способность на 400 RU (реквест-юнитов)
  • Static Web Apps сборка, деплой и хостинг статичных приложений и бессерверных функций, с бесплатным SSL, аутентификацией/авторизацией и пользовательскими доменами
  • Storage хранилище для файлов и блобов на 5ГБ в LRS (locally redundant storage)
  • Cognitive Services AI/ML API (компьютерное зрение, перевод, распознавание лиц, боты...) с бесплатным лимитом использования
  • Cognitive Search сервис индексации текстов и поиск на основе ИИ, бесплатно на 10000 документов
  • Azure Kubernetes Service бесплатное управление кластером Kubernetes (хотя при этом оплачиваются сами виртуальные машины, хранение данных и другие сервисы за пределами бесплатных лимитов)
  • Event Grid 100тыс. операций в месяц
  • Полный список бесплатных тарифов Azure

Oracle Cloud

  • Compute два инстанса VM.Standard.E2.1.Micro 1ГБ RAM
  • Block Volume 2 тома, в сумме 100ГБ (используется для вычислений)
  • Object Storage 10 ГБ
  • Load Balancer 1 инстанс на 10 Мбит/с
  • Databases 2 базы данных, по 20 ГБ каждая
  • Monitoring приём до 500млн точек данных, выдача до 1млрд точек данных
  • Bandwidth внешний трафик 10ТБ в месяц с ограничением скорости 5Мбит/с
  • Notifications 1 млн нотификаций в месяц, 1000 отправленных писем
  • Полный список бесплатных тарифов Oracle Cloud

IBM Cloud

  • Cloud Functions 5 млн выполнений в месяц
  • Object Storage 25ГБ в месяц
  • Cloudant Database хранилище на 1 ГБ
  • Db2 Database хранилище на 100МБ
  • API Connect 50000 вызовов API в месяц
  • Availability Monitoring 3 млн точек данных в месяц
  • Log Analysis анализ логов до 500МБ в сутки
  • Полный список бесплатных тарифов IBM Cloud

Аналитика, статистика, логи


Вот несколько сервисов бесплатной аналитики для мобильных приложений и сайтов. Здесь только бесплатные сторонние сервисы. Многие из них можно использовать вместо скриптов Google Analytics, поскольку GA рассматривается как угроза приватности.

Примечание. Программы self-hosted см. в отдельной категории.

  • AO Analytics бесплатная аналитика для любых сайтов, без ограничений по объёму
  • Indicative платформа аналитики до 50млн событий в месяц
  • Amplitude 1 млн событий в месяц, до 2 приложений
  • GoatCounter опенсорсная платформа веб-аналитики бесплатно для некоммерческого использования или self-hosted версия бесплатно для всех. Позиционируется как более приватная альтернатива коммерческим сервисам Google Analytics и Matomo. Бесплатный лимит 6 месяцев хранения данных и 100тыс. просмотров в месяц.
  • Google Analytics, без комментариев
  • Expensify учёт расходов, контроль личных финансов
  • GetInsights система аналитики без куков, бесплатно до 5000 событий в месяц.
  • Heap автоматический трекинг действий пользователя в iOS или веб-приложениях. Бесплатно до 5000 визитов в месяц
  • Keen разнообразные инструменты для сбора данных, анализа и визуализации. Бесплатно до 50000 событий в месяц
  • Яндекс.Метрика российская альтернатива GA, но не лишённая недостатков последнего (в том числе угроза приватности со стороны материнской корпорации)
  • Mixpanel лимит 100000 пользователей в месяц, неограниченный срок хранения данных


    Mixpanel
  • Moesif аналитика API для REST и GraphQL, бесплатно до 500000 вызовов API в месяц
  • Molasses Флаги функций и A/B-тестирование, бесплатно до 3 окружений по 5 флагов функций в каждом.
  • Optimizely A/B-тестирование, бесплатный стартовый план на 1 сайт, 1 приложение iOS и 1 приложение Android
  • Quantcast новый сервис бесплатной аналитики, запущен в марте 2021 года, лимиты бесплатного тарифа официально не объявлены
  • Sematext бесплатно до 50тыс. действий в месяц, хранение данных 1 день
  • Tableau Developer Program бесплатная версия для разработчиков (предрелизная тестовая версия аналитической платформы)
  • UsabilityHub тестирование юзабилити и эффективности разных вариантов веб-дизайна. Бесплатные тесты до 2 минут
  • Woopra бесплатная платформа аналитики для любых продуктов, до 500тыс. действий в месяц, хранение данных до 90 дней

Другие категории



Эмулятор основных операционных систем в браузере copy.sh

Облачные сервисы и аналитика лишь малая капелька в море бесплатных услуг для разработчиков. Вот ещё 45 категорий. В каждой от нескольких штук до несколько десятков сервисов с бесплатными тарифами.


Опенсорсные инструменты безопасности


Компания Penetrum Security, которая специализируется на информационной безопасности, составила собственный список опенсорсных инструментов для разработчиков, с упором на безопасность.

Например, в нём есть системы для управления уязвимостями Faraday, Archery Sec, Jackhammer,
Watchdog и OpenVAS, сканер контейнеров trivy, менеджеры конфигурация вроде MGMT, Chef и Puppet, бесплатные системы SIEM (анализ событий в реальном времени и реагирование), VPN, инструменты для улучшения безопасности систем на Linux и Windows (Bastille, JShielder, nixarmor, Zeus (AWS), Docker-bench и др.), защита аутентификации в Linux, чёрные списки IP и доменов, прокси, socks-серверы, HTTP-туннели, FTP-прокси, DNS-прокси, инструменты сетевого и серверного мониторинга, системы для определения вторжений в сеть и на хост (NIDS и HIDS, соответственно), мониторинг и анализ логов, антивирусы, спам-фильтры, симуляторы инфраструктуры, файрволы для веб-приложений, сетевые сканеры, системы форензики (поиск цифровых улик), программы анализа файлов, метаданных, оперативной памяти и многие другие инструменты.

Всё бесплатно и с открытыми исходниками.

Бесплатные альтернативы на своём хостинге


Вышеупомянутый список free-for-dev не включает бесплатные инструменты на своём хостинге. Однако их очень много. Обычно это опенсорсные программы. Бывает, что какой-то коммерческий сервис SaaS одновременно публикует исходники, то есть предлагает параллельно платный и бесплатный тариф.

Вот список бесплатных альтернатив на своём хостинге в 81 категории из коллекции awesome-selfhosted:



Списки бесплатных ресурсов для разработчиков также ведутся в проектах FOSS-for-Dev, getAwesomeness и De-google-ify Internet.

Надеемся, что эта подборка окажется кому-то полезной.



Наша компания предлагает облачные серверы для любых задач и на любой операционной системе. Создавайте собственные конфигурации в течение минуты, минимальный тариф всего 6.5 рублей в день!
Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!

Подробнее..

Из песочницы Помощник в проведении технического интервью и совместный кодинг

20.11.2020 16:08:20 | Автор: admin


Сколько мне довелось пройти технических собеседований на фронтенд разработчика, столько разных способов и инструментов на них использовали интервьюеры.

Чат в одном месте, созвон в другом, кодинг в третьем. Ой, что-то не работает этот сервис, а расшарь-ка экран. Ой, код решения отвалился, ну напиши снова И без того стрессовая ситуация для кандидата превращается в неприятную карусель.

И по такому же сценарию выстроена структура интервью чаще хаос, перескакивания с темы на тему.

Я пытаюсь сделать простой, удобный и бесплатный сервис для технического собеседования, как для интервьюера, так и для кандидата. Всё в одном месте для всех: заметки, отчет и прочие фичи для интервьюера, и удобный редактор, полноценный и красивый фидбек на почту и т.п. для кандидата.

Чтобы всё было предсказуемо и по стандартам, ведь столько статей о правильном проведении интервью написано на хабре. Есть чем вдохновляться.

Назвал его Meet2Code.

Что есть на данный момент:

  • Анкета на каждый раздел собеседования. Задачи, вопросы и пункты знаний всё можно оценить, засечь время и оставить заметку.





  • Совместный кодинг в реальном времени. Удобная работа с задачами из списка: в один клик отправляешь в редактор, замеряешь время, оцениваешь.





  • Создание шаблонов для интервью разделы, вопросы, навыки, задачи.





  • Ну и собственно, отчёт: общий и по каждому разделу, задаче или вопросу.





Над текущим функционалом ещё нужно работать, но, я надеюсь, уже понятна основная концепция. Пока нет никакого бэка для хранения данных, всё храню просто в локалсторадж браузера. Под мобильные тоже пока сделал простой адаптив, для просмотра не вырви глаз, дизайн не продумывал.

Если кому-то интересно, пишу сервис на React, TypeScript, MobX.

Почему решил написать статью


Текущее состояние получилось за полтора месяца свободными вечерами после работы, потом, как это часто бывает, азарт куда-то улетучился и почти месяц я не трогал проект совсем.
Как мне кажется, сервис получается полезный и жаль его оставлять пылиться. Чтобы двигаться дальше, хочется узнать реальное мнение сообщества нужен он или нет. Т.к. это некоммерческий проект, такой способ самый реальный и точный, я думаю.

Над чем я работаю сейчас и какие фичи планирую внедрять:

  • Личный кабинет хотелось бы видеть как можно раньше.
  • Прокачать редактор кода
  • Отчёт о результате понятный и простой.
  • Запуск кода (пока только js и библиотеки).
  • Сгенерировать красивый фидбек на email кандидату.
  • Создание библиотеки вопросов, задач, навыков, чтобы можно было шаблоны собирать из готовых компонентов, в первую очередь, кастомных.
  • Удобство создания и работы с шаблоном (сортировка, редактирование элементов).
  • Добавлять метки о важности, времени, сложности и т.п. к вопросам/задачам.
  • Интеграция со своими сервисами и со сторонними (например, hh).
  • И в последнюю очередь, звонки из браузера.

и дальше ещё много мощных фич, колонка в трелло с ними очень высокая.

Конечно же под всё это дело в первых рядах будут задачи по созданию API.

В общем, попробуйте этот инструмент, если он вам покажется полезным. Я дождусь обратной связи, сделаю выводы и в случае положительной реакции форсированно буду воплощать свои фантазии и ваши рекомендации/пожелания.

А пока я буду допиливать текущее состояние.

beta.meet2code.com
Подробнее..

API для бесплатной CRM

14.07.2020 14:04:30 | Автор: admin


Меньше года назад мы представили бесплатную CRM систему интегрированную с бесплатной АТС. За это время ей воспользовались 14 000 компаний и 64 000 сотрудников. Развитие ZCRM не прекращалось ни на минуту, появилось множество больших и маленьких функций.
Но мы понимаем, чтобы представить действительно функциональную систему, а не просто умную записную книжку, недостаточно только интеграции с телефонией. Сейчас мы предлагаем открытый API интерфейс, в котором доступно большинство функций ZCRM. API позволяет использовать CRM для любых каналов продаж.
Ниже кратко опишем работу с API и доступный функционал. Также приведен простой но полезный и рабочий пример: скрипт для создания лида из формы на сайте.

Кратко о бесплатной CRM


Воздержимся от объяснения что такое CRM. Бесплатная CRM Zadarma поддерживает все стандартные функции хранения данных о клиенте. Информация сохраняется в ленте клиента. Также кроме информации о клиентах доступен удобный постановщик задач с отображением на любой вкус (календарь, канбан, список). Все это доступно для 50+ сотрудников и полностью интегрировано с телефонией (в том числе звонки из браузера по технологии WebRTC).

Что значит бесплатная? Нет ни одного тарифа либо услуги ZCRM, за которые нужно платить. Единственное за что нужно платить это за телефонные звонки и номера (по спецтарифам, например, абонплата за номер Москвы 95 рублей или Лондона 1 евро). А если звонков почти нет? То и платить почти не нужно.
Бесплатная CRM активна пока активна бесплатная АТС Zadarma. После регистрации АТС активна 2 недели, в дальнейшем необходимо пополнять счет на любую сумму 1 раз в 3 месяца. Сложно представить офис, которому нужна CRM и АТС, но вообще не нужен ни номер ни звонки.

Зачем нужен API для бесплатной CRM


Чем больше контактов с клиентом тем лучше и контакты могут быть самыми разными. Благодаря API можно без проблем автоматически вносить (либо наоборот получить) информацию о клиенте/лиде и задачах. Благодаря этому появляется возможность подключить любые каналы общения с клиентами и любые другие системы автоматизации.
Благодаря API бесплатную ZCRM возможно использовать любым способом, как целиком так и частично. Например, как удобный интерфейс для работы с корпоративной базой клиентов, либо простой удобный планировщик.
Ниже приведем пример подобного канала подключение к CRM лид-формы на сайте. Позже на сайте приведем и другие примеры, например создание задачи перезвонить клиенту (отложенный звонок).

Основные методы API ZCRM


Так как в API ZCRM доступно 37 методов, воздержимся от описания всех, опишем лишь основные их группы с примерами.
Полный список с примерами доступен на сайте в описании API CRM.

Возможна работа со следующими группами методов:
  • Клиенты (общий список, отдельные выборки, редактирование, удаление)
  • Теги и дополнительные свойства клиентов
  • Лента клиента (просмотр, редактирование, удаление записей в лентах клиентов)
  • Сотрудники клиента (так как клиент как правило юридическое лицо, у него может быть не мало сотрудников)
  • Задачи (весь функционал по работе с задачами)
  • Лиды (аналогично все функции)
  • Пользователи СRM (отображение списка пользователей, их права, настройки, контакты и рабочие часы)
  • Звонки (возвращает список звонков)


Так как используется существующая структура API Zadarma, для нее на Github уже доступны библиотеки на PHP, C#, Python.

Пример использования API


Самый простой и при этом полезный пример создание лида из формы. Для минимизации кода этот пример содержит только основные данные лида. Подобный пример, но уже с комментариями от клиента (обычно присутствуют в каждой форме) доступен в блоге на сайте. Примеры скрипта написаны на PHP без фреймворков а потому легко встраиваются.
Пример html формы для создания лида:

<form method="POST" action="/zcrm_leads">   <label for="name">Name:</label>   <br>   <input type="text" id="name" name="name" value="">   <br>   <label for="phone">Phone:</label><br>   <input type="text" id="phone" name="phones[0][phone]" value="">   <br>   <label for="phone">Email:</label><br>   <input type="text" id="email" name="contacts[0][value]" value="">   <br>   <br>   <input type="submit" value="Submit"></form>


Данная форма крайне проста чтобы не перегружать статью. Она не имеет ни дизайна, ни капчи, ни поля с комментарием. В нашем блоге доступна версия с полем комментариев (комментарий добавляется в ленту клиента после создания лида).

И собственно PHP пример по созданию лида с данными из формы:

<?php$postData = $_POST;if ($postData) {   if (isset($postData['phones'], $postData['phones'][0], $postData['phones'][0]['phone'])) {       $postData['phones'][0]['type'] = 'work';   }   if (isset($postData['contacts'], $postData['contacts'][0], $postData['contacts'][0]['value'])) {       $postData['contacts'][0]['type'] = 'email_work';   }   $params = ['lead' => $postData];   $params['lead']['lead_source'] = 'form';   $leadData = makePostRequest('/v1/zcrm/leads', $params);   var_dump($leadData);}exit();function makePostRequest($method, $params){   // замените userKey и secret на ваши из личного кабинета   $userKey = '';   $secret = '';   $apiUrl = 'https://api.zadarma.com';   ksort($params);   $paramsStr = makeParamsStr($params);   $sign = makeSign($paramsStr, $method, $secret);   $curl = curl_init();   curl_setopt($curl, CURLOPT_URL, $apiUrl . $method);   curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');   curl_setopt($curl, CURLOPT_POST, true);   curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);   curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);   curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);   curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);   curl_setopt($curl, CURLOPT_POSTFIELDS, $paramsStr);   curl_setopt($curl, CURLOPT_HTTPHEADER, [       'Authorization: ' . $userKey . ':' . $sign   ]);   $response = curl_exec($curl);   $error = curl_error($curl);   curl_close($curl);   if ($error) {       return null;   } else {       return json_decode($response, true);   }}/*** @param array $params* @return string*/function makeParamsStr($params){   return http_build_query($params, null, '&', PHP_QUERY_RFC1738);}/*** @param string $paramsStr* @param string $method* @param string $secret** @return string*/function makeSign($paramsStr, $method, $secret){   return base64_encode(       hash_hmac(           'sha1',           $method . $paramsStr . md5($paramsStr),           $secret       )   );}


Как вы видите, работа с API достаточно проста, плюс присутствуют примеры работы на PHP, C#, Python. Таким образом без особых проблем можно вписать простую бесплатную CRM в любой рабочий процесс, получив автоматизацию малой кровью.
ZCRM непрерывно развивается и практически все новые функции будут доступны в том числе через API.
Также мы приглашаем интегрировать ваши существующие системы системы с бесплатными CRM и АТС Zadarma.
Подробнее..

Перевод У Google появился новый креативный способ убивать SaaS-стартапы

19.01.2021 18:13:47 | Автор: admin
В старые времена, когда компания Google (или любой из её плохо настроенных ИИ) хотела убить ваш бизнес, то обычно отказывала вам в доступе к какому-то из своих сервисов, и это работало. Вы наверняка слышали страшилки:



Клянусь, я прочитал FAQ!

Всё проходит по одному сценарию. Сначала бизнес сознательно использует сервисы Google таким образом, что его выживание полностью зависит от них. Затем автоматизированный бегемот Google делает своё дело: он слегка меняет положение своей задницы на кожаном кресле размером с планету и, сам того не замечая, крушит в процессе мириады (относительно) маленьких компаний размером с муравья. И, наконец, компании размером с муравья отчаянно пытаются сообщить Google, что они раздавлены, но могут пообщаться только с автоматизированной формой для предложений.

Иногда генеральный директор размером с муравья знает кого-то в Google, потому что они были приятелями по колледжу, или технический директор пишет пост, который каким-то образом попадает на первую страницу муравейника Hacker News. Тогда Google замечает проблему и иногда считает её достойной решения, обычно из-за страха регулятивных последствий, которые может повлечь за собой муравьиная революция.

По этой причине общепринятая муравьиная мудрость диктует, что нельзя чрезмерно полагаться на сервисы Google. И если вам удастся избежать этой зависимости, всё должно быть в порядке.


Такая плоская синяя поверхность с классной красной крышей! Так удобно!

Что нового под Луной


В сегодняшней серии Интернет уже не тот, что раньше поговорим о новом способе, которым Google может непреднамеренно сокрушить ваш стартап. Он не требует от вас использования сервисов Google каким-либо (преднамеренным) способом.

Вы знали, что ваши домены могут попасть в чёрный список Google без каких-либо особых причин и что этот чёрный список использует не только Google Chrome, но и несколько других вендоров программного и аппаратного обеспечения? Вы знали, что эти другие вендоры синхронизируют список с дико изменяющимися таймингами и интерпретациями, так что решение любых проблем становится чрезвычайно напряжённым и непредсказуемым делом? При этом сроки рассмотрения жалоб на чёрный список в Google измеряются неделями?


Теперь так выглядит ваш сайт или SaaS-приложение

Эта функция чёрного списка называется Google Safe Browsing, и на изображении выше можете прочитать сообщение, которое видят посетители вашего сайта, если один из доменов попал в базу Safe Browsing. Тексты предупреждений варьируются от Обманный сайт до Сайт содержит вредоносное ПО (полный список здесь), но все они на одинаково страшном красном фоне, который пытается максимально помешать пользователю перейти на сайт.

В первый раз мы узнали о проблеме из-за всплеска жалоб от клиентов, которые натыкались на это красное предупреждение при попытке использовать наше SaaS-приложение. Во второй раз мы лучше подготовлены, поэтому у нас уже есть свободное время, чтобы написать этот пост.

Наша компания InvGate это SaaS-платформа для IT-подразделений, работающая на AWS. Она обслуживает более 1000 корпоративных клиентов и миллионы конечных пользователей. Фирмы используют продукт для управления тикетами и запросами от своих пользователей. Можете представить реакцию IT-менеджеров, когда внезапно их система тикетов начинает показывать конечным пользователям такие зловещие предупреждения безопасности.

Когда мы впервые столкнулись с этой проблемой, то отчаянно пытались понять, что происходит, и разобраться, как работает Google Safe Browsing (GSB), в то время как техподдержка пыталась справиться с потоком запросов от клиентов. Мы быстро поняли, что в базу GSB попал URL на Amazon Cloudfront CDN, с которого мы раздавали статические ресурсы (CSS, Javascript и др.), и это привело к сбою всего приложения для клиентов, использующих именно данный CDN. Быстрый обзор помеченной системы показал, что всё выглядит нормально.

В то время как команда девопсов работала в авральном режиме, чтобы настроить новый CDN и подготовиться к перемещению клиентов на новый домен, я обнаружил в документации Google, что через Google Search Console (GSC) можно получить дополнительные объяснения о причинах, почему сайт помечен в базе. Не буду утомлять вас подробностями, но чтобы получить доступ к этой информации, вы должны доказать владение сайтом, для этого настроить кастомную запись DNS или загрузить некоторые файлы в корень домена. Мы сделали это и через 20 минут получили отчёт о нашем сайте.

Отчёт выглядел примерно так:


Это не особенно информативно

В отчёте также была кнопка Запросить проверку (Request Review), которую я быстро нажал, фактически не предпринимая никаких действий на сайте, поскольку там не было никакой информации о предполагаемой проблеме. Я подал заявку с пометкой, что у меня не указаны вредоносные URL, хотя в документации говорится, что Google всегда предоставляет примеры URL, чтобы помочь веб-мастерам в выявлении проблем.


Отлично! Запрос на проверку недействительного отчёта может привести к тому, что будущие проверки станут ещё медленнее

Примерно через час сайт был удалён из базы GSB, мы даже не закончили выводить клиентов с этого CDN. Примерно через два часа пришёл автоматический email с подтверждением, что проверка прошла успешно. Никаких разъяснений, что вызвало проблему.

Что было дальше


В течение недели после инцидента мы продолжали периодически получать от клиентов сообщения о проблемах с доступом.

Google Safe Browsing предоставляет два различных API для использования в коммерческих и некоммерческих продуктах. В нашем случае проблема воспроизводилась по крайней мере у некоторых пользователей Firefox, а также в некоторых антивирусах и сетевых устройствах безопасности. Они помечали наш сайт и блокировали доступ к нему много дней спустя.

Мы продолжали переводить всех клиентов со старого CDN на новый, и поэтому в конце концов решили проблему навсегда. Мы никогда так толком и не узнали причину и списали всё на какой-то обкуренный ИИ в штаб-квартире Google.

Как помешать Google Safe Browsing пометить ваш сайт


Если вы управляете SaaS-бизнесом и обещаете клиентам гарантированную доступность, то внесение в базу Google Safe Browsing без какой-либо конкретной причины представляет собой очень реальный риск для бизнеса.

К сожалению, учитывая чисто гугловскую непрозрачность механизма пометки и просмотра сайтов, вряд ли этого можно гарантированно избежать. Но вы, безусловно, можете спроектировать своё приложение и процессы таким образом, чтобы свести к минимуму вероятность этого, снизить влияние фактического внесения в чёрный список и свести к минимуму время, необходимое для решения проблемы.

Вот шаги, которые предпринимаем мы сами и которые я могу рекомендовать:

  • Не держите все яйца в одном домене. Видимо, GSB помечает целые домены или поддомены. Поэтому лучше распределить приложения по нескольким доменам, так как это уменьшит ущерб от потери любого из них. Например, company.сom для сайта, app.company.net для приложения, eucdn.company.nеt для клиентов в Европе, useastcdn.company.nеt для клиентов на восточном побережье США и т.д.
  • Не размещайте данные клиентов на основных доменах. Домены часто попадают в чёрный список из-за того, что клиенты SaaS по неведению загрузили на сервер вредоносные файлы. Эти файлы безвредны для систем, но само их существование может привести к тому, что весь домен будет занесён в чёрный список. Всё, что ваши пользователи загружают в приложения, должно размещаться за пределами основных доменов. Например, используйте companyusercontent.cоm для хранения клиентских файлов.
  • Активно заявляйте о своём праве собственности на домены в Google Search Console. Это не помешает сайту попасть в чёрный список, но вы получите электронное письмо, которое позволит быстро отреагировать на проблему. Реагирование на такие инциденты занимает некоторое время, и это драгоценное время, в течение которого страдают ваши клиенты.
  • Будьте готовы сменить домен, если нужно. Это самое сложное, что можно сделать, но это единственный эффективный инструмент против попадания в чёрный список: спроектируйте системы так, чтобы доменные имена сервисов можно было легко изменить (через скрипты или инструменты оркестровки). Например, пусть у eucdn.company2.net будет CNAME-запись eucdn.company.net, и если первый заблокирован, обновите конфигурацию приложения, чтобы загрузить ресурсы с альтернативного домена.

Что делать, если ваше SaaS-приложение или сайт занесены в чёрный список Google Safe Browsing


Вот что я бы порекомендовал:

  • Если можете легко и быстро переключить своё приложение на другой домен, это единственный способ надёжно, быстро и якобы окончательно решить инцидент. Если можете, сделайте так. На этом всё.
  • В противном случае, как только вы идентифицируете заблокированный домен, просмотрите отчёты в Google Search Console. Если вы до сих пор не заявили о владении доменом, придётся сделать это прямо сейчас, что займёт некоторое время.
  • Если сайт действительно взломан, устраните проблему (например, удалите оскорбительный контент или взломанные страницы), а затем запросите проверку безопасности. Если сайт не взломан или отчёт Safe Browsing бессмысленный, в любом случае запросите проверку безопасности и заявите, что отчёт является неполным.
  • Затем, вместо того чтобы метаться в агонии, представляя суммы ущерба за время ожидания, всё равно приступайте к переходу на новый домен. Проверка может занять несколько недель.

Вишенка на торте


Спустя несколько месяцев после первого инцидента, мы получили письмо от Search Console с сообщением, что один из наших доменов опять попал в чёрный список. Через несколько часов мне как администратору домена G Suite пришло ещё одно интересное письмо, которое вы можете прочитать ниже.


sc в sc-noreply@google.com расшифровывается как Search Console

Позвольте объяснить своими словами, что это такое, потому что это просто умопомрачительно. Речь идёт о письме с предупреждением от Search Console о включении в чёрный список. В этом втором письме говорится, что автоматический фишинговый фильтр электронной почты G Suite считает поддельным это письмо от Google Search Console. Безусловно, это не так, поскольку наш домен действительно был занесён в чёрный список. Таким образом, Google даже не может решить, являются ли фишингом её собственные оповещения о фишинге. (LOL?)

Некоторые неприятные мысли о будущем интернета


Любому, кто работает в сфере технологий, совершенно ясно, что крупные техногиганты в значительной степени являются хранителями Интернета. Но раньше я интерпретировал это в свободном, метафорическом смысле. Описанный здесь инцидент с Safe Browsing очень ясно показал, что Google буквально контролирует, кто может получить доступ к вашему сайту, независимо от того, где и как вы им управляете. Поскольку Chrome занимает около 70% рынка, а Firefox и Safari в какой-то степени используют базу данных GSB, то Google может одним движением пальца сделать любой сайт практически недоступным в интернете.
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru