Tag: programming

Subscribe to Feed of articles under programming

  1. 从 HTTP 0.9 到 QUIC

    1989 年 WWW 诞生之后,HTTP 和 HTML 迅速成为主导世界的应用层协议。在今天,几乎任何场景的应用都或多或少地使用 HTTP(就像 JavaScript 一样)。HTTP 本身也不仅仅用于网页、浏览器,各式各样的 API,移动应用同样使用这个原本为 HTML 设计的协议。80 和 443 端口成了网络上最重要的端口。

    在近 30 年的历史中,HTTP 协议本身有比较大的发展,同时,还有一些重大的变动也在酝酿之中。这些演化使得这个协议的表现力更强,性能更好,更能满足日新月异的应用需求。这里就来回顾和展望一下 HTTP 的历史和未来。

    HTTP 0.9

    历史上第一个有记载的 HTTP 版本是 0.9,它诞生在 1991 年 …

  2. 衡量可扩展性的立方体模型

    最近看《架构即未来》(The Art of Scalability),结合自己目前的工作,发现比很多年前看第一版的 时候有更多切身的体会。很一般的博客、新闻介绍扩展性的结构不同,这本书2/3的篇幅并非教读者如何切分、 如何拆分,水平还是垂直等等,而是再说组织架构,怎样设置团队,怎样规范架构的流程,各个部门的责任等。 在看第一版的那个时候,这部分我可能就直接忽略了,但是现在有了亲身体会之后,发现大部分的问题,即使 表现为技术问题,甚至是低级失误,其实根源都是管理方面的问题:责任分配不清晰,资源不足,决策草率缺 乏长远考虑,等等等等。这些问题,如果没有经验,在解决了我们熟悉的基本的扩展性问题之后就会慢慢遇到, 从宏观角度看这些恰恰是真正制约扩展性的关键因素。

    不过今天并不是想写这个。书中后半部分介绍了一个衡量扩展性的 AKF 立方体模型,把关于扩展性的问题抽象 得很精致。这个模型用 X/Y/Z 三个轴表示扩展的三个不同方向。其中

    • X 轴表示同等职责 …
  3. "Smoothing Your Rust Crates Release With Cargo-release"

    Cargo-release is a cargo subcommand that automates your libraries release process. The idea was inspired by Clojure's leiningen, which has a release command does exact same thing.

    Typically, when you decide to release a library to crates.io, you need to go through following steps at least:

    • bump version in …
  4. "Handlebars 的 rust 实现"

    本来一度感觉到用过 Clojure 之后很难对新语言产生兴趣了,还好遇到了 Rust 再次激活了这方面的生命力。今年的重点之一是学习 Rust 语言,方便自己能真正 touch bare metal。1月17号的 Rust 聚会上发现很多人都持有类似的想法。 C++ 之后鲜有这种语言,以至于之后成长起来的一代人都是在一个 VM 里编程,无论是 Java 还是 Python,最终都没有办法自己去管理内存,Rust 的出现给了大家一个机会。一个具备现代特性的系统编程语言,Zero runtime,可以运行在各种设备上。去年还给程序员杂志写了一篇 Rust 的文章,结果导致现在程序员杂志停刊了。

    扯远了,和当时学 Clojure 一样,这次的计划还是写一个正经的项目来促进学习。关于时机的选择,主要是 crates.io 仓库的发布基本上标志生态圈开始建立了,这个时候写东西就方便很多了。

    这次选的就是实现 Handlebars …

  5. "AVOS Cloud 实时通信服务架构:微服务和服务发现"

    “微服务” (Microservice) 是今年特别热的一个概念,Martin Fowler 的文章对微服务作了详细的介绍。简而言之,微服务鼓励用户把功能拆分以细粒度的服务接口暴露出来,并通过REST 服务或轻量级消息队列集成。在微服务架构里,一个业务的实现,可能由不同的功能单元组合而实现。

    在 AVOS Cloud,我们提供数据存储、统计、实时通信等不同功能的服务,在实现上,这些功能需要共用基础设施,有的服务本身也根据业务性质的不同拆分功能模块,我们目前就是以这种“微服务”架构思路来实现拆分。有句话说,if you cannot split, you cannot scale.

    以实时通信服务为例,根据功能角色的不同,我们有这样一些模块:

    • Push 服务:处理推送的订阅关系,触发推送
    • 长连接服务器:维持设备与服务的长连接
    • Router:应用层的 lookup,负责分配合适的长连接服务器给新设备
    • WatchDog:从多台长连接服务器收集运行和统计数据,对异常情况发起报警 …
  6. "在 Docker 中安装和使用 Rust nightly 版本"

    一直关注 Rust 语言,最近一下发现了两个 web 框架,IronNickel.rs。先不说这两个框架成熟度如何,一般情况下,一个语言有了 web 框架,算是一个里程碑,说明他离靠谱也不远了。这样我决定跟一下 nightly 版本(新框架都是跟 nightly),另外也能感受一下 Yehuda Katz 的构建工具 Cargo。ArchLinux 的仓库里已经有 0.11 版本,再用脚本安装必然会有冲突。于是想到了最近半年最火的 Docker,可以轻松的创建多个环境,正是一个非常好的场景。

    安装

    安装 Docker, Arch Linux 仓库里很早就有,非常方便:sudo pacman -S docker。完成之后启动他 …

Page 1 / 2 »