1.4.3 Go语言项目实战
经过了前面两个阶段的学习,相信你对Go语言本身已经有了一定的理解,但是如何使用Go语言进行项目开发呢?或者当你遇到一些Go服务线上问题时,如何去排查分析呢?这就需要继续学习第三个阶段。图1-10列举了Go语言项目实战过程中所需的知识。
图1-10 Go语言项目实战
参考图1-10,接下来将按照顺时针方向逐个介绍Go语言项目实战需要掌握的主要项知识点。
(1)项目搭建
Go语言项目实战的第一步当然是搭建项目,这时候就需要确定项目架构、代码布局等。另外,一个完整的Go项目需要依赖很多组件,比如服务路由、数据库、日志、HTTP客户端、单元测试等。每一种组件可能都有很多开源框架可供选择,使用哪一款开源框架也需要认真调研。
第6章将带领大家从0到1搭建一个基本的Go项目,并且还会介绍一些常用的开源框架,包括Web框架Gin的原理以及使用技巧,日志框架Zap与全链路追踪,数据库访问框架Gorm,HTTP客户端框架go-resty,Go语言标准库(即单元测试)等。
(2)高性能Go服务开发
当你实现一个Go服务之后,如何评估服务性能呢?你的服务能否应对高并发流量(比如秒杀活动)呢?如果不能,应该如何优化服务性能呢?性能优化的前提是确定服务瓶颈,实际上大部分项目最大的瓶颈通常在于数据库,而数据库的性能优化是有可行方案的,首先是分库分表,其次是缓存(Redis缓存、本地缓存等)。
第7章将详细介绍Go服务性能优化方案,包括基于Gorm框架的分表,使用Redis缓存、本地缓存(bigcache),以及通过资源复用、异步化编程等手段提升Go服务本身的性能。
(3)高可用Go服务开发
Go服务的可用性也不容忽视,那么如何衡量一个服务的可用性呢?可能你也听说过,通常企业可能会要求服务的可用性达到三个9(也就是99.9%)或者四个9(也就是99.99%)。但是这是如何计算的呢?
第8章将会详细介绍高可用Go服务开发方案,包括可用性的定义以及高可用三板斧,并以阿里开源的流量治理组件Sentinel为例,讲解如何通过流量控制、熔断降级、系统自适应过载保护等提升系统可用性。另外,监控系统也必不可少,第8章还会介绍如何基于Prometheus构建Go服务监控系统。
(4)Go语言微服务入门
微服务是一种非常热门的架构设计理念,它主张将单个应用程序开发为一组小型服务,每个服务都单独部署运行,并且这些服务之间通过轻量级的方式进行通信。
第9章将详细介绍微服务架构的基本概念,包括RPC、服务注册与服务发现、服务治理等。此外,我们将以字节跳动开源的一款微服务框架Kitex为例,讲解如何基于Kitex构建RPC服务,以及Kitex如何实现高可扩展性和服务治理。
(5)Go服务平滑升级
Go服务作为常驻进程,如何进行服务升级呢?你可能会觉得这还不简单,先将现有服务停止,再启动新的服务不就可以了。但是需要说明的是,Go服务升级可能会引起瞬时502错误,所以我们需要实现一套平滑升级方案来保证升级过程是无损的。
第10章将会对Go服务平滑升级方案进行详细介绍。
(6)Go服务调试
生产环境总是会遇到一些千奇百怪的问题,比如Go服务总是时不时地响应非常慢甚至完全没有响应,Go服务的内存占用量总是居高不下等。遇到这些问题该如何排查与分析呢?Go语言其实为我们提供了一些非常有用的工具,这些工具可以帮助我们分析并解决Go服务的性能问题。
第11章将会详细介绍如何基于这些工具分析Go服务线上问题。
(7)线上服务实战
大多数Go开发者都停留在简单的增删改查层面,对Go语言本身的掌握程度不够,对常用依赖库或者开源组件的掌握也不够,在开发项目过程中总会不经意间遇到一些千奇百怪的问题,并且在遇到线上问题时往往束手无策。
第12章将会介绍一些线上问题以及解决思路,包括Go服务中的502总结、Go服务假死问题、Go语言中的并发问题等。希望大家在以后的开发工作中能够避免类似的问题发生,或者在遇到类似的线上问题时能够从容应对。