NanoLog起步笔记-1
nonolog起步笔记-1
- 背景与上下文
- 写在前面
- Nanolog与一般的实时log的异同
- 现代log的一般特性
- Nanolog的选择
背景与上下文
因为工作中用到了NanoLog。有必要研究一下。
前段时间研究了许多内容,以为写了比较详实的笔记,今天找了找,不仅笔记没找到,本来做那的测试工程,也被删除得一干二净。
痛定思痛,记录一下。
写在前面
学习一种新的技术,最好的办法是先不要看,先要思考自己的需求,如果自己来实现,应当如何做。最好写在纸上。
然后再找现成的轮子。这时,不要被这些轮子影响。
Nanolog与一般的实时log的异同
现代log的一般特性
一般的实时log,都是由几个元素构成:
1。 分为client和server。 这样做的目的,是为了做到客户端导步工作,数据放下就扭头就走。不需要客户端自己操作耗时的circle锁和IO。
server则,独占一个core,完成后半段的工作。从buffer取出数据,存入到硬盘中。
这里对于sever端,已有许多选择,例如,不写入磁盘,而是维护一个固定大的内存区块。
甚至,将这个内存建在非分页内存上,以便于程序crash后,甚至OS重启后,数据仍然能够获得。
2。 分为多个client共用一个circlebuffer,还是每client用一个自己私有buffer.
各有利弊。
如果共用一个cirlce buffer,那么,内存总占用量,不因client增加而增加。这种情况,可以将client与线程,甚至是线程更小的粒度绑定。
但这种缺点是极为明显的,随clent的增加,等待circle buffer写锁的时间,越来越长。不得不将部分log丢弃。
3。 对,任何一个log你都必须设计丢弃的机制!这点极为重要!因为,任何一个主动对象都是系统的一个成员,系统第一要务不是完成产品需求和用户的需求,而是自己的生存!系统一定要保证不能被日志累跨。
4。 现代的log,一般都是将client绑在core上,每个core利用目前现代CPU支持的原子操作,忙等待完成写入,而且写入的是自己的私有的buffer,私有的buffer为什么还要加原子锁的原因是,因为OS,可能将当前线程,调往另一个核执行。但,如果采用了亲和性和核隔离,那么,原子锁也不需要。
5。 全面二进制化。消除任何对字符串操作的消耗。
Nanolog的选择
1。 Nanolo的server端,是独立线程,采用了异步io,所以,看起来是两个线程。这个设计,并一定是很理想,事实上,并不理想。如果你想实现全memory log,则需要自己处理一下。
而且异步io,并不是可控的,是OS自动完成的。
2。 client,似乎是以每thread为单位(实际是进程),而不是以core为最小粒度。比如perf,lttng等,它们是以核为单位。
以线程为单位有好处,但缺点是占用内存较多。以及,随着线程增加,server轮循每线程私有buffer获取数据的负但也在增加,日志丢失的可能性多了一项:由于sever忙于处理同类的buffer,而可以导致某个线程的log丢失的概率不再可控。
3。二进制化。这也是现代微秒级以下log必须要做的。
nanolog在这方面,做了许多相对超前和创新的工作。
一般而言,只要二进制化,只能是完全自定义的,例如CTF,以前工在flexran上,Intel的MLog,等等。
但Nanolog,在这方面的尝试,是相当值得肯定的,直接将printf二进制化。
这个许多人的文章写了一些,后面我也会详细讲解。
现在我们可以简单说一下google的开发者,在没有C++17之前,是采用事先预处理方式来实现了,在C++17之后,完全采用compiling time来实现该功能。
相关文章:
NanoLog起步笔记-1
nonolog起步笔记-1 背景与上下文写在前面Nanolog与一般的实时log的异同现代log的一般特性Nanolog的选择 背景与上下文 因为工作中用到了NanoLog。有必要研究一下。 前段时间研究了许多内容,以为写了比较详实的笔记,今天找了找,不仅笔记没找到…...
汽车车牌标记支持YOLO,COCO,VOC三种格式标记,4000张图片的数据集
本数据集支持YOLO,COCO,VOC三种格式标记汽车车牌,无论是新能源汽车还是油车都能识别标记,该数据集一共包含4000张图片 数据集分割 4000总图像数 训练组 70% 2800图片 有效集 20% 800图片 测…...
leetcode33.搜索旋转排序数组
整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], ..., nums[n-1], nums[0], nums[1], ..…...
Ansible自动化运维(三)playbook剧本详解
Ansible自动化运维这部分我将会分为五个部分来为大家讲解 (一)介绍、无密钥登录、安装部署、设置主机清单 (二)Ansible 中的 ad-hoc 模式 模块详解(15)个 (三)Playbook 模式详解 …...
通过PS和Unity制作2D动画之二:IK的使用
一、IK的概念 IK:Inverse Kinematics,反向动力学。 (1)正向动力学 在骨骼动画中,构建骨骼的方法被称为正向动力学。它的表现形式是:子骨骼(关节)的位置根据父骨骼(关节…...
图像边缘检测原理和常用检测算子及MATLAB实现
一、边缘和边缘检测的概念 图像边缘是指图像中灰度值发生急剧变化的地方,这些变化通常对应于图像中物体的轮廓、边界或纹理的突变处。在数字图像处理中,边缘是图像的一个重要特征,它包含了关于物体形状、位置和大小等关键信息。 边缘检测是数…...
企业经营数据分析系统:提升决策能力的利器
搭建企业经营数据分析系统是当今企业绕不开的话题,企业想要在竞争激烈的市场当中突围而出,需要对于企业内部的各种数据了然于胸,同时对于外部的数据也有敏锐的把握能力,因此企业构建自身的经营性数据分析系统就显得尤其重要。作为…...
【49】AndroidStudio构建其他人开发的Android项目
(1)做Android软件开发,通常会看一些其他人开发的项目源码,当将这些项目的源码通过git clone到本地之后,用AndroidStudio进行打开时,通常会遇到一些环境配置的问题。本文即用来记录在构建他人开发项目源代码这一过程中遇到的一些常…...
Oracle 数据库中SERIALLY_REUSABLE包是一种特殊的包类型
1、SERIALLY_REUSABLE 包概述 在 Oracle 数据库中,SERIALLY_REUSABLE包是一种特殊的包类型。这种包的目的是为了更有效地利用内存,特别是在高并发环境下。当一个会话调用SERIALLY_REUSABLE包中的过程或函数时,该包的状态(包括变量…...
css基础记录
基础 选择器 复合选择器 后代选择器 div p {}; 类似如上,找到div中所有的后代,注意是所有的后代 子代选择器 > div > a 只选择div的儿子中有a的 并集选择器 用逗号,分隔 p,div,span,h1 { … } 一般一行写一个 CSS元素显示模式 分为块元素,行内元素 块元素 特点…...
Python后端 -- 万字长文全面解析Django框架
自从2005年诞生以来,Django因其“开发速度快、安全性高”的特点迅速成为许多开发者的首选。无论是小型的个人项目,还是大型的企业应用,Django都能游刃有余地满足需求。我们将从Django的基础知识带你全面掌握Django,从基础知识到高…...
el-thee懒加载删除某条数据 ,el-thee懒加载重置,el-thee刷新某个节点
一、懒加载的tree已经全部展开,外部点击删除的时候不需要重新展开点击获取下一层数据 <template> <el-treeref"tree":data"treeData":props"defaultProps"render-after-expandhighlight-currentlazy:expand-on-click-node&q…...
【PyQt5教程 四】Qt Designer 样式表(styleSheet)实现基本小部件的自定义动态效果和资源浏览器背景添加方法
目录 一、成果演示: 二、样式表的使用方法: (1)样式表语法和属性: (2)样式表代码示例: (3)伪类和状态: (4)复合选择器ÿ…...
【git】--- 通过 git 和 gitolite 管理单仓库的 SDK
在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【git】--- 通过 git 和 gitolite 管理单仓库的 SDK 开发环境一、安装配置 gitolite二…...
计算机网络之NAT、代理服务、内网穿透、内网打洞
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络之NAT、代理服务、内网穿透、内网打洞 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论…...
2024-金盾信安杯线上赛 WP
Misc 大赛宗旨 记事本打开,一眼零宽隐写 B 神工具一把梭,得到一串 base 编码 base64 解码得到 flag flag 值:flag{5d5555fa-1303-4b43-8eef-d6ea7c64c361} esab 根据题目 esab 可以发现这正是 base 的逆向,所以可以先逆向一下…...
MySQL 基础架构
MySQL的基础架构主要由三大核心部分构成,以下是详细的解析: 一、连接层 连接层是客户端与MySQL数据库之间的桥梁,主要负责通信和身份验证,确保数据交换的安全与稳定。具体来说,它负责以下任务: 建立连接…...
汽车升级到底应不应该设置“可取消“功能
最近,汽车OTA(Over-the-Air)升级频频成为车主讨论的热点。有些车主反映,一些升级增加了实用功能,而另一些却让体验变得复杂甚至带来不便。于是,大家不禁发问:汽车升级功能究竟应不应该允许“可取…...
【MySQL】mysql中的事务
目录 1、背景2、事务的特性3、事务之间的几种错误【1】脏读【2】不可重复读【3】幻读 4、事务中的隔离级别5、总结 1、背景 事务是存储引擎层面实现的,有的引擎支持事务,有的引擎不支持事务,我们常用的引擎InnoDB就支持事务,本文…...
大语言模型(LLM)与智能机器人的应用分析
系列文章目录 前言 近年来,大型语言模型(LLM)的集成彻底改变了机器人领域,使机器人能够以人类熟练程度进行交流、理解和推理。本文探讨了 LLM 对机器人的多方面影响,并针对在不同领域利用这些模型的关键挑战和机遇进行了研究。通过将 LLM 应用程序分类并分析核心机器人元素…...
Inno Setup 学习笔记(一)
前言 最近想把自己写的Windows端的软件打包成安装程序exe,又觉得自带的界面太丑了,想自己完全做一个新的页面 网上找到的只有基础教程,记录一下进阶学习过程 生命周期 按照Vue的说法叫生命周期,Inno Setup中叫 Pascal 脚本: 事…...
从阿里云EDM到美团云:典型微服务治理平台的实战经验分享
目录 一. 阿里云 EDM(Enterprise Distributed Application Service) 二. 腾讯云 TSF(Tencent Service Framework) 三. 华为云 FusionStage 四. 京东云 JDC(JD Cloud Microservice Platform) 五. 百度智…...
【接口自动化测试】一文从3000字从0到1详解接口测试用例设计
接口自动化测试是软件测试中的一种重要手段,它能有效提高测试效率和测试覆盖率。在进行接口自动化测试之前,首先需要进行接口测试用例的设计。本文将从0到1详细且规范的介绍接口测试用例设计的过程,帮助读者快速掌握这一技能。 一、了解接口…...
反向代理-缓存篇
文章目录 强缓存一、Expires(http1.0 规范)二、cache-control(http1.1 出现的 header 信息)Cache-Control 的常用选项Cache-Control 常用选项的选择三、弊端协商缓存一、ETag二、If-None-Match三、Last-modified四、If-Modified-Since浏览器的三种刷新方式静态资源部署策略…...
【伪代码】数据结构-期末复习 线性表
目录 例1 矩阵相乘 线性表 2.1 线性表的类型定义 例2-1 求并集 LALA∪LB 例2-2 有序表归并 2. 2 线性表的顺序表示和实现 1.构造空表 2.插入 3.删除 4.定位 顺序表的优点: 顺序表的缺点: 例…...
JavaWeb学习、过滤器、ajax异步请求、json、jquery-api文档
一、过滤器: 按照过滤规则筛选出想要的资源。 为什么使用过滤器? 1. 很多地方都需要判断是否登录。如果我们在每个资源出进行判断,非常麻烦。我们可以使用过滤器在访问这些资源前进行判断。 (这样就不用在主界面,修改…...
深入探索 JVM:原理、机制与实战
一、JVM 概述 JVM(Java Virtual Machine)是 Java 程序运行的核心组件,它提供了一个独立于硬件和操作系统的执行环境,使得 Java 程序能够在不同平台上具有跨平台的特性。 JVM 主要由以下几部分组成: 类装载器…...
JavaWeb学习(3)(Servlet详细、Servlet的三种实现方式(面试)、Servlet的生命周期、传统web.xml配置Servlet(了解))
目录 一、Servlet详细。 (1)基本介绍。 (2)基本作用。 1、接收客户端请求数据。 2、处理请求。 3、完成响应结果。 二、Servlet的三种实现方式。 (1)实现javax.servlet.Servlet接口。 1、基本介绍。 2、代码…...
支付宝租赁小程序助力便捷生活新方式
内容概要 支付宝租赁小程序为现代人带来了许多惊喜,它不仅仅是一个简单的租赁平台,更是生活中不可或缺的好帮手。想象一下,无论你缺少什么,从工具到家居用品,只需轻轻一点,便能轻松找到需要的物品。这个小…...
Linux-ubuntu环境配置
一,安装VWware,里面导入镜像文件 这些都是文件夹里面有的,然后对着正点原子视频安装就行,虚拟机的破解码,去百度搜一个能用就行,中间遇见俩问题。①乌班图里面不能上网,②插入U盘后,…...
创个网站怎么弄/汕头网页搜索排名提升
有时候字符串需要做一些左,中,右对齐操作,比如商场打印的发票的,收费项都是左对齐,金额右对齐,抬头中央对齐,在Python的有对应的三个函数ljust(), center(), rjust() 分别对应左、中、右操作! 有…...
做响应式的网站有哪些/网页制作图片
版本化您的应用 版本控制是一个非常重要的概念,在应用升级和维护的时候非常有用。版本控制的重要性因为:Versioning is a critical component of your application upgrade and maintenancestrategy. Versioning is important because: Users need to ha…...
找工程项目/如何优化网页加载速度
vim常用命令总结 (转) 在命令状态下对当前行用 (连按两次), 或对多行用n(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n排版,相当于一般IDE里的code format。使用ggG可对…...
国外建设工程网站/系统优化软件十大排名
AI派在读学生小姐姐BeyonceJava实战项目练习群长按识别下方二维码,按需求添加扫码添加Beyonce小姐姐扫码关注进Java学习大礼包今天是机器学习100天学习计划的第2天,我们将实现一个简单的线性回归模型。线性回归模型就是基于单一特征(X&#x…...
外贸网站外包/北京学校线上教学
前面的话 上一篇介绍了变速运动,但只实现了直线运动。如果元素的left和top同时运动,并遵循不同的曲线公式,则会进行不同形式的曲线运动。本文将详细介绍圆周运动、钟摆运动、抛物线运动和流体运动这四种曲线运动形式 圆周运动 圆周运动可能是…...
phpcmsv9网站地图/怎样开自己的网站
我们在使用笔记本电脑连接网络的时候,经常会碰到感叹号,这个感叹号代表了无internet访问,有很多用户都不知道这个问题怎么解决,那么win7系统无internet访问怎么办呢?今天为大家分享win7系统无internet访问的解决方法。无internet…...