До свидания, го-микро! Стратегия миграции корпоративных проектов с нуля (1)

Go

Автор: Микаэль

недавно обнаруженныйgolangВ сообществе появляется новый фреймворк микросервисов. Я взглянул на официальные инструменты, которые действительно полезны, просто нужно определить.apiКод шаблона файла может быть сгенерирован одним щелчком мыши, и вам нужно только заботиться о бизнесе; в то же времяcoreИнструменты в нем значительно сокращают затраты на разработку.

Без лишних слов давайте взглянем на эту микросервисную структуру:go-zero

источник

Поболтаем с Go-Zero

Первый контакт с go-zero был во время празднования Национального дня в октябре 2020. Так совпало, что я увидел, как кто-то спрашивал о go-zero в группе go-micro, в то время автор go-zero ответил в группе, что Мое любопытство вызвало то, что в то время компания использовала go-micro1.x, потому что версия go-micro была действительно запутанной, 2 использовалось не многими людьми, а теперь она сделала 3, и существует высокая степень несоответствие между этими мажорными версиями.Совместимо,просто бардак. Я зашел на github.com, чтобы проверить go-zero из любопытства. В то время я не сдался из-за количества звезд и отсутствия документов. Ха-ха, я пошел, чтобы получить его с менталитетом попробовать это С тех пор я открыл для себя новый континент и присоединился к нему. Группа Go-Zero начала путешествие с нуля.

Несколько причин выбрать его

  • Микросервисы: в нынешних условиях появляется все больше и больше критических замечаний по поводу монолитных сервисов.После того, как проект вырос, можно извлечь много уроков из того, что «одна часть может повлиять на все тело», обслуживание становится все более и более сложным, да и тестирование тоже очень сложно. Головные боли, медленная скорость сборки и т. д. В рамках этой тенденции использование микросервисов стало основной тенденцией.
  • Стабильность: внутренняя и внешняя гомология. Стабильность — это то, что я очень ценю, и их гомология внутри и вне компании обязательно обеспечит стабильность этого фреймворка.
  • Высокий параллелизм: после эпидемии в 2020 году «Xiao Blackboard» может легко получать услуги, поддерживающие десятки миллионов ежедневных действий.
  • Эффективность работы: Когда дело доходит до эффективности работы, мы должны упомянуть goctl, Весь код goctl и go-zero может быть сгенерирован этим инструментом, вам нужно только заботиться о своей собственной бизнес-логике, включая генерацию файла dockerfile одним щелчком мыши. , yaml k8s Documents, не переусердствуйте, значительно повысите эффективность работы
  • Качество кода: я, наверное, читал какой-то нулевой исходный код, но качество кода все равно не стоит распыляться, по крайней мере, оно кажется намного лучше, чем то, что я написал сам, ха-ха, у всех разные мнения на этот счет, вы можете проверить это для себя.
  • Команда: В то время автор go-zero был добавлен в WeChat, и я чувствовал, что он был очень скромным.Независимо от того, спрашивал ли он о каких-то базовых вещах или о каком-то практическом онлайн-опыте, он всегда терпеливо давал мне ответы и мнения. Я также упомянул некоторые во время использования.Баги, команда go-zero может решить их вовремя, и скорость итерации меня действительно поражает. Все должны знать, как сложно делать open source в Китае.
  • Сравнение go с другими микросервисными фреймворками: микросервисные фреймворки Go, вероятно, играли с go-micro, go-kit, kratos, rpcx и go-zero.
    • go-micro Я сказал в начале, что версия действительно немного запутанная
    • go-kit тоже хорош, но информации относительно мало
    • Все должны знать о кратосе из-за утечки исходного кода станции b.Он был сломан некоторое время назад и почти усыплен.Мао Шен сказал в выпуске, что он был слишком занят, но они все еще с нетерпением ждут версии 2.0.
    • Я мало играл с rpcx, но они рекламируют, что «хорошее будущее» также используется, а go-zero — это «хорошее будущее», ха-ха.
    • Выше я сказал «нуль», поэтому больше не буду упоминать об этом.

Архитектура дизайна

Прежде чем представить фактическое использование go-zero, давайте поговорим об общей архитектуре, которую легче понять.

go-zero-k8s架构

CI/CD

Шаг 1: После того, как локальный разработчик разработает код, отправьте его в gitlab (эта ветвь здесь подробно не описывается).

Шаг 2: Дженкинс, развертывание с использованием пайплайна

  • Вытащите код из gitlab
  • docker build, собрать образ на основе кода на последнем гитлабе
  • docker push, отправка созданного образа в хранилище образов (конечно, как правило, у них есть собственное частное хранилище образов, такое как гавань, также можно использовать Alibaba Cloud)
  • kubectl apply -f xxx.yaml : Используйте kubectl для развертывания на k8s (контейнерный сервис Alibaba cloud k8s настолько прост в использовании, что жаль его не использовать?)

После того, как kubectl будет развернут, k8s придет в ваш зеркальный репозиторий, чтобы получить последний образ, который вы только что упаковали, в соответствии с образом, определенным yaml в вашем сервисе, так что ~~ успешно подключен к сети!

Ну, некоторые студенты говорили, что Alibaba Cloud k8s прост в использовании, но я не умею или не хочу писать Dockerfile, не умею писать k8s yaml или не хочу писать, не важно, goctl сказал отпусти, позволь мне сделать это

Создать Dockerfile

$ goctl docker -go user.go 

Сгенерировать k8s yaml

$ goctl kube deploy -name user-api -namespace blog -image user:v1 -o user.yaml -port 2233

Итак, это так просто

процесс доступа

Приложение/Интернет/ПК может сначала получить доступ к SLB балансировки нагрузки Alibaba Cloud через брандмауэр. В то же время SLB может скрыть IP-адрес вашего внутреннего сервера и предотвратить атаки DDOS. Хотя существует квота, это лучше, чем ничего. Доступ SLB предыдущий nginx, nginx используется в качестве прокси, служба в k8s выставляется через nodeport, и она проксируется в службу в nignx, а журнал передается в kafka в nginx, а затем API может получить несколько узлов rpc в etcd , вызов нескольких серверных служб rpc, rpc отвечает за взаимодействие с db или вызов другого rpc для получения данных (конечно, API и rpc динамически обнаруживаются через etcd) и возврата их в API, api — это агрегированные данные, а затем возвращаются клиенту слой за слоем.

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

Дизайн проекта

адрес проекта:GitHub.com/Мика очень голоден…

Проект go более гибкий, в отличие от java, который унифицирован и стандартизирован, поэтому структура разных проектов разная, мой подход такой:

1610618953808

Большой склад, используемый всем проектом, в корневом каталоге проекта fishtwo:

  • приложение : встроенная программа

  • build: сборки, скрипты и т.д.

  • lib: внутренняя библиотека, используемая приложением

  • Приложение разделено на 3 модуля:

    • шлюз: служба API
    • услуги: служба rpc
    • Jobs: задачи, которые будут обрабатываться ежедневно (можно использоватьgo-zeroавторыgo-queue, протестил, работает хорошо, хаха, напишу потом, когда хорошо сделаю)

Далее давайте посмотрим:

  1. как превратитьgateway 服务?
  2. как превратитьrpc 服务?
  3. jobs Как вы это определяете? Как интегрироваться с проектом?

Продолжение следует~~~


адрес фрейма

GitHub.com/them-specialty/go…

Добро пожаловать в Go-Zero иstarподдержите нас 👍