论文阅读:The Google File System
如果你在其他平台看到这篇文章,这可能不是最终版本。为了获得更好的阅读体验(包含最新的评论讨论和勘误),欢迎移步原文 GFS 是什么 GFS 是 Google 为了应对海量数据增长,通过分布式软件架构抵消廉价硬件的不可靠性,并针对其特定业务(大文件追加、流式读取)量身定制的高扩展存储系统。 预设的情景提到 Google 的大多数场景都是顺序读,这是什么场景? Google 早期的大量任务(如构建搜索索引、数据分析)主要依赖 MapReduce 等分布式处理框架,这些程序通常会扫描整个数据集。它们从文件的开头开始,一直读到结尾,将数据分块处理 架构 GFS 的架构如下图所示 一个 Master 节点 元数据全部在内存中进行处理,但会以追加 LOG 的形式持久化到磁盘 块位置通过查询得到,无需存储 控制流和数据流分离避免主节点成为瓶颈 若干个 ChunkServer (默认三副本不同机架) Q:为什么往磁盘中写 LOG,而不是用数据库的形式管理 LOG 呢? A:磁盘可以对大量 LOG 直接进行一次性的追加写,这样只需要等磁盘旋转一次,但是数据库是 B...
论文阅读:MapReduce
MapReduce 的目的 当时互联网刚刚兴起,需要一套系统来处理海量的数据计算问题,同时要做到简单易用,且有足够的容灾能力 创新点 提出了一种新的编程范式,使用 map 将大规模问题转换为子问题,然后用 reduce 将子问题的解汇总,将所有任务抽象为了这两个动作。 map 和 reduce 操作可以用下式概括: map(k1,v1) → list(k2,v2)reduce(k2,list(v2)) → list(v2)\begin{aligned} \text{map} &\quad (k_1, v_1) &\;\rightarrow\; \text{list}(k_2, v_2) \\ \text{reduce} &\quad (k_2, \text{list}(v_2)) &\;\rightarrow\; \text{list}(v_2) \end{aligned} mapreduce(k1,v1)(k2,list(v2))→list(k2,v2)→list(v2) map...
以一种访问权限不允许的方式做了一个访问套接字的尝试处理
有一个项目需要运行在本地 http 服务器的 8080 端口上,之前还好的,今天突然就提示 以一种访问权限不允许的方式做了一个访问套接字的尝试, 在管理员模式下运行 netstat -ano | findstr 8080 没有任何输出 上网搜索发现这可能是一个规则问题 https://stackoverflow.com/questions/54671199/kestrel-unable-to-start 尝试执行 netsh interface ipv4 show excludedportrange protocol=tcp,发现 8080 端口不知道为什么被排除了,使用以下指令成功修复: net stop winnatnetsh interface ipv4 show excludedportrange protocol=tcpnet start winnatnetsh interface ipv4 show excludedportrange protocol=tcp 参考 (Windows)以一种访问权限不允许的方式做了一个访问套接字的尝试处理 Kestrel...
阿里云OSS资源路径避坑
阿里云 OSS 在解析请求时会把 + 转义成 (空格),这点与 S3 恰恰相反,需要做预处理
CPPCLI将第三方DLL链接到CSharp项目
最近需要将第三方的 DLL 封装成 csharp 的模块,可是我没有源码,只有头文件,网上综合调查了方案,最后选择了 C++/CLI 具体可见微软的官方文档 第一步,创建 CLR 项目 这里默认你已经通过各种手段获得了 DLL 和头文件 这里使用 Visual Stdio 创建一个新的 C++ CLR 项目 基本编辑 这里的基本语法还是和 C++一样的 进入项目,自行创建一个类,就会生成一个 CPP 和 H 文件 这里需要在头文件中包含 DLL 内相关函数和类定义的头文件,直接使用绝对路径包含即可 #include "path\to\your\header.h"public ref class YourModule {} 然后像 C++创建一个类那样,设置构造函数和成员函数,并实现 这里你的实现可以直接调用 DLL 中的函数,实现封装。 设置编译选项 右键项目,打开属性,将 Release 的配置类型修改为“动态库(. dll)”,注意这里的目标平台需要和你的 DLL...
tcpdump指定dst端口抓包失败
tcpdump 在抓包时使用 libpcap filter 作为过滤,这种过滤语法又叫 BPF 语法,其中可以使用 port num 作为语法过滤指定端口的报文,但是有时会发现,当启用过滤后,反而无法从指定端口抓到包,而没有过滤时却可以看到相关的包 遇到这种问题,可能是由于你监听的网卡是 VLAN,VLAN 网卡在发送报文时会加上一个 VLAN 头来标识,这时需要改变原来的语法,使用 vlan and port num 进行过滤,这样就可以识别出 vlan 报文,进而对报文的端口进行识别。 vlan [vlan_id] True if the packet is an IEEE 802.1Q VLAN packet. If the optional vlan_id is specified, only true if the packet has the specified vlan_id. Note that the first vlan keyword encountered in an expression changes the decoding offsets...
为什么hexo在生成时会修改md文件
最近在搭建个人博客自动化时,我发现 Hexo 在生成时总会修改 markdown 文件的 front-matter 部分,修改内容集中在日期和标题相关的字段,并且会自动为其添加引号。这引起了我的好奇,于是我决定探究一下 省流 标题自动添加引号是为了避免纯数字标题类型错误 日期自动添加引号是因为我的日期格式不正确修改为标准 utc 时间格式后不会自动添加引号(用官方 cli 创建了一个 md 文件后马上就发现了这一点……) 过程 下面放源码 for (const [key, item] of Object.entries(data)) { if (moment.isMoment(item)) { data[key] = item.utc().format('YYYY-MM-DD HH:mm:ss'); } else if (moment.isDate(item)) { data[key] = moment.utc(item).format('YYYY-MM-DD...
zerotier自建planet容器迁移
最近续费域名发现阿里云服务器 99 一年 2c2g,感觉自己血亏用了一整年的 78/month 的腾讯云,遂决定迁移。 经过测试发现 Zerotier 在迁移后需要根据 IP 重新生成 planet 文件,仍然需要重新分发,目前似乎没有好的解决办法,不如重新安装,安装时服务器的防火墙端口记得开 Nginx 配置 这次有一个阿里云的域名,干脆顺便配个 nginx 首先安装 nginx yum install nginx 然后进入到 nginx 的目录,新建一个配置文件,写入以下内容 cd /etc/nginxvim conf.d/zerotier.conf upstream zerotier { server 127.0.0.1:3443;}server { listen 80; server_name {your_site}; # 替换为自己的域名 location /zerotier/ { proxy_pass http://zerotier/; ...
20250127001036
本来以为 workflow 已经很完善了,没想到随便一测又报错了,尝试解决未果,无奈删除子模块引用,直接暴力 clone 复杂度果然是自动化之敌
基于ARM架构交叉编译libpcap库的技术指南
基于 ARM 架构交叉编译 libpcap 库的技术指南 一、交叉编译环境搭建 1. 获取交叉编译工具链 推荐使用 Linaro 官方提供的 6.2 版本工具链: wget https://releases.linaro.org/components/toolchain/binaries/6.2-2016.11/arm-linux-gnueabihf/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf.tar.xz 文件校验信息: SHA256: 5eb7ab2f8a0b4b960900321505cd6923a072cb3e2412102f5f72a6e74c2f0a55 2. 配置编译环境 # 解压工具链tar -xvf gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf.tar.xz# 添加至环境变量export...


