
Dmitry
08.08.2018
06:43:03
вот только его все забывают выпиливать и этот ком растет

Maksim
08.08.2018
06:43:33
Да похер как) я не о том спрашиваю)

Alexander
08.08.2018
06:43:40
:)

Google

Dmitry
08.08.2018
06:44:49
о том, он руками выполняет миграции в том порядке, что бы не ломалось... или вообще заворачивает релиз если там альтер жуткий

Maksim
08.08.2018
06:45:09
Нахуй нужен такой релиз менеджер)

Alexander
08.08.2018
06:45:11
Или ты о поломке базы?
Мы просто о поломке приложения после изменения базы

Dmitry
08.08.2018
06:45:44
он может спросить релизера если что

Maksim
08.08.2018
06:46:24
Чет по описанию вы себе на ровной протоптанной тропинке проблем придумали, имхо

Alexander
08.08.2018
06:46:25
А миграции которые ломают базу это полный пиздец
Тем более если они дошли до релиза

Dmitry
08.08.2018
06:47:25
мы не о ломании, а о правильном их порядке относительно релиза кода

Anton
08.08.2018
06:48:11
У нас например часто бывает зарелизили потом ой надо откатить, чета не то

Dmitry
08.08.2018
06:48:15
и о потенциально просаживающих производительнось особо

Anton
08.08.2018
06:48:18
Откатываем

Google

Anton
08.08.2018
06:48:33
А сайт надо чтобы без даунтайма все это время
Пока раскатывается новая версия на несколько серверов, бывают обновляешь страницу и тебе то старая то новая
Тут полюбому надо так делать нам, чтобы код без миграции работал правильно

Dmitry
08.08.2018
06:51:02
код не сломается, если будет лишняя колонка

Anton
08.08.2018
06:51:59
Да, в случае удаления колонки все верно. Но например такая ситуация: зарелизили, удалили колонку, а через 15 мин поняли что надо откатить релиз
Поэтому я обычно удаляю колонку уже назавтра в другом релизе
А в случае добавления нового поля сложнее: надо 100% сначала накатывать миграцию с новым полем, а потом код, который его юзает

Dmitry
08.08.2018
06:53:51
ну да, только у нас не программисты следят за этим, а девопсы

Anton
08.08.2018
06:54:07
У нас тоже

Alexander
08.08.2018
06:54:24
Интереснее вопрос как сделать тяжелый алтер без даунтайма

Dmitry
08.08.2018
06:54:33
и один файл миграции могут исполнить в разном порядке или вообще не исполнить

Anton
08.08.2018
06:54:43
Не делать альтер :)

Alexander
08.08.2018
06:54:48
В каком мире ты живёшь ?)

Anton
08.08.2018
06:55:15
У нас бывает на 2-3 минуты альтеры, мы просто по живому делаем и миримся с локами таблицы на 2-3 минуты
Очень редко

Dmitry
08.08.2018
06:55:24

Alexander
08.08.2018
06:55:40
А если альтер 15-20 минут

Anton
08.08.2018
06:55:56
Ну надо придумывать исходя из ситуации

Google

Anton
08.08.2018
06:56:12
Тут общего решения наврядли будет

Dmitry
08.08.2018
06:56:18
угу, тригера для догона и потом ренейм

Anton
08.08.2018
06:56:32
В идеале если 24/7 не надо, можно ночью сайт приложить
Как онлайнер делал

Alexander
08.08.2018
06:56:51

Anton
08.08.2018
06:57:04
Мы иногда тоже прикладываем в 6 утра когда очень надо

Alexander
08.08.2018
06:57:29
Если на америкосов работать то даже ночами не придётся не спать :)
Удобно

Anton
08.08.2018
06:57:36
Но наверное есть проекты кому нельзя так
Там придумывают что-то

Alexander
08.08.2018
06:57:52
Есть конечно
Ну вот выше описали кейс

Anton
08.08.2018
06:58:06
Мне не приходилось

