Pull to refresh
  • by relevance
  • by date
  • by rating

Микросервисы — MIF на C++

Programming *C++ *
Около трех лет назад у меня была идея создания небольшого каркаса для разработки небольших сервисов, которые могли бы как-то взаимодействовать между собой, предоставлять API во вне, работать с базами данных и кое-что по мелочи еще. Во время решения некоторых рабочих задач, окончательно сформировалась идея своего проекта, близкого к решению рабочих задач. Примерно год назад все это сформировалось в проект MIF (MetaInfo Framework). Предполагалось, что с его помощью можно будет решать такие задачи, как:

  • Разработка легковесных HTTP сервисов
  • Коммуникация микросервисов через передаваемые между процессами интерфейсы
  • Сериализация и десериализация на базе рефлексии структур данных в разные форматы
  • Работа с базами данных
  • Некоторые вспомогательные компоненты для создания каркасов сервисов

Все это ориентировано на разработку backend сервисов для веба, но может использоваться и в других системах.
Читать дальше →
Total votes 19: ↑19 and ↓0 +19
Views 11K
Comments 14

Микросервисы (Microservices)

Website development *Programming *Microservices *
Sandbox
От переводчика: некоторые скорее всего уже читали этот титанический труд от Мартина Фаулера и его коллеги Джеймса Льюиса, но я все же решил сделать перевод этой статьи. Тренд микросервисов набирает обороты в мире enterprise разработки, и эта статья является ценнейшим источником знаний, по сути выжимкой существующего опыта работы с ними.

Термин «Microservice Architecture» получил распространение в последние несколько лет как описание способа дизайна приложений в виде набора независимо развертываемых сервисов. В то время как нет точного описания этого архитектурного стиля, существует некий общий набор характеристик: организация сервисов вокруг бизнес-потребностей, автоматическое развертывание, перенос логики от шины сообщений к приемникам (endpoints) и децентрализованный контроль над языками и данными.
Читать дальше →
Total votes 29: ↑29 and ↓0 +29
Views 536K
Comments 45

Характеристики микросервисов, приложений и систем

GeekFamily corporate blog .NET *ASP *API *C# *
Всем привет!



Вниманию хабрасообщества хочу представить интересную презентацию Стефана Тилькова, со основателя и главного консультанта в innoQ. Стефан рассказывает об идее разделения больших систем на небольшие приложения, которые отвечают за разные аспекты системы. Сама идея не нова, но автор упирает на то, что основной причиной такого разделения должна быть изоляция. Благодаря границам приложений полученных таким образом, сложнее получить связанные модули, которые на самом деле должны быть независимыми. Тут еще можно вспомнить подход «domains boundary», для разделения доменных сущностей по областям применения, вместо того, чтобы создавать единую модель данных на всю большую организацию/процесс.

Дополнительным плюсом изоляции является возможность точечно масштабировать части системы в зависимости от нагрузок. Этот процесс можно локализировать в одной команде, чтобы они соразмерно своим знаниями и инструментам выполняли задачу в границах изолированной подсистемы.
Читать дальше →
Total votes 13: ↑13 and ↓0 +13
Views 7K
Comments 2

Проектирование Web API в 7 шагов

GeekFamily corporate blog Website development *System Analysis and Design *API *
Translation
7steps Разработка веб API это нечто большее чем просто URL, HTTP статус-коды, заголовки и содержимое запроса. Процесс проектирования – то, как будет выглядеть и восприниматься ваш API – очень важен и является хорошей инвестицией в успех вашего дела. Эта статья кратко описывает методологию для проектирования API с опорой на преимущества веба и протокола HTTP, в частности. Но не стоит думать, что это применимо только для HTTP. Если по какой-то причине вам необходимо реализовать работу ваших сервисов используя WebSockets, XMPP, MQTT и так далее – применяя большую часть всех рекомендаций вы получите практически тот же API, который будет хорошо работать. К тому же полученный API позволит легче разработать и поддерживать работу поверх нескольких протоколов.

Хороший дизайн затрагивает URL, статус-коды, заголовки и содержимое запроса


Обычно руководства по проектированию Web API фокусируются на общих концепциях: как проектировать URL, как правильно использовать HTTP статус-коды, методы, что передавать в заголовках и как спроектировать дизайн содержимого, которое представлено сериализованными данными или графом объектов. Это всё очень важные детали реализации, но не настолько в смысле общего проектирования API. Проектирование API – это то, как сама суть сервиса будет описана и представлена, то что вносит значительный вклад в успех и удобность использования Web API.

