- 博客(138)
- 资源 (59)
- 收藏
- 关注
原创 Apache Druid源码导读--Google guice DI框架
缘起在大数据应用组件中,有两款OLAP引擎应用广泛,一款是偏离线处理的Kylin,另一个是偏实时的Druid。Kylin是一款国人开源的优秀离线OLAP引擎,基本上是Hadoop领域离线OLAP事实标准,在离线报表,指标分析领域应用广泛。而Apache Druid则在实时OLAP领域独领风骚,优异的性能、高可用、易扩展。Kylin的实现细节网上资料很多,而Druid很少,最近打算研究下源码,写几...
2019-10-13 15:08:55
4088
1
原创 Jackson多态反序列化的使用
缘起最近看Apache Druid的源代码(0.5很老的版本),印象最深的就是对Jackson的多态反序列化和注入的使用了,这里也属于自己的知识盲点,看着复杂的json直接反序列化为可用对象,直呼过瘾。所以一直想找个机会实践一下,这不需求就来了。需求我们的实时指标统计是通过Flink Steam SQL计算为维度、指标后后入Hbase,然后通过Phoenix SQL给前台展示。现在新接入Ky...
2019-09-11 20:55:44
2948
原创 sklearn2pmml xgboost缺失值(missing)处理的坑
sklearn2pmml xgboost缺失值(missing)如何处理今天同事在部署xgboost pmml模型时遇到了大坑,线上spark预测和本地python预测结果怎么都不对应,记录一下处理过程。看了下同事的代码,貌似也没有问题from sklearn2pmml import PMMLPipelinefrom sklearn2pmml import sklearn2pmmlfro...
2019-06-13 20:27:32
8589
2
原创 金融特征计算平台
金融特征计算平台前段时间一直在做内部的特征平台,这不还有部门发的PR稿-滴滴金服风控升级:上线特征计算平台 已沉淀5000+特征,也算是给自己的交代了,今天主要介绍一下该计算平台,以及沉淀下来的东西。背景金融的核心是风控,风控的核心是数据与特征。如何让数仓人员加工出来的特征可视化,分级管理?在成千上万的特征里,模型人员如何能找到高价值、预测性强的特征?找到了特征,如何方便的提取特征?以上...
2019-04-05 16:59:39
4598
原创 2017年终总结(数据开发,数据分析)-忙乱
2017年终总结(数据开发,数据分析)-忙乱每次都会感慨时间过得真快,这一次尤其明显。不时有网友问到这一年都干嘛了,怎么一篇Blog都没有?的确很汗颜,一呢2017年的确忙碌了很多,精力偏少,深入思考的少了;二是发现可输出高价值的东西偏少,没有提笔欲望。希望2018年能有所改观。来滴滴刚好13个月,2016年12月13号入职的,在这一年多的日子了,工作方向发生了较大的转变,以前自己和Pyt...
2018-01-13 18:42:13
6610
原创 2016年终总结--一个Python程序员的跨界之旅
时间过得真快,感觉15年年终总结刚写完,16年就结束了,看了blog,16年就写了可怜的8篇,对我来说16年还算顺风顺水。真正可能出乎意料的是年底我离开了呆了2年半的龙图游戏,暂时放弃了用了3年半的Python,转向了Java领域和数据仓库,这也算是跨界了吧。。。家庭16年老婆和闺女来北京住了小半年,那段时间是很幸福的一段时光,最终还是不适应北京的天气和雾霭,老婆和闺女逃离了北京,我又恢复了“单身”
2017-01-07 22:50:39
9317
原创 wrk 现代HTTP压测工具,动态构建请求
HTTP压测工具通用的比如apache ab, httpload, 但碰到有些请求是动态构建的,比如需要时间校验,需要做md5加密,这些工具就比较尴尬了。还好有wrk(https://github.com/wg/wrk)你可以使用,可以内嵌lua脚本,通过luajit加速,当然如果需要做分布式压测,可以试试locust(https://github.com/locustio/locust),使用了P
2016-11-04 19:02:25
9311
原创 openresty+consul动态配置更新(服务变更发现)
最近在做数据收集平台,用openresty往kafka里push数据,不管是kafka broker也好,还是一个配置也好,希望做到动态更新,不需要reload openresty。尤其是针对接口调用的认证,配置很少,如果每次都去redis或mysql中去取感觉也没有必要,直接用lua做配置表无疑性能提高不少。再说kafka broker问题,虽说producer会感知到broker的增加(http
2016-10-19 18:26:28
14943
原创 Nginx容器动态流量管理方案-nginx-upsync-module+nginx_upstream_check_module初体验
缘起最近一直在研究日志收集系统的框架,之前在线游戏的数据发送都是由游戏服务器发送的,我来之前一直是rsync传输,也还算稳定。但现在上了单机游戏,只能由手机客户端直接发送,dau比较高,最近很火的<<贪吃蛇>>在海外上线,一个星期dau已经达到千万级别。初步方案,lvs做4层负载均衡,下挂nginx做7层转发,数据直接入kafaka。一直不太喜欢通过reload修改nginx upstream,刚好
2016-10-12 22:14:38
14904
原创 100行代码实现gevent调度模型
昨天心血来潮看了https://github.com/locustio/locust/的源码,经常用ab或者httpload的童鞋可以看下locust的代码,支持分布式运行,通过gevent可以单机开N个协程模仿并发用户,分布式rpc用了zmq的PUSH,PULL模式,不得不说zeromq的确简洁。2年前研究过gevent,那时就想用纯Python模拟一下调度模型,后来也就不了了之了。原理其实和ge
2016-09-29 14:45:25
5870
原创 # mysql CREATE TABLE IF NOT EXISTS metadata lock坑
mysql CREATE TABLE IF NOT EXISTS metadata lock坑今天早上被一声声警报声给吵醒,拿起手机一看,too many processes,proc.num达到了529,我一愣,什么情况,这报警是第一次遇到,还是同时3台服务器都报警。赶快登陆服务器看看,ps一下的确是很多进程,而且都应该早就结束了,于是猜测试mysql的问题,show processlist一看,
2016-07-29 17:57:43
7035
原创 记一次django queryset的缓存优化
缘起看着我们单表记录快7000万行,突破亿行已经指日可待了,于是打算数据库分表,对应用层相对透明的做法就是引入数据库中间件,业界虽然有一些方案,比如阿里,360的,但大部分都是java或c的,最后看向了https://github.com/flike/kingshard,这是golang写的,代码质量还是挺高的,对我的胃口,于是先把kingshard当做代理用起来,发现了以前一直没有发现的问题。dj
2016-07-23 18:52:33
10301
原创 git远程外网地址变内网怎么破(ssh本地端口转发)
git远程外网地址变内网怎么破(ssh本地端口转发)?最近给longtubas上了负载均衡,相对来说我们并发并不高,但希望可用性尽可能高,本来打算用不饱和的机器做个lvs集群的,但IDC说给个额外的公网ip需要申请机器,推荐我们用云自带的负载均衡,倒也省的自己配置,IDC把之前公网ip绑定到负载均衡器上了,这导致我们搭建在服务器上的gitlab不可用了,折腾了一下,使用ssh本地端口转发解决了。当然
2016-05-26 13:04:54
13863
原创 玩转Python让人讨厌的编码问题
Python的编码问题基本是每个新手都会遇到的坎,但只要完全掌握了就跳过了这个坑,万变不离其中,这不最近我也遇到了这个问题,来一起看看吧。事情的起因是review同事做的一个上传功能,看下面一段代码,self.fp是上传的文件句柄fpdata = [line.strip().decode('gbk').encode('utf-8').decode('utf-8') for line in self.
2016-01-31 00:03:08
41212
原创 2015年终总结
拖了好多天,一直想写,却一直没有动笔,赶在15年年会后的第一个周末也是随缘。家庭毕业2年半了,这两年走完了很多人很多年走完的路,结婚,生子。虽说速度有点过快,甚至有时自己都感觉不太真实,但一切都挺美好,生活就是这样不需要刻意的去安排去准备,一切随缘。看着闺女天天无忧无虑的玩耍,总是让我心情大好,同时也让我好奇,小孩子到底在想什么?15年欠了你们很多陪伴,16年我会加倍弥补。工作来龙图游戏1年半了,1
2016-01-24 21:19:45
6927
4
原创 如何面试Python后端工程师?
前一段时间有人在知乎提了http://www.zhihu.com/question/33398583,如何面试Python工程师?我斗胆回答了一下, http://www.zhihu.com/question/33398583/answer/59017861吃午饭的时候我就一直在想这个问题,我觉得重点不是Python而是后端工程师,因为Python只是系统的一部分,linux基础操作要熟吧,sql
2015-11-04 15:07:50
32991
2
原创 Linux内核参数详解
内核参数详解长期更新SYN_RECV服务端收到sys,还未发出syn+ack 1.net.ipv4.tcp_synack_retries 默认值5,linux对应1+2+4+..32=2^6-1=63s2.net.ipv4.tcp_syncookies 应该设置为1,防止SYN Flood。 处在SYN_RECV的TCP连接称为半连接,存储在SYN队列。大量SYN_RECV会导致队列溢出,后
2015-07-30 09:23:20
15965
原创 Effective TCP/IP Programming读书笔记
TCP/IP深入思考TCP/IP这是我读Effective TCP/IP Programming的 读书笔记和思考,以及做的一些实验。强烈建议后端工程师有空读一读这本书,有些细节的确是我们平时没有注意的,读了最好自己动手做一些实验加深理解。fin的含义对端发送fin会导致read()返回,但send()照样可以发送,也就是单纯的fin其实相当于shutdown(SHUT_WR)。当对端应用程序崩溃后
2015-07-26 16:20:31
6425
原创 Linux/Unix系统编程手册--SOCKET章节读书笔记
SOCKET章节读书笔记强烈推荐Linux/Unix系统编程手册,号称超越APUE的神书。backlog含义#include <sys/socket.h>int listen(int socketfd, int backlog)backlog参数限制未决连接(未accept)的数量,在这个数量之内,connect会立刻成功。 Linux上上限为128,定义在udp已连接socketudp soc
2015-07-21 19:19:45
5827
原创 读《《图解TCP-IP》》有感
读《《图解TCP/IP》》有感 TCP/IP最近几天读完《《图解TCP/IP》》,收获蛮多,记得上学时读stevens的《《TCP/IP详解》》时那是一个囫囵吞枣,没认真看也看不下去。等有时间再拜读下《《TCP/IP详解》》吧,估计能有不少共鸣。现在觉得,要想比较透彻理解TCP/IP,还得需要有服务器编程经验,学校应该同时开设《socket编程》》相关课程,最好同一个老师教,可以串讲,不然光理
2015-07-15 21:09:37
9351
原创 golang sortedset 实现(基于redis skiplist)
在游戏中排行榜是很常见的需求,之前一直使用的是redis的sortedset,所以就把
2015-06-25 20:22:25
5582
原创 给golang增加websocket模块
最近打算做一款类似腾讯>的h5游戏,之前打算用skynet来做,所以给skynet增加了websocket模块,https://github.com/Skycrab/skynet_websocket。刚好最近在学习golang,考虑之下打算用golang来实现,说不定过段时间还能整个golang游戏服务器。之前我一直认为Python是我的真爱,但现在真心喜欢golang,也许这也是弥补我静态语言的
2015-06-02 21:04:23
11896
原创 golang 高效低精度定时器实现
golang默认定时器是通过time模块实现的,不管是golang,libev,libevent的定时器都是通过最小堆实现的,通过最小堆实现的定时器加入定时器时间复杂度为O(lgn),在需要大量定时器时效率较低,所以Linux提供了基于时间轮的实现,我们本次提供的定时器实现就是标准的Linux时间轮实现方式。当然,我是把Skynet(https://github.com/cloudwu/skyne
2015-05-31 18:56:57
13911
原创 微信公众平台开发利器-weixin-knife(Python版)
这两天将之前基于微信公众平台的代码重构了下,基础功能以库的方式提供,提供了demo使用的是django,看着之前为赶进度写的代码真的惨不忍睹,所以weixin-knife产生了,正如其名,提供的是必要的功能,而不是完整的应用。weixin-knife可以很方便的处理关注,取关注事件,处理文本消息,回复用户信息,jssdk处理,oauth认证,以及微信支付。github地址:https://gith
2015-05-15 20:17:29
33113
1
原创 给skynet增加websocket模块
最近迷上了skynet,代码质量很高,算开源游戏服务器框架中的佼佼者,不管是Python的firefly,C++/Python的kbengine,C#的scut,还是nodejs的pomelo,skynet在并发上和商业应用都有很大的优势,根据http://thislinux.com/blog/5_panic.html描述,skynet能支持3w在线用户,性能很是给力。 最近做的都是一些
2015-04-23 00:31:32
15054
1
原创 tornado模板源码小析
最近对flask的热情有点下降,对tornado有点高涨。 之前在知乎上回答过一个问题,如何理解 Tornado ?,我的回答如下:1.高性能的网络库,这可以和gevent,twisted,libevent等做对。提供了异步io支持,超时事件处理,在此基础上提供了tcpserver,httpclient,尤其是curlhttpclient,在现有http客户端中肯定排第一。可以用来做爬虫,游戏服务
2014-12-21 18:42:41
4719
原创 ZeroMq LRU算法中间件
前一段时间2014北京PyCon大会吐槽颇多,所以我就到InfoQ上找了找2013的大会视频,对网络射击手游High Noon 2基于Python的服务器架构的视频挺感兴趣,尤其是游戏服务器中的0 downtime,原理他们底层不是原生的socket,而是基于ZeroMq的socket,由于ZeroMq的短线自动重连可以满足游戏服务器的热启动,不需要代码层面的热启动,热更新,当更新代码完成后直接重
2014-12-09 01:30:32
3504
1
原创 微信支付SDK(python版)
最近一段时间一直在搞微信平台开发,最近的v3.37版本微信支付接口变化贼大,所以就看着php的demo移植为python版,为了保持一致,所以接口方法基本都没有变,这样的好处就是不用写demo了,看着微信官方的demo照葫芦画瓢就可以了。我已经把代码放到github了,https://github.com/Skycrab/wzhifuSDK,我主要测试了JsApi调用方式,其它的调用方式并没有测试
2014-11-24 20:52:40
31150
1
原创 gevent: AssertionError: Impossible to call blocking function in the event loop callback
今天在用爬虫时gevent报了AssertionError: Impossible to call blocking function in the event loop callback异常,很奇怪,难道是patch_socket惹的货,因为之前没有使用patch_socket是正常的,代码简化如下import urllibimport geventfrom gevent.monkey im
2014-11-12 15:11:33
5092
原创 Python之美[从菜鸟到高手]--threading daemon线程原理解读
事情的起因是我在看下面一段代码遇到的疑惑,明明是while True,为什么代码没有死循环??class D(threading.Thread): def __init__(self, queue): threading.Thread.__init__(self) self.queue = queue def run(self): w
2014-10-15 00:03:17
21925
原创 Flask 源码阅读笔记
我觉得我已经养成了一个坏习惯,在使用一个框架过程中对它的内部原理非常感兴趣,有时候需要花不少精力才明白,这也导致了学习的缓慢,但换来的是对框架的内部机理的熟悉,正如侯捷所说,源码面前,了无秘密。这也是本文产生的直接原因。一.flask session原理 flask的session是通过客户端的cookie实现的,不同于diango的服务器端实现,flask通过itsdangerous这个苦将se
2014-10-12 12:32:35
28005
原创 Flask request,g,session的实现原理
最近一直在研究Flask,由于gfirefly中提供的Http接口使用了Flask,以前都是写一些游戏中简单的操作,最近涉及到Flask的方面比较多,所以就认真研究了下。对Flask的request context和app context略有心得,所以和小伙伴们分享一下Flask的request原理。 在我们视图中要使用request时只需要from flask import request就可以
2014-09-25 00:57:17
40880
2
原创 [gevent源码分析] c-ares异步DNS请求
c-ares是异步DNS请求库,libcurl,libevent,wireshark都使用了c-ares,gevent1.0版本前使用的是libevent,所以它的DNS请求也是使用c-ares,1.0版本后使用cython封装了c-ares。c-ares官方文档,http://c-ares.haxx.se/docs.html。
2014-09-17 00:43:53
10726
原创 [gevent源码分析] libev cython绑定core.pyx
gevent core就是封装了libev,使用了cython的语法,感兴趣童鞋可以好好研究研究。其实libev是有python的封装pyev(https://pythonhosted.org/pyev/),不过pyev是使用C来写扩展的,代码巨复杂。在看core.pyx代码之前先学习一下core.pyx用到的cython知识。一: cython基础知识1.cdef, def, cpdef的区别
2014-09-13 19:56:27
3424
原创 [gevent源码分析] gevent两架马车-libev和greenlet
本篇将讨论gevent的两架马车-libev和greenlet如何协同工作的。gevent事件驱动底层使用了libev,我们先看看如何单独使用gevent中的事件循环。#coding=utf8import socketimport geventfrom gevent.core import loopdef f(): s, address = sock.accept() p
2014-09-08 00:02:41
11479
1
原创 Python之美[从菜鸟到高手]--NotImplemented小析
今天写代码时无意碰到NotImplemented,我一愣,难道是NotImplementedError的胞弟,所以稍微研究了一下。NotImplemented故名思议,就是“未实现”,一般是用在一些比较算法中的,如class的__eq__,__lt__等,注意NotImplemented并不是异常,所以不能使用raise,当没有实现时应该是return NotImplemented。我们可以看看d
2014-08-17 19:51:18
16052
原创 [gfirefly深入解析]--总体架构及demo讲解
gfirefly是开源的分布式游戏服务器端框架,是firefly的gevent版本,想了解更多关于firefly可参考http://www.oschina.net/question/947559_147468,这是firefly的官网http://firefly.9miao.com/。不过我关注的是gfirefly,主要有两个原因。 1.gfirefly性能更好(官方说法) 2.我对twisted不是很熟,但对gevent比较熟悉,想阅读源码可能gfirefly更合适。
2014-08-12 22:36:07
7019
1
原创 sql注入在线检测(sqlmapapi)
之前一搞渗透的同事问我,sqlmapapi.py是干啥的,我猜很多人都玩过sqlmap,但玩过sqlmapapi的应该比较少,今天就和大家一起看看如何使用以及一些美的地方。说白了,sqlmapapi.py就是提供了一个检查sql注入的接口,我们可以直接通过发送http请求扫描sql注入,获取扫描结果等一系列操作。 下面通过实例演示如何使用:一.启动服务器端服务器后端使用的是bottle,一个
2014-07-22 02:24:37
41568
原创 [Python网络编程]浅析守护进程后台任务的设计与实现
在做基于B/S应用中,经常有需要后台运行任务的需求,最简单比如发送邮件。在一些如防火墙,WAF等项目中,前台只是为了展示内容与各种参数配置,后台守护进程才是重头戏。所以在防火墙配置页面中可能会经常看到调用cgi,但真正做事的一般并不是cgi,比如说执行关机命令,他们的逻辑如下: (ps:上图所说的前台界面包含通常web开发中的后端,不然也没有socket一说) 为什么要这么设计你可能疑惑
2014-06-28 20:33:10
6035
数据科学实战
2018-04-12
图解机器学习
2018-04-12
白话统计学
2018-04-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人