Another Java Geek

其实我不是geek,我和你一样,我是凡客

正在浏览标签为 行业 的文章

周日拿同事的卡去听了上午场和下午的互联网产品研发改进之路。其中上午前两场:领域驱动设计(Domain Driven Design)和Ceylon语言,和我们关系不大。着重说说“Twitter性能优化原则”和“互联网产品研发”的感受。由于是回去后根据记忆写就,想到哪写到哪,某些细节可能跟现场有出入。 来自Twitter的总工程师和架构师、Ruby牛人Evan Weaver分享了Twitter在性能优化方面的经验。Twitter从最初一个小规模的应用快速流行,用户规模呈指数级增长,网站吞吐量也相应地不断增加,然而其硬件规模的增长幅度要缓慢得多。Evan指出,Twitter系统吞吐能力的提升不是通过添加更多的硬件来达成,而是靠性能优化来实现。有以下几条性能优化原则: 1.Just do less. 做得越少越好。 当然这不是教人偷懒,而是非常明智的tradeoff原则。这不仅适用于性能优化,也适用于产品演进。在面临众多候选的产品特性时,拒绝大而全的诱惑,将精力聚焦于那些关键的功能特性上,做到少而精。Twitter自始至终坚持140字的短消息,没有扩展到1000字、10000字用于写长篇博客,用户关系是简单的follow和被follow的关系,没有扩展成SNS那种复杂的关系。Twitter的成功也说明了这条原则的正确性。 2.Focus on memory. 关注内存的使用。 由于Twitter所有计算的开销都不大,而包括对象分配、Cache等都要占据内存,因此内存成了关键资源,Twitter的很多努力都花在内存的使用上。Twitter的技术方案是基于Ruby on Rails,关于Ruby的GC,Evan讲了很多,Twitter内部自己实现了一个Ruby的垃圾收集器(Garbage Collector),名叫kiji好像。其垃圾收集算法跟Java的类似,不过似乎比Java的简单,堆内存分为Longlife Heap和Eden Heap,Longlife Heap相当于Java的Old Generation或Permanent Generation,Eden Heap相当于Java的Young Generation中的Eden Space。 3.Let code make informed decision. 让代码去做假定。 关于这一点,我的理解是让代码在访问数据之前对各种可能的情况先做假设,而不是等到所有数据收集齐备再做决定,这样能够更快得做出响应,进而提高吞吐量。 4.Explicitly access bulk data. 以明确地、批量方式访问数据。 除了这几条原则,Evan讲了Ruby垃圾收集器和Twitter的数据存储层。GC刚才已经提了,数据存储用的是MySql,分为4块:Twitt按照id分区;索引按照user分区;Cache采用memcached;还有timeline pool(这个没搞明白)。这4个部分是通过Rails框架来进行衔接的,看来Ruby on Rails还是满强大地。 ——————————————————————– 来自淘宝的芷薰讲述了互联网产品发展过程中的问题和应对策略。芷薰是过程改进专家,关于过程改进,我们尚没有这种职位,似乎淘宝(阿里)有一个很大的部门在做这项工作。感觉这些内容都是我们似曾相识,和我们的工作息息相关的。 关于如何保持团队的持续创新问题,淘宝的办法是让团队感受到使命感和危机感。淘宝产品相关的数据,如PV、活跃用户数、交易金额、社会价值等,让每个员工每天都能够很容易地见到,而且淘宝在一开始就在全公司推行一种以业务(business)为中心的思考问题的方式。 在产品研发进化方面,芷薰分享了淘宝的10条策略,分别应用于3个不同阶段,由于信息量比较大,我记不太清了,有些理解得不是很透彻,根据印象简单记一下: 产品初期 (在某个产品线的一开始,是没有产品、研发、运营等职能区分的,所有成员都在一个开发团队中工作) 策略一:采用Scrum快速迭代。 策略二:包容原则——缺陷容忍和一票否决。不要求零BUG,某个版本哪怕还有很多BUG没解决,由所有团队成员共同评审,只要评审通过就可以上线;只要有一个人对某个BUG提出反对意见,就取消上线。 (随着产品演化和团队规模扩大,会从开发团队中抽调人员组成产品团队和运营团队,团队保持10人规模,如果超过10人则继续拆分) 策略三:资源协调。随着产品需求不断增加,要开发这些功能,会造成对各种资源的争用。因此每月会召开资源PK会,各个项目经理PM对要实现的功能需求及资源占用进行PK,确定优先级。 产品发展期 策略四:自动构建、持续集成。虽然自动构建越早越好,但是根据经验,在产品初期,很多东西面临快速变化,一开始就推行自动构建,则团队成员修改压力非常大,效果不理想。所以到了一个相对稳定的阶段再推行自动构建、持续集成。 策略五:培养项目经理PM。在产品快速发展阶段,团队规模膨胀,一个产品经理要和N个开发团队打交道,沟通成本非常高。因此培养一批项目经理来分担沟通协调职责。 [...]

