在很多系统开发中,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等。
我们喜欢把复杂的东西拆分成各种各样的部分分开来研究。计算机也不例外。高校里面也是把计算机...
-
技术的专与精
16 Dec 2018
从事业务开发六年来,每天都在与各种功能点打交道。见证了不少系统的肮脏与杂乱,当然有些脏与乱是我自己造成的。越来越体会到做业务开发对自身的成长的好处与坏处。纵观世界软件业发展,大部分的程序员工作的方向都是业务系统的开发,从简单的企业门户,到电子商务,到广告系统。每一个系统都是建立在前人的工作成果...
-
简析微服务中的幂等性设计
07 Dec 2018
在微服务大行其道的今天,微服务之间的API接口调用变得越来越多,也就产生了系统数据一致性的问题。怎么解决数据一致性的问题呢。业界也产生了很多的解决方案。比如XA, TCC 等分布式事务解决方案,再比如使用mq来达到最终一致性。本文介绍使用API幂等性设计来解决一致性的问题。
graph L...
-
Promethues Scrape 部分源码解析
12 Sep 2018
在prometheus中,scrape组件负责拉取监控目标的数据,并且把拉取的数据交给storage组件。scrape需要抓取的监控目标由discover组件提供。示意图如下
graph LR
A[Service Discover] --> B[Scrape]
B --> C[...
-
Promethues Service Discover 服务发现部分源码解析
02 Sep 2018
什么是 Service Discovery
Service Discovery(SD) 是当前分布式系统的一个重要组成部分。具体可参见http://dockone.io/article/509
Prometheus SD目前支持的平台
azure
zookeeper
con...
-
Golang Slice
25 Jul 2018
package main
import "fmt"
type CollectionItem struct {
ID int64
}
type Collection []*CollectionItem
func doThing0(result *Collecti...
-
grafana http部分源码解析
25 Jul 2018
作为一名web开发者,笔者使用Golang作为后端语言在开发Web服务的时候遇到过很多问题,
Golang作为静态语言,在业务逻辑开发速度方面,相较于Ruby等动态语言并不占有太大优势。使用Golang开发Web系统难免会使得代码可读性,代码整洁不如Ruby等语言来的直观,简洁。但是当我...
-
如何知道你是否应该升级所依赖的第三方库
15 Jul 2018
在我们的日常开发中,我们越来越依赖于第三方库,不论哪种语言。但是因为第三方库的数量巨大,我们很少有技术团队能够有精力追踪每个第三方库的新版本。然后评估是否要升级新版本。尤其一些安全漏洞啥的,如果没有及时修复,可能会造成无法弥补的损失。经过搜索,我也没有发现有提供类似服务的第三方。为什么我们不试...
-
配置树莓派过程中遇到的奇怪问题
01 Jul 2018
在家无事,闲着配置一下两年前买的树莓派玩玩。却遇到了一个奇怪的问题。
症状: 同一个局域网下, mac不能够ping通树莓派,树莓派能够访问网页能够ping通mac。
解决过程:刚开始觉得可能是我设置的路由器无线桥接的问题,把路由器配置搞了一边,没有发现异常。因为家里面墙比较多,所以设置了...
-
golang内存优化
28 Apr 2018
原数据结构
优化数据结构
优化点
map[string]SampleStruct
map[[32]byte]SampleStruct
...
-
路由器背后的技术
22 Apr 2018
我们每天都会注意到电脑里面的东西,却经常忽略和电脑相连的路由器里面有什么东西。 其实,现在的路由器也是很复杂的。大部分普通人只能了解很少的一些简单的设置,实际上, 路由器包含了很多复杂的功能,以方便我们使用网络。
WAN口
LAN口
D...
-
More DSL or Less DSL
22 Apr 2018
-
前端开发概要
22 Apr 2018
作为web前端开发的你,如果你现在仍然停留在使用jquery, dreamweaver 上, 你已经out很多年了。 随着个人电脑硬件计算能力的提高,现在浏览器已经可以较为快速的完成很多工作。之前的mvc开发模式也已经不在光鲜。现代前端开发,我们还需要了解很多新的设计思路,新的观点。
...
-
找到同一个组内的元素
26 Sep 2017
relations = [
[1, 2],
[2, 3],
[4, 5],
[8, 9],
[10, 1]
]
inc = relations.count * 2
group_id = 1
...
-
计算广告系列:合约广告
06 Sep 2017
合约广告
-
计算广告系列:计算广告的前世今生
04 Sep 2017
大家都知道,在网络时代, 每一个网页或者应用上面都会有有广告区域。相较于传统的电视广告,纸质媒体广告,由于网页以及应用程序能够更加便捷的分析统计用户的爱好,也就出现了针对特定用户的广告,不仅仅是依赖于广撒网薄受利传统的广告。针对于制定用户的广告能够显著节省广告主的预算。并且,因为广告内容也是和...
-
公共平台组和业务开发的思考
01 Sep 2017
现在的互联网公司,基本上有点规模的公司都会有公共平台组(部),主要负责开发一些公共框架,基础库代码等。比如前端开发要搞一个framework,后端也有日志处理,权限管理,登录管理, rpc调用框架等。这些东西因为每一个业务开发部门都会用到,所以专门会有开发人员来维护这些公共代码。 康威定律告诉...
-
this is my old blogs
01 Sep 2017
CSDN 博客地址: http://blog.csdn.net/codelifeofme
关于兼职布道师 2015-06-16 10:51 阅读(457)
互联网不是万能的 2015-03-21 17:27 阅读(...