Alexander
08.08.2018
06:58:16
Но мы так по-моему ни разу не делали

Anton
08.08.2018
06:58:32
Не ну если можно уйти в даун то зачем
Наверное кучу методик можно придумать
Самая простая - не делать альтеры
Можно в коде придумывать разные воркэраунды
Новая таблица там
Конечно если инт на бигинт поменять, наврядли это спасет :)

Google

Dmitry
08.08.2018
07:00:55
ну или варчар расширить, да

Anton
08.08.2018
07:12:00
Я могу представить себе очень хорошо ситуацию когда просто скажешь так не будем делать
Бизнес говорит - хотим 512 вместо 256 поле
А программисты такие уууууу
Там таблица на 10 млрд записееей...
Не, не будем это делать
И бизнес такой Okaaaay =(
И нету проблемы миграции

Dmitry
08.08.2018
07:17:02
почему не будете? Вон ребята из соседней фирмы делают это каждую неделю?
- а мы не умеем и учиться не хотим
- а, ну ок...
Прошло две недели...

Admin
ERROR: S client not available

Anton
08.08.2018
07:19:56
Не ну бывает всякое
Просто если отдел разработк связан с бизнесом, у них одинаковые приоритеты в итоге, и получается ты не говоришь конечно не будем это делать, а по факту говоришь ну мы конечно можем если очень надо, но это будет... Это будет... 300! И бизнес такой ой не очень-то уже и хотелось, давайте лучше другую фичу в это время запилите

Dmitry
08.08.2018
07:27:22
https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html


Anatoliy
08.08.2018
07:42:53
Всем привет.
Предположим, есть достаточно большой проект, сердцем которого является некое API. Технологии не важны, но для контекста: PHP7 и GraphQL.
Далее есть некие клиенты, которые работают с API:
CLIENT1 - панель управления (админка) / ReactJS
CLIENT2 - клиент для гостей / PHP
CLIENT3 - личный кабинет для зарегистрированных / ReactJS
CLIENT4 - блог / PHP
...
Сейчас аутентификация пользователя на API происходит через JWT-token. Если вкратце, то мы делаем некий запрос с логином и паролем, получаем некий токен и с помощью него делаем уже авторизованные запросы.
Далее я столкнулся со следующим вопросом: а как аутентифицировать клиенты?
API имеет ряд запросов, которые не покрывает JWT, тоесть данные по этим запросам можно получить без аутентификации. Например пользователь заходит на CLIENT4, CLIENT4 в свою очередь делает запрос на API, получает список статей и показывает их пользователю (пользователь может быть гостем). Тут все верно.
Однако остается и такой вариант, когда пользователь может миновать CLIENT4, сделать запрос к API и получить данные на прямую. Вопрос заключается в том, как лучше всего закрыть API от всех прямых запросов и дать доступ только определенным клиентам?
———————————————————————————-
Некоторые дополнительные размышления.
Хорошим и безопасным вариантом было бы ограничить доступ и сделать API локальным, однако некоторые клиенты могут быть на другом сервере или требовать внешний доступ (например мобильные устройства).
Я отказался от использования протокола OAuth2, так-как по сути в проекте нет 3 стороны. Поэтому получается не совсем то, что нужно.
Единственный вариант пока приходит в голову, это некий дополнительный токен, который хранит каждый клиент и получает доступ к API подставляя в каждый запрос.
Собственно хотелось бы получить советы/рекомендации, возможно ссылки на технологии/протоколы, которые упустил.


Maksim
08.08.2018
07:43:08
у перконы там прикольные тулзы) на любое кол-во голов раскидывает быстро и прозрачно даже по меркам мускуля)


