IPSec - Day 1
IPsec 是用来给 IP packets 加密的协议。VPN 可以用很多种加密协议,例如 OpenVPN, PPTP, SSTP, IPsec。 其中 IPsec 的好处是:它有 RFC 6071 定义了标准,并且在 Linux Kernel 中被实现了。TLS 是互联网加密的基石,而 IPsec 则被应用在 5G/LTE 手机网络中。
IPsec 分成两部分:userspace + kernel. 用户态处理 IKA (internet key exchange) - 每次打开 VPN 连接都需要和 VPN Server 通讯获得加密的 key。内核部分处理真正的加密。
kernel …
read moreLua FFI Library
本文是 LuaJit 的 FFI 文档,这个库用于在 Lua 中调用 C 的函数和使用 C 的数据结构。基本使用是你要事先使用 cdef
把 c header 的内容复制进来,然后给予更底层的 ffi 接口封装函数 inline, jit, 回调函数绑定和垃圾收集。hello world:
local ffi = require('ffi')
ff.cdef('int pref(const char *fmt, …);')
ffi.C.printf("Hello %s", "world")
如果要自定义 struct, 也可以用 cdef / new 来定义和添加 …
read moreXAR - 一款新的打包工具
XAR 可以将一个应用打成一个单一的可以运行的包,有点像 PEX。.xar
文件是一个 read-only 的文件系统镜像,mount 之后就跟一个普通的程序的各种目录没差了。用例列举了两个:通过压缩减少大量文件占用的文件系统空间,另外一个就是像 PEX 一样自包含可运行。从给出的性能上看,比 Pex 大小笑了一半,启动时间也能降低 80~90% 左右。
使用(需要依赖 squashfs-tools):
``` $ pip install xar $ python setup.py bdist_xar --xar-compression-algorithm=zstd
read moreMemSQL vs NoSQL
本文作者认为 NoSQL 在过去的一段时间做的很好,但引入了不少问题。未来的发展方向:组建被分布式 SQL 替代。
- 一般 NoSQL 只能做到的是最终一致性,当时强一致性无论如何这个需求不会消失。
- Schemaless,其实有问题,我们总是需要 schema,你需要的可能只是可以存储类似 JSON 一样数据的能力。
- NoSQL Query 设计的,hmm,不咋样。
- MemSQL:性能好,可扩展,高可用的关系型数据库,能支持事务,跑在商用硬件上,能适配 cloud native 的系统。
- consistency v/s Performance: MemSQL 让用户自己调 replication 的模式。
- MemSQL 将 schema 存储在一个内部的小数据库里,同步地复制到其他节点上。DDL 完整性通过 …
Databases 101
这篇文章给数据库做了一个导论。
数据库只有两种,关系型数据库,和其他。
数据库有百余种之多,头几名都是关系型数据库。数据库要实现的特性是 ACID - Atomicity, Consistency, Isolation, 以及 Durability。出处:http://jimgray.azurewebsites.net/papers/thetransactionconcept.pdf 当然,非关系型数据库可能只能做到 BASE - Basic Availability,Soft-state,Eventual Consistency。 CAP 理论是另外一个主流理论:Consistency,Availability,Partition Tolerance 只能尽力做到其中之二,并容忍另外一个特性稍欠一些。
非关系型数据库可以分类成:kv 数据库,文档数据库,图数据库,时间序列数据库,以及搜索引擎。
数据库选择主要从业务场景出发,根据特性作出最好的匹配,这些特性包括:ACID/BASE …
read more文档协同编辑的同步算法
本文是一篇老文章,讲了很多种 Differential Synchronization 算法 - 这种算法可以用于多人实时编辑的文档应用。文章有点老不晓得快10年过去了算法有没出新的,当时的技术有三种:ownership, event passing, three-way merges, 没有最好的算法,看场景.
- Locking: 加锁,任一时刻只能一个用户编辑
- Event Passing: 所有用户编辑通过事件发送到服务器,再转发给其他所有用户。通过 Operation Transformation 算法保障序列合并。这些序列包括:typing, editing, cut, paste, drag, drop, replacements, autocorrect. 如果编辑其更高级,这些序列可能会更多。
- Three-way merges: 类似 SVN:client 发送全文,服务器做一次 3way merge 找到 change, 合并后将新的全文发给其他 …