thumbnail
【笔记】Operator课程(7-9)
client-go 架构图 Indexer原理 Indexer缓存k8s资源对象,并提供便捷的方式查询。例如获取某个namespace下的所有资源 indexer接口继承了store接口,所以indexer的实现类也是store的实现类。add方法被调用的地方和store一样,是reflector调用的。 type Indexer interfac…
thumbnail
【笔记】分布式缓存(1-2)
300分钟吃透分布式缓存——陈波 分布式缓存 01 业务数据访问性能太低怎么办? 缓存的定义 狭义缓存 加速CPU数据交换的存储器。 广义缓存 数据高速交换的存储介质,加速数据访问。 缓存成本 时间局限性原理,即被获取过一次的数据在未来会被多次引用,比如一条微博被一个人感兴趣并阅读后,它大概率还会被更多人阅读。 以空间换时间,因为原始数据获取太慢,…
thumbnail
【笔记】Operator课程(1-6)
白丁云原生:k8s编程-operator篇【已完结】 clientgo架构 以前以为client-go只是通过restclient去调用api server,其实不然,它还具备controller的逻辑,以实现更强大的k8s操作。 RESTClient原理 创建了所有版本的client,例如corev1,体现k8s向后兼容,只要正式版发布的接口不会…
thumbnail
玩玩NAS、软路由,搭建家庭影音系统
背景 我平时爱看一些高清电影,4k、HDR之类的,还有很多国内视频软件没有的电影。我媳妇也喜欢看剧,平时做饭的时候,都会用平板播放电视剧。所以我家对影音这块是有需求的。 之前觉得nas太重了,还调研过个人云存储:联想NAS A1调研,由于外网访问速度太低,最终没有入手。现在看来还好没有入手,那玩意没有docker,可玩性太低,特别是对于影音系统,需…
Leaf——美团分布式ID生成系统
Leaf——美团点评分布式ID生成系统 https://github.com/Meituan-Dianping/Leaf 数据库号段发号 线程池设置线程编号 public static class UpdateThreadFactory implements ThreadFactory { private static int threadInit…
利用golang-migrate,实现 Golang 项目启动时自动维护数据库变更
前言 数据库变更管理是软件发布必不可少的环节,理想状态是只需发布一个镜像,就能更新应用和数据库。我们项目使用gorm来操作数据库,gorm是具有数据库迁移功能的,但是没有SQL脚本直观。另外我们的应用是同库多服务的微服务,还有些服务存在多个实例的情况,这就需要考虑数据竞争问题了。经过调研,最终选择了Github 10k star 的golang-m…
thumbnail
Go 进阶训练营 – 并行编程一:Goroutine
Processes and Threads 进程 操作系统会为该应用程序创建一个进程。作为一个应用程序,它像一个为所有资源而运行的容器。这些资源包括内存地址空间、文件句柄(文件描述符)、设备和线程。 不同的应用程序使用的内存空间不同,在操作系统里,就是用进程来做的资源管理、隔离。 线程 线程是操作系统调度的一种执行路径,用于在处理器执行我们在函数中…
thumbnail
Go 进阶训练营 – 评论系统架构设计四:可用性设计
Singleflight 对于热门的主题,如果存在缓存穿透的情况,会导致大量的同进程、跨进程的数据回源到存储层,可能会引起存储过载的情况,如何只交给同进程内,一个人去做加载存储? 使用归并回源的思路:https://pkg.go.dev/golang.org/x/sync/singleflight,同一时间只有一个协程去拿数据,拿到数据前,相同任务…
thumbnail
跳表:为什么Redis一定要用跳表来实现有序集合?
前言 时间复杂度O(logn)的二分查找很高效,但是依赖数组随机访问的特性,如果是链表,如何做到O(logn)? 跳表 原始链表查找时,需要遍历链表,时间复杂度就是O(n),光靠原始链表是不行的。 我们可以增加辅助链表,达到索引的作用,使用起来类似二叉搜索树。 查找时,从上往下,一层一层的查找,类似二叉搜索树。索引层可以继续增加,效率会得到提升。 …
thumbnail
Go 进阶训练营 – 评论系统架构设计三:存储设计
存储设计 comment_subject 抽象的主题表,把评论的主体抽象出来,包含专有属性,例如state。 id:mysql必须有主键,不建立主键mysql也会提供一个rowId 使用自增,为了顺序存储,提高读写性能。 索引搜索快还是主键搜索快? 索引搜索是根据索引字段找到主键,再通过主键去找到记录,也就是二级索引。 用递增int不会带来安全性问…