今天Uber工程师放出一篇论文(A Study of Real-World Data Races in Golang),作者是Uber的工程师Milind Chabbi和Murali Krishna Ramanathan,他们负责使用Go内建的data race detector在Uber内的落地,经过6个多月的研究分析,他们将data race detector成功落地,并基于对多个项目的分析,得出了一些有趣的结论。
今天Uber工程师放出一篇论文(A Study of Real-World Data Races in Golang),作者是Uber的工程师Milind Chabbi和Murali Krishna Ramanathan,他们负责使用Go内建的data race detector在Uber内的落地,经过6个多月的研究分析,他们将data race detector成功落地,并基于对多个项目的分析,得出了一些有趣的结论。
观其设计知其人
A MAN is KNOWN by the DESIGN he keeps
原文:Most Useful Software Architecture Patterns by Shadman Jamil
马上就二月二了,理发店就要忙活起来了,托尼、凯文、艾伦等老师的理发剪磨刀霍霍,把椅子擦亮,准备各位顾客的到来。
Sleeping barber problem是一个经典的goroutine交互和并发控制的问题,可以很好的用来演示多写多读的并发问题(multiple writers multiple readers)。
开发人员常常需要跟踪生产环境中的应用程序的性能瓶颈,并试图找出造成瓶颈的根本原因。要做到这一点,他们通常会通过日志来收集这些信息。不幸的是,这种方法可能会很耗时,而且无法提供有关潜在问题的足够详细的信息。
一种现代且更先进的方法是应用和使用profiling技术和工具,突出显示最慢的应用程序代码和消耗大部分资源(如CPU和内存)的方法。持续分析(Continuous profiling)是在生产环境中持续 收集应用程序性能数据,并将这些数据提供给开发人员进行深入分析的过程。
通过,我们通过采集程序的指标,生成一个概要文件(Profile)进行单次的分析。Go语言提供了pprof工具,可以很方便的生成profile文件。你可以通过程序调用runtime/pprof生成CPU、Heap等概要文件,也可以使用net/http/pprof集成到web应用程序中,通过go tool pprof工具在命令行或者web页面中进行分析。
有时候,我们不能及时的进行pprof分析,故障可能消失了或者程序已经crash了。另外我们可能需要不同时段的profile进行对比,进行比较才能发现问题,比如内存泄露的问题。这个时候持续分析(continuous profiling)就很重要了。很多云服务厂商都提供持续分析的功能,比如[Go Continuous Profiler | Datadog](https://www.datadoghq.com/dg/apm/ts/profiler/go-continuous-profiler-ts/?utm_source=advertisement&utm_medium=search&utm_campaign=dg-google-profiler-emea-goprofiling-tshirt&utm_keyword=%2Bgo %2Bprofiling&utm_matchtype=b&utm_campaignid=15426873343&utm_adgroupid=128217964697&gclid=Cj0KCQiA_8OPBhDtARIsAKQu0gYymyElbglw_I7uZJkZ7ynxfzn1nVojVZJ9rkm_6_hbchG09w4CCmEaAkWfEALw_wcB)、Cloud Profiler | Google Cloud、Amazon CodeGuru Profiler等。
编写可维护的代码是最基本的要求。清晰度、可读性和简单性都是保持代码可维护性的各个方面。它应该使某人加入您的项目或在有人离开后维护代码的过程变得容易。可维护性的衡量指标是代码更改的容易程度以及与这些更改引起的风险性。为了有效地编写Go程序,了解Go语言的属性和地道写法,并使用与命名、程序构建、格式等相关既定约定是至关重要。
以下是一些有助于编写可维护的Go代码的良好实践。
原文: Writing maintainable Go code by Jogendra.
自 Go 1.18 支持泛型后, Go interface 的意义已经彻彻底底的改变了,除了先前代表的方法集的意义外,还被用作泛型的类型约束(type constraint)的功能, interface已经不再是以前那个单纯的少年了。