上午去听了下易观移动互联网年会,听了一半,忘了一半,还有一半没听懂。趁着还有些印象,做一下总结,只听了上午场,下午没参加不甚明了。 1.按照日程安排,8:00签到,9:45开场就有抽奖,为此我还早起了一小时,但赶到会场已经快8:30了,原定的开场时间和抽奖,主办方以工作人员在路上堵车而推迟,不守时永远是普遍现象啊。好在有报纸和一些宣传资料打发时间,通过这个也了解到移动互联网的范围和从业者远远大于自己所了解的范畴…坐进观天了一把,呵呵。 2.先是主办方易观国际的致辞和移动互联网的一些数据报告和分析,基本格调是移动互联网形势一片大好,前景乐观之类。 3.接着是一个日本人演讲,用的是英文,我基本没听懂。大意是拿日本和中国的移动互联网各方面对比,今天的中国就是5年前、10年前的日本,日本的今天就是中国的明天。日本的移动互联网现在已经全面超越有线互联网。 4.创新工厂的汪华自称是移动互联网的信徒,演讲内容很是全面,把移动互联网的各个方面都分析了一遍。只记得这些:a.目前中国互联网用户是3亿多,而手机用户有8亿,所以移动互联网的潜在市场是很庞大的。b.互联网的发展分为三个阶段:基础设施的完善,系统、平台、浏览器等;用户的娱乐需求,音乐、游戏等;生活方式转变,电子商务等。这个过程,有线互联网经历了10年,而移动互联网预计3年多就可以完成。目前移动互联网尚处于第一阶段。c.HTML5能够通过游览器完全实现客户端功能,天然跨平台,其普及将会消除各种手机系统平台的差异,大大降低应用开发的难度和成本。 5.蔡文胜的演讲颇为搞笑,除了其闽南话的发音,说话方式也很有趣,并时不时地提到汪华。他认为未来移动终端是多样化的,像ipad就是一例,移动应用也应该支持这类终端。他讲了一个观点:大家一定要省吃俭用去买一个ipad,亲自用过了那种感觉是不一样的,那样有可能找到一些灵感和突破口(——这话不无道理)。还特别强调自己的使用体验:ipad能够1秒钟关机,无须等待。现场有不少人通过微博拿蔡文胜开涮,并且在汪华演讲时,多条微博力挺他上场,这也看出他的粉丝众多,不过我却是第一次知道此人(和很多其它嘉宾),汗。 6.联想的演讲感觉很差劲,我基本没听(也许我不该这么说,出于支持国产的理由)。 7.上午最后一个环节是互联网专家刘兴亮主持的问答,参与嘉宾有3g门户、TCL、数字天堂和新浪无线的老总。我比较感兴趣的话题有两个:一个是数字天堂董事长提到无线中间件(手机中间件?),就是在移动终端操作系统和应用程序之间增加一层,在不同的终端上对应用开发提供统一的API,屏蔽终端的异构性。二是个人开发者在移动互联网大潮中的创业机会,对这个问题,几位嘉宾的观点都很实在,认为个人开发者要想赚钱,机会是有,但能够成功的毕竟是少数。而这个机会基本就是要借助大公司的平台,诸如App Store以及Android Market之上的应用。另外,主持人问“无线互联网产业能否最终超过有线互联网”时,几位嘉宾的回答也很耐人寻味:3g门户的张向东认为1年半之内用户规模将会超越,相当乐观,当然这一点也比较符合实际;TCL的肖锋认为永远也不会超越,这也比较符合TCL传统企业特点;数字天堂王安似乎也不认为能够超越,有点意外;新浪的王高飞认为5年后可以超越,介于激进和保守之间,正如新浪的媒体企业定位介于3g和TCL之间一样。刘兴亮本人认为最终可以超越,但是不知道得等到何时。 8.在会展期间,现场有发微博抽奖活动,奖品是手机还有阅读器。禁不住抽奖的诱惑,也为了跟上移动互联网的潮流(做移动互联网却不用微博,又土鳖了一把),我在现场用手机试用了一把新浪微博,不过登录过程中发现,新浪微博的密码框输入的字符竟然是明文,不是用**隐藏,在会展场合下也太不安全了。

