QCon北京今天开始了,听了几场不错的演讲。

对于 淘宝 余锋 的 《erlang开发实践》映像还是蛮深刻的。

当然,除了开始关于erlang的哲学和世界观,基本上就没有和erlang相关的东西了,都是再讲一些系统设计相关的。

erlang的世界观

  • 世界是并行的

  • 外物皆独善其身

  • 万事皆通讯

世界观很新颖,但是却是很正确。正是这种简单直接的世界观,使得erlang的世界非常的直观和简单

大型系统具有的共通性

  • 高响应

  • 高性能

  • 高一致性

    对于这个,我觉得,余锋的意思是指各个系统应该保证在分布式环境下面是一致的,而不是出现多个不同的版本。当然,高一致性还可以指数据上的高一致性。不过大型系统不一定要求高一致性,这个是由具体的业务决定的。而且在很多时候,高性能,高响应 和 数据高一致性很难达到同时满足

大型系统设计

  • 复杂性管理

    系统肯定具有复杂性,尤其是大型系统。既然存在复杂性,那么通常要做的事情是把复杂性集中到一个点上,而不要分散到各个地方,只有这样,才能容易管理,容易差错,容易设计,容易实现

  • 警告零容忍

    我非常的赞成这个观点。对于看似平常的warning千万不要不在乎,反而,你应该重视起来。因为,这个看似无所谓的warning极有可能是导致你系统崩溃的最亏祸首。这个在我做Postfix MTA 和 Milter 交互时候出现的warning就能开出来。

  • 捣乱系统

    余锋提出了一个有意思的观点,就是自己写一个捣乱系统用来模拟各种真实发生的不可预知的异常,例如:网络故障,第3方依赖服务奔溃,硬件损坏,数据库错误。从而破坏生产环境中各种服务的正常运行。用来检测程序的鲁棒性。

大型服务部署

  • 不停机热更新

    这个和erlang有关系,因为erlang是支持热更新代码的。对于其它语言,例如python,那么可能没有这种方式,能做的事情可能就是 restart service gracefully。

  • 系统监控

    各种监控,磁盘,IO,网络,响应等等

  • 支持随时更新,删除,添加,停止,启动节点

  • 对集群的安全,进行审计

    完善的日志; 完整的history; 基于上面两点,就能很容易的查找到误操作的步骤(当然,对于操作的history可能和一些业务相关)