• Feeds

  • Posts Tagged ‘2010’


    2010年总结

    2010年微博写得比较多,博客更新有点少,在2010还没跑完之前,用微博的方式总结4点

    架构
    很多技术人员发展方向是架构师,希望能像Google的架构师一样具备前瞻的架构设计能力。不过放松点,尽管大部分业内公司没有好的架构设计能力,但并没妨碍这些公司的业务正常运转,大部分情况公司生存之道不在技术之上,前提是技术不要成为绊脚石。
    架构方面可以总结的一点是,架构师要有完美心态,今年有很多感悟,如果没有这种心态,始终需要有人为设计缺陷买单。明年会进一步坚持这个原则。

    编程语言
    虽然Erlang发展没有达到预期,但是函数式编程语言在分布式及互联网领域依然非常受重视,Erlang, Scala, Clojure 等语言缺少一个契机走向主流。
    行业现状从TIOBE排行来看,除了Objective C异军突起,其他语言变化乏善可陈。
    2010,团队中不少基础不错技术人员,由于只埋头在一种编程语言里限制思维的广度。一个优秀的技术人员至少精通两门编程语言,2011在团队内推广一下第二语言。

    数据
    MySQL并不适合存储海量数据,它的优势在可靠性和运维经验。
    Web编程语言如PHP也不适合处理海量数据,它的优势在Web编程及敏捷开发。
    MapReduce框架如Hadoop可以处理海量数据,但是它的优势是离线处理,在throughput而非latency。
    实时性的海量数据怎么更好处理是一个问题。

    技术交流
    北京由一些媒体公司组织的技术交流活动较多。本有计划组织一些民间小范围交流,倾向于交流即所有参与者都能发出声音,而不是分享,但由于精力原因未能完成。
    团队内部的技术交流也坚持了半年,虽然每次准备不是很充分,从小范围的了解来看,大家还是持肯定态度,今天也进行了本年最后一期。

    2010年的技术架构建议

    在 2009年最后一天,根据自己小小的视角提出一些技术建议,供同行参考。

    编程语言

    首先要能跳出语言之争及语言偏见,架构师需要在中立的角度选择最合适团队的语言,避免在技术决策中加入过多个人喜好。在系统语言层面,主要可关注以下几种
    Erlang, 会继续在小圈子内流行,业界应用Erlang技术最大的障碍不是Erlang技术本身,而在于缺乏这方面专业人才。
    Scala, 和Erlang不同,Scala有成熟JVM及丰富的周边library,在异构系统中集成也很容易,新项目使用Scala风险很小,所以Scala在新语言中应该有较大的提升优势。
    Go, 由于刚开始推出,不适合正式项目使用,2010年会稳步上升,可适当关注。
    其他语言基本保持现状。

    架构

    LAMP中的Linux, Apache, MySQL会受到云计算中的App Engine模式的冲击,因为App Engine在分布式处理,可扩展性,稳定性方面都有很大的优势。 在App Engine模式中,MySQL作用会降低,退化成一种存储服务。而且App Engine的存储服务含义会更广泛,传统架构中的MySQL, Memcached, 及key value store在App Engine框架下都会以底层的服务方式提供。存储不再是软件,而是一种可靠服务,因此也会带来分布式存储相关技术的繁荣。

    Web 2.0的设计中,Cache会成为一个中心元素。传统的web应用cache只是一个可选的锦上添花层,即使去掉,PHP + MySQL这种模式也可正常运行。但随着未来应用social化及realtime的趋势,从facebook及twitter的设计来看,cache已经从可选层成为核心层。cache设计的好坏直接决定架构的成败。

    由于web发展的趋势会使应用更realtime化,体现到技术层面是HTML5(websockets)及类似技术具有更高的价值。但由于阻碍生产力的IE存在,HTML5无法一步到位。建议关注能解决HTML5及旧ajax自适应的框架。

    网络模型方面,由于多核的硬件环境,轻量级的进程模型值得采用。如传统的C++ boost的asio, 各公司自己实现的coroutine, Erlang的process, go的goroutines, Java/Scala的Netty/Mina框架等。但C++框架的代码优雅性可维护性欠佳,性能也没有突出的优势,可关注后面几种方案。

    分布式方面,Dynamo及Chubby的思想会逐渐在国内的项目等到更广泛的应用,架构师会逐步丢弃双写,双机心跳等山寨式的容错设计思想,可靠的分布式设计思想会更普及。

    存储

    2009是key value/nosql产品百花齐放的年代。到2010年,它们之中优秀的会脱颖而出逐步主流化,主流化的产品周边的工具会更丰富,运维相关经验也会更成熟。目前阻碍很多key value产品推广很大一个障碍是运维的顾虑,而不是它们本身的性能。究竟会是Memcachedb/Tokyo Cabinet/Redis这样的小巧软件走向主流,还是Cassandra这样的巨无霸更受欢迎,我们拭目以待。

    2010年技术实践计划

    每年这个时候,都很高兴看到有很多技术人的总结,展望及计划。透过别人的经验及计划,可以了解自己的不足。可惜的是到一定层次的人一般不轻易透露自己的想法,使我们错失了很多学习及观摩的机会。以下是个人的一些近期实践打算,跟目前工作业务无关。

    网络模型研究,09年做的的C, Erlang, Java and Go Web Server performance test得出了一些实验室的结论,打算继续观察各种网络模型在大并发真实网络慢连接的情况下表现的差异。打算比较Scala, Java, Erlang and Go. 关注点也是throughput, latency以及代码的可扩展性及可维护性。

    分布式,打算尝试哪些分布式的理论可以适合国内公司使用,而不仅仅作为实验室产品。初步关注点是Cassandra

    比较微博客的一些架构设计模式,不同的设计模式比如推拉方案在high load下的throughput, storage, bandwidth, latency之间的差异。可以利用一些开放的模型来如Jaiku来分析。由于这个研究跟目前公司某产品有关联关系,所以暂时不适合作为公开研究。

    由于计划做得越长,出洋相的机会就越大,先暂时想到这么多。

    以上几点特点都是一些纯兴趣的东西,未必是有前途或者“钱途”的方向。根据本人从业观察,对前途和“钱途”研究比较透彻的同学在技术行业三五年之后通常就改行干别的去了。我也奉劝有这样想法的同学,改行趁早,技术的从业经验对你以后从事别的行业并没有太大的帮助,而且后来的人要维护你留下的一堆不太优雅的代码也不容易。