【总结】字节 marcode 青训营

118 阅读3分钟

1、引言

动机:最开始会去参加这个训练营,主要是想继续深入学习一下后端知识;以及动手多写点代码,避免寒假时间遭到大量浪费

2、学了什么

青训营内的内容还是比较多的,后端的话基本以Go技术栈为主(包括Go、Go相关的Web框架、RPC框架以及ORM框架;不过主要以字节自己的CloudWeGo为主)。除此之外,还包括些Git、HTTP、数据库、消息队列以及微服务架构的一些内容。内容以引导为主。

2.1 Hertz 框架

Hertz 作为字节跳动自主研发的高性能 Go 语言 Web 框架,在学习过程中,了解其路由系统,通过配置路由及其处理函数,实现HTTP访问。同时可以自定义中间件,可便捷地实现日志记录、权限验证、性能监测等功能。 最方便的还是使用hz指令直接根据proto文件来生成代码

2.2 Kitex 框架

Kitex 一款 RPC 框架,通过使用gRPC协议完成服务之间的通信。同时,了解该框架的负载均衡,超时重传等策略。 最方便的还是使用kitex指令直接根据proto文件来生成代码

2.3 Gorm 框架

一个基于Go的全ORM框架,某种意义上确实比MyBatis这种半ORM框架好用。

3、项目实践经历

在实战项目阶段,参与了模拟电商系统的开发项目。以小组形式协作,运用所学技术搭建系统架构。

  1. 采用 Go 语言作为开发语言
  2. 借助 Hertz 框架搭建 Web 服务层,负责处理用户请求与响应
  3. 通过 Kitex 框架实现不同服务间的通信,如商品服务、订单服务及用户服务之间的远程调用,确保系统各模块协同运作
  4. 利用 Gorm 框架与 MySQL 数据库进行交互,完成商品信息存储、订单数据管理以及用户信息维护等功能。
  5. 利用 Go-redis 框架与 Redis 数据库进行交互,主要是进行一些处理分布式session,缓存等功能。
  6. 注册中心的搭建选用了 Consul。各服务启动时,自动向 Consul 注册自身地址与端口等信息。当其他服务需要调用时,通过 Consul 进行服务发现,获取目标服务的地址。
  7. 链路追踪采用Jaeger,Jaeger会去记录服务之间的调用过程。借助 Jaeger 的强大功能,能够清晰地看到不同模块间的调用顺序。还能精准知晓每个服务处理请求所耗费的时间,以及请求在不同服务间传递过程中的网络延迟情况。

4、学习收获总结

在熟悉Java的基础上,又了解学习了Go语言及其微服务;同时和队友完成了基于Go语言的微服务应用的开发。只能说从感受来来说,Go确实比Java省内存,比之前启用Java的微服务方面对PC的负担小。

同时也学习了proto,这一序列化方式,不过感觉没有JSON好用。

5、不足剖析

  1. 对于许多东西都处于了解的状态,可以在AI辅助软件的帮助下完成开发,但也仅限于此。想要深入了解就还需要继续学习。

  2. 同时,对于所要求的关于AI Agent,并没有整合进入系统,对于AI Agent的了解还比较浅显。在AI时代,即使不进行算法研究,对AI应用层的学习,应该是逃不开了。

  3. 在使用proto序列化方式时,感觉其自由度小于JSON,在书写proto文件,多次遇到数据类型的问题,比如proto原生并不支持decimal,如何将github.com/shopspring/decimal 接入proto也是一个问题。当时也并没有好的想法,仅是将其转为string类型去处理了。