SeaweedFS文件存储原理及使用demo
SeaweedFS 是一个高效的分布式文件系统,设计目标是快速存储和检索大量的文件。其架构简单、可扩展,并能处理数十亿个文件。SeaweedFS 通过将文件切分成小块,并分布式存储于多个卷服务器(Volume Server),从而实现了横向扩展。下面我将详细介绍 SeaweedFS 的工作原理及其关键组件。
工作原理及组件1. 核心概念和组件SeaweedFS 主要由以下核心组件构成:
Master Server(主控服务器): Master Server 负责管理文件系统的元数据,如文件的分布、卷的状态等。它并不参与实际文件的存储操作,而是作为中央协调者,指导客户端如何与实际存储服务器交互。Master Server 支持水平扩展,通过 Leader 选举实现高可用性。
Volume Server(卷服务器): Volume Server 是实际存储文件数据的服务器。每个 Volume Server 存储多个卷(Volume),每个卷存储多个文件块。Volume Server 负责读取和写入文件,并直接与客户端交互。Volume Server 可以在集群中水平扩展,新增的 Volu ...
部署Elasticsearch 8.15.0版本
Elasticsearch 和 Kibana 是由 Elastic 公司开发的一组开源软件,用于实时的分布式数据搜索、分析和可视化。
ElasticsearchElasticsearch 是一个基于 RESTful API 的分布式搜索引擎,最早由 Shay Banon 开发。它最显著的特点是:
全文搜索:Elasticsearch 使用倒排索引(inverted index)支持高效的全文搜索,使得对海量文本数据的检索速度非常快。
分布式架构:Elasticsearch 的数据存储在多个节点中,支持分片和多副本,以提高数据的可用性和查询效率。
强大的查询功能:支持复杂的查询语法,能够对结构化和非结构化数据进行快速查询。
实时数据分析:在大数据分析和日志处理场景中,Elasticsearch 能够实现近乎实时的分析和展示。
通常,Elasticsearch 被用于构建搜索引擎、日志分析、监控、机器学习等场景,如电商网站的商品搜索、日志管理系统中的实时数据检索等。
KibanaKibana 是 Elastic Stack 的数据可视化和管理工具,通常与 Elasticsearch 搭 ...
邮箱配置DKIM签名,防止被运营商拦截
DKIM(DomainKeys Identified Mail) 是一种用于验证电子邮件的身份和完整性的技术。它通过给发件人的电子邮件头部附加一个数字签名,来确保邮件没有在传输过程中被篡改,并确认邮件确实来自声明的域名。DKIM 是电子邮件安全生态系统中重要的组成部分,通常与 SPF(Sender Policy Framework)和 DMARC(Domain-based Message Authentication, Reporting & Conformance)共同使用,以减少垃圾邮件和欺诈性邮件的风险。
DKIM 的工作原理
生成密钥对:域的管理员生成一对公钥和私钥。公钥发布在 DNS 记录中,私钥则保留在邮件服务器上,作为签名邮件的依据。
邮件签名:当邮件从发件人服务器发出时,邮件服务器使用私钥对某些邮件头部字段(例如 From、To、Subject 等)和邮件体内容生成数字签名,并将该签名作为 DKIM-Signature 头部添加到邮件中。
邮件接收:当接收方的邮件服务器收到这封邮件时,它会提取邮件中的 DKIM-Signature 头部信息,并从发件人的 DNS ...
依赖注入工具wire
Wire 是 Google 提供的一个用于生成依赖注入代码的工具。它通过分析代码中的提供者(providers)函数和结构体构造函数,自动生成依赖注入的代码,从而减少手动编写依赖管理代码的负担。
下面是一个使用 Wire 的简单示例。
示例场景假设我们有一个简单的应用程序,它有一个 UserService,该服务依赖于 UserRepository。UserRepository 又依赖于一个 Database 连接。
目录结构123456- main.go- wire.go- wire_gen.go- database.go- user_repository.go- user_service.go
1. 定义依赖项database.go1234567891011121314151617package mainimport "fmt"type Database struct { DSN string}func NewDatabase() *Database { return &Database{ ...
通过经纬度判断是否中国地区
项目中需要判断是否中国区,通过经纬度来判断
写了一个方法, 划定一个矩形框区域来判断是否在中国区域。
简单判断-矩形区域123456789101112type Point struct { Lat float64 Lng float64}func CorrectInChina(loc Point) bool { if loc.Lng >= 72.004 && loc.Lng <= 137.8347 && loc.Lat >= 0.8293 && loc.Lat <= 55.8271 { return true } return false}
但这样精度太差,误差太大。俄罗斯边界等区域都会被划分进来。
射线法射线法(Ray Casting Algorithm)是一种用于判断点是否在多边形内的常用算法。其基本原理是:从该点向任意一个方向发出一条射线,计算这条射线与多边形各边相交的次数。如果相交次数为奇数,则该点在多边形内;如果相交次数为偶数,则该点在多边 ...
Burp Suite破解安装使用
破解下载破解包https://github.com/Tcilay-xi/backup/blob/main/BurpLoaderKeygen/BurpLoaderKeygen.jar
下载官方安装包 https://portswigger.net/burp/releases#professional
安装Mac版Burp
将注册机放置到/Applications/Burp Suite Professional.app/Contents/Resources/app目录下
执行以下命令启动注册机
12cd "/Applications/Burp Suite Professional.app/Contents/Resources/app""/Applications/Burp Suite Professional.app/Contents/Resources/jre.bundle/Contents/Home/bin/java" -jar BurpLoaderKeygen.jar
汉化包,点开链接之后点击releases ,然后下载Assets 下 ...
Gitlab搭建CI/CD,配置runner
Getting started with GitLab CI/CDGitLab 提供了一个持续集成服务。如果你在仓库的根目录添加一个 .gitlab-ci.yml 文件,并配置你的 GitLab 项目使用一个 Runner,那么每次提交或推送都会触发你的 CI 管道。
.gitlab-ci.yml 文件告诉 GitLab runner 需要做什么。默认情况下,它会运行一个包含三个阶段的管道:构建、测试和部署。你不需要使用所有三个阶段;没有任务的阶段会被忽略。
简而言之,获得一个工作中的 CI 所需的步骤可以总结为:
在你的仓库根目录添加 .gitlab-ci.yml 文件
配置一个 Runner
Push .gitlab-ci.yml to GitLab一旦你创建了 .gitlab-ci.yml 文件,你应该将它添加到你的 Git 仓库并推送到 GitLab。
12345bash复制代码git add .gitlab-ci.ymlgit commit -m "Add .gitlab-ci.yml"git push origin master
现在如果 ...
使用go-zero搭建api及grpc中台
安装goctl参照官方文档,安装goctl
123go install github.com/zeromicro/go-zero/tools/goctl@latest# 验证goctl --version
创建Api服务12345678mkdir go-zero-demo && cd go-zero-demo# 生成go.modgo mod init go-zero-demomkdir api common rpcls # api common rpcmkdir -p api/doc/sys && cd api/doc/sys# touch user.api
创建user.api, 内容如下
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586syntax = "v1&q ...
GoPath和Go Modules包管理
1、概述大多数语言都有“依赖”、“包”等概念,Go语言的依赖处理经历了几次变革
最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面
从v1.5开始开始引入vendor模式,如果项目目录下有vendor目录,那么go工具链会优先使用vendor内的包进行编译、测试等
从v1.11开始,引入了Go Module 作为依赖解决方案,到v1.14宣布Go Module已经可以用于生产环境,到v1.16版本开始Go Module默认开启
2、GOPATH介绍2.1 GOPATH目录GOPATH是什么,输入如下命令查看
12# go env GOPATHGOPATH="/Users/ssgeek/go"
进入到该目录下,目录结构如下
12345678910111213141516171819# cd `go env GOPATH`# tree -L 2 ..├── bin│ ├── dlv│ ├── go-outline│ ├── gomodifytags│ ├── gopkgs│ ├── goplay│ ├── gopls│ ├ ...
消息队列nsq介绍
nsq介绍NSQ 是一个消息队列中间件,用 go 实现。特点:
分布式: 它提供了分布式的、去中心化且没有单点故障的拓扑结构,稳定的消息传输发布保障,能够具有高容错和高可用特性。
易于扩展: 它支持水平扩展,没有中心化的消息代理( Broker ),内置的发现服务让集群中增加节点非常容易。
运维方便: 它非常容易配置和部署,灵活性高。
高度集成: 现在已经有官方的 Golang、Python 和 JavaScript 客户端,社区也有了其他各个语言的客户端库方便接入,自定义客户端也非常容易。
集群及组件nsqdnsq 核心逻辑所在,负责接收消息、排队消息、并投递消息给消费者。
nsqlookup负责管理拓扑信息,类似于kafka的 zookeeper。用于服务注册、发现。
Topic一个 topic 就是程序发布消息的一个逻辑键,当程序第一次发布消息时就会创建 topic
Channel类似 kafka 中的消费组,是消费者之间的负载均衡。每当一个发布者发送一条消息到一个 topic,消息会被复制到所有消费者连接的 channel 上,然后将消息随机推送到其中一个消费者
数 ...