一个 20 年老司机的 2020 年度技术总结

2023-10-17 06:40

本文主要是介绍一个 20 年老司机的 2020 年度技术总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家好!我是 go-zero 作者 Kevin。充满惊吓的 2020 快要过去了,看到掘金上的技术人年度征文,忍不住文字记录一下艰辛而又充满收获的 2020 ✍️

疫情开始

春节假期疫情突然升级,我们面临着自身平台的转型升级。作为 CTO,有两个重点工作:

  • 保证大规模使用平台稳定

  • 保证转型所需的新业务能够快速交付

团队压力巨大的同时也感受到了前所未有的战斗热情,养兵千日用兵一时,不经历战与火的洗礼,怎么知道团队的技术能力是否能够经受得住流量洪峰的考验。

战斗开始,迅速落实业务团队进行急需功能的开发,并行安排架构团队进行技术隐患排查、演练、攻关。

在大概两个月的时间里,我们基本一日三餐都在电脑桌前,困了就睡觉,醒来写代码(当然还有必要的开会),这真是人生一段非常难忘的特殊经历。。。

开始踩坑

随着所需功能的极速上线,我们马上开始了大规模压测,大坑如下:

  • 大量请求失败,然而服务端压力一切正常,一顿排查,发现原来是进到内网的请求被 nginx 转发时又打到外网了,而外网我们是启动了 WAF(Web Access Firewall),WAF 会认为所有用户都来自我们内网的那些 IP,这 “明显” 是攻击嘛,于是 drop 了大量请求,由此,我们指定了规则:进到内网的请求不允许转发到外网。

  • 为了快速实现功能,有同学用 nodejs 实现了部分功能,部署到 k8s 集群里,流量一起来,nodejs pod 立马扛不住,再加上难以控制的内存泄露,让我们迅速决定不再允许使用 nodejs 做后端,使用 nodejs 纯属 “意外”。

  • 某云厂商 oss 存储用的 LSM Tree 方式实现,在小文件突发增加时无法及时分裂,导致我们访问量大时出现两次 oss 访问故障。后来我们自己多申请了几个 bucket 来从代码层分散文件存储请求。

实战效果

经过前后一个月开发、压测和开学前演练,我们的系统基本满足开学需求了,接下来就是接受实战检验了。

开学第一天,我们遇到的第一个问题部分服务供应商无法承载流量压力,虽然我们之前盘算过,也充分交流过,但还是未能预料到洪峰流量的凶猛,服务商紧急增加资源得以解决。

然后我们消息分类服务的 ElasticSearch 集群压力过大,扩容的同时,发现调用代码未加熔断保护,直接把 ElasticSearch 集群压死了,里面加上熔断保护,几行代码就好了,自适应熔断保护工具包见 这里。

经过第一周的密集爆发式流量的考验,我们总体很稳定。为此还得到了有关部门的感谢信,相比友商,我们的服务稳定性还是相当不错的。后续服务稳定性上基本可以用波澜不惊来形容。至此,go-zero(虽然此时还不叫 go-zero)算是经受了充分的实战检验 ????

走向开源

7 月份在跟集团技术通道老师的交流过程中得到了充分的肯定,集团开源通道推动和帮助我把底层微服务支撑框架对外开源。

在 8.7 日深夜,我完成了 github 代码的第一次提交,此时文档仅有我临时写出来的一页 readme,为啥只有一页 readme 就选择开源了呢?我觉得万事开头难,如果决定把文档都写完再开源出来的话,可能这事就搁置了,所以还是先让球滚起来吧!

一经开源,社区立马给了我们比较热烈的反馈,更推动了我们去快速完成文档。我们在一个周末就补充了大量的使用文档,提供了比较完整的示例 shorturl 和 bookstore。后面大部分开发者都通过这两个例子感受到了 go-zero 的便捷和工程效率。感谢大家给了我们很多对示例的改进意见。

8 月 16 日,go 夜读的分享 系统的讲述了 go-zero 背后的故事和设计思考,获得了很多观众的留言认可。至今依然有不少人针对这个视频给我积极的反馈。感谢大家的认可!

8 月 24 日,gocn 的报道,让 gopherchina 社区第一次大规模的了解了 go-zero。社区开始有大量 gopher 的加入,微信群人数迅速增长。

9 月开始,go-zero 多次出现在 github Go 语言日榜月榜顶部,如图:

日榜月榜

同时不少家公司将 go-zero 用于生产,并跟我反馈上线后一直平稳运行,其中不乏日活过百万的平台。

10 月获得了 gitee 最有价值项目(GVP),并接着获得了开源中国年度 最佳人气项目奖项。

11 月 22 日,我在 gopherchina 大会做了『云原生 go-zero 微服务框架的设计思考』的主题分享,现场气氛非常热烈,据说门口堵满了进不来了,获得了很多资深开发者的认可,知乎评论见 这里,其中提到的我的年龄不对哈????,部分现场图如下:

分享观众

12 月 20 日,应邀参加腾讯云开发者大会,做了『转型之后 - 面对流量洪峰,微服务架构如何进行弹性设计?』的分享,如下:

开始大纲

在掘金发了 20+ 篇 go-zero 系列文章,跟用户详细分享了微服务框架设计的原理和实现,详见 这里。

社区的认可

近 3000 人的微信社区,每天热烈的技术讨论和用户之间的相互帮助,已经形成了良好的社区氛围。我们也从中获得很多的用户反馈,为我们进一步加强 go-zero 指明了方向!????

github star 正常每月增长 1000 左右,平均每天 33+ stars,现在 4700+,增长曲线如下:

2021 年技术展望

  • 研发团队工程效率带上新台阶,期望让大家产出更高的同时也能有更好的能力提升

  • 期望进一步加强 go-zero 的工程效率提升,让开发者编写更少的代码(业务代码)就能拥有稳定的微服务系统

  • 一个小目标:一年一万星????

项目地址

https://github.com/tal-tech/go-zero

欢迎大家使用 go-zero 并 star 支持我们!????

致谢

真心感谢一直支持我们的大佬们,以及众多使用 go-zero 的 gopher 们,之所以不列名单,实在是帮助过我们的人太多了,生怕一不小心就遗漏了某位大佬 ????

最后祝大家新年快乐!!!

这篇关于一个 20 年老司机的 2020 年度技术总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/223636

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

Python依赖库的几种离线安装方法总结

《Python依赖库的几种离线安装方法总结》:本文主要介绍如何在Python中使用pip工具进行依赖库的安装和管理,包括如何导出和导入依赖包列表、如何下载和安装单个或多个库包及其依赖,以及如何指定... 目录前言一、如何copy一个python环境二、如何下载一个包及其依赖并安装三、如何导出requirem

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总