自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 一文搞懂jenkins

简介Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。为什么要使用Jenkins为什么要用Jenkins?我说下我以前开发

2021-07-31 22:06:19 3337 2

原创 一文搞定API网关

简介API是Application Programming Interface缩写,翻译成中文就是应用程序接口。在实际微服务中可以理解一个个功能方法。就比如你一个用户服务的微服务,可以对外提供 API 接口为,查找用户,创建用户等。为什么要使用API​​网关API 网关并不是微服务场景中必须的组件,如下图,不管有没有 API 网关,后端微服务都可以通过 API 很好地支持客户端的访问。但对于服务数量众多、复杂度比较高、规模比较大的业务来说,引入 API 网关也有一系列的好处:聚合接口使得服务对

2021-07-30 22:50:49 607

原创 jaeger安装和架构

简介Jaeger 是Uber推出的一款开源分布式追踪系统,兼容OpenTracing API。分布式追踪系统用于记录请求范围内的信息。例如,一次远程方法调用的执行过程和耗时。是我们排查系统问题和系统性能的利器。分布式追踪系统种类繁多,但是核心步骤有三个:代码埋点,数据存储和查询展示。以上几句描述都是我copy的,所以大家想要对Jaeger有更加深入的了解,可以参阅这篇文章Jaeger 分布式追踪系统模块分析,能让你对Jaeger有一个简单的认识。当然我们还要记得APM的三大模块分别是集中式日志系统,

2021-07-30 22:37:08 528

原创 链路追踪详讲

什么是链路追踪分布式链路追踪(Distributed Tracing),也叫 分布式链路跟踪,分布式跟踪,分布式追踪 等等。本文使用分布式Trace来简称分布式链路追踪。trace就犹如一张大的json表,同一层级的数据代表同一层级的应用,越往下代表是对下层某个应用的依赖。从图中可以很方便的看到每一个应用调用的名称,调用花费的时间,以及是否成功。下面这张图是我们使用微软的application insights生成的tracing图链路追踪技术选型zipkinjaegerskyw

2021-07-30 22:33:18 832

原创 常见的幂等性解决方案

背景我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。get请求一般没有幂等性需求、delete请求一般也没有幂等性需求,post、update视情况而定例如:前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱;发送消息,也应该只发一次,同样的短信发给用户,用户会哭的;创建业务订单,一次业务请求只能创建一个,创建多个就会出大问题。等等很多重要的情况,这

2021-07-30 22:20:13 1398

原创 一文搞定RocketMQ

简介RocketMQ是一款分布式消息中间件,最初是由阿里巴巴消息中间件团队研发并大规模应用于生产系统,满足线上海量消息堆积的需求, 在2016年底捐赠给Apache开源基金会成为孵化项目,经过不到一年时间正式成为了Apache顶级项目;早期阿里曾经基于ActiveMQ研发消息系统, 随着业务消息的规模增大,瓶颈逐渐显现,后来也考虑过Kafka,但因为在低延迟和高可靠性方面没有选择,最后才自主研发了RocketMQ, 各方面的性能都比目前已有的消息队列要好,RocketMQ和Kafka在概念和原理上都非常相

2021-07-29 23:38:38 790 1

原创 一文搞懂分布式事务

什么是事务事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。本地事务在计算机系统中,更多的是通过关系型数据库来控制事务,这是利用数据库本身的事务特性来实现的,因此叫数据库事务,由于应用主要靠关系数据库来控制事务,而数据库通常和应用在同一个服务器,所以基于关系型数据库的事务又被称为本地事务。数据库事务的四大特性:ACIDA(Atomic):原子性,构成事务的所有操作,要么都执行完成,要么全部不执行,不可能出现部分成功部分失败的情况。C(Consistency):

2021-07-29 23:06:57 300

原创 tcc分布式事务

简介TCC 是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认Confirm、撤销Cancel。Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与 Try或者 Commit相反的操作即回滚操作。TM首先发起所有的分支事务的 try操作,任何一个分支事务的 try操作执行失败,TM将会发起所有分支事务的 Cancel操作,若 Try操作全部成功,TM将会发起所有分支事务的 Confirm操作,其中 Confirm/C

2021-07-29 15:21:42 3922 1

原创 基于本地消息表的最终一致性

