高效开发 Go 微服务

会议信息
高效开发 Go 微服务

听完这场分享后,您将不止学习到 Go 语言、微服务等相关知识,还能体现高效程序员的技巧。

会议日期:2020 年 04 月 17 日

会议时间:PM 09:00

主办方:

 
讲师介绍
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 在生产力的提升是已经通过业界验证的。

数据来源:Go CN 开发者调查报告

为了让更多 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 开发微服务有帮助。我们也会持续举办不同主题的网络研讨会,请大家持续关注,下次见!

演示代码车