Хороший процесс проектирования или методология предоставляют набор согласованных и воспроизводимых шагов для создания компонентов сервисов, которые будут доступны в виде Web API. Это значит, что такая прозрачная методология может быть использована разработчиками, дизайнерами и архитекторами для координации своих действий по реализации ПО. Использованная методология так же может уточнятся со временем по мере того, как улучшается и автоматизируется процесс без ущерба для деталей методологии. На самом деле, детали реализации могут меняться (например, платформа, ОС, фреймворки и стиль UI) независимо от процесса проектировки, когда эти две активности полностью разделены и задокументированы.
Читать дальше →
Total votes 30: ↑28 and ↓2 +26
Views 55K
Comments 8

Про модель, логику, ООП, разработку и остальное

Programming *Perfect code *IT Standards *C# *ООP *
Часто ли вы задумываетесь – почему что-то сделано так или иначе? Почему у вас микросервисы или монолит, двухзвенка или трехзвенка? Зачем вам многослойная архитектура и сколько у вас вообще слоев? Что такое бизнес-логика, логика приложения, презентационная логика и почему все так разделено? Посмотрите на свое приложение – как оно вообще спроектировано? Что в нем и где находится, почему это сделано именно так?
Потому что так написано в книжках или так говорят авторитетные личности? Какие ВАШИ проблемы решает тот или иной подход/паттерн?
Даже то, что на первый взгляд кажется очевидным, порой бывает очень сложно объяснить. А иногда, в попытке объяснения, приходит понимание того, что очевидные мысли были и вовсе ошибочны.
Давайте попробуем взять какой-нибудь пример и изучить на нем эти вопросы со всех сторон.
Читать дальше →
Total votes 55: ↑51 and ↓4 +47
Views 96K
Comments 34

Конспект презентации Udi Dahan “Интегрированный подход к сервисам” с конференции µCon 2014: The Microservices Conference

System Analysis and Design *.NET *Microservices *


Видео: skillsmatter.com/skillscasts/5235-keynote-an-integrated-services-approach
Длинна: 1 час, сайт требует регистрации (email) перед показом видео. На сайте много интересных видеоматериаллов.

Udi Dahan — автор NServiceBus и очень талантливый оратор и учитель. Я слежу за его выступлениями уже несколько лет — Udi всегда есть что сказать и слушать это познавательно и интересно.

Презентации открывала 2й день конференции посвященной микросервисам, Udi весело и аргументированно осмеял популярную нынче тему микросервисов и предложил отслеживать логическую и физическую реализацию, еще раз подумать “зачем нам этот цирк” и провести паралелли между орг структорой, сервисами и многофункциональными командами. Мне лично было очень интересны моменты не “как писать/разворачивать микросервис?” (как бы тактика), а “зачем?” и “чем этот подход лучше?” и собственно как это может жить в большой организации (как бы стратегия).

Читать дальше →
Total votes 12: ↑11 and ↓1 +10
Views 3K
Comments 0

Пишем собственный шлюз для Thrift API

Open source *Java *API *
Tutorial
Микросервисы, как ни крути, — наше всё. Можно сопротивляться SOAP 2.0 сколь угодно долго, но рано или поздно или они придут за тобой и обратят в свою веру, или ты придёшь к ним сам и попросишь крестить себя огнём и мечом. Как и у любого архитектурного решения, у микросервисов есть свои минусы. Одним из них является необходимость в каждый микросервис включать какую-то логику по авторизации запросов от внешних систем или других микросервисов. Эта логика может быть напрямую «зашита» внутри микросервиса (и не важно, что это отдельная библиотека), делегирована другому микросервису, а может быть объявлена декларативно. Что значит декларативно? Например, можно договориться, что в каждый микросервис приходит особый HTTP-заголовок, или какая-то структура данных, в которой есть информация о пользователе, делающем запрос. И данным в этой структуре необходимо однозначно доверять. У всех трёх вариантов есть свои недостатки, но в рамках статьи мы разберём последний. Для его реализации обычно используется шаблон проектирования API Gateway:
image

Под катом все трудности реализации шаблона в условиях бинарного протокола передачи данных.
Хочу узнать
Total votes 10: ↑9 and ↓1 +8
Views 11K
Comments 5

Строим сервисы на базе Nginx и Tarantool

VK corporate blog Open source *Lua *Tarantool *
Вам знакома такая архитектура? Хоровод демонов, пляшущих между web-server, cache и storage.



Какие минусы такой архитектуры можно отметить? Решая задачи в рамках такой архитектуры, мы сталкиваемся с кучей вопросов: какой язык(и?) взять, какой I/O framework выбрать, как синхронизировать cache и storage? Куча инфраструктурных вопросов. А зачем решать инфраструктурные вопросы, когда надо решить задачу? Безусловно, можно сказать, что нам нравятся некие технологии X и Y, и перевести эти минусы в рамки идеологических. Но нельзя отрицать тот факт, что данные располагаются на неком расстоянии от кода (картинка выше), что добавляет latency, что может уменьшить RPS.

