因为近期用到了Linux内核的相关知识,下面随笔将给出内核模块的编写记录,供大家参考。...运行环境 Ubuntu 版本:20.04 Linux内核版本:5.4.0-42-generic gcc版本:gcc version 9.3.0 驱动和一般应用程序的执行方式很大不同 2、内核模块模型说明...DriverMMap(struct file *pslFileStruct, struct vm_area_struct *pslVirtualMemoryArea); 16 17 #endif 8、编译内核模块的
可以创建不同类型set,如”hash:ip”,”hash:ip,port”,”hash:net,port”等 从执行命令到内核态,其流程为 ipset命令行 -> libipset.so -> ip_set.ko内核模块...->根据set类型选择ip_set_hash_ip.ko内核模块 那么应用层是如何解析set的命令和类型的,并且是如何将set名称和类型传递到内核态的呢?
内核模块代码hello.c #include #include #include #include
Feed,在社交和信息推荐的App与网站中,基本都会用到的。例如常用的新浪微博,用户登录进入后,展现给我们的就是feed信息流。新浪微博的信息,来自于你关注人所发布的内容。...本文会先介绍几种不同的Feed设计,让大家对Feed实现有初步的了解。其次会对我们采用的Feed方案作出详细的解答。 推方式 推方式,是发生在用户触发行为(发布新的动态,关注某个人,点赞)的时候。...[这里写图片描述] 拉的模式相对是比较简单易实现的,另外对用户关系变更(新增,删除用户)是敏感的。其次也不存在数据存储压力。但在查询的时候,对帖子表本身压力是很大的。
登陆验证 在一般项目账号体系中,一般会要求支持手机、邮箱、账号、QQ、微信、微博实现登陆。后面三种方式都是基于第三方授权后,完成的身份验证。手机、邮箱、账号则是相对传统的登录方式。...用户身份与登录的授权方式是独立开的,即用户uid和登录方式是一对多的关系。举例来说,用户A在使用微博授权登陆后,服务端鉴别身份信息为uid=123。...登陆授权表设计如下。...Access Token 与传统的Session相比,Access Token比较适合做RESTful Api开发。...另外也可以采用JWT实现。 希望转载的朋友能够尊重作者的劳动成果,加上转载地址。谢谢! http://gglinux.com/2017/04/15/IM_design/
背景 最近在研究LSM tree,听闻bitcask在LSM tree各种各样的应用中是一个比较简单的实现,所以就以它为突破口,了解下LSM tree真实世界的实现。...bitcask存储模型由Riak提出,github上有各种语言的实现,本人挑选了一个golang版本的实现来进行研究,源码地址是:git.mills.io/prologic/bitcask,学习过程中我添加了一些注释...,有需要的同学可以参考下:github.com/Orlion/bitcask 存储模型 与LSM tree的基本思想一样,bitcask中所有增删改操作都是追加写磁盘中的datafile,其数据结构如图...: 实际文件中是没有换行的,每个entry都是与前一个entry紧密串联在一起的,这里只是为了体现出来一个一个的entry。...总结 可以看到bitcask的实现还是非常简单(lou)的。put(k, v)加了全局锁,锁粒度较粗,并发读写性能应该不是很强。
,并且实现了 unix的api linux没有直接使用unix的源代码,但完整表达了unix的设计目标并保证编程接口一致 2....线程在linux中的实现 4.1 liunx线程概述 一组线程共享进程内的内存地址空间,打开的文件和其他资源 线程机制支持并发程序设计技术,多处理器上保证真正的并行处理 linux实现线程的机制非常独特...调度算法 3.1 概述 linux调度程序定义与kernel/sched.c 2.5版本内核重写调度算法,和以前版本区别很大,实现以下目标 充分实现O(1)调度,不管多少进程或什么输入,每个算法能在恒定时间内完成...超级块对象 各种文件系统都必须实现超级块,该对象用于存储特定文件系统的信息,通常对应于存放在磁盘特定扇区中的文件系统控制块 超级块数据结构定义与中的super_block。...文件对象 文件对象定义与中的struct file结构体 文件操作由file_operations结构体表示 具体的文件系统定义不同的实现 6.
Plugin 对于编译语言是非常重要的,而动态语言显得不那么重要,因为动态语言出现是为了互补编译语言本身存在缺陷而设计的。...Plugin & Hook 设计与实现 插件系统分为: 插件管理平台 插件探测 插件注册 插件调用 插件注销 14.6.1. 插件管理平台 14.6.1. 插件管理平台 <?
关于gunicorn的设计 Server Model Gunicorn is based on the pre-fork worker model....下面回到 run方法的实现上, WSGIApplication没有实现 run方法,重点还是看基类 BaseApplication的 run实现。...可以在fork子进程之前预处理一些操作,具体可以在 gunicorn.config的 Prefork类实现。...Worker 进程 这边我们重点来看看 Worker中 init_process的实现: class Worker(object): ......执行 run run方法由各个子类实现,我们来看看 SyncWorker的 run方法 class SyncWorker(base.Worker): ...
group=list 老版本 在 Redis 的老版本中 list 的实现和 Sorted Set 策略类似,对于不同数据量的情况下实现是不一样的。...而新版本中 Redis 使用了 quicklist 来实现,所以我们主要讨论的是 quicklist 是如何实现的。...那想要避免这个问题,就需要对 list 的编码方式重新设计。...设计的关键点主要就是编码方式,它通过 11110001 这样的形式来告诉你后面的数据是什么类型的数据,保存数据的位数是多少。...相对应的,从后向前查找时与 ziplist 是一致的通过 element-tot-len 能找到前一个元素的位置,不会影响。
Redis设计与实现,以及关于Redis使用的总结 1.数据结构与对象 1.简单动态字符串 Redis自己构建了简单动态字符串(Simple Dynamic String,SDS)来作为默认的字符串表示...哈希表的扩展与收缩:以下条件满足时: 服务器没有执行BGSAVE或BGREWRITEAOF命令,哈希表负载因子>1 服务器在执行BGSAVE或BGREWRITEAOF命令,哈希表负载因子>5...Redis中跳跃表的实现: ?...写入与同步:服务器每次结束一个时间循环之前,都会调用flushAppendOnlyFile函数,考虑是否将aof_buf缓冲区中的内容写入和保存到AOF文件中。...底层模型:它们之间底层实现方式以及与客户端之间通信的应用协议不一样。Redis直接自己构建了VM 机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
标签条件的节点,比如 nodeName, label, cpu, 磁盘,cpu 内存等: 这类插件包括: TaintToleration: 污点和容忍 NodeName:检查 Pod 指定的节点名称与当前节点是否匹配...: 选择资源分配较少的节点 NodeResourcesMostAllocated: 选择已分配资源多的节点 InterPodAffinity: 实现 Pod 间亲和性与反亲和性 ServiceAffinity...: 检查属于某个 Service 的 Pod 与配置的标签所定义的节点集是否适配。...几篇论文中的设计如 borg,mesos 也都是单 master + 多 slave 设计。borg 的经验告诉我们,中心化并不一定是一个性能瓶颈(数万节点,上万任务的调度频率)。...统一的 调度上层,类似 mesos/omega 或者 yunikorn 的方式,协调子调度器的关系,统一的调度层需要被精巧的设计,这种设计必须同时考虑灵活性、简洁性、功能性。
设计目标 Titan 作为 TiKV 的一个子项目,首要的设计目标便是兼容 RocksDB。...架构与实现 Titan 的基本架构如下图所示: [1-Architecture.jpg] 图 1:Titan 在 Flush 和 Compaction 的时候将 value 分离出 LSM-tree,这样做的好处是写入流程可以和...BlobFile 有几点值得关注的地方: BlobFile 中的 key-value 是有序存放的,目的是在实现 Iterator 的时候可以通过 prefetch 的方式提高顺序读取的性能。...TitanTableBuilder TitanTableBuilder 是实现分离 key-value 的关键。...[10-Random Key Lookup.jpg] 图 10 Random Key Lookup: Titan 拥有比 RocksDB 更卓越的点读性能,这主要得益与将 value 分离出 LSM-tree
《Redis设计与实现》读书笔记(三十二) ——Redis事务设计与实现 (原创内容,转载请注明来源,谢谢) 一、概述 redis的事务同数据库的事务概念一样,即多条命令都成功执行,才会生效...二、redis事务实现 redis事务实现包括事务开始、事务入队、事务执行。 1、事务开始 当客户端输入multi命令,表示事务开始。...与很多关系型数据库不同,redis不支持事务的回滚,因为redis的作者认为事务出错只有在开发环境中会有,生产环境没有。而回滚会导致redis代码复杂,与设计初衷不符。...3、隔离性 隔离性是指多个事务并发进行,各个事务不会互相影响,并且并发状态下执行事务与串行状态下执行事务结果完全相同。...4、watch命令通过数据库的redisDB结构体的watched_keys字典中,将字段与要监视的客户端进行关联,当键被修改,则相应的监视该键的全部客户端的REDIS_DIRTY_CAS标识被打开。
《Redis设计与实现》读书笔记(十) ——Redis对象相关其他设计与实现 (原创内容,转载请注明来源,谢谢) 一、类型检查与命令多态 redis对键操作的命令分为两种,一种是可以对任意键进行操作的命令...二、内存回收 由于实现redis的C语言,不具备垃圾回收功能,因此redis构建了一套内存回收机制,是基于引用计数技术实现的内存回收。
上一篇文章,我们分析并设计了关于构建引擎BuildEngine的切面设计。...本文我们将基于BuildEngine所提供的切面处理能力,在CustomCreateElementHandle中通过一些逻辑,来完成一个轻量级的设计器画布。 这个画布能够实现如下的一个简单的效果。...在后续的切面处理中,构建元素节点的时候,如果切面正在处理的节点path与selectedNodePath一致,则wrapper组件需要高亮,否则虚线。...对于这个渲染React组件,主要是将schema解析为ComponentNode结构,并交给构建引擎build,同时,我们还传入了自定义的创建过程: isSelected属性来自于当前正处理节点path与第...onClick属性的实现代码则是当wrapper组件点击后,更新selectedNodePath。
对 于每一个广告位,匹配过程如下: 构造检索服务的响应对象,根据广告位置类型实现对推广单元的预筛选,根据匹配信息实现对推广单元的再筛选 通过推广单元获取关联的创意实现,填充检索服务响应对象 @Slf4j...CreativeObject> creatives = DataTable.of(CreativeIndex.class).fetch(adIds); //根据广告位信息AdSlot 实现对创意对象的过滤...object.getAdPlanObject().getPlanStatus().equals(status.getStatus()) ); } /** * 通过广告位信息AdSlot 实现对创意对象的过滤...&& type.contains(creative.getType()) ); } /** * 一个广告位对应一个广告创意 * 实现过滤的广告创意对象
我们要设计一个什么样子的 failpoint? 理想的 failpoint 实现应该是什么样子?...Golang tags 也不能提供一个比较优雅的实现 (go build --tag="enable-failpoint-a")。...Failpoint 设计准则 使用 Golang 代码定义 failpoint,而不是注释或其他形式。...Golang 如何实现一个类似 failpoint 宏? 宏的本质是什么?..._curpkg_("mock-panic")) 为了可以在并行测试中防止不同的测试任务之间的干扰,可以在 context.Context 中包含一个回调函数,用于精细化控制 failpoint 的激活与关闭
之前发表过一篇ppt版的“PhxSQL设计与实现”,本文是在ppt的基础上,加上解说的文字内容,形成一篇详细版。 本文详细描述了PhxSQL的设计与实现。...从MySQL的容灾缺陷开始讲起,接着阐述实现高可用强一致的思路,然后具体分析每个实现环节要注意的要点和解决方案,最后展示了PhxSQL在容灾和性能上的成果。...设计背景 互联网应用中账号和金融类关键系统要求和强调强一致性及高可用性。当面临机器损坏、网络分区、主备手工或者自动切换时,传统的MySQL主备难以保证强一致性和高可用性。...PhxSQL设计思路 可靠日志存储 实现一个以可靠日志存储为中心的架构来解决MySQL数据复制时产生的数据不一致问题。...图10 可靠日志存储和Agent共同实现自动选主机制 PhxSQL架构和实现 从上述思路可以得出PhxSQL的简单三层架构。