Что такое SOLID
S) Single-responsibility principle / Принцип единственной ответственности
Его важность невозможно переоценить. Каждый объект, класс и метод должны отвечать только за что-то одно. Если ваш объект/класс/метод делает слишком много, вы получите спагетти-код.
O) Open–closed principle / Принцип открытости-закрытости
Программные объекты должны быть открыты для расширения, но закрыты для модификации. Речь о том, что нельзя переопределять методы или классы, просто добавляя дополнительные функции по мере необходимости.
Хороший способ решения этой проблемы – использование наследования. В JavaScript эта проблема решается с помощью композиции.
Простое правило: если вы изменяете сущность, чтобы сделать ее расширяемой, вы впервые нарушили этот принцип.
L) Liskov substitution principle / Принцип подстановки Лисков
Этот принцип гласит, что объекты старших классов должны быть заменимы объектами подклассов, и приложение при такой замене должно работать так, как ожидается.
I) Interface segregation principle / Принцип разделения интерфейсов
Этот принцип был сформулирован Робертом Мартином, когда он консультировал Xerox, и он очевиден.
Объекты не должны зависеть от интерфейсов, которые они не используют.
D) Dependency inversion principle / Принцип инверсии зависимостей
Этот принцип невозможно переоценить. Мы должны полагаться на абстракции, а не на конкретные реализации. Компоненты ПО должны иметь низкую связность и высокую согласованность.
Заботиться нужно не о том, как что-то устроено, а о том, как оно работает. Простой пример – использование дат в JavaScript. Вы можете написать для них свой слой абстракции. Тогда если у вас сменится источник получения дат, вам нужно будет внести изменения в одном месте, а не в тысяче.
S) Single-responsibility principle / Принцип единственной ответственности
Его важность невозможно переоценить. Каждый объект, класс и метод должны отвечать только за что-то одно. Если ваш объект/класс/метод делает слишком много, вы получите спагетти-код.
O) Open–closed principle / Принцип открытости-закрытости
Программные объекты должны быть открыты для расширения, но закрыты для модификации. Речь о том, что нельзя переопределять методы или классы, просто добавляя дополнительные функции по мере необходимости.
Хороший способ решения этой проблемы – использование наследования. В JavaScript эта проблема решается с помощью композиции.
Простое правило: если вы изменяете сущность, чтобы сделать ее расширяемой, вы впервые нарушили этот принцип.
L) Liskov substitution principle / Принцип подстановки Лисков
Этот принцип гласит, что объекты старших классов должны быть заменимы объектами подклассов, и приложение при такой замене должно работать так, как ожидается.
I) Interface segregation principle / Принцип разделения интерфейсов
Этот принцип был сформулирован Робертом Мартином, когда он консультировал Xerox, и он очевиден.
Объекты не должны зависеть от интерфейсов, которые они не используют.
D) Dependency inversion principle / Принцип инверсии зависимостей
Этот принцип невозможно переоценить. Мы должны полагаться на абстракции, а не на конкретные реализации. Компоненты ПО должны иметь низкую связность и высокую согласованность.
Заботиться нужно не о том, как что-то устроено, а о том, как оно работает. Простой пример – использование дат в JavaScript. Вы можете написать для них свой слой абстракции. Тогда если у вас сменится источник получения дат, вам нужно будет внести изменения в одном месте, а не в тысяче.
👍13❤1
Инструменты для проверки ваших проектов на предмет дыр в безопасности
Если вы уже успели создать свой проект, но только теперь задумались о том, что, возможно, и храните какие‑нибудь секреты в коде, решение есть. Вы, конечно, можете проверить всё вручную, но это, скорее всего, потребует уйму времени и усилий. Очевидно, что это как раз тот случай, когда автоматизация — друг человека, и вам не помешают такие инструменты, как:
TruffleHog — инструмент поиска секретов в Git‑репозиториях, сканирующий commit history на наличие ключей API и других секретных данных.
GitLeaks — инструмент для обнаружения жестко закодированных секретов, таких как пароли, ключи API и токены, в git‑репозиториях.
GitGuardian — приложение, которое работает в вашей локальной среде или в среде CI и помогает вам обнаруживать свыше 350 типов секретов, а также другие потенциальные уязвимости безопасности или нарушения политики, влияющие на вашу кодовую базу.
GitHub Advanced Security — решение от GitHub, которое тоже предлагает функцию сканирования кода на наличие секретных данных. Secret Scanning автоматически сканирует репозитории на наличие известных типов секретов (пароли, ключи API, токены доступа и др.) и может прислать вам уведомление, если такой секрет был найден.
Разумеется, вышеназванные разработки — далеко не единственные представленные на рынке: взять хотя бы те же известные SonarQube или Checkmarx.
Если вы осознали наличие проблемы — считайте, что полдела сделано. Теперь главное — уделить ей достаточное время и принять соответствующие меры, а какие вы для этой цели будете использовать инструменты, дело десятое.
Если вы уже успели создать свой проект, но только теперь задумались о том, что, возможно, и храните какие‑нибудь секреты в коде, решение есть. Вы, конечно, можете проверить всё вручную, но это, скорее всего, потребует уйму времени и усилий. Очевидно, что это как раз тот случай, когда автоматизация — друг человека, и вам не помешают такие инструменты, как:
TruffleHog — инструмент поиска секретов в Git‑репозиториях, сканирующий commit history на наличие ключей API и других секретных данных.
GitLeaks — инструмент для обнаружения жестко закодированных секретов, таких как пароли, ключи API и токены, в git‑репозиториях.
GitGuardian — приложение, которое работает в вашей локальной среде или в среде CI и помогает вам обнаруживать свыше 350 типов секретов, а также другие потенциальные уязвимости безопасности или нарушения политики, влияющие на вашу кодовую базу.
GitHub Advanced Security — решение от GitHub, которое тоже предлагает функцию сканирования кода на наличие секретных данных. Secret Scanning автоматически сканирует репозитории на наличие известных типов секретов (пароли, ключи API, токены доступа и др.) и может прислать вам уведомление, если такой секрет был найден.
Разумеется, вышеназванные разработки — далеко не единственные представленные на рынке: взять хотя бы те же известные SonarQube или Checkmarx.
Если вы осознали наличие проблемы — считайте, что полдела сделано. Теперь главное — уделить ей достаточное время и принять соответствующие меры, а какие вы для этой цели будете использовать инструменты, дело десятое.
👍9❤1
Что такое маршрутизация веб-приложений?
Anonymous Quiz
77%
Сопоставление URL запросов с соответствующими обработчиками запросов в приложении.
5%
Формирование доменных имен для веб-сайтов.
18%
Процесс прокладки путей для транспортировки данных по сети.
😁2🔥1
Что такое MVC
MVC - это сокращение от Model-View-Controller (Модель-Представление-Контроллер). Это архитектурный шаблон, который используется в разработке программного обеспечения, особенно в веб-разработке.
• Модель (Model): Это представление данных и бизнес-логики вашего приложения. Представляет собой часть приложения, которая отвечает за данные и их обработку. Это могут быть данные из базы данных, файловой системы, внешних сервисов и т. д. Модель содержит логику, которая позволяет получать, изменять и сохранять данные.
• Представление (View): Это то, что видит пользователь - интерфейс приложения. Представление отображает данные пользователю и отвечает за визуальное представление информации.
• Контроллер (Controller): Это связующее звено между моделью и представлением. Контроллер обрабатывает пользовательские запросы, взаимодействует с моделью для получения данных и передает эти данные представлению для отображения.
Таким образом, в MVC данные (Модель) отделены от способа их представления (Представление) и от того, как они обрабатываются (Контроллер). Это делает приложения более организованными, легко расширяемыми и поддерживаемыми.
MVC - это сокращение от Model-View-Controller (Модель-Представление-Контроллер). Это архитектурный шаблон, который используется в разработке программного обеспечения, особенно в веб-разработке.
• Модель (Model): Это представление данных и бизнес-логики вашего приложения. Представляет собой часть приложения, которая отвечает за данные и их обработку. Это могут быть данные из базы данных, файловой системы, внешних сервисов и т. д. Модель содержит логику, которая позволяет получать, изменять и сохранять данные.
• Представление (View): Это то, что видит пользователь - интерфейс приложения. Представление отображает данные пользователю и отвечает за визуальное представление информации.
• Контроллер (Controller): Это связующее звено между моделью и представлением. Контроллер обрабатывает пользовательские запросы, взаимодействует с моделью для получения данных и передает эти данные представлению для отображения.
Таким образом, в MVC данные (Модель) отделены от способа их представления (Представление) и от того, как они обрабатываются (Контроллер). Это делает приложения более организованными, легко расширяемыми и поддерживаемыми.
👍7❤1
Параметры для удобного просмотра лога Git
Пример команды:
Скорее всего, вам уже доводилось использовать команду
К примеру, от вас требуют еженедельные отчёты каждую пятницу. Достаточно написать
Вообще, в Git есть много всяких полезных параметров. Просто попробуйте выполнить
Пример команды:
git log --oneline --graphСкорее всего, вам уже доводилось использовать команду
git log. У неё есть много полезных параметров, которые можно комбинировать друг с другом для достижения наилучшего результата. Чаще всего используют эти:--author="Alex Kras" — выводит коммиты, сделанные конкретным человеком--name-only — выводит только названия изменённых файлов--oneline — выводит сокращённые данные коммита (в виде одной строки)--graph — выводит дерево зависимостей для всех коммитов--reverse — выводит коммиты в обратном хронологическом порядке (сначала старые)--after — выводит коммиты, сделанные после определённой даты--before — выводит коммиты, сделанные до определённой датыК примеру, от вас требуют еженедельные отчёты каждую пятницу. Достаточно написать
git log --author="Name" --after="1 week ago" --oneline, немного подредактировать полученный результат и отправить их начальству.Вообще, в Git есть много всяких полезных параметров. Просто попробуйте выполнить
man git-log чтобы посмотреть все варианты просмотра истории. Если ни один из предложенных вариантов вас не устроит, вы всегда можете воспользоваться параметром --pretty, с помощью которого можно настраивать выдачу в широких пределах.👍11❤1
Структурные шаблоны проектирования
Эти шаблоны в основном посвящены компоновке объектов (object composition). То есть тому, как сущности могут друг друга использовать. Ещё одно объяснение: структурные шаблоны помогают ответить на вопрос «Как построить программный компонент?»
Структурными называют шаблоны, которые облегчают проектирование, определяя простой способ реализации взаимоотношений между сущностями.
Список шаблонов:
• Адаптер
• Мост
• Компоновщик
• Декоратор
• Фасад
• Приспособленец
• Заместитель
О каждом из ним мы подробно поговорим в последующих постах, оставайтесь с нами!
Эти шаблоны в основном посвящены компоновке объектов (object composition). То есть тому, как сущности могут друг друга использовать. Ещё одно объяснение: структурные шаблоны помогают ответить на вопрос «Как построить программный компонент?»
Структурными называют шаблоны, которые облегчают проектирование, определяя простой способ реализации взаимоотношений между сущностями.
Список шаблонов:
• Адаптер
• Мост
• Компоновщик
• Декоратор
• Фасад
• Приспособленец
• Заместитель
О каждом из ним мы подробно поговорим в последующих постах, оставайтесь с нами!
👍7
Что такое APO
«Avoid Premature Optimization / Избегайте преждевременной оптимизации»
Эта практика побуждает разработчиков оптимизировать код до того, как необходимость этой оптимизации будет доказана. Думаю, что если вы следуете KISS или YAGNI, вы не попадетесь на этот крючок.
Поймите правильно, предвидеть, что произойдет что-то плохое – это хорошо. Но прежде чем вы погрузитесь в детали реализации, убедитесь, что эти оптимизации действительно полезны.
Очень простой пример – масштабирование. Вы не станете покупать 40 серверов из предположения, что ваше новое приложение станет очень популярным. Вы будете добавлять серверы по мере необходимости.
Преждевременная оптимизация может привести к задержкам в коде и, следовательно, увеличит затраты времени на вывод функций на рынок.
Многие считают преждевременную оптимизацию корнем всех зол.
«Avoid Premature Optimization / Избегайте преждевременной оптимизации»
Эта практика побуждает разработчиков оптимизировать код до того, как необходимость этой оптимизации будет доказана. Думаю, что если вы следуете KISS или YAGNI, вы не попадетесь на этот крючок.
Поймите правильно, предвидеть, что произойдет что-то плохое – это хорошо. Но прежде чем вы погрузитесь в детали реализации, убедитесь, что эти оптимизации действительно полезны.
Очень простой пример – масштабирование. Вы не станете покупать 40 серверов из предположения, что ваше новое приложение станет очень популярным. Вы будете добавлять серверы по мере необходимости.
Преждевременная оптимизация может привести к задержкам в коде и, следовательно, увеличит затраты времени на вывод функций на рынок.
Многие считают преждевременную оптимизацию корнем всех зол.
👍12🔥1
Закрыт ли доступ к тестовой версии вашей разработки?
Главная проблема здесь в том, что тестовые версии могут содержать ошибки, а также уже упомянутую выше секретную или тестовую информацию, которая иногда может быть компрометирующей. Плюс к этому стоит добавить, что бета‑версии, как правило, могут быть более уязвимы ко взломам, чем финальная production версия.
Что делать? С самого начала вам нужна какая‑то тактика!
• Не экономьте на доменах — если нужна тестовая версия доступная по Сети, купите отдельный домен специально под неё. Это простой, но максимально эффективный способ уменьшить риски безопасности. Связано это с тем, что при поиске уязвимых мест взломщики будут в первую очередь проверять именно поддомены вашего проекта.
• Ограничьте доступ к любым тестовым версиям: убедитесь, что dev, qa, staging и другие версии сайта, кроме финальной, нельзя открыть просто так. Необходимо произвести такую настройку, чтобы они были доступны, например, только через VPN.
• Защитите тестовые версии от индексации. Даже если тестовые версии вашего проекта доступны только через VPN и находятся на отдельных секретных доменах, их следует защитить от индексации поисковиками с помощью файла robots.txt или метатегов noindex.
Главная проблема здесь в том, что тестовые версии могут содержать ошибки, а также уже упомянутую выше секретную или тестовую информацию, которая иногда может быть компрометирующей. Плюс к этому стоит добавить, что бета‑версии, как правило, могут быть более уязвимы ко взломам, чем финальная production версия.
Что делать? С самого начала вам нужна какая‑то тактика!
• Не экономьте на доменах — если нужна тестовая версия доступная по Сети, купите отдельный домен специально под неё. Это простой, но максимально эффективный способ уменьшить риски безопасности. Связано это с тем, что при поиске уязвимых мест взломщики будут в первую очередь проверять именно поддомены вашего проекта.
• Ограничьте доступ к любым тестовым версиям: убедитесь, что dev, qa, staging и другие версии сайта, кроме финальной, нельзя открыть просто так. Необходимо произвести такую настройку, чтобы они были доступны, например, только через VPN.
• Защитите тестовые версии от индексации. Даже если тестовые версии вашего проекта доступны только через VPN и находятся на отдельных секретных доменах, их следует защитить от индексации поисковиками с помощью файла robots.txt или метатегов noindex.
Что такое JWT
JWT (JSON Web Token) - это стандарт для создания токенов, которые могут использоваться для аутентификации и передачи информации между сторонами. Он использует формат JSON.
Вот как работает JWT:
1. Создание токена: Пользователь или сервер создает токен, который содержит набор данных, таких как идентификатор пользователя или другая информация, которую они хотят передать.
2. Подпись токена: Токен подписывается с использованием секретного ключа. Это делает его неподдельным и обеспечивает его целостность.
3. Передача токена: Токен передается между клиентом и сервером через HTTP заголовок, обычно в форме
4. Проверка токена: Получатель токена может проверить его подпись, чтобы убедиться, что он не был изменен и что он был создан с использованием секретного ключа. Если проверка проходит успешно, получатель может использовать данные из токена для аутентификации пользователя или получения другой необходимой информации.
JWT обычно используется для создания токенов с информацией о пользователе после успешной аутентификации, чтобы идентифицировать пользователя при последующих запросах без необходимости повторной отправки учетных данных. Он также может использоваться для передачи других данных между сторонами, таких как права доступа или другие свойства пользователя.
JWT (JSON Web Token) - это стандарт для создания токенов, которые могут использоваться для аутентификации и передачи информации между сторонами. Он использует формат JSON.
Вот как работает JWT:
1. Создание токена: Пользователь или сервер создает токен, который содержит набор данных, таких как идентификатор пользователя или другая информация, которую они хотят передать.
2. Подпись токена: Токен подписывается с использованием секретного ключа. Это делает его неподдельным и обеспечивает его целостность.
3. Передача токена: Токен передается между клиентом и сервером через HTTP заголовок, обычно в форме
Authorization: Bearer <токен>.4. Проверка токена: Получатель токена может проверить его подпись, чтобы убедиться, что он не был изменен и что он был создан с использованием секретного ключа. Если проверка проходит успешно, получатель может использовать данные из токена для аутентификации пользователя или получения другой необходимой информации.
JWT обычно используется для создания токенов с информацией о пользователе после успешной аутентификации, чтобы идентифицировать пользователя при последующих запросах без необходимости повторной отправки учетных данных. Он также может использоваться для передачи других данных между сторонами, таких как права доступа или другие свойства пользователя.
👍13👾2
Вывод актуальных изменений в файл Git
Пример команды:
С помощью команд
Далее можно использовать функцию поиска утилиты
Пример команды:
git log -p filenameС помощью команд
git log -p или git log -p filename можно посмотреть не только примечание к коммиту, автора и дату, но также сделанные в этом коммите изменения.Далее можно использовать функцию поиска утилиты
less, набрав «слеш» и введя поисковый запрос: /{{поисковый-запрос}} (используйте маленькую "n" для перехода к следующему результату поиска и большую "N" для того, чтобы вернуться к предыдущему).👍5
Адаптер
Приведем аналогию: Допустим, у вас на карте памяти есть какие-то картинки. Их нужно перенести на компьютер. Нужен адаптер, совместимый с входным портом компьютера, в который можно вставить карту памяти. В данном примере адаптер — это картридер. Ещё один пример: переходник, позволяющий использовать американский блок питания с российской розеткой. Третий пример: переводчик — это адаптер, соединяющий двух людей, говорящих на разных языках.
Шаблон «Адаптер» позволяет помещать несовместимый объект в обёртку, чтобы он оказался совместимым с другим классом.
Шаблон проектирования «Адаптер» позволяет использовать интерфейс существующего класса как другой интерфейс. Этот шаблон часто применяется для обеспечения работы одних классов с другими без изменения их исходного кода.
Приведем аналогию: Допустим, у вас на карте памяти есть какие-то картинки. Их нужно перенести на компьютер. Нужен адаптер, совместимый с входным портом компьютера, в который можно вставить карту памяти. В данном примере адаптер — это картридер. Ещё один пример: переходник, позволяющий использовать американский блок питания с российской розеткой. Третий пример: переводчик — это адаптер, соединяющий двух людей, говорящих на разных языках.
Шаблон «Адаптер» позволяет помещать несовместимый объект в обёртку, чтобы он оказался совместимым с другим классом.
Шаблон проектирования «Адаптер» позволяет использовать интерфейс существующего класса как другой интерфейс. Этот шаблон часто применяется для обеспечения работы одних классов с другими без изменения их исходного кода.
👍8
Пример структурного шаблона Адаптер
Представим себе охотника на львов.
Создадим интерфейс
Охотник должен охотиться на все реализации интерфейса
Добавим теперь дикую собаку
Теперь
Представим себе охотника на львов.
Создадим интерфейс
Lion, который реализует все типы львов.interface Lion
{
public function roar();
}
class AfricanLion implements Lion
{
public function roar()
{
}
}
class AsianLion implements Lion
{
public function roar()
{
}
}
Охотник должен охотиться на все реализации интерфейса
Lion.class Hunter
{
public function hunt(Lion $lion)
{
}
}
Добавим теперь дикую собаку
WildDog, на которую охотник тоже может охотиться. Но у нас не получится сделать это напрямую, потому что у собаки другой интерфейс. Чтобы она стала совместима с охотником, нужно создать подходящий адаптер.// Это нужно добавить
class WildDog
{
public function bark()
{
}
}
// Адаптер вокруг собаки сделает её совместимой с охотником
class WildDogAdapter implements Lion
{
protected $dog;
public function __construct(WildDog $dog)
{
$this->dog = $dog;
}
public function roar()
{
$this->dog->bark();
}
}
Теперь
WildDog может вступить в игру действие благодаря WildDogAdapter.$wildDog = new WildDog();
$wildDogAdapter = new WildDogAdapter($wildDog);
$hunter = new Hunter();
$hunter->hunt($wildDogAdapter);🔥9🤔6
Что такое Бритва Оккама
Что это значит в мире программирования? Не создавайте ненужных сущностей без необходимости. Будьте прагматичны — подумайте, нужны ли они, поскольку они могут в конечном итоге усложнить вашу кодовую базу.
Бри́тва О́ккама (иногда ле́звие О́ккама) — методологический принцип, в кратком виде гласящий: «Не следует множить сущее без необходимости» (либо «Не следует привлекать новые сущности без крайней на то необходимости»).
— Википедия
Что это значит в мире программирования? Не создавайте ненужных сущностей без необходимости. Будьте прагматичны — подумайте, нужны ли они, поскольку они могут в конечном итоге усложнить вашу кодовую базу.
👍5❤1
Скрываем реальный IP адрес, задраиваем/закрываем порты
Существуют и правила безопасности, которые знают и помнят далеко не все разработчики. Одно из таких правил — обязательное сокрытие реального IP‑адреса вашего проекта. Если по доменному имени можно определить IP‑адреса серверов, это может привести к проблемам.
Спрятав реальный IP‑адрес сервера, вы сразу затрудните задачу потенциальным атакующим. В этом вопросе могут оказаться весьма полезными CDN (сеть доставки контента) или сервисы защиты от DDoS‑атак. Например, есть такое популярное и при этом бесплатное решение, как CloudFlare, которое сочетает в себе сразу и возможности CDN, и защиту от DDoS. Можно использовать Imperva (бывшая Incapsula), предлагающую аналогичные функции, или, например, Qrator, специализирующийся на защите веб‑приложений как Web Application Firewall, но это уже будет стоить денег.
Хотя эти инструменты могут эффективно помочь в обеспечении безопасности, есть некоторые нюансы, которые тоже стоит помнить:
1. Существует риск утечки IP через почтовые заголовки. Если вы используете ваш основной сервер в качестве почтового, реальный IP‑адрес может быть раскрыт в заголовках электронных писем, и все ваши старания полетят коту под хвост.
2. С помощью ресурсов вроде DNS History или Whois Request, можно просмотреть историю IP‑адресов, ассоциированных с доменом. Если реальный IP‑адрес когда‑либо был связан с рабочим доменом, его следует изменить.
3. Будьте особенно осторожны при использовании DDoS‑защиты для доменов, применяемых в качестве API‑эндпоинтов. Системы защиты иногда могут вводить проверку пользователя, подменяя ваш json/xml на HTML код, что может привести к сбоям в работе клиентской части.
4. Не забывайте, что отправляя запросы со своего сервера на API сторонних ресурсов, вы также можете раскрыть его IP. Для того, чтобы избежать этого недоразумения, вы можете использовать proxy‑серверы, ведь их изменить будет гораздо проще, чем разгребать последствия атаки.
Существуют и правила безопасности, которые знают и помнят далеко не все разработчики. Одно из таких правил — обязательное сокрытие реального IP‑адреса вашего проекта. Если по доменному имени можно определить IP‑адреса серверов, это может привести к проблемам.
Спрятав реальный IP‑адрес сервера, вы сразу затрудните задачу потенциальным атакующим. В этом вопросе могут оказаться весьма полезными CDN (сеть доставки контента) или сервисы защиты от DDoS‑атак. Например, есть такое популярное и при этом бесплатное решение, как CloudFlare, которое сочетает в себе сразу и возможности CDN, и защиту от DDoS. Можно использовать Imperva (бывшая Incapsula), предлагающую аналогичные функции, или, например, Qrator, специализирующийся на защите веб‑приложений как Web Application Firewall, но это уже будет стоить денег.
Хотя эти инструменты могут эффективно помочь в обеспечении безопасности, есть некоторые нюансы, которые тоже стоит помнить:
1. Существует риск утечки IP через почтовые заголовки. Если вы используете ваш основной сервер в качестве почтового, реальный IP‑адрес может быть раскрыт в заголовках электронных писем, и все ваши старания полетят коту под хвост.
2. С помощью ресурсов вроде DNS History или Whois Request, можно просмотреть историю IP‑адресов, ассоциированных с доменом. Если реальный IP‑адрес когда‑либо был связан с рабочим доменом, его следует изменить.
3. Будьте особенно осторожны при использовании DDoS‑защиты для доменов, применяемых в качестве API‑эндпоинтов. Системы защиты иногда могут вводить проверку пользователя, подменяя ваш json/xml на HTML код, что может привести к сбоям в работе клиентской части.
4. Не забывайте, что отправляя запросы со своего сервера на API сторонних ресурсов, вы также можете раскрыть его IP. Для того, чтобы избежать этого недоразумения, вы можете использовать proxy‑серверы, ведь их изменить будет гораздо проще, чем разгребать последствия атаки.
👍1
Что такое миграции баз данных?
Anonymous Quiz
3%
Оптимизация производительности запросов к базе данных.
7%
Процесс обновления операционной системы на сервере баз данных.
85%
Автоматизированный процесс применения и отмены изменений в структуре базы данных.
4%
Увеличение доступного пространства для базы данных.
Миграция баз данных
Под любой миграцией понимают перемещение чего-то или кого-то с одного места в другое. По этому же принципу работает миграция баз данных. Например, ее переносят из локальной среды в облачную.
Существует 2 типа процесса миграции:
1. Однократная миграция подразумевает разовое перемещение. Нюанс этого процесса заключается в том, что база данных переносится из одной системы в другую. При этом поддержка первой системы, из которой выполнили перенос, прекращается.
2. Версионная миграция данных. При данном типе база данных обновляется до новой версии. Помимо апгрейда, может быть откат к более старым версиям. Также данный тип миграции затрагивает схему, о которой более подробно рассказали в разделе «Основные понятия».
Цели миграция баз данных
Прежде чем перейти к инструкциям, разберемся, зачем компании проводят данную процедуру и какую выгоду получают. Как правило, в любой организации с каждым годом работы количество информации только приумножается. В основном для ее хранения выбирают базы данных. Но не все так просто, поскольку со временем специалисты перестают справляться с сопровождением, а также появляется необходимость в современных информационных системах.
Чтобы справиться со всеми трудностями, нужно проводить миграцию баз данных. Это помогает улучшить защиту конфиденциальности информации и закрыть вопрос с поддержкой, так как базы данных переходят под управление современных систем. Переход от старого к новому способствует цифровым трансформациям в компании.
Сейчас мы рассмотрим, почему бизнес нуждается в миграции баз данных и какие задачи она решает:
• Чтобы повысить уровень сохранности и надежности данных.
• Улучшить качество командной работы. Если над проектом работает команда разработчиков, миграция помогает синхронизировать код и контролировать версии программного обеспечения.
• Устранить проблемы с масштабированием проектов.
• Обновить функционал и повысить производительность системы хранения информации.
• Чтобы воспользоваться возможностями современных технологий, например, работать с BigData или искусственным интеллектом.
• Сократить расходы на сопровождение и поддержку информационных систем.
Следующим постом рассмотрим пример миграции базы данных PostgreSQL
Под любой миграцией понимают перемещение чего-то или кого-то с одного места в другое. По этому же принципу работает миграция баз данных. Например, ее переносят из локальной среды в облачную.
Существует 2 типа процесса миграции:
1. Однократная миграция подразумевает разовое перемещение. Нюанс этого процесса заключается в том, что база данных переносится из одной системы в другую. При этом поддержка первой системы, из которой выполнили перенос, прекращается.
2. Версионная миграция данных. При данном типе база данных обновляется до новой версии. Помимо апгрейда, может быть откат к более старым версиям. Также данный тип миграции затрагивает схему, о которой более подробно рассказали в разделе «Основные понятия».
Цели миграция баз данных
Прежде чем перейти к инструкциям, разберемся, зачем компании проводят данную процедуру и какую выгоду получают. Как правило, в любой организации с каждым годом работы количество информации только приумножается. В основном для ее хранения выбирают базы данных. Но не все так просто, поскольку со временем специалисты перестают справляться с сопровождением, а также появляется необходимость в современных информационных системах.
Чтобы справиться со всеми трудностями, нужно проводить миграцию баз данных. Это помогает улучшить защиту конфиденциальности информации и закрыть вопрос с поддержкой, так как базы данных переходят под управление современных систем. Переход от старого к новому способствует цифровым трансформациям в компании.
Сейчас мы рассмотрим, почему бизнес нуждается в миграции баз данных и какие задачи она решает:
• Чтобы повысить уровень сохранности и надежности данных.
• Улучшить качество командной работы. Если над проектом работает команда разработчиков, миграция помогает синхронизировать код и контролировать версии программного обеспечения.
• Устранить проблемы с масштабированием проектов.
• Обновить функционал и повысить производительность системы хранения информации.
• Чтобы воспользоваться возможностями современных технологий, например, работать с BigData или искусственным интеллектом.
• Сократить расходы на сопровождение и поддержку информационных систем.
Следующим постом рассмотрим пример миграции базы данных PostgreSQL
👍10❤1🔥1👀1
Миграция базы данных PostgreSQL
Мы будем использовать две логические процедуры, а именно: репликацию и дампу.
Для начала необходимо подготовить исходный кластер, выполнив команды в данной последовательности:
•
• Затем откройте
• На этом этапе должна настроиться аутентификация в
• Перезапустите систему управления базами данных с использованием инструкции:
После подготовки кластера можно перенести схему базы данных. При этом должно соблюдаться требование, что схема базы данных в источнике должна быть идентична схеме базы данных в приемники.
Чтобы перенести базу данных, используйте следующие утилиты:
В завершении необходимо создать публикацию в источнике при помощи инструкции
После этого нужно создать подписки в приёмнике, применив инструкцию
В связи с невозможностью репликации последовательностей необходимо произвести восстановление дампа с последовательностями при помощи утилиты
Создать дамп можно при помощи вышеупомянутых утилит:
Мы будем использовать две логические процедуры, а именно: репликацию и дампу.
Для начала необходимо подготовить исходный кластер, выполнив команды в данной последовательности:
•
ALTER ROLE <name> WITH REPLICATION, в скобках вместо name необходимо указать имя пользователя;• Затем откройте
postgresql.conf и укажите следующую информацию: wal_level = logical• На этом этапе должна настроиться аутентификация в
pg_hba.conf. Где <host>, укажите IP или DNS приемника:host all all <host> md5
host replication all <host> md5
• Перезапустите систему управления базами данных с использованием инструкции:
systemctl restart postgresql.После подготовки кластера можно перенести схему базы данных. При этом должно соблюдаться требование, что схема базы данных в источнике должна быть идентична схеме базы данных в приемники.
Чтобы перенести базу данных, используйте следующие утилиты:
pg_dump и pg_restore.В завершении необходимо создать публикацию в источнике при помощи инструкции
CREATE PUBLICATION <name> FOR ALL TABLES, указав название публикации. Для создания публикации нужно обладать правами superuser.После этого нужно создать подписки в приёмнике, применив инструкцию
CREATE SUBSCRIPTION <name> CONNECTION, указав название подписки. Для этого действия нужно иметь доступ администратора dbaas_admin.В связи с невозможностью репликации последовательностей необходимо произвести восстановление дампа с последовательностями при помощи утилиты
psql. Для этого сбросьте подписку в приемнике, выполнив команду:DROP SUBSCRIPTION.
Создать дамп можно при помощи вышеупомянутых утилит:
pg_dump и pg_restore. Дамп базы данных можно создать в кастомном формате (для восстановления отдельных элементов) или в SQL формате.👍6👀2❤1🤯1
Что такое WebSockets
Веб-сокеты это продвинутая технология, позволяющая открыть постоянное двунаправленное сетевое соединение между браузером пользователя и сервером. С помощью его API вы можете отправить сообщение на сервер и получить ответ без выполнения http запроса, причём этот процесс будет событийно-управляемым.
• Первое что мы делаем — отправляем обычный TCP-запрос на сервер, мы говорим, что хотим подключиться к серверу и ждём от него ответа. Такой процесс называется “рукопожатие” (Handshake), он используется повсеместно, например когда вы подключаетесь к роутеру ваш телефон отправляем запрос роутеру с ключами, роутер отвечает ОК и вы успешно подключаетесь.
• Затем происходит обмен данными: допустим один из множества клиентов отправил HTTP-запрос серверу и нужно отдать ответ не только одному клиенту, а целой сети! Сервер в таком случае отдаст обычный ответ отправителю запроса, а всем другим пришлёт пакеты по WebSocket-соединению с полезными данными.
Веб-сокеты это продвинутая технология, позволяющая открыть постоянное двунаправленное сетевое соединение между браузером пользователя и сервером. С помощью его API вы можете отправить сообщение на сервер и получить ответ без выполнения http запроса, причём этот процесс будет событийно-управляемым.
➖ Как это работает?
• Первое что мы делаем — отправляем обычный TCP-запрос на сервер, мы говорим, что хотим подключиться к серверу и ждём от него ответа. Такой процесс называется “рукопожатие” (Handshake), он используется повсеместно, например когда вы подключаетесь к роутеру ваш телефон отправляем запрос роутеру с ключами, роутер отвечает ОК и вы успешно подключаетесь.
• Затем происходит обмен данными: допустим один из множества клиентов отправил HTTP-запрос серверу и нужно отдать ответ не только одному клиенту, а целой сети! Сервер в таком случае отдаст обычный ответ отправителю запроса, а всем другим пришлёт пакеты по WebSocket-соединению с полезными данными.
👍15
Самая простая команда в работе с Kubernetes
Для начала, пожалуй, самое простое и полезное действие в работе с Kubernetes. Следующая команда включает автодополнение команд
Автозаполнение
Для начала, пожалуй, самое простое и полезное действие в работе с Kubernetes. Следующая команда включает автодополнение команд
kubectl в оболочке bash:echo "source <(kubectl completion bash)" >> ~/.bashrc
Автозаполнение
kubectl пропишется в файл .bashrc и будет автоматически активироваться каждый раз при запуске оболочки. Это ускоряет набор длинных команд и параметров, таких как all-namespaces. Подробнее в справке Kubernetes по bash.