登山笔记・关于登山

随便聊一下「登山」这个概念。

比如说珠穆朗玛(8848m)和上海佘山(100m)同样是山,但爬这两座山是完全两个概念。

日语环境里,「登山(とざん)」是个大概念,去高尾山(599m)也是登山,去富士山(3776m)也是登山。

之前心血来潮查过知乎,好像在中国国内,普遍把徒步和登山的概念以山的高度作为区分,4km以上算登山但4km以下就只能划作徒步。不是很清楚这样划分的意义,但这种划分总让人觉得登山是专业的事情,不是普通人可以做的,门槛很高。

在日语环境下,登山便没有那么高的门槛。原先我也有芥蒂,都说自己是去徒步(hiking),同事们却听得一愣一愣的,反问你不是去登山了吗。后来想想确实没必要在自己内部划分这些,开心就好。

纵走(縦走)也好,徒步(ハイキング)也好,trekking(トレッキング)也好,划分的那么清楚自己心也累。

反正就是早起赶早班电车电车下来开始走,走到目的地偶尔住一天,绝大多数时候是休息片刻便立即动身,下山或者走向另一个山头。
回程累了电车上偶尔小睡30分钟。
回家泡个澡倒头就睡做个还在山上走的梦。
第二天起来享受着肌肉酸痛重新回归毫无偏离的日常生活。

自适应分布式速率限制(distributed rate limiter)

本文是针对xratelimiter的算法说明。

https://github.com/xnnyygn/xratelimiter

首先对rate limiter做一下简单介绍。

rate limiter主要用在限流,比如希望网站的访问在一定的量的时候,对于API有调用量限制,作为云服务商限制访问用户网站的流量等等。

常见的rate limiter算法有token bucket。具体算法这里不作展开。一般实现中,会有一个记录最后添加了token的时间戳,还有一个记录当前token数的变量。由于有两个变量,在使用redis实现集中式的token bucket时无法原子修改。

Continue reading “自适应分布式速率限制(distributed rate limiter)”

基于GOSSIP的集群成员管理-失败检测

本文是对于以下项目的算法说明。

https://github.com/xnnyygn/xgossip

失败检测即Failure Detection,在xgossip中主要是指由于网络或者节点当机问题导致无法正常通讯的问题的检测。除此之外,检测到之后系统如何处理也是需要根据实际需求来决定的。以下主要针对这两方面进行讲解。

Continue reading “基于GOSSIP的集群成员管理-失败检测”

基于GOSSIP的集群成员管理-成员的加入和退出

本文是对于以下项目的算法说明。

https://github.com/xnnyygn/xgossip

首先简单介绍一下GOSSIP。

GOSSIP据说最早见于论文《Epidemic Algorithms for Replicated  Database Maintenance》,对于GOSSIP有兴趣的人建议阅读一下此论文。

GOSSIP算法如论文标题是一种epidemic algorithm,可以理解为传染病的传播。有三个人A,B,C。A是传染源,当A传染给B,B传染给C之后,所有人都被传染了。在分布式系统中,可以把传染病类比为更新,当所有参与的节点都获取到了更新之后,集群达到最终一致状态。从这个角度来说,GOSSIP是一种弱一致性,或者说最终一致性算法。

Continue reading “基于GOSSIP的集群成员管理-成员的加入和退出”

Raft实现笔记-日志结构

本系列是在实现了绝大部分raft论文中描述的功能之后实现过程中遇到的问题,设计的决策等的记录。随着功能的增减,项目的逐渐完善,系统中的实现笔记可能会有偏差,但是基本上对于第一次实现或者想要理解raft的人来说可以作为一个参考。

本篇是针对0.1.0版本xraft,0.1.0之后的版本可能会有所变化。

Continue reading “Raft实现笔记-日志结构”

登山笔记(序)向山进发

从小到大没爬过几次山。

印象里最深的是小时候春秋游去过南昌梅岭和三清山,高中时浙江仙居上海佘山和大学里暑期调研的泰山。但这些都是旅游景点并非所谓的山,我甚至说不出这些景点内山的名字。想去爬山玩?门票价格摆在那里。所以从来没有对登山产生过兴趣。

然而看过ヤマノススメ后才知道在日本登山是用不收门票钱的。
刚来日本半年后某个周末的上午躺在地上,想想自己一个人平时周末除了打游戏就是看动画,不如出去走走。然后就穿上普通运动鞋和轻便的服装开始了场圣地巡礼。

高尾山,来日本旅游的话绝对推荐去走一圈的山,在东京都内交通方便。没有登山装备可以简单从一号路的水泥路上去,想体验水路的可以走走六号路。
高尾山附近一带大多是这类泥地的山,适合散心。想稍微锻炼一下体力的则可以往丹沢箱根方向走。
不知不觉已经走过了很多地方,不知不觉买了一堆户外用品。留下一堆遗憾和一堆回忆。
不知道什么时候能去長野県来一圈纵走,或者在山上搭个帐篷看星空。如果养了阿猫阿狗的话,好想带着它们去爬山。
爬山回来后洗个澡睡的像猪一样,闭上眼睛就能看到满是石头的地面,好像还在摇头晃脑走着山路一样。

希望今年能在富士山上看到御来光。

Raft实现笔记-开篇

本系列是在实现了绝大部分raft论文中描述的功能之后实现过程中遇到的问题,设计的决策等的记录。随着功能的增减,项目的逐渐完善,系统中的实现笔记可能会有偏差,但是基本上对于第一次实现或者想要理解raft的人来说可以作为一个参考。

现在,2018-08-09已经实现的功能

  • leader election + log replication
  • membership change(one server change)
  • log compaction(snapshot)

Continue reading “Raft实现笔记-开篇”

Kubernetes Engine Day April 2018 memos

PostGIS笔记(下)

上篇说了为什么用Geography,这篇具体讲怎么取“范围n米以内的数据”。

Rails里运行Migration,建Portal Model,以下是Schema

距离东京站1km内所有的portals

  • ST_Distance

    float ST_Distance(geography gg1, geography gg2, boolean use_spheroid);

  • ST_DWithin

    boolean ST_DWithin(geography gg1, geography gg2, double precision distance_meters, boolean use_spheroid);

结果:

Continue reading “PostGIS笔记(下)”