在Go的开发中我们会经常使用goroutine,但是有的时候goroutine的也不一定按照我们的想法去执行,我手头的一个日志分析项目(等稳定下来可以开源掉)就遇到这个问题,就这个问题我给大家分享一下。
需求描述:
我是实时抓取的Nginx日志,测试环境大概是1700QPS的样子,我需要实时统计所有Path的QPS,,每秒延迟,以及这些Path返回的每种状态码的Qps
算法实现:
在Go的开发中我们会经常使用goroutine,但是有的时候goroutine的也不一定按照我们的想法去执行,我手头的一个日志分析项目(等稳定下来可以开源掉)就遇到这个问题,就这个问题我给大家分享一下。
需求描述:
我是实时抓取的Nginx日志,测试环境大概是1700QPS的样子,我需要实时统计所有Path的QPS,,每秒延迟,以及这些Path返回的每种状态码的Qps
算法实现:
其实我的树莓派买了已经有两年多了,只不过一直跑的是Fedora,也算稳定,但昨天突然树莓派启动不起来了,接上显示器,提示IO设备异常,折腾了好久,决定重装系统,想了半天还是装了freebsd吧,毕竟现在写Go多一些,不需要依赖什么环境,以前用不了freebsd是因为对java支持不好,其实树莓派本来就是低性能的,然后再跑个java,基本上性能也很差,我是没有做过对比测试,但是我写的goweb程序在树莓派上跑得飞快,内存使用很少,瓶颈都在cpu上,过段时间有空余时间再去买两个个pi2,组个小集群玩玩。
现在material比较流行,angular也是material的急先锋,今天说说控件md-data-table的使用方式。
前提条件,有一定的angular基础,如果你从一开始就使用的angular2的话,这篇文章请忽略。
md-data-table控件其实有两个,我们用brower安装的话其实安装的是iamisti/md-data-table这个版本,但是这个版本不支持ajax查询刷新,业务是我研究不够。我用的是daniel-nagy/md-data-table这个版本,感觉这个版本用法比较清晰,依赖比较少,废话少说,另外两个版本我都用过,实话实说,在大数据集的时候daniel-nagy/md-data-table性能真的要甩另外那个几条街(人格担保实测结果),废话少说,讲讲他的使用。
现在用于RESTFul API设计的工具主要是三种,分别是Swagger,API Bluprint, RAML。 与其说他们是工具,不如说他们是RESTFul API的定义规范描述语言,只是在围绕着这些规范语言各自有各自的生态系统,下面我会简单介绍一下着三中规范描述语言,以及他们的优劣。个人观点会强烈地倾向RAML,虽然只是简单的看了看,但是觉得RAML的语法更清晰,所以文章中有很多地方会让人觉得个人倾向RAML很严重,请见谅。
接着昨天的说,我们启一个生产者一个消费者,这个时候会影响整个mq的收发效果,现在我们把业务的处理时间算进来,模拟处理一条消息需要10ms没看看是什么效果
测试内容:
启动一个产者,一个消费者,Qos为10.默认Ack,接收到消息休眠10ms,用来模拟业务的处理时间
最近我在公司上线了rabbitmq,替换了原来阿里出的rocketmq(别说我黑阿里的东西,这玩意真的都是坑),我并不想告诉你rabbitmq安装过程是怎么样的,去看官网就知道,戳这里
看看网上说rabbitmq效率多高多高,但是怎么测试也只有15000Qps,还是用golang的客户端来测试访问的中间没有任何处理逻辑,悲催的是java原生客户端只能跑到11000Qps,(好吧,我承认我也黑了java),看似基本上这个问题也不大,但是我相信优化的空间应该还是蛮大的,所以做了一下测试,先上代码吧:
微服务架构是进来比较火的一个概念,其核心思想就是将业务按照最小颗粒度进行拆分,无论是基础服务还是业务功能,服务拆分之后我们通过一种数据通讯协议将系统之间连接起来,现在看来,标准的做法就是将每个服务对外的接口封装成为ReatApi供其他的服务进行调用.,那么,我想说的是这个通信协议一定要用Http么,答案但是否定的.
首先简单讲讲Snowflake,snowflake是来自于Twitter的一个开源算法,github上有,但是找不到源代码,现在好像是一个公有的服务,然并卵,别人在墙外,我们还是来讲讲其算法,snowflake是用int64来表示一个序列号的,看上去和我们的时间戳很像,但是它的起始元年不是1970年,而是自定义的,你没看错,就是自定义的,然后时间戳里面只是记录下了当前毫秒与自定义的元年时间差,这样起始就用不到64位的bit来记录整个时间戳,多的来的几位就可以做其他的事情,来看下面的结构