这次去 Gopher China 和不少老朋友见了个面,还有不少在微信上认识已久,一直没见过面的网友。同时也和各个公司的一线开发们聊了聊,互相交流了彼此使用
Go 时的一些心得和痛点。
综合近期了解的一些相关分享,我把到目前为止见到的,不那么常见的,各方对 Go 的优化和 hack
集中在这篇文章里。因为考虑到一些公司情况比较特殊,所以本文中列出的点就不标记是哪个公司做的了。未来他们觉得时机成熟应该也会自己出来做一些分享。
网络方面
当前 Go 的网络抽象在效率上有些低,每一个连接至少要有一个 goroutine 来维护,有些协议实现可能有两个。因此 goroutine 总数 = 连接数
前置知识在这里 [https://github.com/cch123/golang-notes/blob/master/memory_barrier.md]。
在 stackoverflow 上有这么
[https://stackoverflow.com/questions/50307693/does-an-x86-cpu-reorder-instructions]
一个问题,问题的答案中有这么几段:
> At the same time, x86 defines quite a strict memory model,
有一个观点已经被说烂了:使用 MQ 可以帮助业务系统解耦。
想法很简单,在业务状态流转时,如果没有 MQ,那么其它系统想要知道状态变了,那就需要核心流程系统去主动做通知。
比如电商系统里订单从创建到处理中状态切换了,客服系统需要知道,风控系统需要知道,用户系统也需要知道。
这里的通知通过 RPC 来进行,下游系统需要的数据可以在这次 RPC 里携带上,也可以在请求的时候让下游系统自己去查。
下游系统增加的时候,核心业务的代码也需要修改,比如新做了一个积分系统,现在订单状态流转积分系统也想知道。
核心系统需要不停地增加调用关系来迎合下游新增的业务方需求。这些边边角角的计算逻辑和订单系统本身没啥关系,但是因为下游需要拿到这些数据,我们就需要自己用 RPC
去调用下游的接口。这确实不太合理。
当下游系统发生事故时,
今年不少业务开发像突然被开了光一样开始讲 nocode 和 lowcode,可以看出现今的互联网可能真的是编不出什么好故事了。
在之前的文章里,我们已经讲过自动化、平台化和中台化了,不管业务模式怎么变,企业内总还是有一些局部系统最终能够把开发模式沉淀下来,变成拖拖拽拽就可以进行变更的“网页制作大师”系统。
像阿里这样的公司,中台落地并迭代多年以后,核心业务的流程变化其实并不会有太多的编码任务,从内部资料来看,套用以往的业务模式,改改配置或者上上活动,基本不需要程序员去做开发了。
不管我们在哪个公司,只要我们按照《在业务系统中寻找技术含量》这篇文章的思路去做系统,最终一定能够将大部分繁琐的重复劳动做到自动化。二八定律,就是可以将那 80%
的重复劳动用界面化、系统化、流程化的手段完全消灭掉。剩下的 20%