阿小信大人的头像
Where there is a Python, there is a way. 阿小信大人

Traefik 简介以及中间件插件开发2021-10-11 21:45

### Traefik 简介

Traefik是整个系统的网关大门,负责拦截并路由每个传入的请求,它不需要像Nginx这类反向代理一样需要一个配置文件来配置所有可能路由,而是实时的通过服务发现来自动更新路由规则,由服务自己告诉它该服务负责处理哪些请求。

Traefik的架构设计:

![](https://doc.traefik.io/traefik/assets/img/architecture-overview.png)

#### 服务配置自动发现原理

Traefik的配置分为静态配置和动态配置,静态配置是Traefik实例的启动配置;动态配置由Provider自

......
#Golang#   评论[0]阅读全文[79]

《投资最重要的事》笔记2021-08-27 21:59

图片

### 关于作者

![图片](https://user-images.githubusercontent.com/2876405/131099559-a301279b-f2bc-4088-8748-b0dfc8fb8d1d.png)

霍华德·马克斯 (英语:Howard Stanley Marks, 1946年4月23日-)是一位美国投资者,企业家和作家。橡树资本管理创办人。

1946年,霍华德·马克斯出生于美国纽约的一个犹太裔家庭,在皇后区长大。尽管他是犹太家族,但却以基督科学家模式培养成长。

1967年,霍华德毕业于宾夕法尼亚大学沃顿商学院金融和日本研究专业[

......
#个人日记#   评论[0]阅读全文[1534]

es优化方案记录2021-08-05 15:47

image

#### 节点负载不均衡

##### 现象:

每个索引使用默认的1个分片,1个副本,在3节点集群出现__负载不均衡__现象,两个节点cpu负载很高,另外一个节点cpu负载更低。

##### 原因:
分片+副本一共2个,只能被分散到两个节点上,查询请求只能命中这两个节点。

##### 解决方案:

Es 创建索引后无法动态修改分片数,但是可以动态修改副本数,增加副本数可以分散查询请求。在不改变分片数的情况下,通过调整分片的副本数,使分片副本数+原始分片数的总数为节点数基数或倍数,以达到节点负载均衡,将索引的分片副本数增加到2,加上分片自身,一共3个,刚好均分给3个节

......
#数据库#   #elk 评论[0]阅读全文[283]

使用Github Actions自动部署Golang应用到VPS服务器2021-06-19 15:01

image

使用GitHub Actions可以在你提交代码后自动将最新代码编译发布部署到你的VPS服务器,这里记录一下配置步骤。

服务没有使用 Docker 部署,直接通过supervisord启动二进制文件,期望每次提交代码后自动完成编译部署发布上线,通过Github Actions可以实现自动化。

## 部署步骤说明:
0. 提交代码到主分支
1. Github拉取最新代码跑单元测试后编译二进制文件
2. scp 二进制文件到VPS服务器
3. ssh 在VPS上远程执行服务重启命令

## 创建SSH KEY

由于是使用 ssh 进行部署,需要让github能登录服务

......
#Golang#   评论[0]阅读全文[802]

新网站 http://x-stock.axiaoxin.com 上线2021-06-16 11:00

X-STOCK 网站使用Golang实现,财报分析,股票检测,基本面选股,基金检测,基金筛选,4433法则,基金持仓相似度检测

欢迎访问

还有很多功能想做,后续会持续迭代(周末有空闲时间的话)

关于网站

X-STOCK(v1.2.19) 网站数据来源于东方财富网、亿牛网、新浪财经、天天基金,主要用于按财务指标对股票和基金进行检测筛选,快速找到可参考的优质投资标的。

本站不涉及任何投资推荐!检测筛选出的结果仅为参考,并非推荐,请勿以此为投资依据!不对投资者构成任何投资建议!

免责声明:股市有风险,入市需谨慎!
X-STOCK 解决什么问题?

X-S

......
#WEB/前端#   评论[0]阅读全文[513]

Golang 并发 append slice 时的并发安全问题总结2021-05-13 18:53

## 背景

导出数据库中的数据,由于数据量巨大且查询复杂,完成导出的时间很长,因此通过将并发查询然后将结果合并到一起。

在导出的数据量只有30多万时,导出的记录数和sql count出的数量一致;
但当导出超过数据量超过百万时,导出的数据量变少了。

此时意识到是忽略了并发问题,将 append 操作加上锁后验证一切正常。

## 代码示例

通常对 map 的并发读写问题很容易发现,因为一旦并发的更新一个 map 时,golang 会 panic ,单纯的并发读没有问题。
对 slice 进行 append 时也有并发安全问题,但是由于不会 panic 因此很

......
#Golang#   评论[0]阅读全文[977]

实现自定义的 gin Logger 中间件2021-05-13 18:50

image

## gin 的中间件原理解析
在 gin 中,中间件是一系列 `gin.HandlerFunc`链,它的函数签名类型和我们业务中写的URL对应的 handler 是一样的,都是`gin.HandlerFunc`。

gin 创建实例时返回一个 `Engine`,该`Engine`包含一个`RouterGroup`,而`RouterGroup`是一个`IRoutes`接口的实现,实现了路由注册的各种方法。

使用 `engine.Use` 方法可以全局注册多个中间件,也可以在注册URL handler 时局部添加中间件。

gin 在处理请求时,按顺序调用这条`gin.Handl

......
#Golang#   评论[0]阅读全文[1033]

goroutine 中的 panic 处理2021-05-13 18:42

在 go 的函数中使用 defer + recover 不能捕获在当前函数里面新开的 goroutine 的 panic。
在新的 goroutine 里面 panic 了即使上层有 recover 也会导致进程退出。

原因在于 panic 仅保证当前 goroutine 下的 defer 都会被调到,但不保证其他协程的defer也会调到。
panic 发生时会先处理完当前goroutine已经defer挂上去的任务,执行完毕后再退出整个程序(注意是退出进程而不只是协程)。

因此在开新的 goroutine 的时候,一定要要注意这里,不要以为最外层有了 recover 程序就一

......
#Golang#   评论[0]阅读全文[823]