宁愿重复也不要抽象错了

查看原文

本文讲述了一种观点:prefer duplication over the wrong abstraction

所谓的 wrong abstraction 指的是:在抽象一块代码后来了新需求,你要改巴该巴抽象好的代码? 你很有可能会发现,随着需求的增加,代码会越来越难管理,直到成为 wrong abstraction. 加一块需求会让代码变复杂,然后会让下一次加需求变得更困难。

一种可行的解决方案是,放弃自尊和骄傲,放弃那种“多好的代码呀删了可惜”的想法,重新 inline 回重复的代码,然后重新开始想怎么抽象。

read more

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 more

Lua 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 more

Web Architecture 101

查看原文

本文描述了常规 Web 设计的基本架构:

  • DNS 域名访问
  • Load Balancer 负载均衡流量
  • Web App Servers 以无状态的应用集群提供服务
  • 数据库和缓存是数据来源
  • 耗时任务分配到 Job Server,Broker 是 Job Queue
  • 如果有搜索需求,使用 full text search service
  • 如果有外部服务依赖,也作为一种 backend resource
  • 产生的运行时数据可以通过 Data firehose 发送到 data warehouse 和 cloud storage.
  • 必要时,使用 CDN
read more

XAR - 一款新的打包工具

查看原文

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 more

MemSQL vs NoSQL

查看原文

本文作者认为 NoSQL 在过去的一段时间做的很好,但引入了不少问题。未来的发展方向:组建被分布式 SQL 替代。

  • 一般 NoSQL 只能做到的是最终一致性,当时强一致性无论如何这个需求不会消失。
  • Schemaless,其实有问题,我们总是需要 schema,你需要的可能只是可以存储类似 JSON 一样数据的能力。
  • NoSQL Query 设计的,hmm,不咋样。
  • MemSQL:性能好,可扩展,高可用的关系型数据库,能支持事务,跑在商用硬件上,能适配 cloud native 的系统。
  • consistency v/s Performance: MemSQL 让用户自己调 replication 的模式。
  • MemSQL 将 schema 存储在一个内部的小数据库里,同步地复制到其他节点上。DDL 完整性通过 …
read more

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

Python CFFI Overview

查看原文

CFFI 是 Python 和 C 交互的一个库,它有 ABI x in-line, ABI x out-of-line, API x in-line, API x out-of-line 四种接口。

ABI 驳接的是已经编译好的 binary,API 更快,把 C 代码编译出来使用。 in-line 是在 Python 中每次使用都要 setup,out-of-line 则需要提前生成好模块,然后在主程序中调用。

ABI x inline:

ffi = FFI()
ffi.cdef("""C SOURCE HERE""")
C = ffi.dlopen …
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, 合并后将新的全文发给其他 …
read more

« Page 15 / 54 »