- 博客(85)
- 收藏
- 关注
原创 golang jsoniter extension 处理动态字段
jsoniter 包提供了比较完善的定制能力,通过例子可以感受一下扩展性。后续大家可以根据业务需求发掘更多的能力。
2023-04-05 15:40:48
672
原创 AI 边缘计算芯片选型
最近在倒腾边缘计算的主板,看了一波资料,大约有以下选型芯片算力库Snapdragon 86515TOPStfSnapdragon 88826TOPStfAmlogic A311D5TOPSpaddle,厂商SDKAmlogic C308X4TOPSpaddle,厂商SDK地平线旭日35TOPS厂商SDK比特大陆 BM168417.2TOPSpaddle...
2022-02-20 21:14:55
1561
原创 k8s liveness与突发流量导致的雪崩
前阵子新上线的一个服务,是一个 NodeJS HTTP API 应用, 是一个 CPU 密集型应用,一旦请求量过高,就无法接受新的连接。与此同时,pod 配置了 liveness probe,每隔15s 会调用一次 localhost 的 心跳 API, 心跳 API 与业务都在一个端口。应用有配置 HPA。线上跑了一阵,没有发现什么问题,会正常扩容。此时,问题就来了,由于有一阵较大的突发流量,直接把所有 pod CPU 打满,打满的时候,由于 liveness probe 失败,导致部分 pod 被频
2021-12-29 00:29:46
623
原创 http status code 404 使用陷阱
背景最近遇到一个问题,业务逻辑里面需要检查资源是否存在。一般来说,如果返回码是 404, 就可以认为资源不存在,然后做出一些动作但是,这个 404 不一定能反映真实情况依赖链路由于我们的 API 服务一般会部署在各种负载均衡或者网关之后,传输链路可能是这样的Created with Raphaël 2.3.0UserCloudflareGatewayAPI service由于依赖链路过长,只要有一个环节异常,Cloudflare 与 Gateway 其实都有可能存在改写 status code
2021-11-19 22:36:14
6987
原创 DeepTables 使用
DeepTables 相关链接API: https://deeptables.readthedocs.io/en/latest/Repo:https://github.com/DataCanvasIO/DeepTableshttps://github.com/DataCanvasIO/Hypernets最近看到开源的 DeepTables, 试用了一下, DeepTables repo 的 example 做得比较好,他们的架构图DeepTables 可以处理结构化数据这一部分,因为
2021-10-31 17:51:38
713
原创 线性规划的影子价格(shadow price)|对偶价格(dual price) 与 gurobi 实现
在列生成的问题中,大量用到 dual price, 有一些文章会翻译为影子价格,有一些则是对偶价格,叫知乎有一个写得比较好的文章什么是影子价格?—— 线性规划的对偶解,及拉格朗日乘数模型为:下面是 gurobi 的实现, gurobi 像现在可以直接 pip 安装,有一个非商业的 licensepip install gurobipyfrom gurobipy import *# Create a new modelm = Model("test1")# Create variable
2021-10-31 17:10:42
6747
原创 golang 实现 middleware(非 web 项目)
背景在开发中,如果需要封装一些组件,但是不想通过 before&after 这类切面来操作,就需要有 middleware 的支撑。其实middleware 的设计非常简单,但是网上很多都是讲 web 的,好像没有非 web 项目的,这里就写一个吧middleware与 before&after 这种场景不太一样,middleware 希望知道每个操作前后带来的变化,“视野”会更完整下面是 middleware 的流程demo:package mainimport ( "
2021-06-14 17:53:53
473
原创 golang protobuf 枚举值 json 解析
现有 protobuf 数据结构enum Phase { Pending = 1; Running = 0;}message Status { Phase status = 1;}实际生成代码,对应的类型type Phase int32const ( Phase_Pending Phase = 0 Phase_Running Phase = 1}但我们希望解析的数据如下{ "status":"Pending"}常规的 encoding/js
2021-06-03 00:44:14
2397
原创 golang timer 性能消耗
由于 golang 的 timer 是高精度定时器,所以在使用 timer 的时候,需要注意精度与性能的平衡package mainimport ( "time")func main() { ticker := time.NewTicker(1 * time.Millisecond) i := 0 for range ticker.C { i++ }}...
2021-05-04 20:17:08
1388
原创 My Philosophy on Alerting 的告警规则思考
参考文章My Philosophy on Alerting编写报警规则时,需要考虑的原则,参考了上述文章哪些问题需要告警对故障有足够清晰的认知,有合理的优先级区分标准研发资源总是有限的,尽可能保证高优先级的告警被快速相应过度监控比监控不足更加棘手,应移除告警噪音怎样描述告警尝试给问题分类,使问题能够被归集,而且有快速的排查方向可用性与基本功能问题延迟正确性(数据的完整性、时效性和持久性)其它功能问题合理描述告警的内容,更全面,更可靠地描述问题尝试给出问题的出现原
2021-02-16 22:53:07
208
原创 json log自动展开嵌套字段(expand nested fields)
背景目前日志系统基本是走json log,一般公有云的log管理页面,都会有自动展开json log的功能。在开发过程中,本地看json形式的日志有点麻烦,可读性不高。举个例子,有一行日志是这样的{"level":"info","ts":1602161606.829082,"caller":"zap_test/main.go:44","msg":"embed","a":{"b":"bbb"},"json-str":"{\"Name\":\"a\",\"Age\":2}","stack":"/opt/g
2020-10-08 23:02:50
512
原创 适用cloudfunction/lambda的场景
cloudfunction和lambda分别是gcp和aws的serverless产品,因为两者都使用过,就写一下使用感想。serverless是什么serverless是公有云厂商提供的一种faas产品,开发者只需要提供函数function,就可以使得这个函数拥有对外服务的能力。gcp/aws/tencent/ali cloud都有提供对应的解决方案。cloudfunction和lambda使用上有差异,下面主要讨论cloudfunctioncloudfunction目前支持的数据源有:http/
2020-10-06 19:58:45
897
原创 tidb sql parser判断sql是否只读
tidb需要解析sql,生成执行计划,用到parser工具 https://github.com/pingcap/parser。一般上,SQL 语言通常按照功能划分成以下的 4 个部分:DDL (Data Definition Language):数据定义语言,用来定义数据库对象,包括库、表、视图和索引等。DML (Data Manipulation Language):数据操作语言,用来操作和业务相关的记录。DQL (Data Query Language):数据查询语言,用来查询经过条件筛选的
2020-08-16 22:22:25
814
原创 serverless/serverless 部署工具的一点思考
https://github.com/serverless/serverless 是github上star比较多的一个用于部署serverless应用的工具,对于新手来说有一定的帮助。下文简称serverless框架优点归集了几个公有云厂商(gcp cloudfunction/aws lambda/腾讯云 serverless)的serverless服务特性,并做了抽象。通过建立一份配置,即可以快速把应用部署到不同的平台。天然问题这个项目主要贡献者是腾讯,对于腾讯云的serverless应用支持比较
2020-08-01 08:45:08
564
原创 minio存储之纠删码(Erasure Code)
纠删码的原理介绍可以参考:https://www.jianshu.com/p/4abf65ad03af一般上我们如果要保证数据高可用,主流的有两种策略:多副本纠删码副本(Replication)策略:副本,实打实的复制,常见的是三副本,意味着现实世界有三份一样的数据。代价稍高,偏计算类的场景基本都会用该策略,比如虚拟机VM、数据库。如果一个副本挂了,马上切到另外一个,漂移时间非常短。n副本存储效率永远是1/n1/n1/n。纠删码(Erasure Code)策略:纠删码,会把数据进行切分,
2020-07-30 23:39:57
4873
原创 centos7 mongodb 4.2 复制集+开启auth
机器规划:192.168.1.23 主节点192.168.1.24 从节点192.168.1.25 仲裁节点, 不存储数据首先下载安装包:https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.2/x86_64/RPMS/mongodb-org-server-4.2.8-1.el7.x86_64.rpm三台机器都执行安装命令rpm -ivh mongodb-org-server-4.2.8-1.el7.x86_64.rpmsystemctl e
2020-06-22 16:45:03
824
原创 MKL blas golang 对比 gonum
这里对比的对象主要是gonum的gonum.org/v1/gonum/floats包,这个包做科学运算还是比较快的,里面直接调汇编代码,比go写的原生计算代码要高效一些。首先,需要安装mkl,下载地址然后安装gosl 这个包 github.com/cpmech/goslblas里面,第一层是vector与vector的操作,验证一个点乘算子package mainimport ( "fmt" "github.com/cpmech/gosl/la/mkl" "gonum.org/v1/gon
2020-06-08 20:55:51
1349
原创 推荐算法: 百度mobius
论文地址:http://research.baidu.com/Public/uploads/5d12eca098d40.pdf广告不同阶段优化目标不一致普通用户看到的三个阶段,曝光-点击-转化背后是一套复杂的召回排序系统召回阶段:建立query,可以是用户的搜索信息,也可以是广告位的属性或者上下文信息,这个阶段主要考虑相关性排序:根据召回物料估算CTR论文给了一个例子,互联网长尾流量(普通用户比较少关注的物品)中,搜索白玫瑰(white house),由于奔驰与特斯拉是头部流量,那么天然具有
2020-06-06 01:21:55
1428
原创 docker run执行多个命令
docker run -it --cpus=4 --rm ubuntu:latest bash -c “mkdir input/ output/ && tree /opt”需要把多个命令用&&连接,然后双引号包裹
2020-06-02 14:00:11
7253
原创 golang context 适用场景与源码导读
以cancelContext 为例先看使用package mainimport ( "context" "fmt" "time")func main() { back := context.Background() // 占位 child1, cancel1 := context.WithCancel(back) child1_1, _ := context.WithCancel(child1) child1_2, cancel1_2 := context.WithCanc
2020-05-29 00:59:27
288
原创 TIDB: transaction too large, len:300001
批量事务插入报错 transaction too large, len:300001issue上搜索:https://github.com/pingcap/docs-cn/issues/156问题大概如下:TiDB 对单个事务的大小有限制,这层限制是在 KV 层面,有如下三个限制:单条 KV entry 不超过 6MBKV entry 的总条数不超过 30wKV entry 的总大小不超过 100MB简单来说一行数据会映射为一个 KV entry,每多一个索引,也会增加一个 KV entr
2020-05-21 08:51:13
1505
原创 ML调度服务之kube-batch
gang scheduler:翻译应该是,群调度。也就是一个调度单元以一个群(多个pod)为单元,当所有pod同时成功,就是成功的关于k8s scheduler的功能实现,可以参考知乎专栏https://zhuanlan.zhihu.com/p/101908480,里面是以1.16版本作为参考的,质量比较高。从pod到multi pod的调度pod是k8s的最小调度单元,但是,群调度需要在...
2020-04-17 00:15:37
903
原创 互联网广告CTR简介
在互联网广告领域,CTR可以反映一个投放平台的投放策略、算法水平、流量的质量。CTR是什么CTR是click-through-rate 的缩写,也就是点击率。相关的概念还有一个叫CVR,Conversion Rate。它们的关系如下图点击转化曝光CTRCVR关键词说明:曝光:一个广告在你的屏幕出现了,就算一次曝光。文本或者图片类的广告基本可以这样理解,对于视频形式的广告,不同厂商的定...
2020-04-11 22:10:27
1880
原创 istio 1.5使用kubectl创建资源,istio-token not found
目录问题解决办法问题由于内网环境隔离的问题,需要改动部分部署参数。所以使用istioctl生成了manifest文件,但是部署异常,describe pod之后,发现有一些资源例如istio-token not found,去github搜了一下issue,看到好几个issue都有提及相关的问题https://github.com/istio/istio/issues/21968https...
2020-04-11 14:26:56
1024
原创 linux flamegraph火焰图使用
perf可以忽略语言或者一些开发框架,从os的角度看到进程的cpu时间都耗费在哪些调用栈上。perf与火焰图搭配使用,提供一个比较友好的交互方式,来观察调用栈的耗时验证环境是ubuntu环境安装安装perf$ sudo apt install linux-tools-common# 装完使用perf的时候,提示还需要安装其它包$ sudo apt install linux-tool...
2020-04-10 23:53:29
2114
原创 paddle ctr利器DeepFM
(这篇文章先开个头20200408,立个flag,慢慢补全)目录为什么用paddle做ctr预估熟悉数据为什么百度单独生成了一份feat_id 字典?数据处理流程paddle dataset reader评价指标AUC与log_loss混淆矩阵到AUC什么样的AUC是好的AUC组网训练训练环境为什么用paddle做ctr预估因为之前待过广告公司,所以对ctr这块一直有关注。paddle官方...
2020-04-08 01:48:09
1065
原创 paddle 线性回归LR以及VisualDL使用
很久之前用tensorflow 写过LR,现在用paddle来实现一遍。由于很多文章都是输出一个简单结果,缺乏对整个过程的数据可视化,这里使用paddle提供的VisualDL作为结果的可视化。VisualDL使用VisualDL的代码仓地址是 https://github.com/PaddlePaddle/VisualDL/这里摘录里面的一个scalar(折线图)例子import ra...
2020-04-08 01:17:37
752
原创 nvidia并行计算库thrust测试
nvidia thrust库的简介:Thrust is a C++ parallel programming library which resembles the C++ Standard Library.github地址: https://github.com/thrust/thrustc++ 并行库,在cuda环境中默认安装了。在实际业务中,比较有用的是sort和reduce(sum...
2020-04-06 00:19:05
1343
原创 时间序列预测库 prophet R版本 docker镜像打包
由于项目有用到prophet,需要把prophet打包到docker镜像。docker hub上没有现成可用的prophet镜像,所以只能使用当时试过以下几种方案ubuntu基础镜像+R环境+在线安装prophetubuntu基础镜像+R环境 可以跑起来,但是调用RScript在线安装prophet的时候失败R基础镜像+在线安装prophetR基础镜像用的是 https://hub.d...
2020-04-05 23:10:11
313
原创 golang调用paddle的infer c api
百度的paddlepaddle有go版本的推理接口,通过cgo调用paddle c的推理库,在实际的api服务中,用go做推理服务器是有优势的。开发环境ubuntu 18.04paddle 1.7.1cuda 10.0cudnn7go 1.12python 3.7编译paddlepaddle gpu版本的c库paddle默认提供的是c++版本的推理库,参考 https://www...
2020-04-04 23:05:41
2224
1
原创 golang gc优化
目录gc 原理对象分配在堆还是栈?怎么评价gc结果好坏?有用的技巧?gc 原理可以参考几篇文章golang gc原理,比较容易讲清楚三色标记https://making.pusher.com/golangs-real-time-gc-in-theory-and-practice/比较详细的gc过程 golang垃圾回收浅析回顾一下基本的问题:3. gc回收什么内存?目标是回收堆...
2020-03-30 00:42:27
1529
原创 golang 子数组最大乘积
leetcode题目152输入 [2,3,-2,4] 返回 6输入 [-2,0,-1] 返回 0题目分析: 动态规划中等难度的题目,最大乘积具有后无效性由于乘法具有负负得正的特性,所以需要记录当前最大与当前最小值,这样可以确保遇到负数的时候及时翻转结果。记数组为a,最大乘积为imax,上一个最大乘积为preMax, 上一个最小乘积为preMin, 状态转移方程imax[i]=max...
2020-03-29 19:06:27
292
原创 golang etcd选主实验
分布式部署应用的时候,有时候希望由一个master角色去处理一些特殊的业务,这个时候就要用到选主。不同于分布式锁,选主是为了选出一个在短时间内有固定角色的节点。而分布式锁一般用于多个进程实时竞争资源的场景,而且一般是上锁完要尽快释放的,在时间上体现为一把锁可以快速在工作节点中飘逸。github.com/coreos/etcd/clientv3 的客户端可以提供选主的功能,单元测试有选主以及分布式...
2020-03-28 00:57:53
1959
原创 kong ingress-controller 更新nginx的配置
一个k8s 集群采用的是kong作为ingress controller,查日志的时候发现kong有一个warninga client request body is buffered to a temporary file问题分析通过kong的admin api可以看到,与之相关的是nginx的一个配置client_body_buffer_size: 8k这个配置的意思是:如果请求的b...
2020-03-25 10:07:08
2323
原创 推荐系统:ann算法之ngt
在推荐或者搜索场景中,高质量的召回都是很有必要的,有时候ann搜索算法(Approximate Nearest Neighbor)可以帮助我们实现这一个功能ngt是yahoo日本团队基于graph和tree做的的ann搜索工具,地址:https://github.com/yahoojapan/NGT它实现了onng/pnng的算法,对应的论文onng: https://arxiv.org/a...
2020-03-22 22:54:18
3133
原创 golang tcp握手/挥手实验、CLOSE_WAIT优化
书本上常说的三次握手,四次挥手下图是其它博文摘录的golang 的tcp编程是比较简单的,但是如果抓包,会发现很多情况下(尤其是显式的复杂网络环境,很难复现四次挥手的报文)实验一 复现三次握手四次挥手tcp serverpackage mainimport ( "fmt" "io" "net")func main() { addr, err := net.Resol...
2020-03-15 16:22:16
2464
原创 golang二叉树翻转(递归与非递归实现)
二叉树翻转树的初始化可以粗暴一些。如果要看一棵比较简单的树的结构,可以用json包序列化打印出来看非递归实现package mainimport ( "encoding/json" "fmt" "github.com/eapache/queue")type Node struct { Key int Left *Node Right *Node}func...
2020-03-11 23:19:04
479
原创 golang有向无环图(dag)以及判断是否有环
有向无环图邻接表实现package mainimport ( "fmt" "github.com/eapache/queue")// 邻接表type Vertex struct { Key string Parents []*Vertex Children []*Vertex Value interface{}}type DAG struct {...
2020-03-07 22:03:28
5631
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人