高效开发 Go 微服务
Florin Pățan
JetBrains GoLand 技术布道师
Florin 是资深 Gopher,参与过众多高性能、分散式的项目,目前在 JetBrains 担任 Goland 技术布道师。他在全世界有 Gopher 的地方出没,协助 Gopher 们能更高效的运用 Go 语言及 GoLand 做开发。
范圣佑
JetBrains Developer Advocate
圣佑是 JetBrains 技术布道师,负责推广 JetBrians 相关技术与产品,包括:Kotlin 编程语言、 IntelliJ IDEA 系列 IDE 及 YouTrack、TeamCity、Upsource 等团队合作解决方案,协助开发者善用工具辅助来提升生产力,同时维护代码品质。
舒先
OPPO 后端高级开发工程师
舒先目前就职于 OPPO 互联网部门,担任后端高级开发工程师,负责公共技术能力平台开发、管理与推广。他也是微服务开发框架 Go-Micro 核心团队成员、Go-Micro China 发起人及主要维护者,负责 Go-Micro 在中国区的推广与开源技术支持。已有超过 7 年的金融级微服务开发经验。
利开园
腾讯 高级工程师
利开园是腾讯高级工程师,负责过 Docker 容器和云开发等相关云计算产品后台开发。同时也是 TARSGo 早期核心开发者,熟悉 TARS 及开源服务治理体系,专注于微服务架构实践与研发效能提升。
Go 中国技术社区
Go 中国技术社区面向国内 Go 语言开发者,提供中立的、由 Go 语言技术实践主导的技术资讯、技术会议、赛事及培训等,搭建国内最具规模和生命力的 Go 开发者社区。
TARS 基金会
TARS 是一个在腾讯已经应用十余年的高性能微服务开发框架,于 2017 年 4 月开源,2018 年捐赠给 Linux 基金会,2020 年 3 月宣布正式成立 TARS 基金会,致力于构建一个健康并且开放的微服务开源生态。该框架为用户提供了涉及到开发、运维,以及测试的一整套解决方案,帮助一个产品或者服务快速开发、部署、测试、上线。它集可扩展协议编解码、高性能 RPC 通信框架、名字路由与发现、发布监控、日志统计、配置管理等于一体,通过它可以快速用微服务的方式构建自己的稳定可靠的分布式应用,并实现完整有效的服务治理。目前支持 C++、Java、PHP、Nodejs 与 Go 语言。
所谓高效程序员不仅要快速地完成代码,更要将代码写得有品质。如何把代码写得又快又好,手上有没有一个好的辅助工具就是重要的关键。前一阵子的 2020 中国 Go 开发者调查报告指出,超过 70% 的 Gopher 都选用 JetBrains 的 GoLand 做开发工具,可见 GoLand 在生产力的提升是已经通过业界验证的。
为了让更多 Gopher 同学更高效,也搭上目前微服务的热潮,我们在 4/17(五)晚上 9 点举办了「高效开发 Go 微服务」网络研讨会,视频现已上传,需要回放的同学可以线上观看了。
主題分享
本次邀请到 GoLand 专属技术布道师 Florin Pățan 来为我们分享。Florin 相信大家已经不陌生,去年也跟我一起飞到北京参加 Gopher China 大会。对于 Go 语言开发、GoLand 生产力技巧都有很深的研究。在这场分享里,Florin 先以一个非常简单、仅回传 Hello, World 字符串的程序做为开始(视频 00:03:35 处),通过将回传格式改成 JSON(视频 00:52:45 处)、把程序 build 成 Docker Image(视频 00:25:00 处)、以 Kubernetes Cluster 运行 PostgreSQL 数据库容器并将程序连接其上(视频 00:07:52 处),逐步呈现实现一个 Go 微服务所需经历的完整工作流程。全程演示采用 GoLand 一镜到底,不需在多个不同软件间切换而损失专注力,并将生产力最大化,尽享编程乐趣。
在前 50 分钟的分享里,Florin 演示包括:创建项目对 Go SDK、环境变量、Go Module 的支持(视频 00:04:55 处),写代码时对 Go 语法及依赖包的提示、补全及自动修正(视频 00:12:30 处),连接数据库时在字符串注入 SQL 语法高亮以及对 SQL 语句、Table 和 Column 名称的补全(视频 00:09:40 处),通过 Service 窗口操作 Docker 和 Kubernetes Cluster 及对 YAML 文件支持(视频 00:08:10 处),以 HTTP Client 验证服务运行(视频 00:33:15 处)。在最后故意安排了一个失误来演示如何用 GoLand 生成测试文件、写测试代码并检示覆盖率报告等(视频 00:45:10 处)超过数十个操作技巧,让 Gopher 们体现高效程序员的编程技巧。
在活动的最后,Florin 为了协助我抽出幸运的得奖者,还将这个微服务新增了一个随机数字的产生器,并通过 GoLand 一键分享到 GitHub 上(视频 01:33:00 处)。 好奇 Florin 的代码是怎么写?可以到他的 GitHub 上下载一份回来瞧瞧,假如你想要贡献的话,可以发 PR 给他呦!
嘉宾分享
本次活动也很荣幸邀请到舒先、利开园及 Mark 三位嘉宾与我们分享与微服务相关的主题:
舒老师(视频 00:56:25 处)分享 Go-Micro 框架的历史、特性及 Go-Micro 中国站提供的资源,并以清楚的图表解释其三层架构及框架内各组件间的分工,并以 GoLand 演示如何以 Go-Micro 实现一个简单的微服务,并在命令行及网页 UI 上演示调用方式。舒老师提到他平时就是使用 GoLand 在做开发,因为「傻瓜式」的默认配置就能直接使用,非常方便!
利老师(视频 01:06:10 处)则是通过几个不同的场景跟大家讨论微服务治理会面临的挑战,以及 TARS 提供哪些方案来协助开发者更优雅的解决。并以图表说明 TARS 在各个层面包括日志、可视化、变更能提供给开发者的好处有哪些?以及如何以调度、弹性扩缩来降低容灾所带来损失。利老师也提到使用 IDL 接口定義語言的微服务框架将可以让如 GoLand 这种 IDE 有更好的支持。
Mark (视频 01:17:40 处)则补充 TARS 在腾讯内部已经应用十余年,是个支持多语言的框架,不止是 Go 语言,也支持 C++、Java、PHP、Nodejs。在捐赠给 Linux 基金会後,今年 3 月也正式成立基金会,未来会迈向国际、并专注发展微服务开源生态。基金会也与社区友好,已经多年支持 Gopher China 大会,目前也正在计划到国际大会上发表,更多细节可以关注公众号及官网。
问答
这次会后提问非常多,问答重点整理如下:
Q. 在 GoLand 里如何使用深色的 Theme 搭配浅色的 Editor Color Scheme,避免在 debug 时候看不清文字?(视频 01:31:15 处)
通过快捷键 Ctrl + Backticks (`) 调用出快速切换 Theme 菜单,先选 Editor Color Scheme 成深色,GoLand 会询问是否要将 Theme 也切换。
Q. Go-Micro 目前有哪些案例?
可以参考官网的使用者案例,开源案例可以看中国站(github: micro-in-cn)
Q. Go-Micro 的 Service 支持负载均衡么?存在单点故障么?
支持。Selector 模块就是做这个的。单点故障任何服务都存在,Go-Micro 有 wrapper 可以完成自定义降级。
Q. 微服务适用于游戏开发么?业界有没有成功的案例呢?
适合。腾讯本身就是一个成功的案例,内部使用 TarsGo 已完成许多项目。
Q. GitHub上的 TarsGo 与同学内部的版本是不是同步的吗?
最近已把之前没同步的都同步了,可到 GitHub 上查阅最新版本。
Q. TarsGo 考虑支持 Web Socket 吗?
TarsGo 主要专注在后台服务的开发,想要使用 Web Socket 的话,可以用 TarsNode。
Q. TarsGo 对 Go Module 支持的如何?
目前 TarsGo 是支持 Go Module 的。
Q. 除了 TarsGo、Go-Micro,还有哪些流行的微服务方案?
还可以参考 go-kit、dubbo-go、motan-go 等项目。
在观看 Florin 的演示时,有没有发现他的进度条跟原生的 GoLand 不太一样呢?这个是由 Florin 亲自开发的 Gopher 视觉插件,安装后 GoLand 里的所有进度条都会有 Go 吉祥物在那边跑呢!希望这场「高效开发 Go 微服务」的分享对各位同学使用 GoLand 开发微服务有帮助。我们也会持续举办不同主题的网络研讨会,请大家持续关注,下次见!