本地消息表方案本地消息表这个方案最初是eBay提出的,此方案的核心是通过本地事务保证数据业务操作和消息的一致性,然后通过定时任务将消息发送至消息中间件,待确认消息发送给消费方成功再将消息删除。下面以注册送积分为例来说明 :下例共有两个微服务交互,用户服务和积分服务,用户服务负责添加用户,积分服务负责增加积分。交互流程如下 :1、用户注册用户服务在本地事务新增用户和增加“积分消息日志”。(用户表和消息表通过本地事务保证一致)begin transaction; // 1.新增用户

2021-07-28 23:55:17 754

原创 分布式事务之两/三阶段提交

两阶段提交协议(2PC:Two-Phrase Commit)两阶段提交又称2PC,2PC是一个非常经典的中心化的原子提交协议。这里所说的中心化是指协议中有两类节点:一个是中心化协调者节点(coordinator)和N个参与者节点(partcipant)。两个阶段:第一阶段:投票阶段 和第二阶段:提交/执行阶段。第一阶段:投票阶段该阶段的主要目的在于打探数据库集群中的各个参与者是否能够正常的执行事务,具体步骤如下:1)事务询问协调者 向所有的 参与者 发送事务预处理请求,称之为Prepare

2021-07-28 23:34:56 693

原创 python海象运算符

简介Python 海象运算符是在 PEP 572 中提出,并在 Python3.8 版本并入发布。海象运算符的英文原名叫 Assignment Expresions ,即 赋值表达式。海象表达式由一个 : 和 一个 = 组成,即::= 。我们一般称作 walrus operator(海象运算符),因为它看起来就是一个海象旋转 90° 而成。语法海象运算符的语法格式是:(variable_name := expression or value)即一个变量名后跟一个表达式或者一个值,这个和赋值运算

2021-07-26 17:11:25 4699

原创 记一次修改sudoers文件改坏后无法使用的惨痛经历☁☁

由于系统需求在修改/etc/sudoers文件时出现了语法错误,使用vim gedit等均无法打开/etc/sudoers文件,当时慌得一批,因为我感觉可能要凉了。>>> /etc/sudoers: syntax error near line 27 <<<sudo: parse error in /etc/sudoers near line 27sudo: no valid sudoers sources found, quittingsudo: unable

2021-07-23 16:47:29 885 6

原创 Golang配置模块viper

什么是ViperViper是Go应用程序的完整配置解决方案,包括12-Factor应用程序。它旨在在应用程序中工作,并可以处理所有类型的配置需求和格式。它支持:设置默认值从JSON,TOML,YAML,HCL和Java属性配置文件中读取实时观看和重新读取配置文件(可选)从环境变量中读取从远程配置系统(etcd或Consul)读取,并观察变化从命令行标志读取从缓冲区读取设置显式值Viper可以被认为是所有应用程序配置需求的注册表。为什么要使用Viper在构建现代应用程序时,您不必担

2021-07-21 15:48:18 1804

原创 golang高性能日志库zap

简介zap是uber开源的Go高性能日志库为什么选择Uber-go zap在介绍Uber-go的zap包之前,让我们先看看Go语言提供的基本日志功能。Go语言提供的默认日志包是Go Logger:https://golang.org/pkg/log/Go Logger的优势和劣势优势:它最大的优点是使用非常简单。我们可以设置任何io.Writer作为日志记录输出并向其发送要写入的日志。劣势仅限基本的日志级别只有一个Print选项。不支持INFO/DEBUG等多个级别。对于错误日志,它有

2021-07-21 15:12:07 980 3

原创 Vue项目中实现用户登录及token验证

在前后端完全分离的情况下,Vue项目中实现token验证大致思路如下:1、第一次登录的时候,前端调后端的登陆接口,发送用户名和密码2、后端收到请求,验证用户名和密码,验证成功,就给前端返回一个token3、前端拿到token,将token存储到localStorage和vuex中,并跳转路由页面4、前端每次跳转路由,就判断 localStroage 中有无 token ,没有就跳转到登录页面,有则跳转到对应路由页面5、每次调后端接口,都要在请求头中加token6、后端判断请求头中有无token,

2021-07-21 14:14:45 569

原创 Python轻量级ORM之peewee

简介Peewee是一个轻量级Python``ORM库。最主要是和Django的ORM 操作很像,如果你学过Django那么很容易上手。peewee支持三种数据库安装推荐使用pip命令:pip install peewee使用连接连接Mysql库如下:from peewee import *db = MySQLDatabase("test", host="127.0.0.1", port=3306, user="root", passwd="123456")db.connect()

