19 Oct 2010
分布式系统工程化
前天下午参加了珠三角技术沙龙2010Q4,对陈硕老师(@bnu_chensuo)讲的分布式系统的工程化开发方法很是感兴趣,也觉得陈硕老师讲的很入理,虽然我对分布式仅仅处于了解阶段,对于网络编程更是一窍不通。下面就谈谈通过这堂课,我的收获:
- 分布式的场景:几十到几百台PC
- 分布式的状况:还处于技术浪潮的前期,没有公认的成熟解决方案,虽有些开源组件但是可靠性有待考虑
- 分布式的实现技术:勿在浮沙建高台,要是用成熟的技术,借鉴但不是照搬别人的“成功经验”
- 分布式的设计原则:Desgin For Failure,高可用的关键在于不停机,恰恰在于可以随时重启。
- 分布式需要实现监控:程序内置Naming Service,对各种异常报警,让人来处理
- 分布式进程通信:为了能实现重启,所以只是用操作系统能自动回收的IPC(TCP),不用生命期大于进程的IPC(共享内存,mutex),不使用不能重建的IPC(pipe)
- 心跳协议的设计:进程c依赖进程S,则进程S向进程C发送心跳(什么是依赖?为何这样?我还没有搞懂);不要另起线程发送心跳包,直接在工作线程发送,避免假心跳
- 消息格式的设计:要想着以后的升级和兼容,不要用C struct或者bit fileds,考虑Google Protocal Buffer