04 2020 档案

Ceph剖析:数据分布之CRUSH算法与一致性Hash
摘要:数据分布是分布式存储系统的一个重要部分,数据分布算法至少要考虑以下三个因素: 故障域隔离。同份数据的不同副本分布在不同的故障域,降低数据损坏的风险; 负载均衡。数据能够均匀地分布在磁盘容量不等的存储节点,避免部分节点空闲部分节点超载,从而影响系统性能; 控制节点加入离开时引起的数据迁移量。当节点离开 阅读全文

posted @ 2020-04-28 11:43 ExplorerMan 阅读(493) 评论(0) 推荐(0)

如何用Github钩子做自动部署
摘要:最近机缘巧合的购置了域名和服务器,不用实在是浪费,再加上一直没有属于自己的个人网站,所以打算用hexo在服务器上玩一下,这样也就不用再纠结用Github pages还是Gitee pages了。当然,今天的主题并不是博客搭建,而是如何利用Github的钩子,将博客代码部署到服务器上。 毕竟Githu 阅读全文

posted @ 2020-04-26 15:27 ExplorerMan 阅读(391) 评论(0) 推荐(0)

使用Golang的singleflight防止缓存击穿
摘要:背景 singleflight 介绍 示例 源码分析 其他 Top 背景 在使用缓存时,容易发生缓存击穿。 缓存击穿:一个存在的key,在缓存过期的瞬间,同时有大量的请求过来,造成所有请求都去读dB,这些请求都会击穿到DB,造成瞬时DB请求量大、压力骤增。 Top singleflight 介绍 i 阅读全文

posted @ 2020-04-24 18:31 ExplorerMan 阅读(816) 评论(0) 推荐(0)

2020.4面试分享(7面收割5个offer)
摘要:都说金三银四是找工作的最佳时节,由于本人的个人职业规划跟目前工作内容不太相符(具体原因就不透露了,领导平时也要来这里逛,哈哈),四月份挑选了10多家公司投递简历(公司规模从几十人到上万人都有),参加了7家公司的电话面试,收获了5个offer,也还算不错。下面就分享一下面试过程中一些基础的,又最常见的 阅读全文

posted @ 2020-04-24 11:51 ExplorerMan 阅读(210) 评论(0) 推荐(0)

算法设计--在数组中找求和最大的连续子串
摘要:问题:输入具有n个整数的向量arr,输出向量的任意连续子向量和的最大值 特殊情况(1、当向量都为正数时,为整个向量 2、当向量都为负数时,为0,即空子串 ) 1、O(n2)的算法 (循环对所有情况进行遍历) 1 #include <stdio.h> 2 #define max(a,b) ((a>b) 阅读全文

posted @ 2020-04-22 15:56 ExplorerMan 阅读(409) 评论(0) 推荐(0)

redis 分布式锁的 5个坑,真是又大又深
摘要:引言 最近项目上线的频率颇高,连着几天加班熬夜,身体有点吃不消精神也有些萎靡,无奈业务方催的紧,工期就在眼前只能硬着头皮上了。脑子浑浑噩噩的时候,写的就不能叫代码,可以直接叫做Bug。我就熬夜写了一个bug被骂惨了。 由于是做商城业务,要频繁的对商品库存进行扣减,应用是集群部署,为避免并发造成库存超 阅读全文

posted @ 2020-04-22 12:22 ExplorerMan 阅读(1020) 评论(1) 推荐(0)

深度解密 Go 语言之 sync.Pool
摘要:最近在工作中碰到了 GC 的问题:项目中大量重复地创建许多对象,造成 GC 的工作量巨大,CPU 频繁掉底。准备使用 sync.Pool 来缓存对象,减轻 GC 的消耗。为了用起来更顺畅,我特地研究了一番,形成此文。本文从使用到源码解析,循序渐进,一一道来。 本文基于 Go 1.14 目录 是什么 阅读全文

posted @ 2020-04-21 09:29 ExplorerMan 阅读(588) 评论(0) 推荐(0)

