kratos入门 | 青训营笔记

366 阅读3分钟

Kratos 是一款由 Bilibili 开源的 Go 语言微服务框架,专注于提供高性能、中立、易扩展的微服务解决方案。下面是对 Kratos 微服务框架的一些介绍:

  1. 高性能:Kratos 的设计目标之一是提供高性能的微服务框架。它利用 Go 语言的协程(goroutine)和轻量级线程(lightweight thread)机制,以及基于 gRPC 的远程调用,实现了高并发、低延迟的服务通信。
  2. 中立:Kratos 是一个中立的微服务框架,它不依赖于具体的 RPC 框架或服务注册中心。这使得开发人员可以根据实际需求选择合适的组件来配合使用,例如 gRPC、Protobuf、Consul、Etcd 等。
  3. 易扩展:Kratos 提供了一系列的组件和工具,帮助开发人员构建可扩展的微服务应用。其中包括可插拔的中间件机制、配置中心、限流、熔断、服务注册与发现、链路追踪等功能,使得开发人员可以更容易地实现微服务的可伸缩性和可靠性。
  4. 代码生成工具:Kratos 提供了代码生成工具 Kratos Tool,可以根据 Protobuf 定义生成服务接口和模型代码,以及相关的框架代码。这样可以减少开发人员的重复工作,提高开发效率。
  5. 文档和社区支持:Kratos 提供详细的文档和示例,方便开发人员学习和使用。此外,Kratos 拥有一个活跃的开源社区,开发者可以在社区中获取技术支持、交流经验、共享代码等。

名字来源于:《战神》游戏以希腊神话为背景,讲述奎托斯(Kratos)由凡人成为战神并展开弑神屠杀的冒险经历。

架构如下:

image.png

下面是一个简单的使用 Kratos 微服务框架的案例:

  1. 安装 Kratos: 首先,您需要安装 Go 语言环境和配置好 GOPATH。然后,使用以下命令安装 Kratos:

    goCopy code
    go get -u github.com/go-kratos/kratos/cmd/kratos/v2
    
  2. 创建项目: 使用 Kratos 提供的命令行工具创建一个新的 Kratos 项目:

    arduinoCopy code
    kratos new hello
    
  3. 定义 API: 在 api/helloworld/helloworld.proto 文件中定义一个简单的 API:

    protobufCopy code
    syntax = "proto3";
    
    package helloworld;
    
    service Greeter {
      rpc SayHello (HelloRequest) returns (HelloReply) {}
    }
    
    message HelloRequest {
      string name = 1;
    }
    
    message HelloReply {
      string message = 1;
    }
    
  4. 生成代码: 使用 Kratos 提供的代码生成工具生成服务接口和模型代码:

    bashCopy code
    kratos proto client api/helloworld/helloworld.proto
    
  5. 实现服务: 在 internal/service/greeter.go 文件中实现服务逻辑:

    goCopy code
    package service
    
    import (
      "context"
    
      pb "your-module/api/helloworld/v1"
    )
    
    type GreeterService struct{}
    
    func (s *GreeterService) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) {
      return &pb.HelloReply{Message: "Hello, " + req.Name}, nil
    }
    
  6. 启动服务: 在 cmd/server/main.go 文件中启动服务:

    goCopy code
    package main
    
    import (
      "github.com/go-kratos/kratos/v2"
      "github.com/go-kratos/kratos/v2/log"
      "your-module/internal/service"
      pb "your-module/api/helloworld/v1"
    )
    
    func main() {
      srv := kratos.NewServer(
        kratos.Name("hello"),
        kratos.ServerLogger(log.DefaultLogger),
      )
      greeterService := &service.GreeterService{}
      pb.RegisterGreeterServer(srv, greeterService)
    
      if err := srv.Run(); err != nil {
        log.Error("failed to run server", err)
      }
    }
    
  7. 编译和运行: 使用以下命令编译并运行服务:

    bashCopy code
    go build -o hello ./cmd/server
    ./hello
    
  8. 测试 API: 使用工具(如 grpcurl 或 gRPC 客户端)测试 API:

    jsonCopy code
    grpcurl -plaintext -d '{"name": "Alice"}' localhost:8000 helloworld.Greeter/SayHello
    

以上是一个简单的 Kratos 使用案例,展示了如何创建一个基于 Kratos 的微服务项目、定义 API、生成代码、实现服务逻辑、启动服务和测试 API。