2021-07-13 11:10:16 499

原创 基于promethus和granfana的监控平台

Prometheus什么是PrometheusPrometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。Prometheus目前在开源社区相当活跃。Prometheus和Heapster(Heap

2021-07-09 14:41:51 468

原创 Go语言gopsutil库监控系统性能

引言GO语言本身拥有极强的性能,非常适合做一些后端的数据采集管理以及运维系统。其中会面临对当前系统信息的采集,我在这里使用的是GO的工具包 gopsutilpython 上收集系统信息的著名模块是 psutil使用安装:go get github.com/shirou/gopsutil采集CPU相关信息import &quot;github.com/shirou/gopsutil/cpu&quot;// cpu infofunc getCpuInfo() { cpu

2021-07-09 14:19:10 1006

原创 一文搞懂基于Go语言的测试

单元测试单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。testing 提供对 Go 包的自动化测试的支持。通过 go test 命令,能够自动执行如下形式的

2021-07-08 18:17:07 358 2

原创 Raft算法、协议原理详解

引言分布式系统除了提升整个体统的性能外还有一个重要特征就是提高系统的可靠性。提供可靠性可以理解为系统中一台或多台的机器故障不会使系统不可用(或者丢失数据)。保证系统可靠性的关键就是多副本(即数据需要有备份),一旦有多副本,那么久面临多副本之间的一致性问题。比如,一台机器上的磁盘损坏,数据丢失,可以从另一台机器上的磁盘恢复(分布式系统会对数据做备份)比如,集群中某些机器宕机,整个集群还可以对外提供服务什么是RAFTRaft is a consensus algorithm for manag

2021-07-08 17:41:29 766

原创 python执行周期任务

如果你想要周期性的执行某个python脚本,最出名的就是选择Crontab脚本,但是Crontab不支持秒级任务而且执行任务过多时不好管理。其次就是celery,但celery使用比较麻烦,而且不够轻。那么Schedule就出现了:1.安装:pip install schedule2.示例:import scheduleimport timedef work(): print("我在工作")schedule.every(5).minutes.do(work)while True:

2021-07-07 17:36:33 1088

原创 Celery实际使用与内存泄漏问题

原因: worker执行任务以后不会自动释放内存解决: 在配置文件中限制worker的并发数CELERYD_CONCURRENCY = 2 # celery worker并发数CELERYD_MAX_TASKS_PER_CHILD = 5 # 每个worker最大执行任务数

2021-07-07 17:18:32 708 1

原创 go语言tail包使用简介

简介tail包的作用:tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,tail会自己主动刷新,确保你看到最新的档案内容 ,在日志收集中可以实时的监测日志的变化。使用1.下载tail包go get github.com/hpcloud/tail2.首先初始化配置结构体config3.调用TailFile函数,并传入文件路径和config,返回有个tail的结构体,tail结构体的Lines字段封装

2021-07-07 16:42:40 800

原创 Kafka快速入门

简介Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。主要应用场景是:日志收集系统和消息系统。Kafka主要设计目标如下:以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。高吞吐率。即使在非常廉价的商用机器上也能做到单

2021-07-07 16:01:30 461 14

原创 一文搞懂Go语言Context

Context简介Context 也叫作“上下文”,是一个比较抽象的概念,一般理解为程序单元的一个运行状态、现场、快照。其中上下是指存在上下层的传递,上会把内容传递给下,程序单元则指的是 Goroutine。Context 在 Go1.7 之后就加入到了Go语言标准库中,准确说它是 Goroutine 的上下文,包含 Goroutine 的运行状态、环境、现场等信息。为什么有 context在 Go 的 server 里,通常每来一个请求都会启动若干个 goroutine 同时工作:有些去数据库拿数

2021-07-07 15:01:35 456

原创 Gin框架安装的一些坑

1.下载Gin: go get -u github.com/gin-gonic/gin出现:package github.com/gin-gonic/gin: no Go files in E:\GO1\src\github.com\gin-gonic\gin解决办法:在cmd中运行: go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.io,direct设置后,重新运行: go get -u github.co

2021-07-02 22:29:45 1886 2

空空如也

空空如也

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

TA关注的人

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