go框架Gorm-Kitex| 青训营笔记

136 阅读4分钟

这是我参与「第五届青训营 」笔记创作活动的第 6

|| 🎶今日笔记🎶 ||

笔记内容:Gorm-Kitex

  1. Gorm
  2. Kitex

前言 —>

RPC 框架 Kitex 初体验

ORM 框架 Gorm 初体验

GORM

什么是GORM?

ORMObject Relational Mapping,它是对象关系模型的简称。它的作用是在关系型数据库和对象之间作一个映射。使程序能够通过操纵描述对象方式来操纵数据库。是go的一个数据库连接及交互框架,一般用于连接关系型数据库。

GORM是一个已经迭代了10多年的功能强大的ORM框架,在字节内部被广泛使用并且拥有非常丰富的开源拓展。

GORM目前支持MySQL、SQLServer、PostgreSQL、SQLite。

GORM通过驱动来连接数据库,如果要连接其他类型的数据库,可以复用/自行开发驱动。

---ORM的优缺点---

优点:

  • 提高开发效率

缺点:

  • 牺牲执行性能【中间多了一个环节】
  • 牺牲灵活性弱化
  • SQL能力

GORM的生态:

image.png


Kitex

什么是Kitex?

RPC (Remote Procedure Call)即远程过程调用,不同于本地调用,RPC是指调用远端机器的函数或方法,且不需要关心底层的调用细节,如网络协议和传输协议等,对于调用者来说,和调用本地方法没有什么区别。

以往的单体服务将所有功能都融合在一套应用中,当程序体量变大时,会出现难以开发、部署和维护的问题。微服务将单体架构中的各个功能进行拆分,从而可以由不同的团队进行开发、测试与维护。服务与服务之间的功能高度解耦。这种场景下,负责不同服务的机器需要互相协作,调用其他机器的模块。

Kitex的生态 节跳动内部的 Golang 微服务 RPC 框架,具有高性能强可扩展的特点,在字节内部已广泛使用,针对字节内部做了定制扩展。如今越来越多的微服务选择使用 Golang,将 Kitex 开源出来丰富开源社区。如果对微服务性能有要求,又希望定制扩展融入自己的治理体系,Kitex 会是一个不错的选择。

Kitex框架特点

  • 高性能
    使用自研的高性能网络库 Netpoll,性能相较 go net 具有显著优势。
  • 扩展性
    提供了较多的扩展接口以及默认扩展实现,使用者也可以根据需要自行定制扩展,具体见下面的框架扩展。
  • 多消息协议
    RPC 消息协议默认支持 ThriftKitex ProtobufgRPC。Thrift 支持 Buffered 和 Framed 二进制协议;Kitex Protobuf 是 Kitex 自定义的 Protobuf 消息协议,协议格式类似 Thrift;gRPC 是对 gRPC 消息协议的支持,可以与 gRPC 互通。除此之外,使用者也可以扩展自己的消息协议。
  • 多传输协议
    传输协议封装消息协议进行 RPC 互通,传输协议可以额外透传元信息,用于服务治理,Kitex 支持的传输协议有 TTHeaderHTTP2。TTHeader 可以和 Thrift、Kitex Protobuf 结合使用;HTTP2 目前主要是结合 gRPC 协议使用,后续也会支持 Thrift。
  • 多交互方式
    支持 PingPongOneway双向 Streaming。其中 Oneway 目前只对 Thrift 协议支持,双向 Streaming 只对 gRPC 支持,后续会考虑支持 Thrift 的双向 Streaming。
  • 服务治理
    支持服务注册/发现、负载均衡、熔断、限流、重试、监控、链路跟踪、日志、诊断等服务治理模块,大部分均已提供默认扩展,使用者可选择集成。
  • 代码生成
    Kitex 内置代码生成工具,可支持生成 ThriftProtobuf 以及脚手架代码。

Kitex性能

  • 性能测试只能提供相对参考,工业场景下,有诸多因素可以影响实际的性能表现。
  • 由于开源社区缺少支持 thrift 的优秀 RPC 框架,当前对比项目为 grpcrpcx, 均使用 protobuf 协议。
  • 通过 测试代码 比较了它们的性能,测试表明 Kitex 具有明显优势。

~ End ~