自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Elasticsearch 组合查询的使用

这里介绍Elasticsearch 中的组合查询的使用细节,Elasticsearch支持类似于在SQL中使用AND、OR以及NOT的运算符,可以通过组合嵌套这些条件进行复杂的数据筛选。

2022-02-08 18:55:38 2013

原创 Elasticsearch 聚合搜索的使用案例

Elasticsearch的聚合搜索和mysql一样,Elasticsearch也支持对数据根据某一字段进行分组然后进行聚合分析。Elasticsearch聚合搜索有两个比较常见并且重要的概念,bucket和metric。Bucket,就是数据的分组,对某个字段进行分组的时候,这个字段值相同的那些数据就会被放到一个bucket中,SQL中的GROUP BY语法。Metric,对一个数据分组执行的统计。当有了一堆bucket的时候,就可以对每个bucket中的数据进行聚合分析了。数据准备这里简

2022-02-08 17:41:47 1075

原创 Go RocketMQ事务消息的使用

事务消息可以认为是一个两阶段提交的消息,来确保分布式系统的最终一致性。事务性消息保证了本地事务的执行和消息的发送能够以原子的方式进行。事务状态事务消息有三种状态TransactionStatus.CommitTransaction:提交事务,它意味着允许消费者使用此消息。在go client中对应 primitive.CommitMessageState (本文所指go client是github.com/apache/rocketmq-client-go/v2)TransactionStat

2022-01-25 13:09:38 2968

原创 Jenkins安装和使用

JenkinsJenkins 是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件,有丰富的插件支持,可以监控持续重复的工作。Jenkins的安装Jenkins可以作为一个服务直接安装在操作系统上,但是由于对java环境的要求,我这里选择使用docker安装。Jenkins的核心配置和运行时文件都放在/var/jenkins_home目录,所以可以选择将这个目录挂载到宿主机上。首先创建一个volume[root@k8s-master data]# docker vo

2022-01-14 15:27:23 973

原创 golangci-lint Go静态代码检查工具的使用

golangci lintgolangci lint是Go linter一个聚合器,里面内置了几十个linter,并且更新速度快,是一个强大的Go代码静态检查的工具。golangci lint的官方地址:https://golangci-lint.run/golangci lint安装官方提倡二进制安装,但为了快速入门,咱们就不使用二进制安装了# Go 1.16+go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.4

2022-01-12 17:56:27 2035

原创 go 使用lua脚本实现redis分布式锁

分布式锁的要求实现分布式锁之前要明确一下分布式锁的要求互斥性,在任意时刻,只能有一个进程持有锁防死锁,不能因为持有锁的客户端宕机而使其他进程无法获取到锁。加锁和解锁的必须是同一个进程。保证锁的续租。redis分布式锁的优缺点redis实现的分布式锁性能会比zookeeper、etcd等实现的要好,但因为单点故障或者主备异步复制的问题,可能会出现当master宕机crash会导致多个client同时持有分布式锁。(这里的方案会出现这些问题)因为etcd的高可靠、强一致存储,可以

2022-01-07 16:58:42 1018

原创 go etcd分布式锁的实现和使用

etcd的分布式锁在分布式系统中,通常需要使用分布式锁解决跨网络的多线程的共享资源竞争问题。使用etcd实现分布式锁可以确保确保了锁的安全性、互斥性,同时可以通过Lease确保持有锁的client的活性,当client发送宕机或者网络分区的时候,不会出现死锁。并且基于Raft保证了数据的强一致性,不会因为etcd实例宕机出现锁数据丢失的问题。这里介绍一下clientv3提供的concurrency包里的分布式锁的实现原理和使用示例。concurrency分布式锁源码介绍首先concurrency.

2022-01-06 15:43:21 2596

原创 etcd的事务

