加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

今日头条Go建千亿级微服务的实践

发布时间:2021-01-14 14:32:09 所属栏目:安全 来源:网络整理
导读:副标题#e# 《今日头条Go建千亿级微服务的实践》要点: 本文介绍了今日头条Go建千亿级微服务的实践,希望对您有用。如果有疑问,可以联系我们。 作者:项超 编辑:小智 今日头条当前后端服务超过80%的流量是跑在 Go 构建的服务上.微服务数量超过100个,高峰 Q

Go 语言的 runtime 包提供了多个接口供开发者获取当前进程运行的状态.在 kite 框架中集成了协程数量,协程状态,GC 停顿时间,GC 频率,堆栈内存使用量等监控.实时采集每个当前正在运行的服务的这些指标,分别针对各项指标设置报警阈值,例如针对协程数量和 GC 停顿时间.另一方面,我们也在尝试做一些运行时服务的堆栈和运行状态的快照,方便追查一些无法复现的进程重启的情况.

编程思维和工程性

相对于传统 Web 编程语言,Go 在编程思维上的确带来了许多的改变.每一个 Go 开发服务都是一个独立的进程,任何一个请求处理造成 Panic,都会让整个进程退出,因此当启动一个协程的时候需要考虑是否需要使用 recover 方法,避免影响其它协程.对于 Web 服务端开发,往往希望将一个请求处理的整个过程能够串起来,这就非常依赖于 Thread Local 的变量,而在 Go 语言中并没有这个概念,因此需要在函数调用的时候传递 context.

最后,使用 Go 开发的项目中,并发是一种常态,因此就需要格外注意对共享资源的访问,临界区代码逻辑的处理,会增加更多的心智负担.这些编程思维上的差异,对于习惯了传统 Web 后端开发的开发者,需要一个转变的过程.

关于工程性,也是 Go 语言不太所被提起的点.实际上在 Go 官方网站关于为什么要开发 Go 语言里面就提到,目前大多数语言当代码量变得巨大之后,对代码本身的管理以及依赖分析变得异常苦难,因此代码本身成为了最麻烦的点,很多庞大的项目到最后都变得不敢去动它.而 Go 语言不同,其本身设计语法简单,类C的风格,做一件事情不会有很多种方法,甚至一些代码风格都被定义到 Go 编译器的要求之内.而且,Go 语言标准库自带了源代码的分析包,可以方便地将一个项目的代码转换成一颗 AST 树.

下面以一张图形象地表达下 Go 语言的工程性:

 

同样是拼成一个正方形,Go 只有一种方式,每个单元都是一致.而 Python 拼接的方式可能可以多种多样.

写在最后

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读