Python爬虫笔记
摘要:本次学习的教学视频来自嵩天老师的网络爬虫教学,主要学习内容有requests\BeautifulSoup\scrapy\re,目前除了scrapy其他刚好看完。并搬运实现了一些小项目如58同城租房信息爬取、淘宝搜索商品项目,现将从爬虫基本方法、实战和遇到的问题三个方面进行总结。 1.基本方法 首先就 阅读全文

posted @ 2020-04-20 11:56 ExplorerMan 阅读(516) 评论(0) 推荐(0)

使用flask_limiter设定API配额
摘要:# -*- coding:utf-8 -*-import json from flask import Flask, jsonify, request from flask_limiter import Limiter, HEADERS # https://github.com/alisaifee/ 阅读全文

posted @ 2020-04-13 16:10 ExplorerMan 阅读(441) 评论(0) 推荐(0)

flask_limiter 实践与原理解析
摘要:背景:一个强大的软件产品是由许多不同的组件结合完成的, 其中在每一个产品中离不开的就是api系统, api系统在整个产品中居于中枢地位, 包括系统内部组件, 及客户对产品的对接都要与api打交道, 这就需要最大限度的提高api的处理能力, 并且防范无效请求, 还有黑客的恶意攻击。 限流可以在ngin 阅读全文

posted @ 2020-04-09 21:14 ExplorerMan 阅读(709) 评论(0) 推荐(0)

Python -- 限流 throttle
摘要:前言一个业务型的服务,被open接口后,遭遇并发扫数据,于是要做限流操作。一直固执的认为,业务API和OpenAPI要分开处理,或许因为起初接入其他企业ERP系统都是走较为规范的OpenAPI,始终对于这种开发系统业务API的做法感觉不好。 窗口限流需求是要在Django的一个工程里做限流,倘若是r 阅读全文

posted @ 2020-04-09 20:16 ExplorerMan 阅读(1161) 评论(0) 推荐(0)

python ratelimit使用
摘要:https://pypi.org/project/ratelimit/ 阅读全文

posted @ 2020-04-09 20:02 ExplorerMan 阅读(857) 评论(0) 推荐(0)