Shaun
08.08.2018
07:49:23
Всем привет.
Предположим, есть достаточно большой проект, сердцем которого является некое API. Технологии не важны, но для контекста: PHP7 и GraphQL.
Далее есть некие клиенты, которые работают с API:
CLIENT1 - панель управления (админка) / ReactJS
CLIENT2 - клиент для гостей / PHP
CLIENT3 - личный кабинет для зарегистрированных / ReactJS
CLIENT4 - блог / PHP
...
Сейчас аутентификация пользователя на API происходит через JWT-token. Если вкратце, то мы делаем некий запрос с логином и паролем, получаем некий токен и с помощью него делаем уже авторизованные запросы.
Далее я столкнулся со следующим вопросом: а как аутентифицировать клиенты?
API имеет ряд запросов, которые не покрывает JWT, тоесть данные по этим запросам можно получить без аутентификации. Например пользователь заходит на CLIENT4, CLIENT4 в свою очередь делает запрос на API, получает список статей и показывает их пользователю (пользователь может быть гостем). Тут все верно.
Однако остается и такой вариант, когда пользователь может миновать CLIENT4, сделать запрос к API и получить данные на прямую. Вопрос заключается в том, как лучше всего закрыть API от всех прямых запросов и дать доступ только определенным клиентам?
———————————————————————————-
Некоторые дополнительные размышления.
Хорошим и безопасным вариантом было бы ограничить доступ и сделать API локальным, однако некоторые клиенты могут быть на другом сервере или требовать внешний доступ (например мобильные устройства).
Я отказался от использования протокола OAuth2, так-как по сути в проекте нет 3 стороны. Поэтому получается не совсем то, что нужно.
Единственный вариант пока приходит в голову, это некий дополнительный токен, который хранит каждый клиент и получает доступ к API подставляя в каждый запрос.
Собственно хотелось бы получить советы/рекомендации, возможно ссылки на технологии/протоколы, которые упустил.
В чём проблема запихнуть название/идентификатор клиента в сам токен?


Anatoliy
08.08.2018
07:49:57

Anton
08.08.2018
07:50:59
@oldenby ^^^

Bohdan
08.08.2018
07:53:20

Shaun
08.08.2018
07:53:59

Google

Anatoliy
08.08.2018
07:54:34

Bohdan
08.08.2018
07:55:16
ну просто в случае с блогом - у тебя априори нет какого-либо токена
можно, конечно, извратиться с чем-то вроде csrf токена...

Anton
08.08.2018
07:55:21
Мне кажется OAuth2 можно было бы юзать, в нем есть понятие сервер креденшелс, можно получить токен как с креденшелами юзера, так и с креденшелами сервера
Соответственно, разные права им раздавать
Я бы наверное сюда смотрел

Bohdan
08.08.2018
07:55:40
ну либо я чего-то не понимаю


Roman
08.08.2018
08:02:42
Всем привет.
Предположим, есть достаточно большой проект, сердцем которого является некое API. Технологии не важны, но для контекста: PHP7 и GraphQL.
Далее есть некие клиенты, которые работают с API:
CLIENT1 - панель управления (админка) / ReactJS
CLIENT2 - клиент для гостей / PHP
CLIENT3 - личный кабинет для зарегистрированных / ReactJS
CLIENT4 - блог / PHP
...
Сейчас аутентификация пользователя на API происходит через JWT-token. Если вкратце, то мы делаем некий запрос с логином и паролем, получаем некий токен и с помощью него делаем уже авторизованные запросы.
Далее я столкнулся со следующим вопросом: а как аутентифицировать клиенты?
API имеет ряд запросов, которые не покрывает JWT, тоесть данные по этим запросам можно получить без аутентификации. Например пользователь заходит на CLIENT4, CLIENT4 в свою очередь делает запрос на API, получает список статей и показывает их пользователю (пользователь может быть гостем). Тут все верно.
Однако остается и такой вариант, когда пользователь может миновать CLIENT4, сделать запрос к API и получить данные на прямую. Вопрос заключается в том, как лучше всего закрыть API от всех прямых запросов и дать доступ только определенным клиентам?
———————————————————————————-
Некоторые дополнительные размышления.
Хорошим и безопасным вариантом было бы ограничить доступ и сделать API локальным, однако некоторые клиенты могут быть на другом сервере или требовать внешний доступ (например мобильные устройства).
Я отказался от использования протокола OAuth2, так-как по сути в проекте нет 3 стороны. Поэтому получается не совсем то, что нужно.
Единственный вариант пока приходит в голову, это некий дополнительный токен, который хранит каждый клиент и получает доступ к API подставляя в каждый запрос.
Собственно хотелось бы получить советы/рекомендации, возможно ссылки на технологии/протоколы, которые упустил.
Может зарегать клиентов у себя в базе, дать им private public ключи, и далее проводить аутентификацию с помощью них? по публичному токену аутентифициурешь клиента, по приватному проверяешь подлинность подписи.