Цель данной статьи — рассказать об альтернативе, которая построена на базе Nginx как web-server, bаlancer и Tarantool как App Server, Cache, Storage.
Читать дальше →
Total votes 43: ↑40 and ↓3 +37
Views 23K
Comments 22

Аутентифицируем запросы в микросервисном приложении с помощью nginx и JWT

Website development *Ruby on Rails *
Recovery mode
Стараясь оставаться в тренде и следуя веяниям моды веб разработки, последнее веб приложение я решил реализовать как набор микросервисов на ruby плюс “толстый” клиент на ember. Одна из первых проблем, вставших перед мной была связана с аутентификацией запросов. Если в классическом, монолитном, приложении все просто, используем куки, сессии, подключаем какой-нибудь devise, то тут все как в первый раз.

Архитектура


За базу я выбрал JWT — Json Web Token. Это открытый стандарт RFC 7519 для представления заявок (claims) между двумя участниками. Он представляет из себя структуру вида: Header.Payload.Signature, где заголовок и payload это запакованые в base64 json хэши. Здесь стоит обратить внимание на payload. Он может содержать в себе все что угодно, в принципе это может быть и просто client_id и какая-то другая информация о пользователе, но это не очень хорошая идея, лучше передавать там только ключ идентификатор, а сами данные хранить где-то в другом месте. В качестве хранилища данных можно использовать что угодно, но мне показалось, что redis будет оптимальным, тем более что он пригодится и для других задач. Еще один важный момент — каким ключем мы будем подписывать наш токен. Самый простой вариант использовать один shared key, но это явно не самый безопасный вариант. Коль скоро мы храним данные сессии в redis, ничто не мешает нам генерировать уникальный ключ для каждого токена и хранить его там же.

Понятно, что генерировать токены будет сервис отвечающий за авторизацию, но кто и как будет их проверять? В принципе можно проверку затолкать в каждый микросервис, но это противоречит идеи их максимального разделения. Каждый сервис должен будет содержать логику обработки и проверки токенов да еще и иметь доступ к redis. Нет, наш цель получить архитектуру в которой все запросы приходящие в конечные сервисы уже авторизованы и несут в себе данные о пользователе (например в каком-нибудь специальном заголовке).
Читать дальше →
Total votes 17: ↑16 and ↓1 +15
Views 34K
Comments 16

Consul.io Часть 1

Website development *System Analysis and Design *
При разработке приложений необходимо уделять особое внимание архитектуре. Если изначально этого не сделать, проблемы масштабирования могут появиться внезапно (а иногда могут не иметь решения). Масштабирование приложения и эффективное использование ресурсов на начальном этапе — это сэкономленные месяцы работы в дальнейшем.
Для предотвращения подобных проблем часто используют распределенную архитектуру, то есть архитектуру с возможностью горизонтального масштабирования всех компонентов. Но к сожалению, при реализации SOA возникают новые проблемы, а именно: связность и сложность конфигурации сервисов.



В данной статье мы расскажем об одном из discovery-сервисов под названием Consul, с помощью которого можно решить вышеизложенные проблемы и сделать архитектуру более прозрачной и понятной.
Читать дальше →
Total votes 22: ↑22 and ↓0 +22
Views 101K
Comments 8

Микросервисная архитектура, Spring Cloud и Docker

Website development *Programming *Java *Microservices *
Tutorial

Привет, Хабр. В этой статье я кратко расскажу о деталях реализации микросервисной архитектуры с использованием инструментов, которые предоставляет Spring Cloud на примере простого концепт-пруф приложения.



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

Читать дальше →
Total votes 31: ↑31 and ↓0 +31
Views 228K
Comments 32

Прекратите повторять «тяжеловесный»

Java *
Translation
Автор: Sebastian Daschner
Оригинал: https://blog.sebastian-daschner.com/entries/stop_saying_heavyweight (09 апреля 2016)
Перевод: Семён Солдатенко

При разработке корпоративных Java приложений приходится выбирать – использовать Java EE или какой-нибудь другой «легковесный» фреймворк. Но что делает корпоративный фреймворк легковесным?

Мы как разработчики в основном должны заботиться о процессе разработки. Наше время драгоценно (и дорого) и чем меньше времени мы потратим на накладные расходы, тем лучше.
Читать дальше →
Total votes 18: ↑10 and ↓8 +2
Views 20K
Comments 67

Финализирована программа коммьюнити-трека конференции DevCon 2016

Microsoft corporate blog Microsoft Azure Development for IOT *


Привет!