golang中字符串的查找方法小结
摘要:1)func Contains(s, substr string) bool这个函数是查找某个字符是否在这个字符串中存在,存在返回true 示例如下: import ( "fmt" "strings" ) func main() { fmt.Println(strings.Contains("wid 阅读全文

posted @ 2020-04-09 11:55 ExplorerMan 阅读(1571) 评论(0) 推荐(0)

Go mod 使用【h】
摘要:如何使用 Modules ? 把 golang 升级到 1.11(现在1.12 已经发布了,建议使用1.12) 设置 GO111MODULE GO111MODULE GO111MODULE 有三个值:off, on和auto(默认值)。 GO111MODULE=off,go命令行将不会支持modul 阅读全文

posted @ 2020-04-08 16:36 ExplorerMan 阅读(542) 评论(0) 推荐(0)

grpc-gateway:grpc转换为http协议对外提供服务
摘要:我所在公司的项目是采用基于Restful的微服务架构,随着微服务之间的沟通越来越频繁,就希望可以做成用rpc来做内部的通讯,对外依然用Restful。于是就想到了google的grpc。 使用grpc的优点很多,二进制的数据可以加快传输速度,基于http2的多路复用可以减少服务之间的连接次数,和函数 阅读全文

posted @ 2020-04-07 18:34 ExplorerMan 阅读(986) 评论(0) 推荐(0)

微服务最强开源流量网关Kong
摘要:前言在微服务架构中,由于系统和服务的细分,导致系统结构变得非常复杂, 为了跨平台,为了统一集中管理api,同时为了不暴露后置服务。甚至有时候需要对请求进行一些安全、负载均衡、限流、熔断、灰度等中间操作,基于此类种种的客观需求一个类似综合前置的系统就产生了,这就是API网关(API Gateway)。 阅读全文

posted @ 2020-04-07 18:32 ExplorerMan 阅读(955) 评论(0) 推荐(0)

goku-api-gateway
摘要:高可用的微服务解决方案 通过EOLINKER API网关,帮助企业进行API服务治理与API性能维护,降低IT运维的成本,提高系统灵活性,安全可靠地将企业内部系统通过微服务架构互相连接,为企业数字化赋能。 阅读全文

posted @ 2020-04-07 18:24 ExplorerMan 阅读(689) 评论(0) 推荐(0)

Go语言开发的微服务框架
摘要:Go语言开发的微服务框架有什么? 1、项目名称:Istio 项目简介:Istio是由Google、IBM和Lyft开源的微服务管理、保护和监控框架。使用istio可以很简单的创建具有负载均衡、服务间认证、监控等功能的服务网络,而不需要对服务的代码进行任何修改。 2、项目名称:Go-kit 项目简介: 阅读全文

posted @ 2020-04-07 15:58 ExplorerMan 阅读(4869) 评论(0) 推荐(0)

go-kit 微服务 服务熔断(hystrix-go 实现)
摘要:go-kit 微服务 服务熔断(hystrix-go 实现) 对客户端请求login方法添加熔断 Hystrix 在微服务架构中,每个服务都是相互关联的,比如我们下单服务和扣钱服务是分开的,现在扣钱服务出现的bug不能正常服务 Hystrix可以让我们在在微服务架构中对服务间的调用进行控制,加入一些 阅读全文

posted @ 2020-04-07 15:51 ExplorerMan 阅读(999) 评论(0) 推荐(0)

雪崩利器 hystrix-go 源码分析
摘要:阅读源码的过程,就像是在像武侠小说里阅读武功秘籍一样,分析高手的一招一式,提炼出精髓,来增强自己的内力。之前的帖子说了一下微服务的雪崩效应和常见的解决方案,太水,没有上代码怎么叫解决方案。github上有很多开源的库来解决雪崩问题,比较出名的是Netflix的开源库hystrix。集流量控制、熔断、 阅读全文

posted @ 2020-04-07 15:50 ExplorerMan 阅读(321) 评论(0) 推荐(0)

hystrix-go简介
摘要:hystrix是一个容错库,旨在隔离指向远程系统,服务和第三方库的请求,杜绝级联故障,并在复杂的分布式系统中实现弹性,毕竟在分布式系统中,故障是不可避免的。 此项目脱胎于由Netflix开源的同名java项目。https://github.com/Netflix/Hystrix 像Hystrix命令 阅读全文

posted @ 2020-04-07 15:03 ExplorerMan 阅读(325) 评论(0) 推荐(0)

python分布式环境下的限流器
摘要:项目中用到了限流,受限于一些实现方式上的东西,手撕了一个简单的服务端限流器。 服务端限流和客户端限流的区别,简单来说就是: 1)服务端限流 对接口请求进行限流,限制的是单位时间内请求的数量,目的是通过有损来换取高可用。 例如我们的场景是,有一个服务接收请求,处理之后,将数据bulk到Elastics 阅读全文

posted @ 2020-04-02 20:04 ExplorerMan 阅读(363) 评论(0) 推荐(0)

python redis lua 脚本 实战一个限流或抢红包等业务
摘要:知识点 1.lua是什么 2.redis,lua,python(java)三者的关系 3.用lua承载业务逻辑 为何加入一个lua脚本 减少网络开销。可以将多个请求通过脚本的形式一次发送,减少网络时延 原子操作。redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。因此在编写脚本的过程中无 阅读全文

posted @ 2020-04-02 20:00 ExplorerMan 阅读(816) 评论(0) 推荐(0)

利用redis-lua+python实现接口限流
摘要:公司目前在市面上有大量的机器在运转。每天对接到服务器就有数百万的请求过来,无形中消耗了带宽和计算资源。可以通过一定的策略来过滤掉部分请求,保证服务器的稳定。 扩展阅读: 1.当然这层逻辑既可以落到接入层,也可以落到业务层。这里为了不影响线上其它业务,保证系统的稳定和代码可追溯。也方便实行最小验证,我 阅读全文

posted @ 2020-04-02 19:58 ExplorerMan 阅读(626) 评论(0) 推荐(0)

python分布式环境下的限流器
摘要:项目中用到了限流,受限于一些实现方式上的东西,手撕了一个简单的服务端限流器。 服务端限流和客户端限流的区别,简单来说就是: 1)服务端限流 对接口请求进行限流,限制的是单位时间内请求的数量,目的是通过有损来换取高可用。 例如我们的场景是,有一个服务接收请求,处理之后,将数据bulk到Elastics 阅读全文

posted @ 2020-04-02 19:57 ExplorerMan 阅读(316) 评论(0) 推荐(0)

golang 函数作为参数传递(回调)
摘要:和其他很多语言一样,golang中函数也可以作为其它函数的参数进行传递,然后在其它函数内调用执行,一般称之为回调。 语法:以函数签名作为主调函数的形参的类型,即传递一个指向函数的指针 func main() { sayhello("john", addperfix)} func addperfix( 阅读全文

posted @ 2020-04-02 18:31 ExplorerMan 阅读(2203) 评论(0) 推荐(0)

go 单向通道
摘要:func GetCha(cha <-chan int) { //这里参数用了一个单向通道 只允许接收 for{ if v,ok := <-cha; ok{ fmt.Println(v) } } //cha <- 2 这里会发生编译错误 } func main() { cha := make(chan 阅读全文

posted @ 2020-04-02 18:30 ExplorerMan 阅读(262) 评论(0) 推荐(0)

go channel select如何屏蔽已关闭通道
摘要:go channel select如何屏蔽已关闭通道(如果不屏蔽的话,select 一直会处于选择状态) func main() { channel := make(chan int ,20) selectChannel(channel) getChannel(channel) time.Sleep 阅读全文

posted @ 2020-04-02 18:29 ExplorerMan 阅读(654) 评论(0) 推荐(0)

go err
摘要:golang自定义err方案很多 // Errno 代表某种错误的类型 type Errno int func (e Errno) Error() string { return "errno " + strconv.Itoa(int(e)) } func main(){ // 示例3。 const 阅读全文

posted @ 2020-04-02 18:27 ExplorerMan 阅读(226) 评论(0) 推荐(0)

golang 做了个mutex与atomic性能测试
摘要:func BenchmarkMutex(b *testing.B) { var number int lock := sync.Mutex{} for i:=0; i< b.N;i++{ go func() { defer lock.Unlock() lock.Lock() number++ }() 阅读全文

posted @ 2020-04-02 18:24 ExplorerMan 阅读(617) 评论(0) 推荐(0)

Go语言中的条件变量
摘要:Go语言sync package提供了条件变量(condition variable)类型: type Cond struct { // L is held while observing or changing the condition L Locker // contains filtered 阅读全文

posted @ 2020-04-02 18:21 ExplorerMan 阅读(244) 评论(0) 推荐(0)

golang 百万级请求
摘要:我在不同公司从事反爬虫、反病毒、反恶意程序已经有15年了,我知道,由于每天需要处理和应对的大量数据,这些系统最终会因此变得十分复杂。 目前我是smsjunk.com的CEO以及KnowBe4的首席架构师,两家公司都是活跃与网络安全行业。 有趣的是在过去10年作为一名软件工程师,几乎所有我参与的后端开 阅读全文

posted @ 2020-04-02 18:16 ExplorerMan 阅读(579) 评论(0) 推荐(0)

golang strings.NewReader
摘要:为什么说strings.Reader类型的值可以高效地读取字符串 与strings.Builder类型恰恰相反,strings.Reader类型是为了高效读取字符串而存在的。后者的高效主要体现在它对字符串的读取机制上,它封装了很多用于在string值上读取内容的最佳实践。 strings.Reade 阅读全文

posted @ 2020-04-02 18:07 ExplorerMan 阅读(963) 评论(0) 推荐(0)

golang strings.Builder
摘要:strings.Builder类型的值(以下简称Builder值)的优势有下面的三种: 已存在的内容不可变,但可以拼接更多的内容; 减少了内存分配和内容拷贝的次数; 可将内容重置,可重用值。 先来说说string类型。 我们都知道,在 Go 语言中,string类型的值是不可变的。 如果我们想获得一 阅读全文

posted @ 2020-04-02 18:06 ExplorerMan 阅读(3055) 评论(0) 推荐(0)

go modules 问题 proxy
摘要: 阅读全文

posted @ 2020-04-02 18:03 ExplorerMan 阅读(157) 评论(0) 推荐(0)

Golang 服务优雅重启
摘要:很多时候对于服务升级的做法简单粗暴, 就简单的杀进程启动新的进程. 还有的好一点就是多个相同的服务依次升级, 保证有服务可用. 但是公平的说这两种都会丢失请求中的连接. 鉴于这种情况, 在现实中我们可以使用优雅重启来搞定这个问题. Golang 实现优雅重启的原理也很简单: 监听 USR2 信号; 阅读全文

posted @ 2020-04-02 18:02 ExplorerMan 阅读(704) 评论(0) 推荐(0)

golang服务开发平滑升级之优雅重启
摘要:转载不错的文档 经典平滑升级方案 服务器开发运维中,平滑升级是一个老生常谈的话题。拿一个http server来说,最常见的方案就是在http server前面加挂一个lvs负载,通过健康检查接口决定负载的导入与摘除。具体来说就是http server 提供一个/status 接口,服务器返回一个s 阅读全文

posted @ 2020-04-02 18:00 ExplorerMan 阅读(564) 评论(0) 推荐(0)

Golang实现请求限流的几种办法
摘要:简单的并发控制 利用 channel 的缓冲设定,我们就可以来实现并发的限制。我们只要在执行并发的同时,往一个带有缓冲的 channel 里写入点东西(随便写啥,内容不重要)。让并发的 goroutine在执行完成后把这个 channel 里的东西给读走。这样整个并发的数量就讲控制在这个 chann 阅读全文

posted @ 2020-04-02 17:52 ExplorerMan 阅读(681) 评论(0) 推荐(0)

Golang限流器time/rate使用介绍
摘要:本主题为系列文章,分上下两篇。本文主要介绍time/rate的具体使用方法,另外一篇文章《Golang限流器time/rate实现剖析》则着重介绍其内部实现原理。 限流器是后台服务中的非常重要的组件,可以用来限制请求速率,保护服务,以免服务过载。限流器的实现方法有很多种,例如滑动窗口法、Token 阅读全文

posted @ 2020-04-02 17:50 ExplorerMan 阅读(327) 评论(0) 推荐(0)

flask-限流器
摘要:安装 pip install flask-limite 使用 组件的第二种初始化⽅方式 flask-limiter也可以⽣生成⽇日志, ⽇日志器器名称为 flask-limiter 阅读全文

posted @ 2020-04-02 17:40 ExplorerMan 阅读(466) 评论(0) 推荐(0)

django中限流Throttling
摘要:目的:可以对接口访问的频次进行限制,减少服务器压力 使用: 可以进行全局配置 REST_FRAMEWORK = { 'DEFAULT_THROTTLE_CLASSES': ( 'rest_framework.throttling.AnonRateThrottle', # 未登录用户 'rest_fr 阅读全文

posted @ 2020-04-02 17:37 ExplorerMan 阅读(370) 评论(0) 推荐(0)

nginx限流、限速指令limit_conn、limit_rate、limit_req【h】
摘要:针对不同URL的限流示例如下: limit_conn_zone $server_name zone=perserver:10m; limit_req_zone $server_name zone=one:10m rate=1r/s; server { listen 80; server_name l 阅读全文

posted @ 2020-04-02 15:49 ExplorerMan 阅读(2374) 评论(0) 推荐(0)

导航