自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (5)
  • 收藏
  • 关注

原创 【etcd】4.boltdb存储引擎(一):boltdb的核心思想

每个 db 会有个默认的 root bucket,以此为起点可以衍生出一个 bucket B+ 树,每个 bucket 下的数据又是一颗 B+树。freelist page:存储空闲 page 信息,哪些 page 空闲可用,哪些 page 将被事务释放(全局维度,相当于 go 语言中的 heap,以空间换时间,缓存并管理空闲 page 以供复用,减少与操作系统的交互频率)memory-mapping,是内核的一个概念,它隐藏了与磁盘交互的细节,使用方能够像访问内存中的字节数组一样读取磁盘文件中的内容。

2024-06-30 17:39:21 657

原创 【k8s】8.k8s的网络模型(二):Flannel网络模型

flannel 通过该配置可以将网卡的 IP、MAC 信息存储到 etcd 中,这样,flannel 就知道所有的节点分配的 IP 段及 VTEP 设备的 IP 和 MAC 信息,并且所有节点的 flanneld 都可以感知到节点的添加和删除操作,就可以动态的更新本机的转发配置。上述介绍都是基于 VXLAN 实现的 Flannel 网络,VXLAN 适用于三层可达的网络环境,对集群的网络要求很宽松,但是同时由于会通过 VTEP 设备进行额外封包和解包,因此给性能带来了额外的开销。

2024-06-29 17:26:30 812

原创 【k8s】7.k8s网络模型(一):容器网络接口CNI,VXLAN网络

VXLAN 虚拟可扩展的局域网(Virtual eXtensible Local Area Network),是一种 overlay 技术,通过三层的网络来搭建虚拟的二层网络。由于k8s容器的所有流量都会打到网桥上,那么可以直接将 VTEP 设备插到网桥上,容器流量通过网桥发至 VTEP 设备,再经过 VXLAN 网络转发出去。创建在原有的 IP 网络(三层)上,只要是三层可达(能够通过 IP 互相通信)的网络就能部署 VXLAN。)设备,负责 VXLAN 协议报文的封包和解包,也就是在虚拟报文上封装。

2024-06-29 15:29:32 671

原创 【k8s】6.pod控制器(二):pod拓扑分布约束,优先级与抢占,pod驱逐

比如 kubelet 还来不及驱逐,Node 上的资源就被耗尽导致宕机,此时 control-plane 无法正常和该节点通信,拿不到节点上的 Pod 的状态,因此会做最坏的打算,认为这些 Pod 都挂了,因此会将该 Node 上的所有 Pod 都驱逐到其他节点重新跑起来,以保证高可用。node-eviction-rate: 驱赶 Node 的速率,由令牌桶流控算法实现,默认为 0.1,即每秒驱赶 0.1 个节点(注意这里不是驱赶 Pod 的速率,而是驱赶节点的速率,相当于每隔 10s,清空一个节点)

2024-06-23 19:31:32 924

原创 【k8s】5.pod控制器(一):pod生命周期,健康检查,滚动更新,重启与崩溃

又称为控制器,是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试进行重启,当根据重启策略无效,则会重新新建pod的资源。k8s提供几种资源作为工作负载:无状态的:Deployment, Replicaset有状态的:Statefulset守护进程:Daemonset批处理:Job, Cronjob。

2024-06-16 18:47:05 1030 1

原创 【k8s】4.调度器的调度策略:节点选择器,节点亲和性,污点与容忍,pod亲和性

1 节点的调度策略我们可以在node节点上定义的一些规则,来决定上。1.1 节点选择器nodeSelector这是一种较常用也是较简单的方式,将pod调度到指定label的node上,可以满足一般情况下的调度需求。这样pod就会被调度到有对应标签的节点上了。如果找不到任何一个node有nodeSelector定义的标签,pod是会一直Pending的~1.2 节点亲和性。

2024-06-16 17:13:50 789

原创 【k8s】3.k8s的调度过程:一个deployment的创建过程

deployment controller:监听deployment的创建事件,创建相应的replicaset副本集(控制副本数量)。replicaset controller:监听replicaset的创建事件,创建相应的pod。预选:遍历k8s集群中所有的pod,根据节点亲和性、污点、容忍、硬件资源计算等,选出符合要求的ndoe最为预选node。controller manager监听到etcd中的事件,对于不同的资源,触发不同的处理方式。以上三种接口是k8s定义的标准,具体的实现都是由插件完成的。

