Praca Каменщик в Варшаве Polska 35zł (złotych)- ID-630730
Каменщик в Варшаве
Budowa — Naprawa — Architektura
35 zł (злотых)
Polska (Варшава)
03-04-2023
JDG Maksim Kowalewski
Osoba prywatna
na layboard od 06.11.2022
Osoba kontaktowa: Maxim_kowalewski
Telefon: Pokaż telefon
Zobacz opinie o firmie ⟶
Osoba kontaktowa: Maxim_kowalewski
Telefon: Pokaż telefon
Wymagane doświadczenie
Z zakwaterowaniem
Stała praca
Bez języka
Dla mężczyzn
пино-бесплатная вакансия)
Прямой работодатель, без посредников.
Работа на аккорд — 35 злот/квм, в месяц в среднем от 1500 евро
Для выполнения кладочных работ требуются каменщики, только с опытом работы (паротерм, силка — на клей, раствор). Постоянные объемы работ.
При желании, возможна дальнейшая работа в Бельгии, Германии с более высокой заработной платой( от 3000 евро)
Приветствуются полноценные бригады — более привлекательные объемы и условия труда !
Требования:
— Полное отсутствие вредных привычек (алкоголь, наркотики).
— Норма выработки: от 10 м/кв в день на 1 человека
— Профессионализм, ответственность, честность, желание зарабатывать.
— Знание польского языка не обязательно, но приветствуется.
Условия работы:
— Официальное оформление, полный перечень необходимых документов, приглашение на рабочую визу
— Жилье — за счет компании, свои хостелы в пригороде Варшавы(частный дом)
— Спецодежду (обувь, форму, каски, защитные эл-ты)
— Транспорт до работы(возможна оплата топлива для вашего авто)
— Ежедневные горячие обеды
— Сдельная, своевременная оплата труда, авансирование по запросу.
— График работы: ПН-ПТ 7:00 -17:00, суббота 7:00 — 14:00, Вск — выходной.
Wszystkie wakaty od «JDG Maksim Kowalewski» ⟶
Złóż skargę na wakatem
Podziel się wakatem:
Работа в Израиле. Постоянное поступление новых вакансий. Прямой работодатель!
2 dni temu
Сварщик 135
26-04-2023
Строитель разнорабочий в Саудовской Аравии
6 sekundy temu
Строитель, разнорабочий. Наружные и внутренние работы. В ГЕРМАНИИ, г. Берлин 3500-4500€
20 sekundy temu
Строитель-универсал в Стокгольме
41 sekunda temu
Murarz Polska Murarz Warszawa, Polska Murarz Budowa — Naprawa — Architektura
Можно ли построить дом без перекуров?
На строительном рынке нынче жестко и тесно. Отрасль оптимизируется, многие остаются за бортом, а выживают те, кто работает быстро, качественно, не срывая сроков. Сегодня поговорим о бригадном подряде в строительстве. Плюсы его очевидны — коллективизм, командный дух и материальные стимулы. Удивляет позиция отдельных организаций, где такой подряд редко используют или вовсе не берут в расчет. Равняться можно на ОАО «Строительный трест № 14» г. Гомель, где бригадам отведена особая роль.
Не делать вид, а работать
Почасовая система оплаты труда — пережиток долгой, упорной борьбы рабочего класса за свои права. Где-то эффективная, но в ряде отраслей и профессий просто нелогичная, она порождает казусы. Недавно интернет позабавила новость из Испании: машинист скоростного междугороднего поезда остановил состав на полпути и пошел домой — у него закончился рабочий день.
А что у нас? В частности на стройках? Не скроем, на наших строительных объектах старая добрая почасовая по-прежнему присутствует. Проверяя стройки, мобильные группы облисполкома не раз убеждались: когда ни приедешь, строители не при делах. Либо курят, либо ждут материалы, либо ходят туда-сюда с деловитым видом. Непосредственно работающие попадаются редко. Да, объекты проверялись проблемные, уже с нареканиями, но все-таки.
Если строитель, скажем бетонщик, работает от звонка до звонка с законным перерывом на обед плюс пять (шесть-семь) перекуров, да еще и на крупном жилищном объекте, где легко укрыться от прораба, то низкий общий КПД уже не удивляет. Как и растянутые до жалоб жильцов сроки ввода конкретного дома в эксплуатацию. В большом коллективе всегда найдутся «таланты», создающие видимость работы.
Конечно, такие горе-строители ставят крест на собственных ПМК и трестах. Своими же руками. При этом жалуются на низкие зарплаты или их задержку. На рынке выживает сильнейший. На Гомельщине, к счастью, хватает организаций, которые это понимают. Там в чести другие подходы и системы — более жесткие, где надо — гибкие, не терпящие шапкозакидательства.
Есть такой трест
Бригадный подряд в строительстве используется не первый год. Скажем больше, он был довольно распространен в СССР. И давно подтвердил реноме наиболее успешной формы организации работ на стройке. В чем же суть? Производственная бригада — первичная ячейка трудового коллектива строителей. Трудовая семья, объединяющая рабочих для эффективного выполнения производственных задач. Эффект главным образом основан на товарищеской взаимопомощи — чувстве локтя, а также общей заинтересованности и ответственности за результат.
ОАО «Строительный трест № 14» г. Гомель далеко не единственное предприятие, широко использующее бригадный подряд. Однако именно его успехи в этом направлении неоднократно отмечались на совещаниях облисполкома. На этом предприятии работа бригадным методом организована максимально рационально, в чем немалая заслуга руководителя — генерального директора Андрея Игнатенко. Сейчас, когда немного «просел» строительный рынок, когда замораживаются стройки и заводятся дела о банкротстве, его трест выигрывает тендер за тендером.
Предприятием накоплен опыт возведения объектов любой степени сложности. Это не только административные и жилые здания, но также учебные заведения, учреждения здравоохранения, промобъекты, торговые, спортивные и развлекательные комплексы в Гомеле, области, республике, за рубежом. Сегодня трест занят на одной из важнейших строек областного центра — реконструкции детской клинической больницы на улице Жарковского.
Один за всех, и все за одного
Прямо в центре города, за бывшим роддомом, кипит работа: вокруг основного котлована снует техника, уже выросли первые этажи корпусов. Рабочие как муравьи. На стройке, должен сказать, побывал трижды. С большим трудом (несмотря на договоренность с руководством треста) удалось выловить одного из бригадиров для 10-минутного интервью. И то во время обеда. Разница с объектами из мобильных рейдов чувствуется на каждом шагу. Все при деле! Причем не делают вид, а именно трудятся. До корреспондента никому нет дела — некогда. «Как же так?» — спрашиваю у бригадира монолитчиков Сергея Антропова.
— Коллективная ответственность, знаете ли, большое дело. Есть срок, доведенные объемы, условия исполнения. Схалтуришь — подведешь себя и всю бригаду. А бригада — это святое. Как-то не тянет отвлекаться, на перекуры бегать. Пообедали и за работу!
Бригадира поддержал подошедший коллега — сварщик Дмитрий Сидоров. По его словам, работа в связке положительно влияет и на качество выполнения. Допустил где-то брак — лишил премии всю бригаду. Потому, наверно, под началом бригадира собираются не просто коллеги — друзья. Это сыгранные команды, где каждый отвечает за свой участок работы. В каждой свои сварщики, электрики, крановщики и так далее. Принцип «один за всех, и все за одного» здесь более чем актуален.
Сергей Антропов назвал еще одно преимущество бригадного подряда — систему оплаты труда и материального стимулирования рабочих. На самом деле, по его словам, все просто и справедливо: сколько сделали, столько и заработали. Плюс гибкая система премирования.
За стимулом не заржавеет
Про нюансы материального стимулирования бригад рассказал главный инженер треста № 14 Александр Чернявский. Каждая бригада получает наряд-задание — документ, где подробно расписаны объемы работ, планируемые трудозатраты, средняя заработная плата и премии. Последние присуждаются бригадам, к примеру, за превышение нормы выработки. Выполнили 110% задания — плюс 10% к зарплате. Если 150% — плюс треть. Отдельно премируется соблюдение правил и норм, отсутствие замечаний к качеству. Но и это не всё. Есть премии за обеспечение ритмичности технологического процесса (до 30%), опережение сроков выполнения задания (до 30%), высокое качество исполнения (до 20%), даже за сокращение ручного труда (10%). Всего 13 поощряемых параметров.
Вот так создается максимальная заинтересованность рабочих в результате. В целом же на выходе — близкий к нулю процент брака, отсутствие нареканий по охране труда и технике безопасности, порядок на рабочих местах. Главное же, на мой взгляд, никакого шапкозакидательства.
Ставка на бригадный подряд бесспорно себя оправдывает. Бригады по 10, 20, 25 человек (под началом Сергея Антропова — 16) собственно формируют основу коллектива треста № 14, их руками создается репутация предприятия, его будущее. Оно, судя по текущим достижениям, темпам работ и растущим как грибы объектам, представляется в самых светлых тонах. Впрочем, пожелаем успехов всем строителям Гомельщины. Тем же, кому неуютно на этом рынке, совет: берите пример с сильнейших.
Почему микросервисы — часть 5
Это пятая часть серии статей о том, почему и когда следует использовать архитектуру микросервисов. Другие сообщения в этой серии:
- Часть 1 — необходимость быстрой, частой и надежной доставки программного обеспечения
- Часть 2 — необходимость устойчивого развития
- Часть 3 — две трети треугольника успеха — процесс и организация
- Часть 4 — архитектурные требования для быстрой, частой, надежной и устойчивой разработки
В этом посте я описываю монолитную архитектуру и рассказываю, насколько хорошо она поддерживает быструю, частую, надежную и устойчивую доставку программного обеспечения.
Монолитная архитектура не является анти-шаблоном
Монолитная архитектура — это архитектурный стиль, который структурирует приложение как единую исполняемую или развертываемую единицу.
Монолитная архитектура имеет множество преимуществ, включая простоту. Весь код обычно находится в одном репозитории, поэтому внесение изменений обычно не вызывает затруднений. Модули взаимодействуют друг с другом, используя вызовы методов или функций на уровне языка, которые просты и эффективны. Кроме того, приложение может поддерживать согласованность данных с помощью транзакций ACID, которые просты и привычны. Более того, если вы используете язык со статической типизацией, компилятор применит интерфейсы.
Следовательно, монолитная архитектура определенно не является антишаблоном. Это правильный выбор для многих приложений. В частности, небольшой монолит обычно легко разрабатывать, тестировать, развертывать и масштабировать. Он соответствует архитектурным требованиям для быстрой, частой, надежной и устойчивой доставки программного обеспечения, которые я описал в части 4 этой серии статей.
Рассмотрим, например, небольшую группу из восьми человек, выполняющую непрерывное развертывание на основе магистрали. Каждый разработчик обычно фиксирует магистраль не реже одного раза в день. Перед фиксацией он или она запускает тесты перед фиксацией. Коммит запускает автоматический конвейер развертывания, который создает, тестирует и обновляет рабочую среду с использованием стратегии развертывания на основе канареек.
Поскольку команда небольшая, скорость изменений и затраты на координацию изменений относительно невелики. Возможно, в течение каждого восьмичасового рабочего дня происходит восемь коммитов, то есть по одному в час. Каждый разработчик добавляет, возможно, около 300 LOC в неделю, поэтому, по крайней мере на начальном этапе, кодовая база относительно невелика. Код быстро компилируется, и относительно небольшое количество автоматических тестов быстро выполняется на ноутбуке разработчика. Точно так же автоматизированный конвейер развертывания быстр и надежен.
Успешные приложения часто перерастают свою монолитную архитектуру
Однако проблема с монолитной архитектурой заключается в том, что успешные приложения имеют привычку расти. Даже когда команда небольшая, кодовая база постепенно становится все больше и больше. Более того, одна небольшая команда часто разрастается до десятков или сотен небольших кросс-функциональных команд, каждая из которых работает в определенной области бизнеса. В результате скорость роста кодовой базы приложения неуклонно увеличивается с течением времени. Поскольку каждый разработчик ежедневно вносит изменения, в конечном итоге каждый день будет производиться большое количество коммитов. И то, что когда-то было небольшим монолитом, вырастает в масштабное приложение. Некоторые клиенты, с которыми я работал, имеют огромные файлы WAR размером в несколько гигабит.
Если приложение и его команда продолжают расти, то рано или поздно монолитная архитектура становится препятствием для быстрой, частой, надежной и устойчивой поставки программного обеспечения. Давайте посмотрим, почему.
Нисходящая спираль к большому шару грязи
Теоретически вы можете сохранить модульность приложения с течением времени. Однако на практике модульность приложения часто нарушается. В современных языках программирования обычно отсутствуют механизмы обеспечения модульности. Или, возможно, сжатые сроки вынуждают разработчика идти по короткому пути и нарушать модульность. Со временем эти изменения накапливаются, и приложение превращается в большой ком грязи.
Как только это происходит, организация оказывается в мире боли. Разработчики ошеломлены сложностью приложения. Скорость изменений замедляется. И изменения часто приводят к неожиданным ошибкам.
Постепенно устаревающий стек технологий
Основным ограничением монолитной архитектуры является невозможность обновления стека технологий приложения поэтапно. Поскольку существует единая единица развертывания, многие технологические решения носят глобальный характер, что препятствует инкрементным обновлениям. Существует, например, единственная версия языковой среды выполнения. Вы не можете обновить языковую версию среды выполнения только для части приложения. Вы также не можете переключиться на другую среду выполнения, по одному модулю за раз.
Также обычно нельзя использовать несколько версий библиотеки в монолитном приложении. Например, в Java-приложении существует единственный путь к классу, поэтому существует только одна версия библиотеки. В результате вы не можете поэтапно обновить приложение до новой версии. Вместо этого вы должны обновить все приложение целиком, что может занять непомерно много времени, если более новая версия не будет обратно совместима со старой версией.
Например, давайте представим, что вы хотите реализовать функцию, для которой требуется новая библиотека, имеющая транзитивную зависимость от более новой основной версии какой-либо другой библиотеки, которая уже используется приложением. Обновление до новой основной версии может потребовать изменения многочисленных частей приложения, что может оказаться серьезной задачей. Этот тип обновления не может выполняться поэтапно. Вам нужно изменить все части приложения одновременно. И, что еще хуже, возможно, что не каждая команда выиграет от обновления, поэтому может быть сложно убедить все команды согласиться выполнить обновление одновременно. В результате вы, как правило, привязаны к устаревшему стеку технологий, который вы выбрали в начале разработки.
Нет независимых развертываний
Еще один недостаток монолитной архитектуры заключается в том, что из-за наличия одного исполняемого/развертываемого компонента команда не может развертывать свои изменения независимо. Вместо этого их код должен быть сначала упакован вместе с кодом, разработанным другими командами. Это отсутствие возможности развертывания требует, чтобы команда координировала свои действия с другими командами для развертывания своих изменений.
Также существует риск того, что команды могут мешать друг другу и замедлять друг друга. Например, по мере роста команды приложения становится все более вероятным, что разработчик не может развернуть свои изменения, потому что другой разработчик сломал сборку. Риск неработающих сборок особенно высок, если приложение имеет один репозиторий.
Медленные сборки и развертывания
Другим ограничением монолитной архитектуры является то, что по мере роста размера приложения и его команды разработка, вероятно, в конечном итоге замедлится. Поскольку время компиляции, сборки, тестирования и сборки пропорционально размеру приложения, время выполнения конвейера развертывания и, следовательно, время выполнения заказа будет увеличиваться по мере роста приложения. Кроме того, хотя частота развертывания увеличивается по мере роста числа разработчиков, в конечном итоге она стабилизируется и начнет снижаться, главным образом потому, что конвейер развертывания станет узким местом.
Как описано в следующих двух сообщениях этой серии, точные причины замедления зависят от характера пути от ноутбука разработчика до производства. Например, код приложения может находиться в одном репозитории кода с одним конвейером развертывания. В качестве альтернативы каждый из модулей верхнего уровня приложения может находиться в собственном репозитории кода, который имеет собственный конвейер сборки. Однако в обоих случаях заключительные этапы конвейера развертывания приложения должны быть
- Соберите готовое развертываемое приложение, т.е. создать файл WAR или исполняемый файл JAR и, возможно, контейнер Docker
- Протестировать собранное приложение
- Разверните приложение в рабочей среде
Время выполнения каждого из этих шагов пропорционально размеру приложения. В результате время выполнения каждого шага со временем будет расти. Рассмотрим каждый шаг более подробно.
Сборка приложения замедляется
Как вы увидите в следующих двух сообщениях, модули приложения (например, файлы JAR) могут создаваться и тестироваться одновременно. Однако в конечном итоге конвейер развертывания должен собрать эти модули в единое приложение (например, файл WAR). Продолжительность этой задачи пропорциональна размеру приложения. Приложение нередко занимает десятки или сотни мегабайт. На некоторых предприятиях даже есть многогигабайтные приложения, которые требуют большого количества данных для перемещения по сети. Следовательно, время сборки приложения будет неуклонно увеличиваться по мере роста приложения. Однако, к счастью, сборка приложения, вероятно, будет намного быстрее, чем следующие два шага.
Медленное время тестирования
После сборки приложения конвейер развертывания должен его протестировать. В принципе, набор тестов на уровне приложения может предполагать, что модули были тщательно протестированы изолированно. В результате нет необходимости всесторонне тестировать приложение. Однако вполне вероятно, что поверхностная проверка того, что большое приложение работает, может занять много времени. А по мере роста приложения его тестируемость снижается, а выполнение набора тестов занимает больше времени.
Что еще хуже, существует риск того, что большое монолитное приложение будет долго запускаться, что еще больше увеличит время тестирования. Например, на этапе инициализации приложения Spring используются механизмы с высокими накладными расходами, такие как отражение и сканирование путей к классам. В результате запуск большого приложения нередко занимает несколько минут. Время запуска должно быть добавлено ко времени выполнения теста и общему времени сборки.
Кроме того, длительное время запуска приложения имеет еще несколько недостатков. Это снижает производительность разработчиков, поскольку разработчики блокируются в ожидании завершения локальной сборки на своем ноутбуке. Это также может снизить частоту разработки, поскольку длительное время запуска замедляет конвейер развертывания. Тесты занимают больше времени. Также требуется больше времени для развертывания приложения в рабочей среде. В результате длительное время запуска может потенциально ограничить количество сборок, которые можно выполнять каждый день.
Развертывание приложения в рабочей среде потенциально является узким местом.
По мере роста приложения не только выполнение тестов будет занимать много времени, но и частота развертывания, вероятно, стабилизируется, поскольку этап 3 (развертывание) станет узким местом. Это связано с тем, что хотя каждая фиксация может инициировать сборку, которая выполняет шаги 1 (сборка) и 2 (тестирование) одновременно с другими сборками, шаг 3 (развертывание) обычно необходимо сериализовать. Например, давайте представим, что конвейер развертывания использует канареечную стратегию развертывания, которая постепенно направляет все больше и больше трафика на новую версию. Поскольку вам необходимо убедиться, что канарейка исправна, процесс развертывания может занять значительное время. Например, пример Flagger занимает 25 минут. Это ограничит частоту развертывания до 20 раз в день (8 часов 25 минут). Даже при 5-минутном развертывании количество ежедневных развертываний будет ограничено 100.
Кроме того, если этап развертывания становится узким местом, это также увеличивает время выполнения заказа. Это потому, что шаг развертывания будет вести себя как система очередей. Как только время между коммитами станет меньше времени развертывания, коммиты будут ждать в очереди. Чем выше частота фиксации и дольше время развертывания, тем дольше время ожидания.
Резюме
Монолитная архитектура, представляющая собой архитектурный стиль, который структурирует приложение как единый исполняемый/развертываемый объект, не является антишаблоном. Небольшой монолит отвечает архитектурным требованиям для быстрой, частой, надежной и устойчивой доставки программного обеспечения, которые я описал в части 4 этой серии статей. Однако по мере роста приложения и его команды вполне вероятно, что монолитная архитектура станет препятствием для быстрой, частой, надежной и устойчивой доставки программного обеспечения, что представляет собой значительный риск для бизнеса.
Это связано с тем, что большой монолит обычно страдает от следующих проблем:
В монолитной архитектуре отсутствует слабая связь и модульность, которые позволяют постепенно обновлять технологический стек приложения. В результате устойчиво снижается, потому что с момента обновления стека технологий становится все труднее.
Модульность часто выходит из строя со временем, и разработчики перегружены сложностью приложения. В результате внесение изменений становится медленным и подверженным ошибкам.
Команда не может развертывать свои изменения независимо от других команд, что снижает их производительность.
По мере увеличения размера приложения конвейер развертывания замедляется и в конечном итоге становится узким местом, из-за чего частота развертывания выходит на плато
В следующих двух постах я расскажу, как уменьшить влияние этих проблем за счет структурирования кодовой базы монолита.
Благодарности
Я хотел бы поблагодарить за их проницательные комментарии/отзывы:
- @PieterHumprey
Сообщения
26 окт 2022 » QCONSF 2022: Темная энергия, темная материя и паттерны микросервисов?!
04 мая 2022 г. » Основные характеристики микросервисной архитектуры: с возможностью независимого развертывания
02 мая 2022 г. » Темная энергия, темная материя и модели совместной работы микросервисной архитектуры
01 мая 2022 г. » Мой новый облачный ПК с Windows 365: Windows 11, рабочий стол Docker и WSL2
12 апреля 2022 г. » Интервью о микросервисах с Кушиком Котхагалом (@Java_Brains)
06 апреля 2022 г. » Использование сценариев для оживления архитектуры микросервисов
16 марта 2022 г. » Айсберги, принцип разделения интерфейса и микросервисы 900 03
02 мар 2022 » Пример Eventuate Tram Customers and Orders теперь работает на MacBook Arm/M1!!
25 февраля 2022 г. » Публикация образа Docker с несколькими архитектурами для службы Eventuate CDC
23 февраля 2022 г. » Публикация базовых образов с несколькими архитектурами для служб
18 февраля 2022 г. » Пирамида основных знаний разработчика
14 февраля 2022 г. » Создание мультиархитектурного образа Docker для Apache Kafka 022 » Настройка CircleCI для сборка, тестирование и публикация образов с несколькими архитектурами для Eventuate Common
28 января 2022 г. » Разработка библиотеки Eventuate Common на M1/Arm MacBook
20 января 2022 г. » Настройка CircleCI для публикации образа Docker с несколькими архитектурами
19 января 2022 г. » Тестирование образа Docker с несколькими архитектурами Intel и Arm на CircleCI
18 января 2022 г. » Настройка конвейера на основе CircleCI для создания образов Docker с несколькими архитектурами Intel и ARM
10 января 2022 г. » Мой Apple M1 MacBook: много ядер, памяти и аварийных контейнеров
04 января 2022 г. » Написание более качественных отчетов о проблемах: 6 основных деталей
30 ноября 2021 г. » Проектирование архитектуры с использованием темной материи и темной энергии
31 октября 2021 г. » Основной доклад iSAQB — Модульные монолиты и микросервисы: архитектурные шаблоны для быстрой, надежной, частой и устойчивой разработки
15 сентября 2021 г. » Подкаст журнала Techlead — Принципы успешного внедрения микросервисов : решение проблем распределенных данных в микросервисной архитектуре
27 июля 2021 г. » Язык шаблонов для микросервисов
27 июля 2021 г. » Подкаст The Confident Commit| Эпизод 6: Архитектура и доставка
21 мая 2021 г. » QConPlus 2021: вынос буррито и минимизация связи времени проектирования в архитектуре микросервисов События на снаружи, внутри и в основе
14 февраля 2021 г. » Почему микросервисы — часть 5 — монолитная архитектура и быстрая, частая, надежная и устойчивая доставка программного обеспечения
14 декабря 2020 г. » Проектирование слабосвязанных сервисов
24 ноября 2020 г. » Микросервисы — архитектура, которая позволяет использовать DevOps сообщения, использующие идемпотент потребительский образец
29 сентября 2020 г. » 497 тыс. просмотров и подсчет: мой доклад на DockerCon 2016 — микросервисы + события + Docker = идеальное трио
22 сентября 2020 г. » Основной доклад TDC 2020: Архитектура микросервисов — обеспечение быстрой, надежной, частой и устойчивой разработки
21 августа 2020 г. » Разложите свой монолит — десять принципов рефакторинга монолита в микросервисы
28 июля 2020 г. » Разложите свой монолит — шесть принципов рефакторинга монолита в микросервисы
02 июня 2020 г. » Открыта регистрация на бета-версию шаблоны распределенных данных для микросервисов виртуальный учебный курс
21 мая 2020 г. » Почему микросервисы — часть 4, последняя треть треугольника успеха — архитектурные требования для быстрой, частой, надежной и устойчивой разработки
14 мая 2020 г. » Язык шаблонов и визуальная нотация для систем обмена сообщениями. Шаблоны корпоративной интеграции от @ghohpe и @bobby_woolf
03 мая 2020 г. Апрель 2020 г. » Объявление о первом виртуальном учебном курсе — шаблоны распределенных данных в микросервисной архитектуре
11 апреля 2020 г. » Почему микросервисы — часть 3, две трети треугольника успеха — процесс и организация
30 марта 2020 г. » Почему микросервисы — часть 2, потребность в устойчивом развитии
12 марта 2020 г. » Онлайн-семинары по микросервисам и виртуальные учебные курсы
18 февраля 2020 г. » Почему микросервисы — часть 1, необходимость быстрой, частой и надежной доставки программного обеспечения
04 февраля 2020 г. » Jfokus 2020 — Кубы, шестиугольники, треугольник с, и многое другое — Понимание микросервисов
02 февраля 2020 г. » Напоминаем: выбор подходящей архитектуры для вашего приложения — это передовая практика
07 января 2020 г. » Книги о высокопроизводительной доставке программного обеспечения — DevOps Handbook + Team Topologies + Accelerate + Microservices Patterns
12 декабря 2019 г. » Управление согласованностью данных в микросервисной архитектуре с помощью Sagas. Часть 4. Реализация саги на основе оркестровки
12 ноября 2019 г. Shapes
09 октября 2019 г. » Разложите свой монолит — стратегии перехода на микросервисы
02 октября 2019 г. » Презентация GOTO в Чикаго — Не только мероприятия — Разработка асинхронных микросервисов
15 августа 2019 г. » Управление согласованностью данных в микросервисной архитектуре с помощью Sagas — часть 3 — реализация саги на основе хореографии » Ваши архитекторы действительно работают над архитектурой?
16 июля 2019 г. » Великая трилогия Марка Шварца (@schwartz_cio) — «Война и мир и информационные технологии», «Место за столом» и «Искусство бизнеса».0002 15 июля 2019 г. » Приложение FTGO и база данных для шаблона службы
09 июля 2019 г. » Конференции YOW в Перте, Гонконге и Сингапуре
09 июля 2019 г. » Управление согласованностью данных в микросервисной архитектуре с использованием Sagas — часть 1
22 июня 2019 г. » Контейнеры, рабочий процесс разработчика и тестовая пирамида
07 июня 2019 г. » Анти-шаблон внедрения микросервисов — Закон о настораживающих знаках
21 мая 2019 г. » Анти-шаблон внедрения микросервисов — Чем веселее
12 мая 2019 г. » Самодокументируемые сервисы — создание холста микросервисов
30 апреля 2019 г. » Антипаттерн внедрения микросервисов — фокус на технологиях
16 апреля 2019 г. » Книги, которые следует прочитать — Почему мы спим
09 A пр 2019 » Анти-паттерн внедрения микросервисов — Пытаться летать раньше, чем ходить
24 марта 2019 г. 0003
25 фев. 2019 г. » Внедрение микросервисов против шаблона — выборочное внедрение
16 фев. 2019 г. » Что такое (микро)сервис — часть 1?
29 января 2019 г. » Публичный тренинг по микросервисам в Стокгольме, 8 и 9 мая
28 января 2019 г. » Анти-шаблоны микросервисов в Мельбурне
14 января 2019 » Анти-шаблон — микросервисы как цель
1 2 Янв 2019 » Мой YOW ! Презентация 2018 г. — События и команды, Разработка асинхронных микросервисов
10 января 2019 г.» Семинары O’Reilly Software Architecture New York и GOTO Chicago
07 января 2019 г. » Анти-шаблоны внедрения микросервисов — микросервисы — это волшебная пыльца
31 декабря 2018 г. » Доступна оценка архитектуры микросервисов
Микросервисы и монолиты : Оперативное сравнение
Александр Кайнц
Александр Кайнц работает в сфере информационных технологий более 20 лет. Java, Python, JavaScript и Smalltalk — его предпочтительные языки программирования. Его внимание было сосредоточено на предприятиях, особенно в финансовой сфере. За свою карьеру он работал в Германии, США, Австралии и, наконец, в Таиланде. Ему повезло жить в Бангкоке, городе, который он обожает за его энергию, разнообразие и людей. Он пишет о своих интересах, включая цифровую трансформацию, микросервисы, Rest API и DevOps.
Представленная в противовес этим так называемым монолитным архитектурам микросервисная архитектура разделяет бизнес-процесс на несколько независимых сервисов.
Например, в контексте бронирования авиабилетов монолитный подход включает в себя создание единого программного обеспечения с процессом «бронирование билетов».
«Забронировать билет» включает в себя ряд отдельных процессов. Возможно, вы забронируете билет в авиакомпании, выставите счет с кредитной карты клиента и отправите подтверждение клиенту, если билет успешно забронирован.
В микросервисной архитектуре отдельные процессы разбиты на независимые сервисы. В приведенном выше примере услугами могут быть бронирование билетов, оплата картой и подтверждение. Теперь независимые службы взаимодействуют друг с другом через определенные интерфейсы.
Сказать, что архитектуры микросервисов стали массовыми, было бы преуменьшением. В новостной ленте я почти не вижу монолитных архитектур — только в статьях о возврате от микросервисов к монолитным архитектурам. В этой статье мы противопоставим этих двоих друг другу.
Два стиля архитектуры программного обеспечения выходят на ринг, один из них выходит победителем.
Раунд первый: задержка
Когда речь идет о микросервисах, действует фундаментальный закон физики. Всякий раз, когда микрослужба вызывает другую службу по сети, байты отправляются по сети. Это включает преобразование байтов в электрические сигналы или импульсный свет, а затем преобразование этих сигналов обратно в байты. Согласно этой ссылке задержка вызова микросервисов составляет не менее 24 мс. Если предположить, что фактическая обработка занимает около 100 мс, то общее время обработки выглядит следующим образом:
Сетевая задержка — микросервисы против монолитов
В идеале все вызовы могут выполняться одновременно и не зависеть друг от друга. Это называется шаблоном разветвления. Ниже приведена диаграмма, показывающая, как общее время уменьшается по мере того, как все больше и больше вызовов выполняются одновременно.
Одновременное выполнение большего количества вызовов означает сокращение общего времени выполнения
Параллельное выполнение всех вызовов означает, что служба вернется к потребителю после завершения самого длинного вызова. У монолита нет сетевой задержки, так как все вызовы локальны. Даже в идеально распараллеливаемом мире монолиты все равно будут быстрее. Способ решить эту проблему — уменьшить длину цепочки вызовов, использовать разветвление и сохранить данные как можно более локальными. Кроме того, использование шаблона разветвления может значительно повысить производительность, как показано выше. Но, в конце концов, микросервисы не могут обогнать физику, когда речь идет о задержке.
Это явная победа монолитов.
Этап второй: сложность
При рассмотрении сложности учитывается ряд факторов: сложность разработки и сложность запуска программного обеспечения. Из-за сложности разработки размер кодовой базы может быстро вырасти при создании программного обеспечения на основе микросервисов. Задействовано несколько исходных кодов с использованием разных фреймворков и даже разных языков. Поскольку микросервисы должны быть независимы друг от друга, код часто будет дублироваться. Кроме того, разные сервисы могут использовать разные версии библиотек, поскольку графики выпуска не синхронизированы. Для аспекта запуска и мониторинга большое значение имеет количество затронутых служб. Монолит разговаривает только сам с собой. Это означает, что у него есть один потенциальный партнер в процессе обработки. Один вызов в микросервисной архитектуре может затрагивать несколько служб. Они могут быть на разных серверах или даже в разных географических точках.
В монолите ведение журнала так же просто, как просмотр одного файла журнала. Однако для отслеживания проблемы с микросервисами может потребоваться проверка нескольких файлов журналов. Необходимо не только найти все соответствующие выходные данные журналов, но и собрать их вместе в правильном порядке. Микросервисы используют уникальный идентификатор или диапазон для каждого вызова. Это позволяет таким инструментам, как Elasticsearch, находить все соответствующие выходные данные журналов по службам. Такие инструменты, как Jaeger, могут отслеживать и профилировать вызовы в нескольких микросервисах.
При запуске микросервисов в кластере Kubernetes сложность возрастает еще больше. Хотя Kubernetes поддерживает такие возможности, как автоматическое масштабирование, администрировать эту систему непросто. Для развертывания монолита может быть достаточно простой операции копирования. Для запуска или остановки монолита часто достаточно простой команды. Kubernetes, с другой стороны, не для слабонервных. Транзакции также усложняют работу микросервисных архитектур по сравнению с монолитом. Вне зависимости от границ службы трудно гарантировать синхронизацию данных. Например, плохо реализованный повтор вызова может привести к выполнению платежа дважды. Архитектуры микросервисов могут управлять этим с помощью таких методов, как центральный координатор. Однако в монолитной архитектуре транзакции легко обрабатываются или даже прозрачны для разработчика.
По сложности еще одна победа достается монолиту.
Раунд 3: Надежность
Поскольку все вызовы в монолите являются локальными, сбой сети исключен. Сравните это с микросервисами. Предположим, что микрослужба вызывает другую службу по сети с надежностью 99,9 %. Это означает, что из 1000 вызовов один будет неудачным из-за проблем с сетью. Теперь, если эта служба вызывает другую службу, мы получаем надежность 99,8%. Для цепочки вызовов с глубиной 10 вызовов мы сократились до 9.Надежность 9% — это означает, что 1 вызов из 100 терпит неудачу.
Надежность снижается по мере увеличения длины цепочки вызовов
При разработке архитектуры микросервисов важно предполагать, что в какой-то момент сеть выйдет из строя. Микросервисы предлагают некоторые решения для решения этой проблемы. Spring Cloud с открытым исходным кодом предлагает прозрачную балансировку нагрузки и обработку сбоев для Java. Сервисные сетки, такие как Istio, могут достичь этого для нескольких языков. Проблемы с сетью чаще возникают в микросервисных архитектурах, но, поскольку это ожидаемо, они предназначены для решения этих проблем. Кроме того, поскольку сбои в сети происходят регулярно, микросервисы доказали свою способность справляться с ними. Это гарантирует отсутствие скрытых ошибок в отношении этих проблем.
При сбое службы в кластере микрослужб менеджер кластера просто вызовет замену. Это делает микросервисные архитектуры очень устойчивыми. Netflix создал инструмент под названием Chaos Monkey, который случайным образом завершает виртуальные машины и контейнеры. Таким образом, они могут убедиться, что система способна обрабатывать сбои в производственной среде. Монолиты, конечно, также могут работать в кластере в масштабе. Но из-за их размера проблема бьет по ним сильнее. Трудно представить случайный перезапуск монолитов, чтобы убедиться, что они выживут. С другой стороны, самое надежное программное обеспечение — это монолит, т. е. промышленные контроллеры и системы управления полетом самолетов. Безусловно, можно создавать высоконадежные монолиты, но в масштабе и в облаке это становится сложно.
В конце концов микросервисы одерживают победу.
Раунд 4: Использование ресурсов
Если вызов микросервиса выполняет ту же работу с теми же алгоритмами, он всегда будет использовать больше ресурсов, чем монолит. Docker и виртуальные машины добавляют накладные расходы. Другой тест показал снижение количества подключений примерно на 8% при работе в контейнере Docker. Оркестрация изображений также будет потреблять ресурсы, как и агрегация журналов и мониторинг.
Однако микросервисы позволяют нам использовать ресурсы разумнее, намного разумнее. Поскольку менеджер кластера может распределять ресурсы по мере необходимости, фактическое использование ресурсов может быть намного ниже. Глядя на монолит, который выполняет 80% работы в 20% кода, мы можем показать, что произойдет, если мы сможем самостоятельно масштабировать «горячую» часть кода. Например, если один экземпляр монолита использует 8 ГБ, два экземпляра используют 16 ГБ и так далее. Предположим, что 20% выполняются параллельно для выполнения тяжелой работы. У нас есть один экземпляр с 8 ГБ, а затем микросервисы с 20% использования ОЗУ, что составляет 1,6 ГБ. Это означает, что для двух экземпляров у нас есть использование ОЗУ 90,6 ГБ. На приведенной ниже диаграмме показана разница в использовании ресурсов.
Монолиты требуют больше ресурсов, чем микросервисы, так как запущено больше экземпляров
Монолиты могут превзойти микросервисы в крайних случаях. Если, например, вызов передает большие объемы данных.
Но в большинстве сценариев использование ресурсов ниже, и это выигрыш для микросервисов.
Раунд 5: Масштабируемость
Существуют способы масштабирования монолита. Можно запускать несколько экземпляров и соответствующим образом направлять запросы. Или можно запустить несколько потоков или использовать неблокирующий ввод-вывод. Для микросервисных архитектур все три утверждения также верны. Но, как показано в разделе «Использование ресурсов», их можно выполнить с меньшими ресурсами. Это означает, что на ресурс может быть обработано больше подключений. За деньги, потраченные на ресурсы, микросервисы обеспечивают большую пропускную способность. Также возможно более точное масштабирование. Если монолит использует все ресурсы, способ обработки большего количества подключений — запустить второй экземпляр. Если одна микрослужба использует все ресурсы, больше экземпляров потребуется только этой службе. Поскольку микросервисы менее ресурсоемки, это экономит ресурсы. Поскольку масштабирование является простым и точным, это означает, что используется только необходимое количество ресурсов. При необходимости администраторы могут подключать AWS или других облачных провайдеров к сети или офлайн.
Например, предположим, что на самом большом экземпляре Amazon Web Services в данный момент работает монолит. Инстанс m5. 24xlarge предлагает колоссальные 96 ЦП и 384 ГБ ОЗУ. Стоимость на данный момент также колоссальна и составляет 2119,19 долларов в месяц, например, при круглосуточной работе. За те же деньги можно купить 12 инстансов c5.2xlarge с 8 виртуальными процессорами и 16 ГБ оперативной памяти, каждый из которых работает круглосуточно и без выходных. Но большинство рабочих нагрузок не требуют полного использования ресурсов в режиме 24/7. Вместо этого пик использования ресурсов приходится на определенные часы, а в остальное время он ниже. Ниже приведен график, показывающий, сколько стоят эти 12 небольших экземпляров, если они работают только определенное время, а не круглосуточно и без выходных.
Поскольку выделенные ресурсы дешевле, чем почасовая оплата, существует момент, когда один экземпляр становится дешевле. Переход в этом примере составляет 520 часов или примерно, если экземпляры работают 70 % времени.
Сравните цену 12 контейнеров микросервисов по запросу с выделенным массивным монолитным контейнером
А поскольку архитектуры микросервисов более детализированы, масштабирование отдельных сервисов также является более мелкозернистым.
Благодаря точному масштабированию и лучшему использованию ресурсов это явное преимущество микросервисов.
Раунд 6: Пропускная способность
Давайте рассмотрим еще один показатель производительности. Абсолютная пропускная способность. Мы уже исследовали взаимосвязь между сетевой задержкой и распараллеливанием. Те же отношения действуют и для пропускной способности. В рабочих нагрузках, которые не могут выполняться одновременно в сети, монолиты могут обеспечить более высокую производительность. Данные должны передаваться между службами, а также вся инфраструктура вызывает определенные накладные расходы. Если рабочую нагрузку нельзя масштабировать до нескольких экземпляров, монолит может обеспечить более высокую пропускную способность.
При высоко локализованных рабочих нагрузках и отсутствии накладных расходов из-за контейнеров, оркестрации контейнеров или сервисных сеток это точка для монолитов.
Раунд 7: Время выхода на рынок
Одной из причин, по которой люди выбирают микросервисную архитектуру, является время выхода на рынок. Это время от принятия бизнес-решения в отношении функции до того, как эта функция станет общедоступной. Из-за своего размера и зависимостей монолиты обычно труднее развертывать. С другой стороны, проще развертывать микросервисы часто или постоянно. Одна из причин заключается в том, что последствия изменений сильно локализованы. Микросервисы должны раскрывать только свои интерфейсы, а не их реализации. Это означает, что разработчик может изменить реализацию, не изменяя зависимые службы. Поскольку интерфейс также ясен и может иметь версии, любые изменения в нем должны иметь четко определенное влияние. Для монолита объектно-ориентированное программирование позволяет разделить интерфейс реализации. Но для этого требуется высокодисциплинированная команда, чтобы не стать жертвой зова сирены зависимости от реализации.
Кроме того, микросервисы легче тестировать. Поскольку микросервисы охватывают лишь ограниченный набор функций, количество зависимостей также меньше. С меньшим количеством зависимостей тесты могут быть написаны и выполняться быстрее. В-третьих, микросервисы менее ресурсоемки и масштабируются. Это позволяет микросервисам беспрепятственно развертываться. Микросервисы могут быть запущены на части узлов кластера. Затем пользователи могут быть последовательно переведены на новую версию. Другие стратегии миграции включают одновременный запуск старых и новых версий. Это позволяет быстро вернуться к старой версии, если есть проблема. Детализированная архитектура микросервисов обеспечивает более быстрое и надежное развертывание. Это сокращает время от идеи до производственного развертывания.
Победа достается микросервисам.
Раунд 8: Связь
Микросервисы часто определяются размером команды разработчиков. У Amazon, например, есть «правило двух пицц», согласно которому команду разработчиков можно «накормить двумя пиццами» за то время, которое потребуется для создания микросервиса, соответствующего размеру команды примерно из 4–8 человек. Идея, стоящая за этим, заключается в том, что общение ограничено командой. Команды должны общаться только через сервисные интерфейсы.
Задолго до рождения идеи микросервиса Фред Брукс написал основополагающую книгу «Мифический человеко-месяц». Один из выводов этой книги заключается в том, что количество каналов связи увеличивается с увеличением числа членов команды. В команде из двух человек канал связи один. С четырьмя людьми можно было подключить до шести каналов. Человек один разговаривает с людьми два, три и четыре. Второй человек разговаривает с третьим и четвертым, а третий разговаривает с четвертым. Формула количества каналов связи: n(n − 1)/2,
Команда из 20 разработчиков имеет 190 возможных каналов связи. Разделение этих разработчиков на команды по две пиццы значительно сокращает количество каналов связи. Если мы возьмем примерную команду из 20 разработчиков и разделим ее на четыре команды микросервисов по пять человек в каждой, у нас будет 10 каналов связи на команду. А количество каналов связи между четырьмя командами всего шесть. Общее количество каналов связи — 46, что составляет примерно четверть команды из 20 человек. На графике ниже показано количество каналов связи для одной большой команды по сравнению с отдельными командами микросервисов.
Каналы связи между монолитными и микросервисами по мере увеличения общего размера команды
Приблизительно при 10 разработчиках модель микросервисов демонстрирует явное преимущество перед традиционной моделью. При размере команды в 50 разработчиков количество каналов связи почти в 10 раз больше. Каждый, кто работал в команде такого размера, может подтвердить тот факт, что много времени уходит на общение. Одна только стоячая встреча с 50 разработчиками была бы упражнением в неэффективности. Любой проект разработки, в котором участвует более 10 разработчиков, хорошо обслуживается, если его разбить на более мелкие команды. Микросервисы идеально подходят для этого, так как они имеют четко определенные интерфейсы вдоль границ сервисов.
Еще одна очевидная победа микросервисов.
Кто победитель?
Подведены итоги. Две победы монолита против трех побед микросервисов.
Однако, глядя на эту диаграмму, имейте в виду, что она относительная. Например, микросервис выигрывает в командном общении только для команд размером более 10 разработчиков. Небольшой стартап-команде из пяти разработчиков вполне может подойти монолит. Монолитами легче управлять с меньшим количеством движущихся частей. А выделенная небольшая команда также может выполнять ежедневный график выпуска с помощью монолита. Масштабирование актуально только при определенном количестве использования. Если продукты получают несколько обращений в секунду, монолита может быть вполне достаточно. Кроме того, если вызовы перемещают большие объемы данных по сети, падение производительности может быть значительным и перевешивать другие преимущества. Микросервисы не являются панацеей от всех проблем разработки. Ниже приведены несколько указаний на то, что микросервисная архитектура может подойти:
- Требуется надежность 24/7
- Масштабирование за пределы нескольких запросов
- Пиковая и нормальная нагрузка значительно отличаются
- Более 10 разработчиков
- Деловой домен можно разделить на более мелкие домены
- Операции с коротким сроком службы
- Операции могут быть выражены как вызовы REST или события очереди.