MIT6.824-LEC10-Cloud Replicated-DB-Aurora
为什么要学习Aurora 作为近几年成功的云服务,解决了严重的问题 设计良好,有性能的优势 使用general-purpose storage架构情况下的局限性 许多关于云基础架构中重要的内容 Amazon EC2,cloud computing,针对于web 租用直接运行在Amazon数据中心物理机器上的virtual machines instances 使用的存储是连接在物理磁盘上的virtual local disk 客户在EC2上面运行着stateless www server或者DB 但是EC2不适合DB:扩展功能和容错功能有限(可以通过S3大容量存储服务定期存储数据库的snapshot) Amazon EBS (Elastic Block Store) 使用的是Chain Replication,基于paxos的configuration manager 如果DB EC2崩溃,只需要在另一个EC2上面重新启动一个DB并挂载同一个EBS volume EBS不是shared storage,只能由一个EC2挂载 DB-on-EBS缺点 需要通过网络发送大量数...
MIT6.824-LEC9-More-Replication-CRAQ
为什么学习CRAQ Chain Replication(CR),一种与Raft非常不一样的方法。 CRAQ能够从replica读取数据并且保持强一致性 什么是CR write: client发送写请求给head server 请求按顺序沿着链下发 每个server用新数据覆盖旧数据 当tail server处理完成后回复给client read: client发送读请求给tail server tail server回复给client(不涉及其他server) 为了让tail回复,这条链的每个节点必须处理写请求,即整个路径上的节点都已经处理了写请求。 如果head server fail,下一个节点可以代替head继续工作(tail server同理,不过是上一个节点)。如果head中途crash,但是数据还没有到tail server,所以就不会回复给client。 如果中间的server fail,需要移除该节点,上一个节点重新发送请求给新的下一个节点。 不能处理network partition或者spilt brain的情况,需要配合第三方组件confi...
MIT6.824-LEC8-Zookeeper
Zookeeper提出了什么问题 能够将coordination作为一种通用服务去提供吗,可以的话,API应该是怎么样的,其他分布式程序应该怎么去使用它? 我们有N个replica server,能从这个N个server中获得N倍性能吗? 将Zookeer视为基于Raft的service只不过ZooKeeper使用的是zab协议,为ZooKeeper专门设计的一种支持崩溃恢复的一致性协议 当我们添加更多的server时候,replication arrangement是否变得更快replica越多,写入的速度就越慢leader必须将每次写入发送给越来越多的server 可以让follower提供只读服务,这样leader压力就小很多可能会产生log与leader不一致的情况,导致client读取的数据不对,甚至是产生“倒退现象”,client先从up-to-date replica读,再从logging replica读。这个就不可能是LinearizabilityRaft和Lab3不会出现这种情况,因为follower不提供只读服务 Zookeeper怎么处理这个在性能和强一...
MIT6.824-Raft-index含义
nextIndex 官方描述:for each server, index of the next log entry to send to that server (initialized to leader last log index + 1) leader保存该数组变量,由leader更新。 nextIndex[i]代表着对第i个follower发起Append Entries RPC时尝试replicated log的位置,仅仅是猜测并不是真实的,并且出现log inconsistency会将该值回退。所以nextIndex[i]需要比matchIndex[i]要大。 leader收到Append Entries RPC回复后只有是因为log inconsistency才能更新nextIndex。 更新nextIndex的三个时机 leader election成功时候,需要更新nextIndex为leader last log index + 1 AppendEntries RPC返回success,代表已经成功replicated log log inconsis...
Patterns and Hints for Concurrency in Go -- Replicated service client
ReplicatedClient ReplicatedClient interface 12345678910111213type ReplicatedClient interface { // Init initializes the client to use the given servers. // To make a particular request later, // the client can use callOne(srv, args), // where srv is one of the servers from the list. Init(servers []string, callOne func(string, Args) Reply) // Call makes a request an available server. // Multiple goroutines may call Call concurrently. // Find an available server and ...
Patterns and Hints for Concurrency in Go -- Work scheduler
use channel as synchronized queue Scheduling n machines to execute m tasks, and each task may be different 12func Schedule(servers []string, numTask int, call func(srv string, task int)) We can use a channel install of stack or queue, because it’s a good synchronized queue. 123456789101112131415func Schedule(servers []string, numTask int, call func(srv string, task int)){ idle := make(chan string, len(servers)) for _, srv := range servers{ idle <- srv ...
Patterns and Hints for Concurrency in Go -- Publishsubscribe server
PubSub interface A classic publish subscribe server operates in three ways: subscribe、publish、cancel. 123456789101112type PubSub interface { // publishes the event e to all current subscriptions. Publish (e Event) // registers c to receive future events. // if Publish(e1) happens before Publish(e2), // subscribers receive e1 before e2. Subscribe (c chan<- Event) // cancels the prior subscription of channel c. Cancel(c chan<- Event)} A simple implementation is as follows: 1234...
logseq搭配简悦建立自己的知识库
实现效果 网页标注,自动离线到本地(网页内容+标注),logseq 里面建立双链,同时还可以自动跳转到本地文件具体内容处 这样的话可以实现一个工作流: 第一阶段:网页内容标注 第二阶段:logseq整理建立联系 第三阶段:Notion知识整合输出(或者是在logseq里面输出也行,可以用很多相关联的双链直接输出一篇文章,而不用反复复制粘贴) 本地知识库:在第一阶段标注的时候,会自动保存网页内容+标注到本地,个人认为会带来几个好处: 避免内容失效404 搜索相关知识点时候可以先在本地笔记或者缓存目录搜索先,这样相当于是先查找自己的笔记,对知识利用率更高,Windows下可以用FileLocator、Mac可以用DEVONthink 对于一些英文文章的学习,可以先双语翻译,然后做笔记保存,下次查看时候有双语翻译和笔记,效率提高很多 网络上文章都是抄来抄去,复制粘贴,对于某些知识点其实完全可以通过双链引用形成一篇文章,内容可以来自官网、著名书籍pdf等,这样就不会学到很多假知识 实现参考文章: 当简悦变成你的知识库(离线且具有永久链接) · Discussion #2221 ·...
JetBrains Gateway远程开发初体验
介绍Remote Development with JetBrains Gateway JetBrains Gateway is a compact desktop app that allows you to work remotely with a JetBrains IDE without even downloading oneJetBrains Gateway是一个轻量的桌面应用程序,允许在不下载JetBrains IDE的情况下远程使用JetBrains IDE 白话介绍一下:通过使用该软件ssh连接到Linux环境,自动下载IDE到Linux并配置,稍等一会本地会弹出个IDE窗口进行工作。 具体效果看下图: 使用教程Linux环境Gateway目前只支持在Linux上配置(后续会支持macOS 和 Windows),所以需要一个Linux,由于用的是Windows,所以最简单方式就是安装一个VMware,然后到https://www.linuxvmimages.com/images/下载一个为VMware处理好的镜像,下载完成后直接打开即可。 第一个尝试的发行...
telegram聊天记录入库elk
telegram中文搜索功能一直很差,但是telegram上面的内容搜索引擎却又无法索引,虽然已经有大佬做了一个专门的telegram引擎,但是只覆盖到部分群组,没有我想要的群组,为此抽空搞了下elk的方案去索引聊天记录 (仅用来学习交流,勿用于不符合法律法规操作) telegram中文搜索 docker-elkdocker-compose启动安装elk最快的方式自然是docker的方式,es官方提供了dockerfile,只需要使用docker-compose启动即可 123git clone https://github.com/deviantony/docker-elkcd docker-elkdocker-compose up -d 第一次下载镜像可能会慢点,安装完成后可以测试一下有没有安装成功了,浏览器访问kibana控制台即可http://127.0.0.1:5601。 重置密码安装好后修改一下默认密码,免得出什么问题。对服务默认的账户进行默认密码重置: 1docker-compose exec -T elasticsearch bin/elasticsearch-s...