2024-06-16 14:59:35 1007

原创 【traefik】traefik性能测试

无论是将业务节点增到6个,traefik节点增到3个,还是增加并发,都不能提升cpu利用率,nginx、traefik、业务pod的cpu都打不满。在12核机器上,单 nginx 节点cpu最多不到3核,单traefik不到2核,每个业务pod不到1核....将traefik服务增加至3节点,业务服务6节点,并对业务服务重新分配节点确保负载均衡,进行测试,发现性能没有明显变化。以下 traefik 服务为单pod,业务服务为3pod,且limit限制4个cpu、2G内存。请求traefik入口。

2024-05-18 15:54:53 841

原创 !真是一场酣畅淋漓的docker & k8s安装大战

根据报错查具体问题记一次 Get “http://localhost:10248/healthz“: dial tcp [::1]:10248: connect: connection refused解决办法_node join dial tcp 127.0.0.1:10248: connect: conne-CSDN博客# job.yamlkind: Jobmetadata:spec:template:metadata:labels:spec:状态正常~~

2024-05-01 04:33:51 358 2

原创 【traefik】基于k8s搭建traefik, nginx与traefik共存

ingress controller 负责解析 Ingress 的反向代理规则,当它收到请求后就会根据规则将请求转发到对应的 Service。每种边缘路由都有自己的 ingress controller,如 nginx ingress controller。此toml文件是静态的,不会热更新,关于动态配置文件下一篇再聊。检查pod 状态是否正常即可。

2024-04-27 23:16:32 1247

原创 【网络】http2.0

http1.x的传输单位是报文段,http2.0将传输单位切分为更小的帧(报文段的一个数据块),多个帧可以并行乱序发送,根据帧首部的流标识重新组装,提高传输速度。并且通讯双方各自存储一份头部字段表,不需要再重复发送header,如果header发生了变化,则只需将变化的部分加入到header帧中,更新头部字段表即可。服务器可以根据流的优先级,控制资源分配(CPU、内存、带宽),而在响应数据准备好之后,优先将最高优先级的帧发送给客户端。对http1.x主要是性能上的提升,且对1.x兼容。

2024-04-27 19:39:04 101

原创 【网络】http & https

服务器申请CA证书:服务器向一个可信的证书颁发机构(CA)申请一个数字证书,包含了服务器的公钥和一些其他信息,并由CA使用其私钥进行签名。客户端生成预主密钥并加密:客户端生成一个预主密钥(Pre-Master Secret),使用之前从CA中提取出的公钥对预主密钥进行加密,将加密后的预主密钥发送给服务器。生成会话密钥:客户端和服务器都拥有了相同的预主密钥,使用预主密钥等信息,计算出会话密钥(Session Key),用于后续的加解密。客户端的CA公钥与CA对服务器提供的公钥进行签名的私钥是一对。

2024-04-27 19:37:27 514

原创 【网络】tcp

