赖勇浩( )
所谓储备,就是未雨绸缪,觉得日后可能用得上,所以今天去学习。在这里公开我的规划而已,绝非想说服你跟我一同上路,谢绝粗暴告诉我方向有问题的言论,但欢迎你表达你与我不同的想法,互通有无。
rust
rust 是最近 mozilla 发布的一个新的系统编程语言,它支持多种编程范式,使用 actor model 并行执行。rust 是静态类型的编译型语言,使用 rust 编写的编译器前端(所谓的自举),后端则是久仰大名的 LLVM。rust 有指针,能够直接操作内存,加上前述的特性,我们有理由相信它“将会像 C++ 一样快”。rust 是 mozilla servo project 的副产品,计划中 rust 将替代 C++ 实现 firefox 的一部分核心;虽然 rust 似乎没有在服务器端的定位,但我觉得它日后必定不可能只蜗居在客户端,它的许多优秀的特质让我相信它可以在很多领域大展拳脚。除了上文提及的,rust 的还有几个比较重要的特性如下:类型推导(仅局部变量)、泛型(简单的,非图灵完备的)、隔离的 task 并发,使用消息传递进行通信、支持 move 语义的唯一性指针、更安全的内存机制,不会缓冲区溢出,使用前初始化、可选的部分的 GC、utf-8 字符串,国际化支持、类似 python/ruby 的简洁语法等。rust 在未来的对手应该有 google go 和 scala 等,我更看好 rust,下面是简单的 rust 代码。
use std;import std::io;fn main() { for i in [1, 2, 3] { io::println(#fmt("hello %d\n", i)); }}
gizzard
现代应用需要在服务器端存储大量的数据,存储方案需要高效、高可用,所以一般的方法就是把数据分片存储在多台机器上。gizzard 是 twitter 开源的一个分片存储框架,它致力于解决两个问题:分区与复制。gizzard 使用 scala 写成,通过 thrift API 提供服务,底层可以更换多个存储后端,如 sql 数据库或 lucene 等。
gizzard 吸引的我的地方有两点:1、可用 sql 数据库作为存储后端,nosql 方兴未艾,甚至你还没有来得及学,但是业界的方向真的已经开始转回挖掘关系数据库的潜能了;2、它放弃了许多其它框架坚持的特性,符合我的技术观,比如它要求对数据库的操作是幂等的,虽然加大了 API 设计的难度,但是却更容易实现这个框架。
gizzard 不是我想要用在项目中的技术,事实上,我一直在开发一个类似的东西。但放弃了更多的特性,所以实用意义不大。gizzard 使用的是我不喜欢的 thrift API,以及 scala 所依赖的 JVM,但它对我的项目有指导意义,我希望能够通过学习 gizzard 能够在自己的项目中实现更多 gizzard 已经实现了的特性,并通过 protobuf RPC 提供给上层逻辑。
unity3d/UDK
这个没有什么好说的,我不看好 flash,又身处游戏行业,对客户端技术肯定要跟进一下的,所以从这两个相对比较有机会的中挑一个学习一下咯。
SCTP
全名 Stream Control Transmission Protocol,流控制传输协议,基本概念可以参考这里:http://en.wikipedia.org/wiki/SCTP。它跟 UDP/TCP 一样是传输层协议,你可以把它想像成拥有 TCP 的可靠性及 UDP 的高效性的协议,Message-based multi-streaming 特点写网络协议来是超级舒服的。SCTP 在 2000 左右就定了型了,距离现在 10 年出头,UDP/TCP 也是 RFC 出来 10 年左右的时候火起来的,有理由相信未来会有比较多的基于 SCTP 来实现的网络应用层协议了。下面简单的从 wikipedia 引用一些特性描述放到下面:
- Multihoming support in which one or both endpoints of a connection can consist of more than one IP address, enabling transparent fail-over between redundant network paths.
- Delivery of chunks within independent streams eliminate unnecessary head-of-line blocking, as opposed to TCP byte-stream delivery.
- Path selection and monitoring select a primary data transmission path and test the connectivity of the transmission path.
- Validation and acknowledgment mechanisms protect against flooding attacks and provide notification of duplicated or missing data chunks.
- Improved error detection suitable for Ethernet jumbo frames.
写在最后
把我这篇文章理解成我在说 C++、NoSQL、Flash、UDP/TCP 要死了的朋友,请你不要留言了。理解成我在说学 C++、NoSQL、Flash、UDP/TCP 就要失业或者其它后果的朋友,也请你不要留言了。