Одна статья, чтобы понять нативную облачную микросервисную среду

Go

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

  1. Установите инструмент 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 является исполняемым

  2. Быстро создавать 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.
  3. Код Java, TypeScript, Dart и JavaScript, необходимый для внешнего интерфейса, может быть сгенерирован в соответствии с файлом API.

    goctl api java -api greet.api -dir greet
    goctl api dart -api greet.api -dir greet
    ...
    

6. Benchmark

benchmark

Код теста см. здесь

7. Адрес проекта

GitHub.com/them-specialty/go…

8. Группа WeChat

Отсканируйте код на github, чтобы добавить меня, я присоединюсь к группе обмена go-zero 🤝