Откуда взялось уменьшение кода в 4 раза, если в обоих случаях нужно написать одни и те же базовые манифесты, только в вашем случае вы судя по всему ещё и создали свой собственный аналог helm?
Насколько я понимаю этот подход, вы описали все ресурсы (rbac, config map, stateful set, service), создали Makefile и задеплоили один единственный сервис. А теперь представьте, что в вашей организации 200+ микросервисов и им всем нужны одни и те же k8s ресурсы. Отличаются они только именем образа Docker и возможно переменными окружения. Что вы сделаете в этом случае? Будете копировать одинаковые файлы для каждого сервиса? Helm позволяет упаковывать k8s ресурсы для простого переиспользования и этим он хорош. В большой организации есть специальные команды, которые пишут эти пакеты, а разработчики сервисов лишь применяют их. Кроме того там есть версионирвоание, то есть можно применить разные версии одного и того же пакета. Так или иначе эту функциональность вам придётся создать вашим инструментом. Только зачем, если есть готовый?
Я правильно понимаю, что вы называете Docker и Spring Boot атрибутами некой концепции Монолит 2.0? Они уже лет 6-7 являются стандартом микросервисной архитектуры и созданы специально как инструменты для микросервисной архитектуры. Никакого отношения к монолиту они не имеют.
Сервис и правда идеальный 😉. Одно замечание: пагинация с помощью offset не очень хороша для базы данных, так как она не индексируемая. Базе придётся вытащить несколько первых страниц, но отдать только последнюю. Лучше для этого использовать номер последней записи из текущей страницы. Либо ограничивайте допустимый номер страницы.
Про индекс согласен, не заметил уникальный ключ. В остальном, Вы тестируете производительность трёх разных способов выполнения этого запроса. Это, разумеется, не то же самое, что производительность базы данных. Но условия для выполнения тестов, во-первых, не приближены к реальным, а, во-вторых, не симметричные. Я всего лишь вежливо предложил этот тест адаптировать и посмотреть, что получится. Не понимаю, откуда столько агрессии. Готов дискутировать по деталям, но только при условии уважительной дискуссии.
Возможно я что-то упускаю, но есть подозрение, что тест, который Вы опубликовали, не вполне представителен. Как я понимаю, Вы выполняете одни и те же запросы на одной базе данных. И по "странному" стечению обстоятельств первый тест медленнее второго, а второй медленнее третьего. Это может говорить о том, что база данных "прогрелась" и одни и те же запросы достаются из кэша. Кроме того, объёмы данных совсем минимальные, чтобы вообще судить о производительности. Кроме того, не вижу у вас индекса. Кроме того, не вижу параллельного выполнения запросов. Рекомендую для большей наглядности тестов, добавить в базу 10 миллионов записей, выполнять тесты в 100 потоков и каждый тест выполнять на новом инстансе базы данных. Тогда возможно получите результаты более близкие к тем, о которых Вам говорили.
Я правильно понял, что для анализа запроса он отправляется на какой-то сторонний сервер, ещё и где-то в России? Тогда сразу масса вопросов.
Как можно сделать анализ запроса не имея под рукой схему базы данных?
Как можно сделать анализ запроса не имея под рукой самих данных (ведь использование индексов сильно зависит от количества строк в таблице, например иногда выгоднее делать Full Scan)?
Сливается ли это всё на российский сервер? А если нет, точность таких анализов и сопутствующих "советов по оптимизации" вероятно мизерная.
В идее есть стандартный встроенный плагин для построения плана запроса (он даже на ваших скриншотах виден). Насколько есть смысл рисковать словом данных непонятно куда вместо использования этого плагина?
Emacs, разумеется, не является IDE. Но Вы работаете не в голом Emacs, а в полноценной среде (Emacs + плагины). Вы удивитесь, но эта среда и есть IDE, на что намекают приведённые выше цитаты. То, что определённые плагины загружаются на определённые файлы, является особенностью любой другой IDE. Так что не понимаю, в чём предмет спора тут. Вы набираете руками команды в консоли или используете то, что предоставляет Ваша не-IDE?
То, что Вы описали, справедливо для любой другой IDE: в зависимости от типа файла работают те или иные плагины. Отличие лишь в наборе плагинов и возможно в порядке их загрузки. А принципиально в чём отличие? Или Вы утверждаете, что то, в чём Вы работаете, это обычный консольный текстовый редактор, как описано в статье? Вы все команды в командной строке набираете или используете готовые short-cut-ы из того, что Вы не хотите называть IDE?
Прямая цитата из текущей статьи: "Если вы относитесь к тому типу программистов, которые наслаждаются жизнью в терминале и могут легко обходиться без графического интерфейса, то Vim — отличный выбор для редактирования кода."
Тут выяснилась интересная подробность. В соседней ветке товарищ, который защищает Vim, сам работает в IDE. Поэтому хотелось бы заранее понять, о чём мы говорим с Вами. Вот тут есть такая статья про NeoVim https://habr.com/ru/companies/avito/articles/682962/ Цитаты из этой статьи
В готовых конфигурациях уже есть всё необходимое, чтобы пользоваться NeoVim как обычной IDE.
Плагины: превращаем редактор кода в полноценную IDE
Так вот что у Вас: консольный редактор, как описано в комментируемой статье, или всё-таки полноценная IDE?
Так статья о чём? Автор говорит о консольном текстовом редакторе. Я отметил в изначальном комментарии, что использовать такое в современной работе невозможно, нужно использовать IDE. Вы сами используете IDE, а не то, что описывается в статье. Не понимаю, с чем Вы конкретно не согласны.
Переименование класса / метода с заменой по всему проекту
Вынесение части кода в отдельный метод
Добавление параметра в метод с постановкой значения по умолчанию по всему проекту
Поменять параметры метода местами
"Провалиться" в реализацию метода из места, где этот метод используется через интерфейс
Подсветить ошибки в коде без запуска компилятора
Подключить к проекту систему сборки и иметь возможность использовать публичные библиотеки
Поиск класса среди всех подключённых библиотек по названию
Предложить варианты определения значения переменной по типу
Предложить класс / функцию по двум трём буквам названия (не обязательно идущих подряд)
Посмотреть всю иерархию класса
Запустить тесты (все тесты в проекте, все тесты в конкретном классе, один конкретный тест)
Дебаг: узнать значение переменной в нужном месте, выполнить вычисления в нужном месте
Spring: автоматически предложить возможные настройки в конфигурации, перейти из файла конфигурации в проперти класс, перейти к определению бина из места его использования
Вот, с ходу столько уже придумал. Всё это делается одной комбинацией клавиш или парой щелчков мышью. А как это делаете Вы?
Думаю Вы согласны, что у Вас особый случай, что Вам приходится работать сразу в нескольких платформах одновременно. Вероятно, Вам действительно проще иметь текстовые редактор для всех платформ.
Для остальных, кто специализируется на одной, мой вывод остаётся верен.
Кроме того, позвольте уточнить, Вы под эти все платформы именно ведёте полноценную разработку или просто собираете/вкладываете?
Что касается портянки проблем. Опишите хотя бы парочку, интересно посмотреть, актуальны ли эти проблемы в моём случае.
Я не знаю, какая у Вас платформа (язык программирования, система сборки, фреймворки), но для своей (Java/Kotlin, Maven/Gradle, Spring Boot) могу накидать с десяток функций, которые в текстовом редакторе просто невозможно сделать эффективно. Вы, конечно можете научиться быстро набирать типовые скрипты, но это всё равно не будет быстрее, чем стандартная готовая функция внутри IDE, которая делает тоже самое сразу без набора скрипта одной комбинацией клавиш (или мышью).
Так он и выучить не мог. Выучить подразумевает, что в какой-то момент он их реально знал. Что просто невозможно, учитывая, что у него на каждый язык было меньше года опыта.
Все, что написано в скетче Ардуино это обычный C++ с подключёнными заголовками, которые обозначают функции микро контроллера. Ардуино просто вызывает эти функции в нужном порядке и умеет реагировать на нужные функции нужным способом. Никакого уникального языка в этом смысле нет. Поправьте, если что-то изменилось за последнее время.
Откуда взялось уменьшение кода в 4 раза, если в обоих случаях нужно написать одни и те же базовые манифесты, только в вашем случае вы судя по всему ещё и создали свой собственный аналог helm?
Насколько я понимаю этот подход, вы описали все ресурсы (rbac, config map, stateful set, service), создали Makefile и задеплоили один единственный сервис. А теперь представьте, что в вашей организации 200+ микросервисов и им всем нужны одни и те же k8s ресурсы. Отличаются они только именем образа Docker и возможно переменными окружения. Что вы сделаете в этом случае? Будете копировать одинаковые файлы для каждого сервиса? Helm позволяет упаковывать k8s ресурсы для простого переиспользования и этим он хорош.
В большой организации есть специальные команды, которые пишут эти пакеты, а разработчики сервисов лишь применяют их. Кроме того там есть версионирвоание, то есть можно применить разные версии одного и того же пакета.
Так или иначе эту функциональность вам придётся создать вашим инструментом. Только зачем, если есть готовый?
Я правильно понимаю, что вы называете Docker и Spring Boot атрибутами некой концепции Монолит 2.0?
Они уже лет 6-7 являются стандартом микросервисной архитектуры и созданы специально как инструменты для микросервисной архитектуры. Никакого отношения к монолиту они не имеют.
Сервис и правда идеальный 😉.
Одно замечание: пагинация с помощью offset не очень хороша для базы данных, так как она не индексируемая. Базе придётся вытащить несколько первых страниц, но отдать только последнюю.
Лучше для этого использовать номер последней записи из текущей страницы.
Либо ограничивайте допустимый номер страницы.
Про индекс согласен, не заметил уникальный ключ. В остальном, Вы тестируете производительность трёх разных способов выполнения этого запроса. Это, разумеется, не то же самое, что производительность базы данных.
Но условия для выполнения тестов, во-первых, не приближены к реальным, а, во-вторых, не симметричные. Я всего лишь вежливо предложил этот тест адаптировать и посмотреть, что получится. Не понимаю, откуда столько агрессии.
Готов дискутировать по деталям, но только при условии уважительной дискуссии.
Возможно я что-то упускаю, но есть подозрение, что тест, который Вы опубликовали, не вполне представителен.
Как я понимаю, Вы выполняете одни и те же запросы на одной базе данных. И по "странному" стечению обстоятельств первый тест медленнее второго, а второй медленнее третьего. Это может говорить о том, что база данных "прогрелась" и одни и те же запросы достаются из кэша.
Кроме того, объёмы данных совсем минимальные, чтобы вообще судить о производительности.
Кроме того, не вижу у вас индекса.
Кроме того, не вижу параллельного выполнения запросов.
Рекомендую для большей наглядности тестов, добавить в базу 10 миллионов записей, выполнять тесты в 100 потоков и каждый тест выполнять на новом инстансе базы данных.
Тогда возможно получите результаты более близкие к тем, о которых Вам говорили.
Я правильно понял, что для анализа запроса он отправляется на какой-то сторонний сервер, ещё и где-то в России? Тогда сразу масса вопросов.
Как можно сделать анализ запроса не имея под рукой схему базы данных?
Как можно сделать анализ запроса не имея под рукой самих данных (ведь использование индексов сильно зависит от количества строк в таблице, например иногда выгоднее делать Full Scan)?
Сливается ли это всё на российский сервер?
А если нет, точность таких анализов и сопутствующих "советов по оптимизации" вероятно мизерная.
В идее есть стандартный встроенный плагин для построения плана запроса (он даже на ваших скриншотах виден). Насколько есть смысл рисковать словом данных непонятно куда вместо использования этого плагина?
Emacs, разумеется, не является IDE. Но Вы работаете не в голом Emacs, а в полноценной среде (Emacs + плагины). Вы удивитесь, но эта среда и есть IDE, на что намекают приведённые выше цитаты.
То, что определённые плагины загружаются на определённые файлы, является особенностью любой другой IDE.
Так что не понимаю, в чём предмет спора тут. Вы набираете руками команды в консоли или используете то, что предоставляет Ваша не-IDE?
То, что Вы описали, справедливо для любой другой IDE: в зависимости от типа файла работают те или иные плагины. Отличие лишь в наборе плагинов и возможно в порядке их загрузки. А принципиально в чём отличие?
Или Вы утверждаете, что то, в чём Вы работаете, это обычный консольный текстовый редактор, как описано в статье? Вы все команды в командной строке набираете или используете готовые short-cut-ы из того, что Вы не хотите называть IDE?
Прямая цитата из текущей статьи:
"Если вы относитесь к тому типу программистов, которые наслаждаются жизнью в терминале и могут легко обходиться без графического интерфейса, то Vim — отличный выбор для редактирования кода."
Тут выяснилась интересная подробность.
В соседней ветке товарищ, который защищает Vim, сам работает в IDE.
Поэтому хотелось бы заранее понять, о чём мы говорим с Вами.
Вот тут есть такая статья про NeoVim
https://habr.com/ru/companies/avito/articles/682962/
Цитаты из этой статьи
В готовых конфигурациях уже есть всё необходимое, чтобы пользоваться NeoVim как обычной IDE.
Плагины: превращаем редактор кода в полноценную IDE
Так вот что у Вас: консольный редактор, как описано в комментируемой статье, или всё-таки полноценная IDE?
Так статья о чём? Автор говорит о консольном текстовом редакторе. Я отметил в изначальном комментарии, что использовать такое в современной работе невозможно, нужно использовать IDE. Вы сами используете IDE, а не то, что описывается в статье. Не понимаю, с чем Вы конкретно не согласны.
Ну ок, цитата из второй вашей ссылки:
"Client for Language Server Protocol (v3.14). lsp-mode aims to provide IDE-like experience"
То есть у вас таки IDE, а не голый консольный текстовый редактор.
Вы случайно не это используете?
https://github.com/emacs-lsp/lsp-java
Там прямо таки написано: "Emacs Java IDE". То есть у вас таки IDE, хоть и сильно обрезанная.
Переименование класса / метода с заменой по всему проекту
Вынесение части кода в отдельный метод
Добавление параметра в метод с постановкой значения по умолчанию по всему проекту
Поменять параметры метода местами
"Провалиться" в реализацию метода из места, где этот метод используется через интерфейс
Подсветить ошибки в коде без запуска компилятора
Подключить к проекту систему сборки и иметь возможность использовать публичные библиотеки
Поиск класса среди всех подключённых библиотек по названию
Предложить варианты определения значения переменной по типу
Предложить класс / функцию по двум трём буквам названия (не обязательно идущих подряд)
Посмотреть всю иерархию класса
Запустить тесты (все тесты в проекте, все тесты в конкретном классе, один конкретный тест)
Дебаг: узнать значение переменной в нужном месте, выполнить вычисления в нужном месте
Spring: автоматически предложить возможные настройки в конфигурации, перейти из файла конфигурации в проперти класс, перейти к определению бина из места его использования
Вот, с ходу столько уже придумал. Всё это делается одной комбинацией клавиш или парой щелчков мышью. А как это делаете Вы?
Думаю Вы согласны, что у Вас особый случай, что Вам приходится работать сразу в нескольких платформах одновременно. Вероятно, Вам действительно проще иметь текстовые редактор для всех платформ.
Для остальных, кто специализируется на одной, мой вывод остаётся верен.
Кроме того, позвольте уточнить, Вы под эти все платформы именно ведёте полноценную разработку или просто собираете/вкладываете?
Что касается портянки проблем. Опишите хотя бы парочку, интересно посмотреть, актуальны ли эти проблемы в моём случае.
Я не знаю, какая у Вас платформа (язык программирования, система сборки, фреймворки), но для своей (Java/Kotlin, Maven/Gradle, Spring Boot) могу накидать с десяток функций, которые в текстовом редакторе просто невозможно сделать эффективно. Вы, конечно можете научиться быстро набирать типовые скрипты, но это всё равно не будет быстрее, чем стандартная готовая функция внутри IDE, которая делает тоже самое сразу без набора скрипта одной комбинацией клавиш (или мышью).
Так он и выучить не мог. Выучить подразумевает, что в какой-то момент он их реально знал. Что просто невозможно, учитывая, что у него на каждый язык было меньше года опыта.
Все, что написано в скетче Ардуино это обычный C++ с подключёнными заголовками, которые обозначают функции микро контроллера. Ардуино просто вызывает эти функции в нужном порядке и умеет реагировать на нужные функции нужным способом. Никакого уникального языка в этом смысле нет. Поправьте, если что-то изменилось за последнее время.
Так ведь автор статьи сам утверждает, что "знает" 30 языков.