0. Введение в ноль
Поскольку исходный код github был открыт 7 августа этого года, он получил2700+ starизgo-zero— это веб- и RPC-фреймворк, объединяющий различные инженерные практики. Стабильность большого параллельного сервера гарантируется эластичной конструкцией, полностью проверенной в реальных боевых условиях.
go-zero включает минимальное определение API и инструмент генерации goctl, который может генерировать код Go, iOS, Android, Kotlin, Dart, TypeScript, JavaScript одним щелчком мыши в соответствии с определенным файлом API и может запускать его напрямую.
Преимущества использования Go-Zero:
- Легко получить стабильность, которая поддерживает десятки миллионов ежедневных активных сервисов
- Встроенное каскадное управление тайм-аутом, ограничение тока, адаптивное объединение, адаптивное сброс нагрузки и другие возможности управления микросервисами без настройки и дополнительного кода.
- ПО промежуточного слоя для управления микросервисами можно легко интегрировать в другие существующие платформы.
- Минималистское описание API, генерация кода в один клик для каждого конца
- Автоматически проверять правильность параметров запроса клиента
- Многочисленные наборы инструментов для управления микросервисами и параллелизма
1. нулевой фон кадра
В начале 2018 года, после частых простоев, серверная часть Xiao Blackboard решилаJava+MongoDB
После тщательного рассмотрения и сравнения мы решили:
- На основе языка Go
- эффективная работа
- лаконичный синтаксис
- Широко доказанная инженерная эффективность
- Максимальный опыт развертывания
- Очень низкая стоимость ресурсов сервера
- Самостоятельно разработанная микросервисная структура
- Имеете большой опыт самостоятельной разработки микросервисных фреймворков
- Потребность в более быстрых возможностях локализации проблем
- Легче добавлять новые функции
2. Дизайн-мышление о концепции перехода на ноль
При разработке фреймворка микросервисов мы рассчитываем обеспечить стабильность микросервисов и в то же время уделить особое внимание эффективности исследований и разработок. Итак, в начале проектирования у нас есть следующие рекомендации:
- будьте проще, первые принципы
- Устойчивая конструкция, ориентированное на сбои программирование
- Инструменты перевешивают соглашения и документацию
- Ограничьте, насколько это возможно, делать что-то одно только одним способом
- Высокая доступность
- Высокий параллелизм
- Легко расширить
- Будьте максимально дружелюбны к развитию бизнеса и инкапсулируйте сложность
Менее чем за полгода мы полностью завершилиJava+MongoDB
прибытьGolang+MySQL
Основная микросервисная система была мигрирована и полностью запущена в конце августа 2018 года, что стабильно гарантировало последующий рост Xiao Blackboard и обеспечило высокую доступность всего сервиса.
3. Реализация и особенности проекта Go-zero
go-zero — это веб- и RPC-фреймворк, объединяющий различные инженерные практики и обладающий следующими основными характеристиками:
- Мощная поддержка инструментов с минимальным кодированием
- Минималистичный интерфейс
- Полностью совместим с сетью/http
- Поддержка промежуточного программного обеспечения для легкого расширения
- высокая производительность
- Программирование, ориентированное на отказ, отказоустойчивая конструкция
- Встроенное обнаружение сервисов, интеллектуальная балансировка нагрузки
- Встроенное ограничение тока, плавкие предохранители, сброс нагрузки, автоматический запуск и автоматическое восстановление
- Автоматическая проверка параметров API
- Каскадное управление тайм-аутом
- Автоматическое управление кешем, поддерживает как первичный ключ, так и индексы на основе индексов.
- Отслеживание ссылок, статистические оповещения и т. д.
- Высокая поддержка параллелизма стабильно гарантирует ежедневный пик трафика во время эпидемии Xiao Blackboard.
Как показано на рисунке ниже, мы обеспечиваем высокую доступность всего сервиса на нескольких уровнях:
4. Installation
Установите его в каталог проекта с помощью следующей команды:
GO111MODULE=on GOPROXY=https://goproxy.cn/,direct go get -u github.com/tal-tech/go-zero
5. Quick Start
-
Установите инструмент goctl
goctl
читатьgo control
, не читай какgo C-T-L
.goctl
Это значит не быть под контролем кода, а контролировать его. один из нихgo
не означаетgolang
. в дизайнеgoctl
С самого начала я надеялся, что через她
Приходите, чтобы освободить наши руки 👈GO111MODULE=on GOPROXY=https://goproxy.cn/,direct go get -u github.com/tal-tech/go-zero/tools/goctl
Убедитесь, что goctl является исполняемым
-
Быстро создавать API-сервисы
goctl api new greet cd greet go mod init go mod tidy go run greet.go -f etc/greet-api.yaml
По умолчанию слушает порт 8888 (можно изменить в конфигурационном файле), который можно запросить через curl:
curl -i http://localhost:8888/greet/from/you
Возврат следующим образом:
HTTP/1.1 200 OK Content-Type: application/json Date: Thu, 22 Oct 2020 14:03:18 GMT Content-Length: 14 {"message":""}
Напишите бизнес-код:
- Файл API определяет маршруты, предоставляемые службой, см.спецификация API
- Вы можете передавать зависимости в логику в servicecontext.go, например mysql, redis и т. д.
- Добавьте логику бизнес-процессов к логике, соответствующей запросам, таким как получение/отправка/помещение/удаление, определенным API.
-
Код Java, TypeScript, Dart и JavaScript, необходимый для внешнего интерфейса, может быть сгенерирован в соответствии с файлом API.
goctl api java -api greet.api -dir greet goctl api dart -api greet.api -dir greet ...
6. Benchmark
7. Адрес проекта
8. Группа WeChat
Отсканируйте код на github, чтобы добавить меня, я присоединюсь к группе обмена go-zero 🤝