Рады представить уже участникам и еще-не-участникам-но-планирующим финальную программу коммьюнити-трека. В этом году мы решили немного сменить траекторию, и дать голос сообществу. Траекторию сменили, и в коммьюнити-треке за два дня выступит 25 докладчиков. Это люди, занимающиеся совершенно разными проектами, из совершенно разных компаний, разных стран, но всех их объединяет то, что они будут говорить о реальном опыте и у участников конференции будет возможность поспрашивать тех, кто в полях познакомился с той или иной технологией или решением. Под катом — подробности, о чем будет идти речь в треке. Так как на DevCon будет трансляция, а потом и записи, весь этот уникальный контент будет доступен — не пропустите!
Читать дальше →
Total votes 14: ↑12 and ↓2 +10
Views 2K
Comments 0

Управление Docker проектом со множеством git репозиториев

Website development *Programming *

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


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


Мы столкнулись с двумя проблемами:


  1. При первоначальном разворачивании среды разработки, приходится обьяснять программисту, либо писать скрипт инициализации, который склонирует и создаст необходимую иерархию папок из нескольких репозиториев.
  2. docker-compose не может собрать приложение, а потом упаковать в идижд. он умеет только запускать docker build.

Для решения этих проблем мы сделали управляющий скрипт docker-project, который оказался очень удобным в работе.
Чем мы и хотим поделиться с open-source сообществом.

Далее
Total votes 17: ↑17 and ↓0 +17
Views 23K
Comments 40

Joker Student Edition: Лучшие видео прошлых конференций

JUG Ru Group corporate blog Java *
Бескрайние просторы интернета часто озаряются вспышками праведного гнева по поводу бессмысленности и бесполезности студентов-айтишников, нашего образования и сетований в стиле «раньше трава была зеленее».



Этот пост получится большим, а все вот почему: мы рассмотрим ТОП-5 докладов с двух наших студенческих конференций (Joker 2015 University Day и JPoint 2016 Student Day), поговорим о том, чего хочет молодежь в 2016 году, а также пройдемся по новому формату Joker 2016 Student Edition (Петербург, 15 октября, Экспофорум).
И все это уже здесь, под катом.
Total votes 27: ↑27 and ↓0 +27
Views 14K
Comments 11

Дата снаружи, дата внутри, дата танцуй, дата умри

VK corporate blog System Analysis and Design *Professional literature
Translation
image

В статье «Данные снаружи и данные внутри» 2005 года Пэт Хелланд размышляет о данных в сервис-ориентированных архитектурах. В настоящее время СОА принято считать «микросервисной архитектурой», состоящей из «микросервисов». Хелланд показывает, что для инкапсулированных данных и данных, которыми обмениваются сервисы, требуются совершенно разные подходы. Переход от монолитной структуры к микросервисам более глубокий, чем просто рефакторинг кода в удобные, независимо развёртываемые модули:
Читать дальше →
Total votes 43: ↑41 and ↓2 +39
Views 8.9K
Comments 0

Лепим микросервис

Programming *C++ *

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


Используемые компоненты:



Для примера буду делать микросервис для выдачи рейтинга игроков. От ядра системы в микросервис приходят следующие сообщения:


  • player_registered(id,name);
  • player_renamed(id,name);
  • player_won(id, points).

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

Читать дальше →
Total votes 27: ↑27 and ↓0 +27
Views 14K
Comments 8

Как я научился не волноваться и полюбил микросервисы, часть 1: Эффекты плохого кода

Programming *Perfect code *Designing and refactoring *ООP *Microservices *

Преамбула


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

Все паттерны разработки, как правило, имеют свои плюсы и минусы. Таким образом, преимущества зачастую носят субъективный характер и разработчику следует выбирать подходящие модели в зависимости от условий и контекста.

Я постараюсь выделить объективные или почти-объективные плюсы — преимущества, которые дадут положительный эффект любому разработчику независимо от языка программирования, размера команды или диеты. Первая статья посвящена стоимости плохо написанного кода – мы сравним эффекты влияния такого кода на монолитные приложения и на микросервисы.
Читать дальше →
Total votes 22: ↑15 and ↓7 +8
Views 17K
Comments 85

Многократное использование кода в микросервисной архитектуре — на примере SPRING BOOT

Издательский дом «Питер» corporate blog High performance *Java *IT Standards *API *
Translation
Tutorial
Здравствуйте, хабровчане! Сегодня предлагаем вам очередной интересный пост на неисчерпаемую тему микросервисов, на этот раз — для корифеев и неофитов языка Java. Читаем и голосуем!
Читать дальше →
Total votes 8: ↑6 and ↓2 +4
Views 11K
Comments 6

Документирование #микросервисов

Web services testing *


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


Читать дальше →
Total votes 17: ↑14 and ↓3 +11
Views 99K
Comments 13