Anatoliy
08.08.2018
08:13:32
Все спасибо, что-то в голове сфорировалось =)

Sergey
08.08.2018
08:14:53
и да - не замусоривают код) елси грамотно делать)

Anton
08.08.2018
08:19:55
У нас фичефлаги в проекте работают через тот же механизм, что и разделение по разным прайс планам фич, поэтому получается очень аккуратно в итоге, сначала фича делается, потом добавляется некоторым клиентам, потом какому-то прайс плану
В целом по нашему проекту я бы не сказал, чтобы мы очень страдали от этого

Alexander
08.08.2018
08:25:59


Anton
08.08.2018
08:26:14
Всем привет.
Предположим, есть достаточно большой проект, сердцем которого является некое API. Технологии не важны, но для контекста: PHP7 и GraphQL.
Далее есть некие клиенты, которые работают с API:
CLIENT1 - панель управления (админка) / ReactJS
CLIENT2 - клиент для гостей / PHP
CLIENT3 - личный кабинет для зарегистрированных / ReactJS
CLIENT4 - блог / PHP
...
Сейчас аутентификация пользователя на API происходит через JWT-token. Если вкратце, то мы делаем некий запрос с логином и паролем, получаем некий токен и с помощью него делаем уже авторизованные запросы.
Далее я столкнулся со следующим вопросом: а как аутентифицировать клиенты?
API имеет ряд запросов, которые не покрывает JWT, тоесть данные по этим запросам можно получить без аутентификации. Например пользователь заходит на CLIENT4, CLIENT4 в свою очередь делает запрос на API, получает список статей и показывает их пользователю (пользователь может быть гостем). Тут все верно.
Однако остается и такой вариант, когда пользователь может миновать CLIENT4, сделать запрос к API и получить данные на прямую. Вопрос заключается в том, как лучше всего закрыть API от всех прямых запросов и дать доступ только определенным клиентам?
———————————————————————————-
Некоторые дополнительные размышления.
Хорошим и безопасным вариантом было бы ограничить доступ и сделать API локальным, однако некоторые клиенты могут быть на другом сервере или требовать внешний доступ (например мобильные устройства).
Я отказался от использования протокола OAuth2, так-как по сути в проекте нет 3 стороны. Поэтому получается не совсем то, что нужно.
Единственный вариант пока приходит в голову, это некий дополнительный токен, который хранит каждый клиент и получает доступ к API подставляя в каждый запрос.
Собственно хотелось бы получить советы/рекомендации, возможно ссылки на технологии/протоколы, которые упустил.
Вот тут


Dmitry
08.08.2018
08:38:40
приведи пример когда не всегда возможны
когда много разработчиков работающих с кодом. привет, постоянные конфликты. когда изменение логики и число проверок фичефлагов будет на порядок больше, чем самих измнений

Sergey
08.08.2018
08:39:22
ну и когда у тебя то что ты описал - что-то идет не так. Тоглы обычно юзаются только на UI
где все красиво можно разделить на компоненты
а если у тебя большая команда и много людей тыкаются в одинаковых местах - опять же проблемы разделения задач между людьми и планирования
(или разделения проекта на модули)

Dmitry
08.08.2018
08:45:04
ну т.е. если нет UI - нет фичефлагов?