随笔分类 - 分布式
摘要:1. 创建ceph专用网络 docker network create --driver bridge --subnet 172.20.0.0/16 ceph-network 之后我们使用docker网络相关指令可以看到创建的 ceph-network 相关信息 docker network ins
阅读全文
摘要:1. CAP需求 在分布式环境下,设计和部署系统时主要考虑下面三个核心系统需求: 一致性(Consistency):所有节点在同一时间具有相同的数据 可用性(Availability):保证对于每个请求的成功或失败都有响应 分区容错性(Partition Tolerance):系统中信息的丢失或者失
阅读全文
摘要:1. 复制状态机 复制状态机,就是说每一台服务器上维持着一份持久化Log,然后 通过一致性协议算法,保证每一个实例中的Log保持一致,并且顺序存放,这样客户端就可以在每一个实例中读取到相同的数据。 如上图所示,有一个Consensus Module就是一致性协议模块,它可以是Paxos算法的实现或者
阅读全文
摘要:1. redis分布式锁原理 redis实现分布式锁其实就是对key进行操作 加锁:给对应的lockkey赋值,就进行了加锁操作,其他进程发现该lockkey已经值了有值了,就说明锁已经被别人获取 解锁:获取到锁的进程删除这个lockkey 锁超时:避免客户端宕机导致无法正常释放锁 1.1 加锁 加
阅读全文
摘要:尝试基于grpc和docker pubsub包,提供一个跨网络的发布和订阅系统 安装依赖: go get github.com/moby/moby/pkg/pubsub 首先通过proto定义一个发布和订阅服务接口: syntax="proto3"; package pb; option go_pa
阅读全文
摘要:1. 什么是gRPC gRPC是谷歌公司基于protobuf开发的跨语言的开源RPC框架,基于http/2协议设计,对移动设备更加友好。 go语言gRPC技术栈最底层为TCP或者Unix套接字协议,在此之上是http/2协议的实现,然后在http/2协议之上有构建了针对go语言的gRPC核心库。应用
阅读全文
摘要:1. RPC简介 RPC是远程系统调用的缩写,通俗地讲就是调用远处的一个函数,可能是一个文件内的不同函数,也可能是一个机器上另一个进程的函数,也可能是远处机器上的函数。 RPC是分布式系统中不同节点之间的通信方式,Go的标准库也实现了一个简单的RPC。 2. RPC简单使用 首先构造一个HelloS
阅读全文
摘要:1. cron表达式的基本格式 cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,cron有如下两种语法格式: second minute hour dayofmonth month dayofweek year second minute hour day
阅读全文
摘要:1. 架构分析 1.1 传统crontab痛点 机器故障,任务停止电镀,甚至cron配置都找不回来 任务数量多,单机硬件资源有限,需要人工迁移到其他机器 需要人工去机器上配置cron,任务执行状态不方便查看 1.2 分布式架构的核心要素 调度器:需要高可用,确保不会因为单点故障停止调度 执行器:需要
阅读全文
摘要:go客户端实现mongoDB的增删改查 所有api的使用和说明都在官方文档: https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo#pkg-index 下面只记录一下项目中用到的简单的增删改查操作 可能用过mysql和redis客户端的不太习惯mo
阅读全文
摘要:1. mongoDB功能介绍 1.1 核心特性 文档数据库,基于二进制json存储文档 高性能、高可用、直接加机器就可以解决扩展性问题 支持丰富的CRUD操作,例如聚合统计、全文检索、坐标检索 1.2 文档数据库 存放的是json格式的数据,任何字段都不需要提前定义 { name:"pp", age
阅读全文
摘要:1. 分布式锁的特点 锁是在执行多线程时用于强行限制资源访问的同步机制,在单机系统上,单机锁就可以很好地实现临界资源的共享。而在分布式系统场景下,实例会运行在多台机器上,为了使多进程对共享资源的读写同步,保证数据的最终一致性,引入了分布式锁。 分布式锁应该具备以下特点: 在分布式环境下,一个资源在同
阅读全文
摘要:golang-etcd客户端操作 关于golang-etcd的所有api介绍和使用demo,可以参见 https://pkg.go.dev/go.etcd.io/etcd/client/v3#pkg-overview 1. 获取客户端连接 func main() { config := client
阅读全文
摘要:1. 首先应该下载etcd的linux版本,并将压缩包传输到阿里云服务器上 https://github.com/etcd-io/etcd/releases 2. 简单说一下sftp的从本机传输到远程服务器的指令 lcd /Users/xxx/Downloads put etcd-v3.5.2-li
阅读全文