玩客云部署beancount-telegram-bot
玩客云捡垃圾,40块钱还行,民间大佬弄出了刷Linux的方法,可惜是32位,不过也凑合用,比斐讯N1折腾了那么一点。
beancountbeancount介绍可以看下面几个文章,整挺好。之前是用ios端的Moze3,感觉还是差了点意思。
Beancount复式记账(一):为什么
复式记账指北(三):如何打造不半途而废的记账方案
使用 Beancount 管理家庭财务 · 构建我的被动收入
使用 Costflow 提高 Beancount 记账效率
bot-docker这里推荐使用kaaass/beancount_bot_costflow_docker,参考上面第二篇文章,里面有详细说明。不过上面的镜像只支持64位,只能自己弄32位的docker镜像。
Dockerfile从beancount_bot_costflow_docker的Dockerfile修改而来
12345678910111213141516171819202122232425262728FROM alpine:3.6WORKDIR /appADD requirements.txt /appENV PYTHONUNBU ...
Golang-GC笔记-GC-Traces
来源:https://www.ardanlabs.com/blog/2019/05/garbage-collection-in-go-part2-gctraces.html
开关GC的对比有一个从不同的新闻提供商下载RSS并搜索的应用程序
在关闭GC的情况下测试并发请求应用程序耗时情况
12345$ go build$ GOGC=off ./project > /dev/null# 10k requests using 100 connectionshey -m POST -c 100 -n 10000 "http://localhost:5000/search?term=topic&cnn=on&bbc=on&nyt=on"
处理10k个请求需要4188ms,每秒处理约2387个请求
在开启GC的情况下呢,
123456$ GODEBUG=gctrace=1 ./project > /dev/nullgc 3 @3.182s 0%: 0.015+0.59+0.096 ms clock, 0.19+0.10/1.3/3.0+1. ...
Golang笔记-Fan-in
来源:https://go.dev/talks/2012/concurrency.slide
The boring function runs, like a boring party guest.
12345678910111213func boring(msg string) { for i := 0; ; i++ { fmt.Println(msg, i) time.Sleep(time.Duration(rand.Intn(1e3)) * time.Millisecond) }}func main() { go boring("boring!") fmt.Println("I'm listening.") time.Sleep(2 * time.Second) fmt.Println("You're boring; I'm leaving.")}
A channel connects the main and boring ...
Golang笔记-Pipelines-and-cancellation
来源:Go Concurrency Patterns: Pipelines and cancellation - The Go Programming Language
What is pipeline
receive values from upstream via inbound channels
perform some function on that data, usually producing new values
send values downstream via outbound channels
Squaring numbers
Generator Pattern converts a list of integers to a channel that emits the integers in the list
12345678910func gen(nums ...int) <-chan int{ out := make(chan int) go func() { for _, n := range nums{ ...
Golang-GC笔记-Semantics
来源:https://www.ardanlabs.com/blog/2018/12/garbage-collection-in-go-part1-semantics.html
Garbage collectors responsibility
tracking heap memory allocations
freeing up allocations that are no longer needed
keeping allocations that are still in-use
As of version 1.12, the Go programming language uses a non-generational concurrent tri-color mark and sweep collector.
非分代并发三色标记和扫描收集器
Collector Behaviorcollection工作会经历三个阶段
Mark Setup - STW(Stop The World)
Marking - Concurrent
Mark Termination - STW
M ...
MIT6.824-LEC11-Cache-Consistency-Frangipani
为什么要阅读这篇论文
cache coherence
distributed transactions
distributed crash recovery
三者的相互作用
整体的设计
a network file system,与现有的应用程序共同工作,类似普通的unix程序。可以将petal想象成一个磁盘,通过网络将数据共享给Frangipani,看起来就像从普通磁盘上读取数据
预期用途
一个文件系统,能保存自己的home目录以及共享的项目文件,在任何的workstation(可以理解是个人PC)能拿到自己的home目录以及所需要的所有文件。
没有涉及到安全问题,彼此电脑之间互相信任,适用于小群体
Frangipani的设计
强一致性
caching in each workstation — write-back
所有对文件的更新最初只是在workstation cache中完成—速度快
包括创建文件、目录、重命名等
比如ws1(workstation user 1)想要创建并读写/grades:Frangipani会从Petal读取/infomation的信息并保存到ca ...
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缺点
需要通过网络发送大量数据—l ...
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的情况,需要配合第三方组件configur ...
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 inconsisten ...