etcd的事务当需要批量操作etcd多个key的时候,常常需要让多次操作形成一个原子性的效果,要么同时成功,要么同时失败。etcd提供了事务的机制,可以实现多个key的原子性操作。这里使用etcd提供的go clientV3进行操作etcd的Op对象在事务中使用到了Op对象来执行操作,所以先介绍一下Op。Op对象是为了简化用户操作而开发的,可以根据ClientV3提供的函数来创建对应类型的Op对象、func OpDelete(key string, opts ...OpOption) Op /

2022-01-06 15:21:58 1799

原创 kubernetes基于Ingress实现灰度发布

Ingress的Canary注解之前写了篇基于Service实现灰度发布的文章 链接,使用Service实现的话只能保证新旧版本负载均衡时的权重,功能比较单一。使用Ingress除了可以使用权重控制负载均衡外,还可以实现基于http协议的header、cookie指定转发到指定版本的功能。这些功能是使用Ingress的Canary注解实现的。详细信息可以参考官方文档: https://kubernetes.github.io/ingress-nginx/user-guide/nginx-config

2021-12-25 15:44:44 2369

原创 kubernetes基于Service实现灰度发布

灰度发布灰度发布也叫金丝雀发布,是指一种平滑过渡的发布方式,可以实现两个版本的共存,服务的新版本先在小范围内上线,可以避免很多风险。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。基于Service实现的灰度发布的原理Service是基于标签去选择负载均衡的Pod的范围,Deployment也是基于标签选择控制的Pod的范围,两个版本的Deployment部署的时候可以都使用两个标签,一个标签用来保证控制的Pod都可以被Service选中,另外一个标签用来标识版本

2021-12-25 13:24:48 3024 1

原创 Go 泛型的使用

Go 1.18 Beta 1版本发布泛型2021年12月14日 Go 1.18 Beta 1版本发布,带来了大家争议已久的泛型。已经过去几天了,今天趁周末体验了下go泛型的使用,下面给大家介绍一下,demo是官方提供的。首先要把go的版本升级为Go 1.18 Beta 1Administrator@20201002-163950 MINGW64 ~/Desktop$ go get golang.org/dl/go1.18beta1@latestgo: finding golang.org/dl

2021-12-18 10:38:04 1665 1

原创 cgroup cpu子系统的总结

Cgroups是什么Cgroups全称control groups的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组的资源。Cgroups 的工作目录为/sys/fs/cgroup,这个目录下包含了Cgroups所有的子系统的配置目录和控制文件,可以通过这些文件来控制Cgroups。Cgroups的核心概念1.任务(task)在cgroups中,任务就是系统的一个进程。2.控制组(cgroup)一个cgroups包含一组进程,并可以在这个cgroups上增加子系统的各种参数配置,将

2021-12-10 14:38:24 2565

原创 Elasticsearch基于Painless脚本实现读写锁

Elasticsearch默认的并发控制在Elasticsearch中默认是使用乐观锁基于_version字段来实现并发控制的,_version字段记录的时候每次更新的版本号,只有拿到最新版本号的client才能更新成功,其他拿到过期数据的client则更新失败。Elasticsearch悲观锁控制方案下面介绍一下基于Painless脚本实现的Elasticsearch悲观锁方案。读锁(s锁):允许多个线程同时持有,用于对共享资源的读取,与写锁互斥。写锁(x锁):具有排他性,同一时间只能允许一个线

2021-12-05 19:01:32 230

原创 golang实现归并排序

golang 实现归并排序分治法归并排序是分治法的一种应用,分治法的核心思想是“分而治之”,就是把一个问题分化成若干个子可以用相同的方法去解决的小问题,再把子问题一层一层继续分化成粒度更小的子问题,直到最小单元的子问题可以很容易得到解,再把得到的解逐级合并为根问题的解。分治法主要分为三个步骤:分解、 解决、合并

2021-11-25 21:14:40 791

原创 Go内存对齐及unsafe包的总结

