Giter Site home page Giter Site logo

notes's Introduction

note

文章列表

kubernetes

hashicorp raft

golang badger

golang bitcask rosedb

traefik

golang 高性能缓存

other

notes's People

Contributors

qcrao avatar rfyiamcool avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

notes's Issues

关于 ReplicaSet Controller expectations 的理解

非常感谢作者关于 Kubernetes 源码的分享,在阅读关于 ReplicaSet Controller 源码的文章时,发现和作者的理解有些不一致的地方:

  1. 关于 expectations 中 CreationObserved 和 DeletionObserved 方法其实都是对 add 或 del 值 -1
// CreationObserved atomically decrements the `add` expectation count of the given controller.
func (r *ControllerExpectations) CreationObserved(logger klog.Logger, controllerKey string) {
	r.LowerExpectations(logger, controllerKey, 1, 0)
}

// DeletionObserved atomically decrements the `del` expectation count of the given controller.
func (r *ControllerExpectations) DeletionObserved(logger klog.Logger, controllerKey string) {
	r.LowerExpectations(logger, controllerKey, 0, 1)
}

https://github.com/rfyiamcool/notes/blob/6e7be7db68d1dadca095de34a6abaf651cbf81a2/kubernetes_kube_replicaset_controller_code.md?plain=1#L181C1-L182C1

2.expectations 的作用
expectations 中 ExpectCreations 和 ExpectDeletions 都是在 manageReplicas 方法计算得到 add/del 数量后调用的,其含义是「预期创建/删除的数量」,这里的预期其实是 Pod informer 预期收到的创建/删除 Pod 的通知数量
举个例子,预期创建 Pod 为 10, 并且创建失败 3 个(skippedPods 为 3),也就是说在 Pod informer 预期应该收到 7 个创建 Pod 的回调通知,那每收到一个回调通知,会做一次 CreationObserved,假设此时只收到一个,那么在 SatisfiedExpectations Fulfilled 逻辑中 add 值为 6,也就返回 false,这就会跳过 manageReplicas 逻辑,因为此时的 Pod 数量和 spec 中的 replicas 数量不一致是符合预期的,实际上已经调用过 CreatePods 了,只是还在创建中,所以用 expectations 机制就是为了避免重复的创建/删除 Pod
这也就回答了您的问题「有个问题, 当 Fulfilled 返回 true, 也就是当前集群副本数跟预期状态一致时, 为什么还返回 true ?」

badgerdb 事务的问题

你好,我在badger SSI事务实现原理这篇文章的时候,发现这张图片可能有误
image
tx2 的提交时间在tx1的后面,o,hasConflict函数检查的o.committedTxns中事务,tx1提交时o.committedTxns里面应该还没有tx2事务,所以tx1事务不应该报冲突错误吧
8L_9)2@(Y}R{I8 `G1VJFO7

你看看我分析的对吗?

您好,有些问题想问的

您好前辈,看到您源码分析的文章,对我帮助很大!
最近我有时间也会看看源码分析,也想一起搭建您创建的这个项目~

【基于 golang 的消息推送系统 gotify 的设计实现原理 】之上的一些想法

你提出的新想法中:
type API struct {
clients map[uint][]*client //我个人感觉这个还可以优化一些
lock sync.RWMutex
pingPeriod time.Duration
pongTimeout time.Duration
upgrader *websocket.Upgrader
}
//个人想法
type API struct {
clients map[uint]*userInfo
lock sync.RWMutex
pingPeriod time.Duration
pongTimeout time.Duration
upgrader *websocket.Upgrader
}

type userInfo struct {
userId uint
clientLock sync.RWMutex
allClients []*client
//还可以保留一些其它信息
}

//这样的好处是 外层的锁只会做很少的事
//内层加锁是不影响到其他用户的,而且slice是有datarace问题的,不加锁会有问题

bigcache ringbuffer 扩容的一点疑问

https://github.com/rfyiamcool/notes/blob/main/golang_bigcache_cache.md
您好,感谢您的分享,很受用。但是在看代码和您的分享过程中发现对于 ringbuffer 扩容场景有点对不上,以下是我个人分析,如有错误还请批评指正,谢谢!

文章中提到第二种扩容场景,如下图所示:
202304051930272

但是看代码对于 q.head > q.tail 的场景,实现应该是 oldArray 先整体拷贝到新的 array 中,然后填充 q.head-q.tail 个空字符 slice,主要是为了将 tail 指针移动到跟 head 保持一致,如下图所示:
bigcache drawio

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.