Микросервисы на Go с помощью Go kit
Использование Go kit, инструментов и библиотек для создания микросервисов на Go. Разработка современных распределенных систем. Синдром Spring Boot Miсroservices. Создание элегантных монолитов, которые основываются с хорошим дизайном архитектуры систем.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | русский |
Дата добавления | 16.01.2022 |
Размер файла | 86,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Министерство образования и науки Российской федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Курганский государственный университет»
Реферат
на тему: «Микросервисы на Go с помощью Go kit»
По курсу «Распределенные вычислительные системы»
Выполнила
Шумилова Д.Д.
Курган 2021
Содержание
Введение
1. Введение в Go kit
2. Архитектура Go kit
3. Middlewares в Go kit
4. Синдром Spring Boot Miсroservices
Заключение
Введение
В последнее время, большую популярность получила микросервисная архитектура. Это когда мы разбиваем наш проект на множество отдельных небольших компонентов («микросервисов») вместо того, чтобы всё писать в одном большом (так называемом «монолите»). Они деплоятся и обновляются отдельно, общаются друг с другом либо синхронно, с помощью http или grpc, либо асинхронно -- через очереди сообщений. Микросервисы любят за то, что они облегают создание больших проектов. Разные микросервисы могут разрабатываться разными командами, могут независимо масштабироваться, их можно писать на разных языках программирования (выбрать наиболее подходящий инструмент), использовать разные базы данных и т. д. и т. п.
Рассмотрим использование Go kit, набора инструментов и библиотек для создания микросервисов на Go.
Go все чаще выбирается для разработки современных распределенных систем. Когда вы разрабатываете облачно-ориентированную распределенную систему, вам может потребоваться поддержка различного специфичного функционала в ваших сервисах, такого как: различные транспортные протоколы (пр. пер. HTTP, gRPC, и др.) и форматы кодирования сообщений для них, надежность RPC, логирование, трассировка, метрики и профилирование, прерывание запросов, ограничение количества запросов, интеграция в инфраструктуру и даже описание архитектуры. Go популярный язык благодаря своей простоте и подходам "без магии", поэтому пакеты Go, например, стандартная библиотека, уже подходят для разработки распределенных систем больше, чем использование полноценного фреймворка с множеством "магии под капотом". Обычно многие не поддерживают использование полноценных фреймворков, предпочитают использовать библиотеки, которые дают больше свободы разработчику. Go kit заполнил пробел в экосистеме Go, дав возможность использовать набор библиотек и пакетов при создании микросервисов, которые в свою очередь позволяют использовать хорошие принципы проектирования отдельных сервисов в распределенных системах.
1. Введение в Go kit
Go kit это набор пакетов Go, которые облегчают создание надежных и поддерживаемых микросервисов. Go kit предоставляет библиотеки для реализации различных компонентов прозрачной и надежной архитектуры приложения, используя такие слои как: логирование, метрики, трассировка, ограничение и прерывание запросов, которые необходимы для запуска микросервисов на проде. Go kit хорош тем, что в нем хорошо реализованы инструменты для взаимодействия с различными инфраструктурами, форматами кодирования сообщений и различными транспортными уровнями.
Помимо набора библиотек для разработки миркосервисов он предоставляет и поощряет использование хороших принципов проектирования архитектуры ваших сервисов. Go kit помогает придерживаться принципов SOLID, предметно-ориентированного подхода (DDD) и гексагональной архитектуры предложенной Alistair Cockburn или любых других подходов из архитектурных принципов известных как "луковая архитектура" от Jeffrey Palermo и "чистая архитектура" от Robert C. Martin. Хотя Go kit был разработан как набор пакетов для разработки микросервисов, он также подходит и для разработки элегантных монолитов.
2. Архитектура Go kit
Три главных уровня в архитектуре приложения разработанных с помощью Go kit это:
· транспортный уровень;
· уровень эндпоинтов;
· уровень сервиса.
1. Транспортный уровень
Когда мы пишем микросервисы для распределенных систем, сервисам в них часто приходится общаться друг с другом используя различные транспортные протоколы, такие как: HTTP или gRPC, или использовать pub/sub системы, например NATS. Транспортный уровень в Go kit привязывается к конкретному транспортному протоколу (далее транспорт). Go kit поддерживает различный транспорт для работы вашего сервиса, такой как: HTTP, gRPC, NATS, AMQP и Thirft (прим. пер. также вы можете разработать свой транспорт под свой протокол). Поэтому сервисы написанные с помощью Go kit часто акцентируют внимание на реализации конкретной бизнес логики, которая ничего не знает о используемом транспорте, вы свободны использовать различные транспорты для одного и того же сервиса. Как пример, один сервис написанный на Go kit может одновременно предоставлять доступ к нему по HTTP и gRPC.
2. Эндпоинты
Конечная точка или эндпоинт -- это фундаментальный "строительный кирпичик" для сервисов и клиентов. В Go kit основной паттерн общения -- это RPC. Эндпоинт представляется как отдельный RPC метод. Каждый метод сервиса в Go kit преобразуется в эндпоинт, позволяющий общаться между сервером и клиентом в RCP стиле. Каждый эндпоинт выставляет наружу сервиса метод, используя Транспортный уровень, который в свою очередь использует различные транспортные протоколы, например HTTP или gRPC. Отдельный эндпоинт может выставляться наружу сервиса одновременно с помощью нескольких транспортов (прим. пер. HTTP и gRPC на разных портах).
3. Сервисы
Бизнес логика реализуется в сервисном слое. Сервисы, написанные с Go kit, проектируются как интерфейсы. Бизнес логика в сервисном слое содержит основное ядро бизнес логики, которая не должна знать ничего о используемых эндпоинтах или конкретном транспортном протоколе, как HTTP или gRPC, или о кодировании или декодировании запросов и ответов различных типов сообщений. Это позволит вам придерживаться чистой архитектуры в сервисах, написанных с помощью Go kit. Каждый метод сервиса преобразуется в эндпоинт с помощью адаптера и выставляется наружу с помощью конкретного транспорта. Благодаря использованию чистой архитектуры, отдельный метод может быть выставлен с помощью нескольких транспортов одновременно.
3. Middlewares в Go kit
Go kit предрасполагает к использованию хороших принципов проектирования систем, например разделение на слои. Изолирование компонентов сервисов и эндпоинтов возможность с помощью использования Middlewares (прим. пер. паттерн посредник). Middlewares в Go kit предоставляет мощный механизм, с помощью которого можно обернуть сервисы и эндпоинты и добавить функциональность (изолированные компоненты), такие как логирование, прерывание запросов, ограничение количества запросов, балансировку нагрузки или распределенную трассировку.
Ниже показана картинка с сайта Go kit, которая изображена как типичная "луковая архитектура" с помощью Middlewares в Go kit:
4. Синдром Spring Boot Miсroservices
микросервис архитектура библиотека система
Также как Go kit, Spring Boot -- это набор инструментов для создания микросервисов в мире Java. Но, в отличии от Go kit, Spring Boot это вполне зрелый фреймворк. Также множество Java разработчиков используют Spring Boot для создания миркосервисов с помощью Java стэка с положительными отзывами от использования, некоторые из них верят что микросервисы -- это только про использование Spring Boot. Существует много команд разработки кто неверно истолковывает использование микросервисов, что они могут разрабатываться только с помощью Spring Boot и OSS Netflix и не воспринимают микросервисы как шаблон при разработке распределенных систем.
Можем иметь ввиду, что с помощью набора инструментов, такого как Go kit или какого-то фреймворка, можно направлять свою разработку в сторону микросеврисов, как шаблона проектирования. Хотя микросервисы решают множество проблем с масштабированием и команд и систем, но это также создает множество проблем, потому что данные в системах на основе микросервисов разбросаны по различным базам данных, которые иногда создают множество проблем при создании транзакционности или запросов данных. Это все зависит от проблемы предметной области и контекста вашей системы. Классно то, что Go kit разработанный как инструмент для создания микросервисов, также подходил для создания элегантных монолитов, которые создаются с хорошим дизайном архитектуры ваших систем.
И некоторый функционал Go kit, такие как прерывание и ограничение запросов также доступны в платформах service mesh, например Istio. Так что если вы используете что-то типа Istio, для запуска ваших микросеврисов, у вас может не быть необходимости в некоторых вещах из Go kit, но не у всех будет хватать ширины канала для использования service mesh для создания межсервисного общения так как это добавляет еще один уровень и дополнительную сложность.
Заключение
Go - отличный универсальный язык, но микросервисы требуют определенной специализированной поддержки. Безопасность RPC, наблюдаемость системы, интеграция инфраструктуры, даже проектирование программ -- Go kit заполняет пробелы, оставленные стандартной библиотекой, и делает Go первоклассным языком для написания микросервисов в любой организации.
Размещено на Allbest.ru
Подобные документы
Виды архитектуры распределенных информационных систем. Сущность синхронного и асинхронного, блокирующего и неблокирующего взаимодействия в распределенных информационных системах. Основные проблемы и принципы реализации удаленного вызова процедур.
реферат [26,4 K], добавлен 22.06.2011Агентно-ориентированная программная архитектура систем обработки потоковых данных. Обеспечение гибкости и живучести программного обеспечения распределенных информационно-управляющих систем. Спецификации программных комплексов распределенной обработки.
реферат [1,1 M], добавлен 28.11.2015Классификации архитектур вычислительных систем. Организация компьютерных систем. Устройство центрального процессора. Принципы разработки современных компьютеров. Эволюция микропроцессорных систем. Увеличение числа и состава функциональных устройств.
дипломная работа [1,4 M], добавлен 29.01.2009Определение, свойства и характеристики распределенных систем баз данных. Основная задача систем управления ими. Архитектура распределения СУБД. Сравнение технологий файлового сервера и "клиент-сервера". Стратегия распределения данных по узлам сети ЭВМ.
курсовая работа [601,3 K], добавлен 24.05.2015Виды обеспечения автоматизированных информационных систем. Составление технического задания, разработка информационной системы, составление руководства пользователя к программе. Средства программирования распределенных систем обработки информации.
отчет по практике [1,1 M], добавлен 16.04.2017Анализ деятельности подразделения разработки программных продуктов, использующих Web-технологии, в компании ИООО "ЭПАМ Системз". Разработка систем с использованием Web-технологий с помощью программного продукта Oracle Database и технологий Spring, Struts.
отчет по практике [1,0 M], добавлен 14.04.2014Характеристика современных компьютерных систем с программируемой структурой, их функциональные особенности и возможности. Принципы и специфика архитектурно-структурной организации метакомпьютеров. Технология управления ресурсами распределенных систем.
курсовая работа [53,1 K], добавлен 29.08.2014Архитектурное построение современных информационных систем. Типовые функциональные компоненты информационной системы. Изучение способов подключения внешних библиотек к проекту в среде Netbeans. Добавление библиотеки, которая не входит в сборку среды.
контрольная работа [1,6 M], добавлен 07.12.2013Анализ видов обеспечения автоматизированных систем предприятия. Средства программирования распределенных систем обработки информации. Изучение особенностей использования технологии распределенных объектов. Эксплуатация программного обеспечения системы.
отчет по практике [486,0 K], добавлен 23.11.2014Изучение особенностей операционной системы, набора программ, контролирующих работу прикладных программ и системных приложений. Описания архитектуры и программного обеспечения современных операционных систем. Достоинства языка программирования Ассемблер.
презентация [1,3 M], добавлен 22.04.2014