在很多系统开发中,counter都是系统中必不可少的组成部分。 比如在淘宝中,我们需要存储库存量, 在广告系统中,需要存储广告主订单里面已经投放的广告impression/currency量。 在博客系统中,需要统计浏览量。不同的系统,对counter的要求也是不一样的。 在淘宝中, 库存量必...
-
waitgroup 源码解析
13 Nov 2019
WaitGroup在Golang语言开发中使用非常平凡,但是WaitGroup内部实现是什么样子的呢?标准库中WaitGroup虽然仅仅141行代码, 里面的文章可是大有可为。
首先看waitGroup struct定义.
type WaitGroup struct {
noCopy no...
-
撸了一个并发执行job的util库
13 Nov 2019
在日常开发过程中,为了提高性能,我们经常会并发执行多个任务,让总执行时间变短。一般来说,我们可以用channel来实现,或者使用标准库里面的errgroup。但是这些都没有对并发执行的结果进行处理,需要我们写代码进行处理。 处理返回结果一般采用一个channel或者加了mutex的map等来实...
-
广告系统漫谈
02 Nov 2019
广告系统是一个很泛的词, 针对某一些特定平台特定受众都会产生特定的广告系统。例如显示广告,搜索广告,视频广告。针对不同广告商的不同广告诉求,有品牌广告和效果广告。但是无论哪种广告,都离不开下面几个方面。
管理模块:主要指针对广告主,提供的管理界面, 即广告主可以在其中设置自己的广告需要...
-
广告投放engine设计(1)
02 Nov 2019
前文提到, 广告投放engine的低延迟需求, 一般来说,我们都是要求一个广告在100ms内返回结果的,如果时间再长,就会影响到效果。怎么才能做到低延迟呢,这是一个很严肃的问题。
首先我们先谈一下广告投放系统中的engine设计。engine可以理解为一个普适的减小查询延时的基础系统,对广告业...
-
golang内存优化实践
02 Oct 2019
最近线上的一个后台job类型的应用内存报警, 显示峰值内存使用率已经到了90%以上。这个应用是几年前从其team接手的一个,原作者早已”逃之夭夭“。回顾我接手这几年,这个应用基本没有做过业务逻辑的变化, 我对它的修改也仅仅是改改小bug。除此之外就是多次的内存优化了。这几年主要优化了下面几次。...
-
cmux 源码解析
22 Sep 2019
一直以来,接触的很多服务都在同一个端口上提供了grpc和http的服务。一直都比较纳闷这个是怎么做到的。 今天有时间看了一下cmux的源码,原来核心逻辑还是比较简单的。
我们知道在服务器端程序中,我们往往会首先监听一个固定的服务器端端口,然后各个客户端(浏览器)访问这个固定端口来和服务器建立...
-
grpc gateway设计
13 Sep 2019
现在很多微服务内部都会使用grpc作为微服务内部调用的方式。 然而在客户端(web,移动应用)很多还是停留在使用restfull接口上, 当然移动应用还是比较容易使用grpc来call后端服务的。 但是web就显得有些不太容易了。当然现在也有了grpc-web(https://github.c...
-
计算,传输,存储漫谈
30 Aug 2019
纵观计算机发展几十年历史,我们会发现计算机的发展,不外乎计算,传输,存储这三个方向。计算是核心,主要是cpu的计算速度和算法。传输包括网络,数据传输方式(USB). 存储当然也就是软盘,硬盘,ssd等。
我们喜欢把复杂的东西拆分成各种各样的部分分开来研究。计算机也不例外。高校里面也是把计算机...