Termux – мощная среда эмуляции Linux для Android, позволяющая запускать широкий спектр инструментов разработки прямо на вашем мобильном устройстве. В этой статье мы рассмотрим, как использовать Termux для разработки и отладки микросервисов на Go с использованием gRPC, включая генерацию protobuf, автоматическую перезагрузку (hot-reload) и мониторинг через Prometheus. Это позволяет быстро прототипировать и тестировать сервисы без необходимости использования полноценной рабочей станции.
Необходимые инструменты
Прежде чем начать, убедитесь, что у вас установлено следующее:
- Termux: https://termux.dev/
- Go:
pkg install go - Protobuf compiler (protoc):
pkg install protobuf - gRPC:
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest - Prometheus:
pkg install prometheus(Обратите внимание, что Prometheus может потребовать значительных ресурсов устройства)
Также потребуется редактор кода. Можно использовать Vim, Nano, или установить более продвинутые редакторы через Termux.
Генерация protobuf
gRPC использует Protocol Buffers для определения структуры сообщений. Начнем с определения файла .proto. Например, создадим файл service.proto со следующим содержанием:
syntax = "proto3";
package example;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Теперь сгенерируем Go код из этого файла:
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative service.proto
Эта команда создаст файлы service.pb.go и service_grpc.pb.go, содержащие сгенерированный Go код для взаимодействия с gRPC сервисом.
Реализация gRPC сервиса на Go
Создадим файл server.go, реализующий наш gRPC сервис:
package main
import (
"context"
"fmt"
"log"
"net"
"example"
"google.golang.org/grpc"
)
type server struct { example.UnimplementedGreeterServer }
func (s server) SayHello(ctx context.Context, in example.HelloRequest) (example.HelloReply, error) {
return &example.HelloReply{Message: "Hello, " + in.Name},
nil
}
func main() {
lis, err := net.Listen("tcp", ":50051")
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
example.RegisterGreeterServer(s, &server{})
log.Println("Server listening on port 50051")
s.Serve(lis)
}
Hot-Reload с использованием Air
Для автоматической перезагрузки сервера при изменении кода, можно использовать инструмент Air. Сначала установим Air:
go install github.com/cosmtrek/air@latest
Затем запустим сервер с Air:
air -c . air.toml
Создайте файл air.toml в корне проекта с настройками:
root = "./"
cmd = "go run server.go"
ignore = [".tmp", "tmp/"]
Теперь, при сохранении изменений в файле server.go, Air автоматически перезапустит сервер.
Мониторинг с помощью Prometheus
Для мониторинга gRPC сервиса можно использовать Prometheus. Необходимо добавить метрики в ваш Go код. Например:
package main
import (
"context"
"fmt"
"log"
"net"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
"example"
"google.golang.org/grpc"
)
var ( // Define metrics
requestsTotal = prometheus.NewCounter(prometheus.CounterOpts{
Name: "grpc_requests_total",
Help: "Total number of gRPC requests.",
})
)
func init() {
// Register metrics
prometheus.MustRegister(requestsTotal)
}
func (s server) SayHello(ctx context.Context, in example.HelloRequest) (example.HelloReply, error) {
requestsTotal.Inc()
return &example.HelloReply{Message: "Hello, " + in.Name},
nil
}
func main() {
// Add HTTP endpoint for Prometheus
go func() {
http.HandleFunc("/metrics", func(w http.ResponseWriter, r *http.Request) {
promhttp.Handler().ServeHTTP(w, r)
})
log.Println("Prometheus endpoint listening on port 9090")
log.Fatal(http.ListenAndServe(":9090", nil))
}()
...
// Rest of the server code
}
После этого запустите Prometheus и настройте его для сбора метрик с вашего Termux устройства. Для этого может потребоваться настройка локальной сети с использованием VPN (например, WireGuard) для обеспечения доступа к Prometheus, работающему в Termux, с вашего компьютера. (Использование VPN рассматривается только для создания локальной сети для разработки и тестирования, а не для обхода каких-либо блокировок).
Заключение
В этой статье мы рассмотрели, как разрабатывать и отлаживать микросервисы на Go и gRPC в Termux. Использование protobuf для определения интерфейсов, hot-reload с Air для ускорения разработки и мониторинг с Prometheus для отслеживания производительности делают Termux мощным инструментом для разработки в мобильной среде.
Если вам требуется помощь в разработке, настройке или оптимизации микросервисной архитектуры, команда РыбинскЛАБ готова предложить вам свои услуги. Мы предоставляем полный спектр услуг по разработке, внедрению и поддержке микросервисов, а также консультации по выбору оптимальных технологий и инструментов.