unsafe包中的三个重要函数介绍内存对齐之前首先要了解unsafe包中的三个重要函数一、unsafe包中的三个重要函数介绍内存对齐之前首先要了解unsafe包中的三个重要函数,函数签名如下:func Sizeof(x ArbitraryType) uintptrfunc Offsetof(x ArbitraryType) uintptrfunc Alignof(x ArbitraryType) uintptr1.1 unsafe.Sizeof这个函数可以返回一个类型所占用的内存大小,这个

2021-11-08 22:09:42 367

原创 innodb的 buffer pool运行机制的介绍(free、lru、flush链表、checkpoint以及redo log)

innodb的 buffer pool运行机制1.buffer pool 简介2.free链表3.flush链表4.lru链表5.redo log5.1 redo log buffer5.2 redo log 文件5.3 redo log 如何做到让已提交的事务持久化6.checkpoint6.1 checkpoint的主要目的6.2 checkpoint的分类6.2.1 sharp checkpoint6.2.2 fuzzy checkpoint1.buffer pool 简介大家都知道mysql的

2021-09-06 11:05:23 779 1

原创 go 实现单向链表

golang实现单向链表单向链表介绍单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的。单向链表的每个元素称为一个结点,每个结点可以在内存的任意位置,结点包含数据域和指针域。数据域是结点中存储数据元素的部分。指针域是下一个结点地址的部分。头指针在单向链表中,第一个结点前面是没有前驱结点的,他是整个链表的开始地址,如果想操作该节点,必须有一个指针变量指向该节点,这个指针变量称为头指针。头指针具有标识作用,所以常用头指针冠以链表的名字。对单链表的存取必须从头指针开始进行,由于单链表的最后一

2021-08-22 16:36:55 653 2

原创 golang 反射的基本使用、通过反射获取结构体标签案例

golang 反射的基本使用、通过反射获取结构体标签案例一、反射简介首先大概介绍一下反射,在Go中的反射是由 reflect 包提供支持的,它定义了两个重要的类型 Type 和 Value,任何接口值都可以使用reflect包中的reflect.TypeOf 和 reflect.ValueOf两个函数去获取其对应的reflect.Type和reflect.Value二、reflect.Type对于任意接口值,我们可以通过调用reflect.TypeOf函数获取reflect.Type类型的对象,从

2021-08-04 13:25:38 1224 1

原创 使用golang 实现deflate、zlib压缩解压数据

在golang的官方标准库的compress目录下,有bzip2、flate、gzip、 lzw、 zlib包实现对应算法的数据压缩和解压,其中gzip包的一些使用上篇文章有写到,这篇文章给大家分享下deflate包、zlib包的使用

2021-08-04 09:32:49 3027 2

原创 go实现gzip压缩、解压

分享一下使用go进行gzip的压缩和解压的过程

2021-08-03 17:21:46 5760 1

原创 Golang AES对称加密

AES加密AES对称加密简介AES是一个对称密码,旨在取代DES成为广泛使用的标准。是美国联邦政府采用的一种区块加密标准。AES对称加密过程加密解密算法的输入是一个128位分组。这些分组被描述成4×4的字节方阵,这个分组被复制到数组中,并在加密和解密的每一阶段都被修改。在字节方阵中,每一格都是一个字,包含了4字节。在矩阵中字是按列排序的。加密由N轮构成,轮数依赖于密钥长度:16字节密钥对应10轮,24字节密钥对应12轮,32字节对应14轮。AES加密模式电码本模式(Electronic C

2021-05-18 16:59:41 1685 10

原创 golang RAS签名

做过很多对接第三方平台的业务,几乎所有的接口对接都会用到Rsa进行签名,Rsa算法是使用私钥签名,公钥验签。下面直接上代码:package mainimport ( "crypto" "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/base64" "encoding/pem" "fmt" "io/ioutil" "testing")//通过文件加载私钥对象func LoadPrivateKey(privateKe

2021-05-18 15:18:39 948

空空如也

空空如也

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

TA关注的人

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