这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天。今天的课程我们学习了Go中的Web、RPC、ORM框架三件套。
GORM
ORM是一种将关系型数据库中的表映射为编程语言中的结构的工具,通过ORM,可以很方便地在编程语言中操作数据库,而不需要编写SQL语句。GORM是Go语言中的ORM工具,GORM目前支持MySQL,PostGresql,SQLServer,SQLite。
图示中的便是使用GORM框架进行增删改查操作,相比于直接拼接SQL语句,这种方式更加简单,且不易出错。同时,GORM支持事务操作,提供了Begin、Commit、Rollback的接口,可以用于一致性要求较高的场景。
同时,GORM提供了许多可选的配置项,包括关闭默认事务、启用预编译语句等。
Kitex
Kitex是一个高性能的RPC框架,它自带了一个代码生成工具,只需要定义接口的IDL就可以完成基础代码的生成,并且可以很轻易地启动RPC微服务的监听与连接。Kitex有自己的服务注册与发现中心,同时也支持对接ETCD等主流的服务注册与发现工具。
关于服务注册与发现,我以前了解地不深,所以借助于本课的实战案例进行更进一步的讲述。在传统架构下,所有的服务都集中在一台服务器上,各种不同的请求实际上就是调用服务器上的不同函数。在微服务架构下,对不同的服务进行了拆分,尽量保证各个服务之间的独立性,各个服务之间通过RPC进行交互。此时,每个服务可能只是一个函数,他们的体积都是很小的,并且可能是运行在不同的机器上的。当一个服务需要用到其他服务时,就会通过RPC去进行调用。而各个服务为了让其他服务能够知道自己的地址,就需要将自己注册到一个中心化的服务注册与发现中心(ETCD)。其他服务只需要与中心交互,就可以知道这个服务的地址,并对其进行调用。
Hertz
Hertz是一个http框架,在使用上与Gin框架类似,不同的地方在于,Hertz提供了一个代码生成工具,可以方便地生成基础代码。同时,在性能上,Hertz要优于Gin。