- 博客(59)
- 收藏
- 关注
原创 深入剖析分布式一致性共识算法
一、共识算法 -- 拜占庭问题两忠一叛问题:如上图所示,将军A、B、C约定同时进攻或者撤退,假如将军C叛变了,被中间人截取消息并发送进攻给A、撤退给B,当所有将军消息都收到后结果如下:A:2票进攻1票撤退;B:2票撤退1票进攻;导致最终A独自去攻打敌军,B撤退,最终会任务失败。口信消息型拜占庭问题之解如上图所示,经过2轮协商可以解决上述的两忠一叛问题;第一轮协商由leader发起,向...
2021-02-17 17:18:00
222
原创 一文弄懂分布式场景中各种锁的原理及使用
1. 语言层面的锁乐观锁:原子操作中的比较并交换简称CAS(Compare And Swap),在sync/atomic包中,这类原子操作由名称以CompareAndSwap为前缀的若干个函数提供func CompareAndSwapInt32(addr *int32, old, new int32) (swapped bool)func CompareAndSwapPoin...
2020-12-14 19:39:00
617
原创 prometheus监控golang服务实践
一、prometheus基本原理介绍prometheus是基于metric采样的监控,可以自定义监控指标,如:服务每秒请求数、请求失败数、请求执行时间等,每经过一个时间间隔,数据都会从运行的服务中流出,存储到一个时间序列数据库中,之后可通过PromQL语法查询。主要特点:多维数据模型,时间序列数据通过metric名以key、value的形式标识;使用PromQL语法灵活地查询数据...
2020-11-17 15:01:00
2912
2
原创 ETCD核心机制解析
ETCD整体机制etcd 是一个分布式的、可靠的 key-value 存储系统,它适用于存储分布式系统中的关键数据。etcd 集群中多个节点之间通过Raft算法完成分布式一致性协同,算法会选举出一个主节点作为 leader,由 leader 负责数据的同步与分发。当 leader 出现故障后系统会自动地重新选取另一个节点成为 leader,并重新完成数据的同步。etcd集群实现高可...
2020-11-04 19:13:00
1018
原创 ETCD组件在grpc中的实践
一、前言grpc中没有像go-micro那样集成可插拔式的etcd库使用,如何使得grpc能够使用服务注册发现及命名解析的功能,因此本文基于etcd实现了Name Resolver。二、所需的grpc版本及高版本grpc、protobuf与etcd兼容问题grpc相关库:google.golang.org/grpc v1.26.0google.golang.org/grpc/b...
2020-10-09 14:21:00
1563
1
原创 opentracting+jager分布式链路追踪探索实践
一、Opentracingopentracing通过提供平台无关、厂商无关的API,使得开发人员可以方便地实现追踪系统。opentracing提供了用于运营支撑系统和针对特定平台的辅助程序库,被跟踪的服务只需要调用这套接口,就可以被任何实现这套接口的跟踪后台(比如Zipkin, Jaeger等等)支持,而作为一个跟踪后台,只要实现了个这套接口,就可以跟踪到任何调用这套接口的服务。...
2020-09-10 15:14:00
1231
原创 golang调试性能分析
golang程序的CPU及内存使用情况性能分析1.runtime.MemStats查看内存占用情况//读取当前内存信息的方法func printMemStats() { //定义一个 runtime.MemStats对象 var ms runtime.MemStats //通过对象的属性 查询内存的信息 //1 将内存中的数据加载到 ms对象中 r...
2020-06-24 01:02:00
2784
原创 Channels集成到Django消息实时推送
channel架构图InterFace Server:负责对协议进行解析,将不同的协议分发到不同的ChannelChannel Layer:频道层,可以是一个FIFO队列,通常使用RedisDjango中配置Channel:CHANNEL_LAYERS的配置:CHANNEL_LAYERS = { "default": { "BACKEND": "...
2020-05-28 19:32:00
2106
2
原创 Docker搭建分布式MySQL主从服务
一. 创建docker-compose.yml并启动docker composemkdir mysql_servercd mysql_serversudo vim docker-compose.ymldocker-compose.ymlversion: "3" #版本信息services: #服务列表 mysql_1: image: mysql:5.7 ...
2020-05-28 19:31:00
253
原创 golang垃圾回收机制
golang的GC,1.8通过混合写⼊屏障, 使得STW降到了sub ms。go语言中程序代码执行和垃圾回收是并发执行的。当前Go GC特征 :三色标记,并发标记和清扫,非分代,非紧缩,混合写屏障。三色标记:1. 将所有对象放在白色集合中2. 从rootset遍历可达对象,将可达对象放在灰色集合中3. 将灰色集合中对象进行遍历,将可达对象放在灰色集合中,将其本身放在黑色集合中4. 重复...
2020-05-28 19:29:00
236
原创 TensorFlow实现线性回归
TensorFlow实现线性回归 线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。特点:只有一个自变量的情况称为单变量回归,大于一个自变量情况的叫做多元回归通用公式:h(w) = w1x1+w2x2+w3x3+...+b=wTx + b根据...
2019-06-05 17:05:00
349
原创 逻辑回归
逻辑回归 逻辑回归是一种分类算法,虽然名字中带有回归。但是它与回归之间有一定的联系。逻辑回归的原理:输入逻辑回归的输入就是一个线性回归的结果sigmoid函数(激活函数)回归的结果输入到sigmoid函数当中输出结果:[0, 1]区间中的一个概率值,默认为0.5为阈值逻辑回归最终的分类是通过属于某个类别的概率值来判断是否...
2019-05-28 15:41:00
333
原创 线性回归
线性回归 线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。特点:只有一个自变量的情况称为单变量回归,大于一个自变量情况的叫做多元回归通用公式:h(w) = w1x1+w2x2+w3x3+...+b=wTx + b其中w,x可以理解为矩阵:...
2019-05-27 11:17:00
324
1
原创 决策树
决策树 决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法,其原理是基于信息熵和信息增益。信息熵的定义H的专业术语称之为信息熵,单位为比特。信息和消除不确定性是相联系的,当得到的额外信息越多的话,那么猜测的代价越小,当得知某个特征之后,能够减少的不确定性大小,...
2019-05-24 11:12:00
312
原创 朴素贝叶斯
朴素贝叶斯 朴素贝叶斯中的朴素一词的来源是假设各特征之间相互独立。这一假设使得朴素贝叶斯算法变得简单,但有时会牺牲一定的分类准确率。朴素贝叶斯经常会用于文本分类,它的思想是基于条件概率和联合概率:条件概率:事件A在另外一个事件B已经发生的条件下发生的概率记作:P(A|B)特性:P(A1,A2|B) = P(A1|B)P(A2|B)注意:此条...
2019-05-22 16:39:00
336
原创 K-近邻算法
K-近邻算法 K-近邻算法又称KNN算法,最早是由Cover和Hart提出的一种分类算法,其原理非常简单,主要是根据计算两个样本之间的距离从而对样本进行预测分类,常用的距离计算公式有欧氏距离:根据未知样本与已知样本的欧式距离,计算出距离最近的样本,则其为预测样本的类别在Python的sklearn中使用KNN算法的API:sk...
2019-05-22 16:10:00
190
原创 Python单元测试
Python单元测试 在Python的圈子里常流行一句话:"动态一时爽,重构火葬场",我们知道Python写起来很方便,但在重构或者对某部分代码修改时,可能会造成"牵一发而动全身",所以对于Python项目,特别是大型项目来说单元测试来保证代码质量是非常有必要的。单元测试(Unit Testing)1. 针对程序模块进行正确性检验2. 一个...
2019-04-28 23:02:00
298
原创 python3和grpc的微服务探索实践
python3和grpc的微服务探索实践 对于微服务的实践,一般都是基于Java和Golang的,博主最近研究了下基于Python的微服务实践,现在通过一个简单的服务来分析Python技术栈的微服务实践技术栈:Python3 + grpc + Zookeeper服务API:通过学科获取相应的题型grpc:由Google公司开源的高性能R...
2019-02-25 21:25:00
882
原创 grpc的微服务探索实践
对于微服务的实践,一般都是基于Java和Golang的,博主最近研究了下基于Python的微服务实践,现在通过一个简单的服务来分析Python技术栈的微服务实践技术栈:Python3 + grpc + Zookeeper服务API:通过学科获取相应的题型grpc:由Google公司开源的高性能RPC框架,消息协议使用Google自家开源的Protocol Buffers协议机...
2019-02-25 21:25:00
136
原创 使用Kazoo操作ZooKeeper服务治理
使用Kazoo操作ZooKeeper服务治理 单机服务的可靠性及可扩展性有限,某台服务宕机可能会影响整个系统的正常使用;分布式服务能够有效地解决这一问题,但同时分布式服务也会带来一些新的问题,如:服务发现(新增或者删除了服务如何确保能让客户端知道),容灾(某些服务出现故障如何让客户端只访问正常的服务);ZooKeeper的提出主要是为了解决分布式服...
2019-01-30 23:09:00
781
原创 RabbitMQ中RPC的实现及其通信机制
RabbitMQ中RPC的实现及其通信机制 RabbitMQ中RPC的实现:客户端发送请求消息,服务端回复响应消息,为了接受响应response,客户端需要发送一个回调队列的地址来接受响应,每条消息在发送的时候会带上一个唯一的correlation_id,相应的服务端处理计算后会将结果返回到对应的correlation_id。RPC调用流程:...
2019-01-20 16:17:00
424
原创 RPC原理及其调用过程
RPC原理及其调用过程 远程过程调用,简称为RPC,是一个计算机通信协议,它允许运行于一台计算机的程序调用另一台计算机的子程序,而无需额外地为这个交互作用编程。RPC与传统的HTTP对比优点: 1. 传输效率高(二进制传输) 2. 发起调用的一方无需知道RPC的具体实现,如同调用本地函数般调用缺点: 1. 通用性不如H...
2019-01-14 11:01:00
4172
原创 RabbitMQ中交换机的消息分发机制
RabbitMQ中交换机的消息分发机制 RabbitMQ是一个消息代理,它接受和转发消息,是一个由 Erlang语言开发的遵循AMQP协议的开源实现。在RabbitMQ中生产者不会将消息直接发送到队列当中,而是将消息直接发送到交换机(exchange),交换机用来接受生产者发送的消息并将这些消息发送给绑定的队列,即:生产者-->交换机--&...
2018-12-29 18:20:00
440
原创 开发环境中Docker的使用
开发环境中Docker的使用 一. Ubuntu16.04+Django+Redis+Nginx的Web项目Docker化1.创建Django项目的image# 创建项目image 执行 docker build -t ccnu_resource_pub -f docker/app/Dockerfile .# 把ubuntu:...
2018-12-25 11:51:00
182
原创 Kafka消费者组再均衡问题
Kafka消费者组再均衡问题 在Kafka中,当有新消费者加入或者订阅的topic数发生变化时,会触发Rebalance(再均衡:在同一个消费者组当中,分区的所有权从一个消费者转移到另外一个消费者)机制,Rebalance顾名思义就是重新均衡消费者消费。Rebalance的过程如下:第一步:所有成员都向coordinator发送请求,请求入组。...
2018-12-16 13:11:00
1903
原创 使用Tornado异步接入第三方(支付宝)支付
使用Tornado异步接入第三方(支付宝)支付 目前国内比较流行的第三方支付主要有支付宝和微信支付,博主最近研究了下如何用Python接入支付宝支付,这里我以Tornado作为web框架,接入支付宝构造支付接口。使用Tornado异步接入支付宝支付流程:1. 进入蚂蚁金服开放平台填写开发者信息、应用信息2.配置RSA256密钥,生成支...
2018-12-16 00:00:00
634
原创 Kafka提交offset机制
Kafka提交offset机制 在kafka的消费者中,有一个非常关键的机制,那就是offset机制。它使得Kafka在消费的过程中即使挂了或者引发再均衡问题重新分配Partation,当下次重新恢复消费时仍然可以知道从哪里开始消费。它好比看一本书中的书签标记,每次通过书签标记(offset)就能快速找到该从哪里开始看(消费)。Kafka对于o...
2018-12-14 11:51:00
1604
原创 Kafka生产者发送消息的三种方式
Kafka生产者发送消息的三种方式 Kafka是一种分布式的基于发布/订阅的消息系统,它的高吞吐量、灵活的offset是其它消息系统所没有的。Kafka发送消息主要有三种方式:1.发送并忘记 2.同步发送 3.异步发送+回调函数下面以单节点的方式分别用三种方法发送1w条消息测试:方式一:发送并忘记(不关心消息是否正常到达,对返...
2018-12-13 16:51:00
4552
原创 使用Redis构建全局并发锁
使用Redis构建全局并发锁 谈起Redis的用途,小伙伴们都会说使用它作为缓存,目前很多公司都用Redis作为缓存,但是使用Redis仅仅作为缓存未免太大材小用了。深究Redis的原理后你会发现它有很多用途,在很多场景下能够使用它快速地解决问题。常见的用途有:分布式锁控制并发、结合bloom filter用于推荐去重、HyperLogLog用于统...
2018-11-29 18:07:00
290
原创 Tornado之异步authenticated
Tornado之异步authenticated authenticated是tornado自带的登录验证装饰器,它的实现比较简单,验证比较简易,无法做到真正意义的前后端分离并且是同步的方式,所以这里我对它进行了重写,以适应异步JWT方式的登录验证。Tornado自带的authenticated源码:def authenticated(metho...
2018-11-28 23:01:00
235
原创 使用Tornado和协程爬取博客园文章
使用Tornado和协程爬取博客园文章 Python3.5后 Tornado官方建议使用async和await的方式实现异步程序,尝试了下使用Tornado和协程爬取博客园的文章并使用peewee_async异步写入MySQL数据库。一. 博客园文章抓取测试:这里我以我自己的一篇文章详情作为测试url,https://www.cnblogs.c...
2018-11-13 22:56:00
208
原创 Elasticsearch 优化
Elasticsearch 优化 Elasticsearch是一个基于Lucene的搜索服务器,其搜索的核心原理是倒排索引,今天谈下在日常项目中使用它遇到的一些问题及优化解决办法。一. 搜索的深度分页问题在日常项目中,经常会有分页搜索并支持跳页的需求,类似百度、Google搜索那样,使用ES进行这类需求的搜索时一般采用from/size的方式,...
2018-11-13 16:45:00
253
原创 Python协程与asyncio
Python协程与asyncio asyncio(解决异步io编程的一整套解决方案,它主要用于异步网络操作、并发和协程)协程(Coroutine一种用户态的轻量级微线程,它是程序级别的,在执行过程中可以中断去执行其它的子程序,别的子程序也可以中断回来继续执行之前的子程序,无需线程上下文切换的开销)get_event_loop:创建事件循环r...
2018-10-21 14:04:00
151
原创 基于PySpark的网络服务异常检测系统 (四) Mysql与SparkSQL对接同步数据 kmeans算法计算预测异常...
基于PySpark的网络服务异常检测系统 (四) Mysql与SparkSQL对接同步数据 kmeans算法计算预测异常 基于Django Restframework和Spark的异常检测系统,数据库为MySQL、Redis, 消息队列为Celery,分析服务为Spark SQL和Spark Mllib,使用kmeans和随机森林算法对网络服务数...
2018-10-17 17:26:00
270
原创 基于PySpark的网络服务异常检测系统 阶段总结(三)
本篇博文主要介绍如何使用SVDD算法和Isolation Forest算法来进行异常检测 首先是SVDD算法,主要是用sklearn里面的svm.OneClassSVM()来做单分类的异常检测,用cross_validation作为交叉验证调参 1 import numpy as np 2 from sklearn import svm...
2018-10-17 17:08:00
166
原创 基于PySpark的网络服务异常检测系统 阶段总结(一)
又有快半年没更新博客了,自我总结原因,一个字:懒。现在对这半年所做的研究进行一个阶段性的总结,近几个月博主主要对网络服务异常检测相关算法进行了研究,并设计实现了基于Spark的网络服务异常检测系统,整个系统采用前后端分离的模式,所用技术:Pyspark+SparkSQL+Sklearn+Spark_Sklearn+Django+Mysql+Redis+AngularJS 一、网...
2018-10-17 17:03:00
359
原创 Spark SQL大数据处理并写入Elasticsearch
Spark SQL大数据处理并写入Elasticsearch SparkSQL(Spark用于处理结构化数据的模块)通过SparkSQL导入的数据可以来自MySQL数据库、Json数据、Csv数据等,通过load这些数据可以对其做一系列计算下面通过程序代码来详细查看SparkSQL导入数据并写入到ES中:数据集:北京市PM2.5数据...
2018-10-16 21:23:00
1408
原创 Spark缓存策略
Spark缓存策略 当对同一个rdd多次执行action时,如果在磁盘上则每次执行action都会从磁盘将数据加载,如果将其缓存到内存中会提高再次action的读取速度,Spark缓存主要有cache()和persist()两种,当缓存一个rdd时,每一个节点上都会存放这个rdd的partition,当要使用rdd的时候可以直接从内存读出。cac...
2018-10-10 18:48:00
275
原创 Spark之join、leftOuterJoin、rightOuterJoin及fullOuterJoin
Spark之join、leftOuterJoin、rightOuterJoin及fullOuterJoin Spark的join与mysql的join类似,mysql的join是将表与表之间连接查询,spark中join是将RDD数据集进行连接,Spark主要有join、leftOuterJoin、rightOuterJoin及fullOuterJ...
2018-10-06 22:08:00
387
原创 Spark中groupByKey、reduceByKey与sortByKey
Spark中groupByKey、reduceByKey与sortByKey groupByKey把相同的key的数据分组到一个集合序列当中:[("hello",1), ("world",1), ("hello",1), ("fly",1), ("hello",1), ("world",1)] --> [("hello",
2018-10-06 17:18:00
267
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人