工作至今,算下来已满四年,在企业软件和互联网行业各做了两年。从事一个行业,2年时间太短,也许只能算是入门,甚或连门儿都没入。不过,我仍然想来对这两个行业做一番比较。因知识经验不足,难免失之偏颇,贻笑大方。 1.企业软件的服务对象是各行各业的大企业或中小企业客户,比如电信业、金融业、医疗业、零售业等等。而互联网一般是服务于普通个人用户,用户群通常并无显著的行业特征,比如使用搜索引擎、社交网络的用户,你很难把他们归入某一行业或职业。 2.企业软件公司的发展过程一般较为平坦,很少听说哪家行业软件公司一夜暴富,而互联网上的创富神话依然在继续。 3.正因为企业软件的成功很难一蹴而就,所以在各个行业的企业软件领域,市场地位一般都是由少数几家巨头牢牢把持,小公司短期内难以撼动。在互联网行业,虽然也只有那少数几家明星公司位于聚光灯下,但今日的霸主明日很可能会衰败,昔日的小弟今天俨然已气象万千。这可以从三大门户的沦落,开心网的异军突起中可见一斑。 4.所以某个行业的企业软件,如果能坚持做下去,基本上处于一种饿不死,也轻易发不了大财的状态。而互联网行业,除了少数几家功成名就的大公司,其它的基本上都可以算作创业型公司,一将成名万骨枯,成功了,要啥有啥,不成功,生存维艰。 5.互联网公司,一般是技术驱动型的,相对于企业软件,其技术革新是比较快的。而企业软件公司,在技术方面,一般多是采用业内比较成熟稳定的方案,技术的更新换代相对缓慢。 6.企业软件公司的产品(或产物),由于通常最终需要交付给客户,主要由客户来运行维护,且其发展历程相对较长,从而容易形成一套比较规范的开发流程和方法。所以我们有时看到某某公司通过CMM5级认证(是否真的达到另当别论),基本都是企业软件公司。互联网公司的开发和运维一般都是内部搞定(可能是由不同的团队执行,但都在同一家公司),且发展历程相对较短,所以其开发过程的规范性比较差。不过话说回来,大部分互联网公司都是startup,生存尚难,要是也搞规范,效率势必受损,如何干得过大公司,活得到明天?即便大公司如百度、腾讯等,也没听说哪个通过CMM*认证(反正我不知道,有知道的跟我说一声)。互联网公司是结果导向的,对这种认证并不看重。 7.互联网应用的数据和用户规模一般都是海量的,数据量动辄过亿,用户数动辄百万千万,且要7×24小时提供服务,所以,对性能和稳定性的要求比较高。企业软件的数据和用户一般仅限于一家企业内部,关键业务数据量达到千万级算是比较高了,典型企业的员工数少则几十人,多则数万人,几十万人以上的企业非常少,所以性能通常不是太大问题,企业软件更加关注的是安全性和可靠性。 8.企业软件最典型的应用形式是MIS系统,此外也会借鉴和吸收一些互联网的应用形式,比如论坛、IM、blog、wiki等这些曾经属于互联网的应用也逐渐被企业软件所采用,这些作为点缀能为企业软件增加一些卖点,不过其实用性值得怀疑。在互联网公司,也许其产品和服务具有不错的用户体验,但是在公司内部的信息化方面反而比较滞后,甚至一套供内部人使用的、像样的MIS系统也比较少见,形成一种反差。 9.在企业软件行业,PM通常是项目经理(Project Manager)。而在互联网公司,PM一般是指产品经理(Product Manager)。在我看来,这两种角色的地位和职能大致相当,只是在不同的公司可能会不一样。 10.企业软件的盈利模式基本还是卖拷贝、卖服务。而互联网的盈利模式基本还是以免费吸引用户形成规模效应,而后依靠流量来卖广告,新的盈利模式基本还处在探索阶段,像app store这种成功的模式又很难被复制。 11.企业软件和互联网的融合,就形成了SaaS,这方面的著名厂商是SalesForce(言SaaS必谈SalesForce),国内的阿里巴巴也是SaaS的代表。