自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

切尔诺贝尔

golang+python

  • 博客(59)
  • 收藏
  • 关注

原创 golang-性能分析pprof

1. 什么是pprof?为什么需要使用pprof?1.1 什么是pprof?用来做性能分析的工具1.2 pprof可以从哪些角度来进行分析CPU Profiling:CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗 CPU 周期时花费时间的位置Memory Profiling:内存分析,在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏Block Profiling:阻塞分析,记录 goroutine

2021-09-21 09:24:06 596

原创 golang-interface(二) 常见问题和底层实现

1. 常见使用问题1.1 var _ I = (*T)(nil) 是什么意思?作用:用简单的语法,检查T这个struct是否实现了I这个接口细化理解:可以把=左右两边分开来看左边:var _ I等价于我们平时用的 var variable type右边:(* T)(nil) 等价于 var variable *T nil示例代码:package mainimport "fmt"type I interface {}type I2 interface { say().

2021-07-12 23:19:52 465 1

原创 golang-map 从常见问题探索map的部分底层实现

文章目录1. 为什么写这样一片文章?2. map的常见问题2.1 map 为什么是无序的?我要有序的map怎么办?2.1.1 首先知道map的底层结构大概是个什么样的,如下图2.1.2 逻辑推论可以做到有序遍历吗?2.1.3 为什么实际遍历的时候不是有序的呢?2.1.4 我要有序的map怎么办?2.2 map 为什么并发读写会报Panic?怎么解决?2.2.1 为什么并发读写会报Panic ?2.2.2 怎么解决并发读写的问题?2.2.3 为什么golang不原生支持map并发?3. map不常见但也值得思

2021-07-11 22:35:53 286 2

原创 grpc-我们为什么要用gRpc?gRpc快在哪里?

文章目录1,什么是grpc2,为什么我们要用grpc3,grpc 的优点是怎么实现的3.1 grpc性能高:protobuf为什么比json性能高?1,什么是protobuf?2,他比json快多少?3,为什么protobuf比json快?3.2 grpc性能高:http2.0为什么比http1.1性能高?1,多路复用2, 头部压缩3, 二进制分帧4, 服务器主动推送资源1,什么是grpcgRpc 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 G

2021-07-11 22:34:07 1356 1

原创 golang-interface(一)为什么要使用interface

文章目录1. interface 是什么?有什么用?1.1 日常生活中的 interface 举例1.2 golang 中interface的定义和用途2. interface-实现多态2.1 示例一:同理于编程最常见的鸭子说法2.2 举例二:golang中的排序3. interface-隐藏函数具体实现3.1 隐藏函数具体实现有什么好处?3.2 示例一:语言角度-golang中的context包3.3 示例二:设计角度-sql4. interface-解耦上下游的依赖4.1 示例一:用户权限校验的实现5.

2021-07-11 22:31:10 644 2

原创 golang - 垃圾回收

文章目录为什么要知道golang垃圾回收机制?golang的垃圾回收历史进程golang v1.3 :标记清除进行垃圾回收golang v1.5 : 三色并发标记清除进行垃圾回收1,为什么要把标记清除优化为三色并发标记?2,三色标记清除法示意图和流程描述3,怎么解决stw时间过长的问题?golang v1.8 : 三色标记清除-混合写屏障具体操作分析参考链接和建议为什么要知道golang垃圾回收机制?优化:工作中可能涉及到需要针对垃圾回收进行优化,所以我们要知其然,才好进行这一块的优化思路:垃圾

2021-07-11 22:29:50 258 2

原创 golang - context包使用示例 以及 底层实现

文章目录1. context 常用方法,以及各种适用于什么场景1.1 context含有的方法1.2 方法适用场景和伪代码示例1.2.1 值传递:比如gin框架中用来传递key,value的值,自己简单示例如下1.2.2 超时控制-timeout: http请求设置超时时间1.2.3, 超时控制-deadline: 比如文件io或者网络io等耗时操作,可以查看剩余的时间是否充足,决定是否进行下一步操作1.2.4. 取消控制: goroutine发送取消信号,保证自己这个逻辑中发散出去的goroutine全部

2021-07-11 22:26:27 363 2

原创 golang-chanel 并发设计 以及使用常见问题

文章目录1. channel 的设计模式CSP是什么?1.1 CSP是什么?对于传统的共享内存有什么好处?1.2 对比 并发模型 Actor 和 CSP2. channel 底层结构是什么样的 ?3. channel使用中遇到过的问题有哪些?怎么解决?3.1 向一个关闭了的channel写入了数据, 导致Panic3.2 一个有缓存的channel已经关闭,还是能够读取到数据3.3 某个函数中对channel进行写入又对channel进行读取,导致复杂度提升4. 参考链接1. channel 的设计模式C

2021-07-11 22:25:09 219 5

原创 mongodb - 分片-实操

文章目录分片:增删查操作python操作新增分片键可能遇到数据全部分布在一个分片上?分片了的某个mongodb数据量突然变多 ?分片:增删查操作查看当前数据库状态:db.colname.stats()可以看到所有索引的状态,可以知道新增分片后对于索引的影响查看分片状态: db.colname.getShardDistribution() #可以查看数据分布Shard shard2 at shard2/10.210.163.122:27030 data : 4.22MiB docs :

2021-04-24 11:29:18 366

原创 mongodb-shard-分片-原理

文章目录0 mongo查询简图(mongos-->config servers --> shard)1 分片是什么?为什么要用分片?2 分片分为几类?3 分片键的限制 和 选择逻辑4 分片后会对查询,写入等造成什么样的影响参考链接:0 mongo查询简图(mongos–>config servers --> shard)实现分片集群时,MongoDB 引入 Config Server 来存储集群的元数据,引入 mongos 作为应用访问的入口,mongos 从 Config S

2021-04-24 11:26:29 628 2

原创 redis-进程锁-分布式锁

文章目录需求背景解决过程1,通过redis的setnx解决2,通过set命令解决3,通过lua脚本参考链接需求背景服务端用的Python + gunicorn部署维护服务端程序时发现某些任务会多次下发导致原因原有程序单纯flask,所以对于数据库操作用了线程锁,但是加上gunicorn之后就没办法保证一致性了解决过程1,用redis做分布式锁,用setnx和expire,但是setnx(set if key not exist)和expire不是原子操作,所以改用set或者lua脚本

2020-08-22 11:57:01 299

原创 es-多字段定制搜索

文章目录elastic index 数据结构需求一简介:多字段搜索,字段权重不同,排序:相关性商品 大于 发布时间具体需求如下(优先级从上到下)搜索语句中的特性搜索语句需求二简介:多字段搜索,字段权重一致,排序:发布时间 大于相关性具体需求如下(优先级从上到下)搜索语句中的关键词特性:搜索语句参考链接elastic index 数据结构mapping = { "mappings": { "black_goods_test_v2": { "properties": {

2020-08-22 11:51:46 693

原创 mysql-查看sql的执行记录

文章目录需求背景解决思路查看正在执行的语句查看历史执行记录需求背景某公司出现内鬼,有人对外出售内部数据。运营同学帮忙想办法定位,咨询是否查询都会留下痕迹解决思路通过sql语句定位到账号的服务器地址再通过jumpserver的记录定位到这个时间点操作这台数据库的人查看正在执行的语句show processlistoutput:+-------+------+-----------------+----------------+---------+------+-------+---

2020-07-02 19:06:26 2546

原创 es-数据导出 elastice_dump 报错 parsing_exception The field [fields] is no longer supported

文章目录需求背景导出语句如下报错如下报错原因解决办法问题解决参考链接需求背景因为原有es负载过高,接口返回速度慢,定位原因如下可去重数据没有去重可清理的脏数据在入库时没有进行合理的过滤没有做历史数据索引清理冷热数据没有分离故需要对原有数据进行去重清洗,同时导出新版本es用python直接导出每次查询有10000上限,尽管可以调整配置文件或者用用游标 scroll解决,但是还是想不要造轮子了故选择用elasticdump导出语句如下elasticdump \ --in

2020-06-30 13:07:39 1211

原创 linux性能-06 内存中的buffer和cache

文章目录buffer 和 cacheswap内存占用问题解决思路buffer 和 cachebuffer:Buffers 是对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会特别大(20MB 左右)。这样,内核就可以把分散的写集中起来,统一优化磁盘的写入,比如可以把多次小的写合并成单次大的写等等。cache:是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据。这样,下次访问这些文件数据时,就可以直接从内存中快速获取,而不需要再次访问缓慢的磁盘。SReclaimable 是 Slab

2020-06-13 17:35:40 228

原创 linux性能-05-linux软中断基础 and 软中断使用率升高处理方法

文章目录中断基础软中断软中断案例分析中断基础中断的定义:中断是系统用来响应硬件设备请求的一种机制,他会打断进程的正常调度和执行,然后调用内核中的终端处理程序来响应设备的请求中断生活示例: 就像你定外卖,如果一直在楼下等外卖小哥,那你就其他啥事做不了。但是如果你和小哥说好了,等他到了你打电话给你。那在他来之前你就可以做其他时间了中断特性:中断时间要短,避免影响正常进程运行调度的影响外卖为例:如果点了两个外卖,第一个外卖打电话给你打了十分钟,那第二个外卖就只能在那一直等了软中断lin

2020-06-13 17:34:44 266

原创 linux性能-04 出现大量中断进程和僵尸进程

文章目录基础知识系统中进程运行状态僵尸进程不可中断进程和僵尸进程的简单定义问题解决思路遇到iowait不断增高,并且cpu占用过高的情况解决 思路僵尸进程问题解决ps 关于iO增高基础知识系统中进程运行状态R 是 Running 或 Runnable 的缩写,表示进程在 CPU 的就绪队列中,正在运行或者正在等待运行。D 是 Disk Sleep 的缩写,也就是不可中断状态睡眠(Uninterruptible Sleep),一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断打断。Z 是

2020-06-05 23:13:32 286

原创 Linux性能-03 cpu使用率过高

文章目录cpu使用率过高解决思路cpu使用率过高解决思路先用top或者pidstat找到高占用的进程,然后解决如果发现没有高占用的进程,那就观察top,看总的runing状态进程和下面展示的runing数量有没有区别如果有区别,对runing的几个进程进行pidstat分析如果发现显示为空,那很有可能就是进程不停的挂掉然后重启pstree 用这个命令找到那几个一直重启的进程的父进程,记录性能事件,查看数据# 记录性能事件,等待大约15秒后按 Ctrl+C 退出$ perf recor

2020-06-05 23:11:09 143

原创 linux性能-02 怎么理解cpu上下文切换?

文章目录基础知识cpu上下文切换进程上下文切换线程上下文切换中断上下文切换分析系统上下文切换的情况查看系统上下文切换情况查看单个进程的上下文切换状态如果发现vmstat 的 cs 和 pidstata的 cswch 数据对不上基础知识每个进程执行前,cpu需要知道任务从哪里开始加载,又从哪里开始运行,也就是说需要系统需要帮他保存这俩个值(cpu寄存器 and 程序计数器)cpu 寄存器: cpu内置的容量小,但是速度极快的内存程序寄存器: 用来存储cpu正在执行的指令地址,或者下一条指令位置由

2020-05-25 13:11:26 248

原创 linux性能-01 对于系统平均负载的理解

文章目录1-平均负载What is load average ?理解平均负载和cpu使用率之间的区别平均负载到了多少要开始警惕?如果遇到平均负载过高的情况,我们要怎么处理?1-平均负载当发现机器cpu告警或者网络IO告警的时候,一般情况下会用uptime(也可以htop)16:05:16 up 172 days, 15:29, 1 user, load average: 0.11, 0.27, 0.371 user : 当前有多少用户d0.11, 0.27, 0.37 : 分别是最近1,

2020-05-24 16:44:49 177

原创 peewee mysql驱动无法进行全文索引搜索问题定位解决

文章目录遇到的问题关于peewee全文搜索问题问题触发解决再次遇到问题解决问题1, 尝试自己定义一个方法解决,看到了别人贴的这个方法,但是没有思路2, 在github上找到实现的MATCH方法如下遇到的问题在Join数据的时候,如果对数据直接遍历,那么会丢失join中其他表的数据,如果加上dicts()则不会关于peewee全文搜索问题问题触发做了一个商品搜索页面,由于前任全部是用的m...

2020-02-26 17:39:47 320

原创 flask-请求上下文-应用上下文

主体思想通用每个请求会生成一个请求上下文,一个应用上下文(flask0.9之后)对于单应用单请求来说,使用“请求上下文”确实就可以在0.1版本中,current_app是对_request_ctx_stack.top.app(请求上下文)的引用,而在0.9版本中current_app是对_app_ctx_stack.top.app(应用上下文)的引用。请求上下文主要功能:记录请求...

2020-02-08 20:20:39 168

原创 flask-gunicorn 报错:Worker failed to boot

报错如下:Traceback (most recent call last): File "/data/server/test_server/venv/lib/python3.6/site-packages/gunicorn/arbiter.py", line 210, in run self.sleep() File "/data/server/test_server/venv...

2020-02-08 20:16:42 2792

原创 nginx-下载记录,权限校验

背景公司对完有开放下载服务,需要设置IP白名单,之前通过直接在nginx里面设置ip白名单缺点:1,无法动态修改 2,无法进行日志记录,无法进行复杂的权限校验优点:1,开箱即用改进还是通过nginx,不过是通过nginx x-accel-redirect 参数对文件下载进行处理先通过nginx把下载请求转到web后台后台通过对url里面的参数进行解密,然后进行权限校验,...

2020-02-08 20:13:27 555

原创 python 继承引用导致对象无法释放

1,scp传输数据失败涉及知识ssh key设置A访问B机器,需要将A的公钥加到B机器的2,文件数打开过多找到进程Id对于此进程进行lsof -p PID | wc -l 查看打开了多少文件ulimit -a 查看本机限制打开多少文件3,跟进为啥文件数打开过多初步判定是因为自定义了 exit 魔法方法,导致继承父类的self.logger没有被释放然后每次请求会...

2020-02-08 20:11:05 184

原创 微信公众号手机端无法打开,但是微信官方调试工具和电脑端可以打开

问题运营反馈测试公众号的推送的内容无法打开解决思路基础数据一致首先通过后台关联到运营同学所收到推送内容的团队,保证双方权限一致访问尝试尝试用手机进行访问推送内容,发现无法访问尝试用微信pc端进行访问,访问正常尝试用微信官方的调试工具进行访问,访问正常定位问题用微信官方调试工具找到页面所涉及的接口,定位 到相应服务,并加上了log再次访问,发现用手机访问时,后端没...

2020-02-08 20:08:23 3214

原创 redis-布隆过滤器 和 hyperLogLog --》 去重操作相关

HyperLogLog应用场景: 比如做单网站今日UV统计的时候,把每个用户都加到hyperloglog里面,最后直接统计hpyerloglog的数量就好了特点 : 1,不会记录元素的内容 2,单个key提供去重计数统计,但是会有误差优点 : 12 KB 内存,就可以计算接近 2^64 个不同元素缺点 : 标准误差是:0.81%实现原理:数学概率论布隆过滤器应用场景...

2019-11-12 19:25:47 285

原创 redis-限流相关-zset-Redis-Cell

简单的窗口限流操作,通过zset来实现步骤1,单个用户uid + 某个行为 作为redis中的key2, 用毫秒时间戳做zset中的key和value3,每次请求过来计算当前时间到往前推算n分钟/秒的请求4,删除zset中关于n分钟前的数据优点1, 实现简单缺点2, 如果限制次数非常大,那么会消耗大量的储存空间python 代码示例def record...

2019-11-12 19:24:56 242

原创 redis-位图bitmap

起因某某次去面试,和面试官聊得开心了,就说了《编程珠玑》,里面有一个用二进制来计算的案例案例如下:给定一个最多包含m=40亿个随机排列的n=32位整数的顺序文件,找出一个不在文件中的32位整数。在内存足够的情况下如何解决该问题?如果有几个外部的“临时文件“可用,但是仅有几百字节的内存,又该如何处理?解决方案:如果内存足够,把这批数据全部依次读出,数字是多少就标对应的二进制位如...

2019-11-12 19:18:45 231

原创 nginx-post请求被301到get请求,且丢失请求数据,nginx 配置末尾是否携带斜杠

nginx-post请求被301到get请求,且丢失请求数据问题如下当nginx配置里location有最后一个斜杠如果并且访问url不带/,nginx会自动进行301跳转到带斜杠的url当nginx配置里location没有最后一个斜杠url最后不加/,则是正常访问url加了,则post请求会被重定向为get请求(如果目标路由有同时监听/test/和/test,则不...

2019-11-08 09:55:30 4714

原创 代码整洁之道-coding-Replace Method with Method Object

降低模块复杂度抽取函数:独立业务代码封装为函数,通过函数名诠释代码作用,做到见名知意合并重复:不同条件的分支,有相似的处理,可以提炼出分支以外,或者封装为函数移除控制标记:有控制标签作为条件的,使用break/return取代设计模式:对于同一层的if/else, - switch/case分支过多,可考虑采用状态机或策略模式、表驱动法(Map查找)单一职责:一个函数应该只实现一个功能...

2019-11-01 20:01:33 99

原创 flask-context-请求上下文-应用上下文-

主体思想通用每个请求会生成一个请求上下文,一个应用上下文(flask0.9之后)对于单应用单请求来说,使用“请求上下文”确实就可以在0.1版本中,current_app是对_request_ctx_stack.top.app(请求上下文)的引用,而在0.9版本中current_app是对_app_ctx_stack.top.app(应用上下文)的引用。请求上下文主要功能:记录请求...

2019-11-01 19:55:57 145

原创 nginx( x-accel-redirect)-下载记录,权限校验,log记录

背景公司对完有开放下载服务,需要设置IP白名单,之前通过直接在nginx里面设置ip白名单缺点:1,无法动态修改 2,无法进行日志记录,无法进行复杂的权限校验优点:1,开箱即用改进还是通过nginx,不过是通过nginx x-accel-redirect 参数对文件下载进行处理先通过nginx把下载请求转到web后台后台通过对url里面的参数进行解密,然后进行权限校验,...

2019-11-01 19:53:15 642

原创 golang-context 上下文

context 作用context 主要用来在 goroutine 之间传递上下文信息,包括:取消信号、超时时间、截止时间、k-v 等Context 使用原则不要将 Context 放入结构体,Context应该作为第一个参数传入,命名为ctx。即使函数允许,也不要传入nil的 Context。如果不知道用哪种Context,可以使用context.TODO()。使用conte...

2019-10-12 20:15:55 502

原创 elasticsearch-es查询并清理重复数据

需求背景由于数据入库时发生一些错误,导致录入重复数据到es内第一种办法根据单个字段进行查询重复数据POST index/type/_search{ "size": 10, "aggs": { "duplicateCount": { "terms": { "field": "link", "min_doc_count": 10...

2019-10-12 20:13:56 18971 13

原创 流式更新-滑动窗口---python实现

背景需要及时更新数据,且这批数据是需要进行打分计算的,打分规则如下 { "interval": 3, "score": 60 }, { "interval": 6,# 数据超过六小时未更新则降为50分 "score": 60 }, { "inte...

2019-10-12 20:09:55 1040

原创 python使用celery 报错 : OSError handle is closed OSError handle is closed

文章目录报错堆栈信息如下定位问题解决方案反思报错堆栈信息如下[2019-09-30 11:19:00,756: ERROR/ForkPoolWorker-85] Thread 'ResultHandler' crashed: OSError('handle is closed',)Traceback (most recent call last): File "/usr/lib/pyth...

2019-09-30 15:10:09 2053

原创 mysql-聚簇索引/非聚簇索引/覆盖索引

myisam 和 innodb第一个重大区别是InnoDB的数据文件本身就是索引文件。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。myisam的主键索引,索引着数据...

2019-09-23 19:49:17 597

原创 mysql-数据表分区操作(range,list,hash,key)

问题场景某数据上传接口经常timeout,发现是因为查询的某消费记录数据库,起初定制时没有按照月份进行分表操作,而是按照客户手机尾号进行了分表,因此固定为9个定位问题原因由于是历史数据,所以单表数据达到千万级别,导致数据过多且因为设置了unique id,导致插入过慢建议不由mysql本身确定唯一,而是在代码中生成唯一值去做判断(可参考-唯一索引和自建索引的区别)建议用批量插入...

2019-09-19 19:07:24 486

原创 mysql 批量插入且更新报错TypeError not all arguments converted during string formatting

遇到问题某一接口为数据接收接口,需要大量插入数据,但是同事反馈接口返回速度过慢定位问题尝试在后台记录日志,当一次上传1000条数据时,插入到mysql会非常慢,确定瓶颈就在mysql了尝试解决由一条一条插入,改为批量插入(速度提升十倍以上)拆分原来的表(速度提升)去除原来的唯一索引,在阿里云查看单表可以节省三分之一的内存把insert update 语句改为 insert...

2019-09-19 19:03:34 4104

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除