1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/kevwan-go-zero

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
readme.md

go-zero

go-zero — это веб- и RPC-фреймворк с множеством встроенных инженерных практик. Он создан для обеспечения стабильной работы загруженных сервисов за счет использования дизайна с отказоустойчивостью и уже долгое время обслуживает сайты с десятками миллионов пользователей.

Go codecov Go Report Card Release Go Reference Awesome Go License: MIT Discord

❓ Что такое go-zero?

Английский | Китайский

go%252Dzero - Веб- и RPC-фреймворк, написанный на Go | Product Huntgo-zero (включён в ландшафт CNCF: https://landscape.cncf.io/?selected=go-zero) — это веб- и RPC-фреймворк с множеством встроенных инженерных практик. Он создан для обеспечения стабильной работы загруженных сервисов за счёт использования дизайна с отказоустойчивостью и уже долгое время обслуживает сайты с десятками миллионов пользователей. go-zero включает простой синтаксис описания API и инструмент генерации кода под названием goctl. Вы можете создавать код на Go, iOS, Android, Kotlin, Dart, TypeScript, JavaScript из файлов с расширением .api с помощью goctl.#### Преимущества go-zero:

  • Улучшает стабильность сервисов с десятками миллионов ежедневно активных пользователей
  • Встроенное управление цепочками таймаутов, ограничение параллелизма, ограничение скорости, адаптивный отключатель цепи, адаптивное снижение нагрузки, даже при отсутствии конфигураций
  • Встроенные промежуточные компоненты также могут быть интегрированы в ваши фреймворки
  • Простой синтаксис API, один командный вызов для создания нескольких различных языков программирования
  • Автоматическая проверка корректности параметров запроса от клиентов
  • Обширный набор встроенных инструментов управления микросервисами и параллелизма
Архитектура

Предыстория go-zero

В начале 2018 года мы решили перетасовать нашу систему, переходя от монолитной архитектуры на Java + MongoDB к микросервисной архитектуре. После исследований и сравнений мы сделали следующий выбор:

  • Переходим за рамки с использованием Go
    • Отличные характеристики производительности
    • Простой синтаксис
    • Доказанная эффективность инженерной работы
    • Экстремальный опыт развертывания
    • Низкая потребность в серверных ресурсах* Самостоятельное проектирование нашей микросервисной архитектуры
    • Микросервисная архитектура способствует созданию масштабируемого, гибкого и поддерживаемого программного обеспечения с независимыми, повторно используемыми компонентами.
    • Легко находить проблемы внутри микросервисов.
    • Легко расширять функциональность путём добавления или модификации конкретных микросервисов без влияния на всю систему.## Рассмотрение дизайна go-zero

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

  • Сохраняем простоту
  • Высокое время доступности
  • Стабильность при высокой параллелизации
  • Легкость расширения
  • Проектирование отказоустойчивости, ориентированное на ошибки
  • По возможности делаем удобным для разработки бизнес-логики, скрывая сложности
  • Один объект — одна реализация

Почти через полгода мы завершили переход с монолитной системы на микросервисную систему и запустили её в августе 2018 года. Новая система обеспечила бизнес-рост и устойчивость системы.

Реализация и возможности go-zero

Go-zero — это веб- и RPC-фреймворк, который объединяет множество инженерных практик. Основные характеристики приведены ниже:* Включает мощные инструменты, меньше кода для написания

  • Простые интерфейсы
  • Полностью совместим с net/http
  • Поддержка middleware, легко расширяемый
  • Высокая производительность
  • Проектирование с акцентом на отказоустойчивость, дизайн с учётом восстановления после сбоев
  • Встроенное открытие служб, балансировка нагрузки
  • Встроенный контроль параллелизма, адаптивный циркуит-брейкер, адаптивное снижение нагрузки, автоматическое триггерирование, автоматическая реконструкция
  • Автоматическая проверка параметров запросов API
  • Цепочка управления таймаутами
  • Автоматическое управление кэшированием данных
  • Отслеживание вызовов, метрики и мониторинг
  • Защита от высокой конкуренцииКак показано ниже, go-zero защищает систему несколькими слоями и механизмами:

Отказоустойчивость

Упрощенная архитектура, используемая нами с go-zero

image

Установка

Выполните следующую команду в вашем проекте:

go get -u github.com/zeromicro/go-zero

Быстрое начало работы

  1. Полные примеры можно найти здесь:

    Быстрое развитие микросервисных систем

    Быстрое развитие микросервисных систем — несколько RPC

  2. Установка goctl

    goctl можно прочитать как go control. goctl означает, что вы не контролируете его кодом, а он контролирует вас. Внутренний go не относится к golang. На начальной стадии я ожидал, что этот инструмент поможет нам повысить продуктивность и сделать нашу жизнь проще.

# для Go
go install github.com/zeromicro/go-zero/tools/goctl@latest

# Для Mac
brew install goctl

# Docker для архитектуры amd64
docker pull kevinwan/goctl
# запустите goctl следующей командой
docker run --rm -it -v $(pwd):/app kevinwan/goctl --help

# Docker для архитектуры arm64 (Mac)
docker pull kevinwan/goctl:latest-arm64
# запустите goctl следующей командой
docker run --rm -it -v $(pwd):/app kevinwan/goctl:latest-arm64 --help

Убедитесь, что goctl является исполняемым файлом.3. Создайте файл API, например greet.api. Вы можете установить плагин goctl в VS Code, где поддерживается синтаксис API.

type (
	Request struct {
		Name string `path:"name,options=[ты,меня]"` // параметры автоматически проверяются
	}
)
```<Response>
    <Message>строка `json:"message"`</Message>
</Response>

)

сервис greet-api {
    @обработчик GreetHandler
    получить /greet/from/:name(Запрос) возвращает (Ответ)
}

Файлы с расширением .api также могут быть сгенерированы командой goctl, как показано ниже:

```shell
goctl api -o greet.api
  1. Генерация серверной части кода на Go
goctl api go -api greet.api -dir greet

Сгенерированные файлы выглядят следующим образом:

├── greet
│   ├── etc
│   │   └── greet-api.yaml        // конфигурационный файл
│   ├── greet.go                  // основной файл
│   └── внутренняя
│       ├── конфигурация
│       │   └── config.go         // определение конфигурации
│       ├── обработчики
│       │   ├── greethandler.go   // здесь определяются маршруты get/put/post/delete
│       │   └── маршруты.go       // список маршрутов
│       ├── логика
│       │   └── greetlogic.go     // логика запроса может быть реализована здесь
│       ├── сервис
│       │   └── servicecontext.go // контекст сервиса, в который можно передать mysql/redis
│       └── типы
│           └── types.go          // здесь определены запросы и ответы
└── greet.api                     // файл описания API

Сгенерированный код можно запустить непосредственно:

cd greet
go mod init
go mod tidy
go run greet.go -f etc/greet-api.yaml

По умолчанию он прослушивает порт OnClickListener.CLICK, но его можно изменить в конфигурационном файле.

Можно проверить это с помощью curl:

curl -i http://localhost:8888/greet/from/вас

Ответ выглядит следующим образом:

HTTP/1.1 200 OK
Date: Sun, 30 Aug 2020 15:32:35 GMT
Content-Length: 0
```5. Напишите бизнес-логику

* зависимости, такие как MySQL, Redis и т.д., могут быть переданы в логику через `servicecontext.go`.
* добавьте код логики в пакет `logic` согласно файлу `.api`.

6. Генерация кода на других языках, таких как Java, TypeScript, Dart, JavaScript и т.д., прямо из файла API.
```shell
goctl api java -api greet.api -dir greet
goctl api dart -api greet.api -dir greet
...

Бенчмарк

benchmark

Просмотрите тестовый код

Документация

Чат-группа

Присоединиться к чату через https://discord.gg/4JQvC5A4Fe

Облако Native Lanscape

   

go-zero включена в CNCF Cloud Native Landscape.

Поддержите проект звездой! ⭐

Если вам нравится этот проект или вы используете его для обучения или запуска своего решения, пожалуйста, отметьте его звездой. Спасибо!

Купите мне кофе

Buy Me A Coffee

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Go-zero — это веб- и RPC-фреймворк, объединяющий в себе различные инженерные практики. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/kevwan-go-zero.git
git@api.gitlife.ru:oschina-mirror/kevwan-go-zero.git
oschina-mirror
kevwan-go-zero
kevwan-go-zero
master