接收方收到数据后,会对数据进行同样的校验和计算,并与发送方的校验和进行比对。所以在server发送ACK后,需要等待client的close()信号,表示对方已经确定没有数据传输了,再发送FIN信号。中告诉发送方其当前可用的缓冲区大小,发送方则根据这个信息来调整发送速率,避免发送过多的数据导致接收方无法及时处理。为每个数据段分配一个唯一的序列号,接收方在收到数据后,会向发送方发送一个包含接收到的数据段序列号的确认应答(如果发送方没有收到确认应答,或者序列号不连续,它会重新发送丢失或损坏的数据段。

2024-04-27 19:31:33 534

原创 【数据库】分库分表 & 数据库迁移

2. 数据库迁移1. 分库分表。

2024-04-27 19:25:22 486 1

原创 【数据库】elasticsearch

当删除请求发送后,文档并没有真的被删除,而是在.del文件中被标记为删除。在新的文档被创建时,Elasticsearch会为该文档指定一个版本号,当执行更新时,旧版本的文档在.del文件中被标记为删除,新版本的文档被索引到一个新段。在创建索引时,可以指定主分片的数量,一旦索引创建完成,主分片的数量就不能再更改。副本分片与主分片分布在不同的节点上,当主分片所在的节点出现故障时,副本分片可以接管主分片的工作,确保服务的连续性。副本是主分片的完全复制,用于提供数据的冗余备份,增强数据的可用性和容错能力。

2024-04-27 19:17:49 470 2

原创 【数据库】mongo

而多键索引主要用于支持包含数组或嵌套文档的字段的查询,它允许数据库系统对数组中的每个元素进行索引。索引大小:非聚簇索引的大小通常取决于索引字段的值和指针的大小。而多键索引可能会增加索引的大小,因为对于每个数组元素,索引条目:非聚簇索引的索引条目是指向数据行的指针和索引字段的值。而多键索引的索引条目是数组元素或嵌套文档本身。索引本身是在高速缓存当中,相比磁盘IO操作会有大幅的性能提升。面向文档 的存储方式(bson),模式自由,不需要字段定义。单字段索引、复合索引、多键索引、哈希索引、文本索引。

2024-04-27 19:11:24 258

原创 【数据库】mysql

同样,如果查询条件包含范围查询,如a=1 and b>2 and c=3,那么索引匹配在b字段上就会停止,因为b字段是一个范围查询,它之后的字段(如c字段)将无法使用索引。一个表可以有多个非聚簇索引,因为非聚簇索引只是数据的副本,并不会改变数据的物理存储顺序。优化查询计划:查询优化器生成一个或多个可能的查询执行计划,优化器会评估每个计划的成本(磁盘/CPU/内存),选择成本最低的。在一个事务内执行相同的查询,但由于其他事务插入了满足其查询条件的新行,导致第二次查询返回了更多的行。

2024-04-27 19:08:07 922

原创 【数据结构】B树, B+树, B*树, 红黑树, 平衡二叉树

mongo的存储引擎 WiredTiger 实现lazyB树,是一种 B+ 树变种。任一节点的左子树和右子树都是平衡二叉树,且高度差不能超过1(平衡因子)(1)mongo 3.2之前用的是B树,后面改为B+树。在B+的非根和非叶子结点,增加指向兄弟的指针。(4)数据插入和删除。

2024-04-27 18:57:01 942

原创 【分布式】分布式锁:redis/etcd/mysql/zookeeper的分布式锁

watch 并不会 watch 所有 key,而是 revision 小于自己且最接近自己的那一个 key,那么所有取锁方就会根据 revision 排成队列,锁释放时,只会通知到下一个取锁方,不会惊群。若一把锁的竞争比较激烈,那么锁的释放事件可能同时被多个的取锁方监听,一旦锁被释放,所有取锁方都会一拥而上尝试取锁。每个取锁方都写入一个 kv,绑定租约,key形如 {prefix}/{leaseId},并获取自身的 revision(那么不同取锁方key的revision都不同)

2024-04-27 18:44:33 558

原创 【分布式】事务 & TCC

TCC Transaction:支持广义的分布式事务,每个模块需要改造成实现 Try/Confirm/Cancel 能力的 TCC 组件,通过事务协调器进行全局 Try——Confirm/Cancel 两阶段流程的串联,保证数据的最终一致性趋近于 100%Transaction Message:支持狭义的分布式事务,基于消息队列组件中半事务消息以及轮询检查机制,保证本地事务和消息生产两个动作的原子性,但不具备事务的逆向回滚能力。使用mq,本地事务包裹消息投递的方式处理事务。

2024-04-27 18:37:00 943

原创 【Web框架】4.GRPC基于etcd做服务注册与发现

客户端首先取得服务端的节点 endpoint 列表,基于一定的负载均衡策略选择到特定的 endpoint,直连发起请求.grpc负载均衡策略:pick_first选第一个(默认);round_robin轮询。常用的负载均衡策略:随机、轮询、加权随机、加权轮询、源地址哈希法、最小连接数法。

2024-04-27 18:20:16 524

原创 【k8s】2.k8s通信原理

kube-proxy 监听 service 和 endpoint 的变化,当有 service 创建时,所有节点的 kube-proxy 在节点上随机选择一个端口,在 iptables 中追加一条,把访问 service 的请求重定向到这个端口的,并监听这个端口的连接请求。pause 容器会创建一个网络命名空间,其他容器加入到 puase 容器中共享 pause 的网络,一个 pod 中所有的进出流量都是通过 pause 容器完成的,通过 localhost 相互通信。(封包解包有性能开销)

2024-04-27 18:04:14 1306 1

原创 【k8s】1.k8s架构

分为两大部分:master节点:负责提供API通信接口,集群的管理、调度、数据存储node节点:负责容器的运行,运行的生命周期管理。

2024-04-27 17:26:12 300 1

原创 【go-zero框架】2.服务注册与发现

本篇讨论etcd的服务注册与发现方式~

2024-04-27 17:20:02 426

原创 【docker】2.docker网络

每一个docker容器拥有自己的网络命名空间,那么容器之间是如何通信的呢?docker容器有4种通信方式:bridge模式(默认)host模式container模式none模式。

2024-04-19 21:50:57 789

原创 【Web框架】【go-zero框架】1.goctl工具

go-zero框架与goctl工具

2024-04-18 18:43:17 314

原创 【go的测试】2.性能测试

性能测试,benchmark,pprof,abtest

2024-04-09 22:17:59 707

原创 【go的测试】1.错误测试

1. go的几种测试1. go的几种测试错误测试:模糊测试 fuzzingmockmonkey性能测试:基准性能测试 benchmarkpprofab测试其他第三方工具本章总结的是几种错误测试,性能测试见下节。2. go test 命令参数3. Fuzzing 模糊测试(1)Fuzzing 模糊测试(随机测试)一种基于随机输入的自动化测试技术。Fuzzing不需要像单元测试那样使用预先定义好的数据集作为程序输入,而是会通过数据构造引擎自行构造或基于开发人员提供的初始数据。

2024-04-09 21:55:01 302

原创 【Web框架】3.GRPC原理

RPCRPC1. rpc协议rpc远程过程调用,是一套协议,基于这套协议规范来实现的框架都可以称为 rpc 框架,常见的 Dubbo、Thrift 和 gRPC。本地方法调用的形式:对于调用方来说,调用 rpc 方法和调用本地方法并没有明显区别。保存服务端地址信息请求编码:将客户端请求方法名、参数等打包,序列化发送请求到服务端(grpc用的是http2方式发送的)接收请求:包含要调用的方法名、参数、其他元数据,并解码调用本地方法:将请求中的参数传递给本地方法,并等待执行。

2024-03-27 23:06:23 806

原创 【Web框架】2.Gin框架

为了能快速找到并组合完整的路由,GIN 在添加路由的同时,会在每个节点中添加 Priority 这个属性。Context 是通过中间件来传递的,在处理 HTTP 请求时,Gin 会依次执行注册的中间件,每个中间件可以对 Context 进行一些操作,然后通过Next() 将 Context 传递给下一个中间件。会将注册的中间件函数HandlerFunc 添加到路由组的函数链HandlersChain中,后续路由组下新注册的 handler 都会在前缀中拼上这部分公共的 handlers。

2024-03-27 22:49:45 918

原创 【Web框架】1.go的net/http标准库

调用链:Post()->Client.Post()->Client.Do()->Client.send()->Transport.RoundTrip()若无可用连接,通过 queueForDial 异步创建一个新的连接,并通过接收一个ready channel的方式,等待连接创建完成。Transport.dialConn:调用 Transport.dial 创建 tcp 连接,并启动异步。persistConn.roundTrip:通过 tcp 连接完成与服务端的交互。for + Accept 阻塞。

2024-03-27 22:39:43 901

原创 【etcd】3.lease租约

在v2版本:没有lease概念,ttl属性携带在key上,etcd client为每个key/ttl创建一个http连接,定时发送请求给etcd server。当ttl短(续期频繁)、key多时,对性能有很大影响。v3版本:将ttl属性绑定在lease上,多个key可以复用一个lease,且将http优化为grpc连接,多路复用流式传输,一个连接可以为多个租约续期,减少了连接数。KeepAlive()——永久续期,客户端只需调用一次,并监听返回值channel,若被closed表示租约被中断。

2024-03-26 17:41:57 930

原创 【etcd】2.mvcc与etcd watch

4. 读源码1. MVCCMVCC(Multi-Version Concurrency Control)多版本并发控制:一种机制,用于实现分布式系统中的并发控制。集群的版本号Revision:逻辑时间戳,全局单调递增,任何 key 的增删改都会使其自增key的版本号CreateRevision:创建 key 时集群的 Revision, 直到删除前都不变ModRevision:修改 key 时集群的 Revision, key 更新时会自增Version:初始为1,更新时自增。

2024-03-26 17:22:08 972

原创 【docker】1.docker的虚拟化原理

docker的虚拟化原理,namespace命名空间,control group资源隔离,unionFS联合文件系统

2024-03-24 20:19:56 666

原创 【etcd】1.etcd架构与raft算法

etcd架构。

2024-03-24 18:50:21 1105

原创 【redis】redis原理

1、redis的主要思想(1)哈希桶redis用一个全局的哈希表保存所有的键值对,这张哈希表里有多个哈希桶,每个哈希桶中的entry保存了key和value指针,*key指向实际的键,*value指向实际的值。(2)查找过程先通过key计算哈希值,找到对应的哈希桶位置,然后定位到entry,在entry找到对应的数据。(3)哈希冲突不同的key经过哈希函数计算后映射到了同一个位置,落在同一个哈希桶中。解决方式:链式哈希,同一个哈希桶中,多个元素用一个链表来保存,它们之间依次用指针连接。

2024-03-24 18:21:30 736

原创 【go基础】17.系统监控sysmon

Golang的系统监控:go内部启动了一个不会中止的循环,在循环的内部会轮询网络抢占长期运行或者处于系统调用的Goroutine以及触发垃圾回收,通过这些行为,让系统的运行状态变得更健康。主要工作:检查死锁运行计时器:计算与触发计时器轮询网络:管理I/O和网络操作抢占处理器:工作窃取机制,避免线程饥饿问题垃圾回收:定时或内存使用率过高时,触发gc。

2024-03-24 16:46:44 799

原创 【go基础】16.I/O模型与网络轮询器netpoller

一、I/O模型在linux世界中,所有I/O设备被抽象为文件Everything is File,都通过文件操作:open 打开;seek 改变读写位置;read write 读写;close 关闭文件描述符(File descriptor,FD):用于访问文件或者其他 I/O 资源的抽象句柄,例如:管道或者网络套接字。不同的 I/O 模型会使用不同的方式操作文件描述符。5种I/O模型:同步的阻塞I/O模型非阻塞I/O模型I/O多路复用模型信号驱动I/O模型异步I/O模型。

2024-03-24 16:32:58 632

原创 【go基础】15.定时器Timer, Ticker

调度器调用 runtime.findrunnable 获取可执行的goroutine 或从其他处理器窃取计时器时。每个P拥有一个最小四叉堆,单独管理。交给网络轮询器和调度器触发,较少上下文切换开销。将全局四叉堆分成64个更小的四叉堆,每个处理器(P)创建的计时器由对应的四叉堆维护。后台系统监控(函数runtine.sysmon)会检查是否有未执行的到期计时器。3. go 1.14之后,每个处理器单独管理计时器,并通过网络轮询器触发。这种分片方式降低了锁粒度,提高了性能,但是造成了cpu频繁上下文切换。

2024-03-24 16:13:18 409

原创 【go基础】14.sync之ErrGroup, Semaphore, SingleFlight

为一组 goroutine 中做同步、错误提取、上下文取消1、初始化2、Go() 接口启动一个goroutine运行任务,可以返回err3、Wait() 接口对sync.WaitGroup的简单封装4、多个goroutine的错误提取控制访问资源的进程数量,保证持有的计数器在0到初始化的权重之间波动。每次获取资源时都会将信号量中的计数器减去对应的数值,在释放时重新加回来;当遇到计数器大于信号量大小时,会进入休眠等待其他线程释放信号。创建信号量Acquire ——

2024-03-22 23:03:40 508

学习资料 golang的GMP调度模型

视频教程+笔记+ppt

2023-11-02

基于稀疏表示的人脸表情识别程序

基于稀疏表示的人脸表情识别matlab程序,用KSVD构建稀疏表示字典,OMP算法重构信号,实现表情的识别。

2018-06-30

利用模糊算法进行边缘检测的例子

使用模糊理论做的边缘检测的matlab小例子,可以时间简单的图像边缘检测。

2018-06-30

NSGA-2 matlab 实例

NSGA-II非支配排序遗传算法的matlab实例,完整程序可直接运行

2018-06-30

android界面——图片轮播

android简单的界面,包括图片轮播,图片滑动

2016-01-19

android界面-图片轮播VeiwPager

android界面,包含简单的图片轮播,图片滚动等

2016-01-19

空空如也

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

TA关注的人

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