09年必须关注的10大软件架构主题

呵呵,对jdon思想不太满意的大师多看看。
10 Must-Know Topics For Software Architects In 2009


在过去一年左右的时间里,在相当平静,企业的软件架构变得相当令人振奋的一次。 我们终于看到新出现的一些课题已经融入主流,并潜在地改变了游戏规则,一些创新,本来徘徊在边缘的技术也开始进行颠覆式革命。

一些大的变化是:传统的霸权的第3和第4层应用模型 ,重量级的运行平台(集中式数据库计算模型),以及古典面向服务SOA的架构已经主宰了近十年,现在几乎被四分五裂了一系列新办法的设计和架构应用。

这些听起来似乎很轻率的话,但确实在悄悄发生,架构师正在寻找新的解决办法,因为他们在新的领域中遇到了新的挑战。 因此,这些新的方式可以解决现行做法的缺点或添加新的功能, 例如一些例子包括建立可重复使用的平台的应用,OpenAPI开放API的故事 ,或符合成本效益的创建架构,可以即时支持全球分销,数百TB的数据,以及数以千万计的用户。

这些创新的特点是因为当前超大的系统正在构建(遭遇到由于规模scale,性能performance或功能集 feature set等引起的独特特点) ,软件的进步,也宽范围地跨越从日常的软件企业系统及互联网应用新移动设备,如新兴空间的社会化网络应用。

主流结构的应用,如关系型数据库模型,集中独占式计算运行方式,甚至是一些已经确定成熟多年的软件技术也正在受到挑战:非关系数据系统non-relational systems , 云计算cloud computing ,新的拉动为基础 pull-based的系统的一致性和数据的完整性,甚至是大型支持系统的运行和性能设计。

我们也不要忘记,Web 2.0带来的方法和设计模式也是越来越广泛地在在线系统和企业架构上的应用。 Social architectures, crowdsourcing, 和open supply chains正在成为规范,这些最新的软件系统的发展速度比预期快得多 不幸的是,有关这些专门知识以及如何有效地使用设计在架构上还是不很丰富。

掌握的最新情况,并探讨这些新出现的问题........

这里列出的最重要的新领域,软件架构师应该精通并期待在2009年:

10个软件架构师在2009年必须知道话题:
1. 云计算Cloud Computing。.......

2. 无关系型数据库Non-relational databases。托尼贝恩Tony Bain 在readwriteweb.com问:Is The Relational Database Doomed?关系数据库注定要死了吗? ,虽然到目前为止还为时过早宣布关系数据库消亡,但是有大量的有希望的替代品出现。 为什么要摆脱传统的关系型数据库? 某些应用程序的设计可以大大受益于优势资源的文件或为中心的存储方法。 使用非关系型数据库性能将高的很多;关系数据库有非常惊人的低天花板,即使伴随集群和网格计算。 不但存在对象数据库阻抗 ,不仅产生更多的开销,而且还同一时间在服务请求中对付高并发请求存在性能瓶颈,非关系数据库的解决方案包括CouchDB ,开始看到越来越多的产品,Amazon SimpleDB, Drizzle (from the MySql folks), Mongo, 和Scalaris.。 虽然许多应用程序将继续相处得很好的关系数据库和对象关系映射,它们还是不断地需要他们。

3.新一代分布式计算Next-generation distributed computing。一个出色的故事今天在纽约时报关于Hadoop提供了一个良好的背景下,关于这个问题:新的分布式计算模式正走出实验室,并成为不可或缺的选择,可以连接计算处理以前无法想象的大量的数据。 而传统的请求响应模式,网络的主体为导向的计算是重要的,所以越来越多的有效的方法来处理大量的数据,现在常见的现代软件系统。 视频采访雅虎的Mark Risher 和Jay Pujara ,讨论Hadoop如何使他们能够通过数十亿片的邮件隔离模式 , 并确定垃圾邮件发送者。他们现在能够创建新的查询 , 并在几分钟内得到结果,得到问题的发生时间或被认为是以前不可能的做到的结果。 虽然Hadoop已经相当大的势头,其他类似的产品包括商业 GridGain 和open source Disco 。

4.面向Web的架构( WOA ) 。 我已经讨论了面向Web的体系结构好几年, 总之,前提是,RESTful 是一种更自然,生产,和有效的方式,建立日益开放和联邦网络为基础的应用。 该WOA的辩论已经持续了一段时间,因为它已经成为一个热门话题,但去年最大的网络世界已经投票赞成WOA的方式,网络正在变大; WOA为基础的应用程序更好地跟随这种方式。 在我看来,这是一个更好的方法来建立面向服务的架构,几乎所有要求,从而导致更多的柔软和弹性的软件,是那么困难和昂贵的建设和维护。 为企业考虑转向WOA ,这里是很好地概括我做了简短而回的问题和演变的SOA 。

5.混合集成Mashups。David Linthicum不知道今天在信息世界的Mashups已经澄清,他相信他们已成为不可分割的SOA和提供有价值的企业架构。 Mashup Patterns是一个很好的开始,可以研究它们如何影响软件体系结构。混合集成mashups是提供一个快速投资回报,使用一些比如AJAX 基本浏览器技术工具和重用Web服务和Web组件比如RSS等。

6.Open Supply Chains via APIs 开放API 。,其中越来越多的证据表明它是一个非常强大的模型,跨组织的SOA ,所以我已经开始称他们为“ 开放的供应链 。 ” 开拓您的业务的可扩展性,成本效益的方式,作为一个平台,为合作伙伴建立的是一个在21世纪最强大的商业模式。 ..... 因为越来越多的组织开放。 我最近提“国家联盟”的开放API 。

7.动态语言。虽然动态语言已经在网络上流行了,最早的是Javascript和Perl,这只是最近,它已经成为可以接受的发展“真正的”软件。 .NET和Java的仍然极为引人注目(共同)平台,但它的动态语言,如Ruby, Python, PHP, 和 Erlang动态语言越来越受欢迎 。 这是为什么呢? 正如我探讨了详细比较了一段时间后,权衡在运行时性能一般被发现,凭借动态语言可以完成一个大的生产力提高。....越来越多框架如 Rails, CakePHP, 和 Grails 是建立在动态语言上,他们带来了最新的最佳实践和设计模式,现在动态语言正在开始阶段,会有很大比例的新项目。 软件架构师应该对此做好准备。

8.社会计算Social computing。开发人员和软件架构师往往不适应社会计算方面的软件系统,但是Reed's Law已明确表明,社会制度的价值通常远远高于非社会制度。 或者你可以只看了许多流行的应用程序存在的主要驱动力的社会行为以及由此形成的(往往巨大)价值的参与造成的。 例如YouTube的脸谱, Twitter的,或数以千计的其他社会应用(企业和消费者都) ,教训是很清楚的:社会结构是一个重要的新的应用层协议栈......。

9. 端到端的计算结构Crowdsourcing and peer production architectures。强大的开放的商业模式已经开始改变我们运行我们的企业和研究机构。 开始是开放源码软件,并已转移到媒体和现在蚕食各种行业。 这是利用群体智慧....。 只要看看亚马逊的Mechanical Turk 或CrowdSound ,认为后者是一个widget 工具,允许甚至最终用户的动态包括crowdsourcing到他们自己的应用。 .....


10. 新的应用模式New Application Models。语义Web(Semantic Web )似乎再次上升,和我已经涵盖平台作为服务和混合集成,除了这些我们看到了全新的应用模式中出现大规模网络上。 无论是Facebook的应用,下一代移动应用服务( iPhone的机器人, RIM公司等) , OpenSocial还是日益流行的工具和设备,这一趋势在雾化软件(这是做也许仍然是最好和最有效迄今还在Unix ),但是这提醒我们,我们仍然有新的发现在我们面前。 虽然这些看似琐碎,....,对下一代内部网和门户网站以及在线“桌面” ,微型应用程序都不得不与scale伸缩性和安全做斗争,而其他嵌入应用程序中越来越飞速发展。 需要知道他们是如何工作的,为什么他们这么受欢迎(有几万对数以万计的Facebook和OpenSocial应用) ,并了解他们如何可提供真正的实用价值。

[该贴被admin于2009-05-10 16:50修改过]
[该贴被admin于2009-07-07 08:53修改过]


关系数据库已死?

叫嚣着关系数据库为王的大师接着看这个帖子。


本来打算翻译一下的,但是最近太倒霉了,两个手都受伤了,大家讲究着看看。
[该贴被xmuzyu于2009-05-09 20:19修改过]

每一种技术都由自己适合的领域,至今没有一种方法能够解决所有的问题,所以鼓吹关系型数据库可以解决一切问题是错误,同样说缓存是提高性能的唯一方法也是错误,必须在相应的环境下讨论才更具有讨论意义。

至于10 Must-Know Topics For Software Architects In 2009 这样的帖子,三五年前的时候我还看看,可是现在我不看,因为这些技术只是作者觉得未来具备发展潜力的东西,可是他能主导世界的变化么??你从软件发展的历史上看,多少认为是有前途的技术最后胎死腹中,个人学习应该认准自己认为正确的方向,然后努力的去做就好了,可以适当的关注其他技术的发展,抱着学习与借鉴的态度去面对其他的技术领域,而不是否定着一方去强调另一方。

最后想说,大师之所以能够被称为大师,不是因为它们学了多少新的技术,而是在某个技术领域具有非常强的认知,能够坚持自己的认知,能够将自己的知识完全的应用到开发当中。人云亦云永远只能被拖得很累,有了目标才不会被路边的野花分心。如果楼主认为OO是你发展的方向,那么你就努力的研究它,学习它的过程不是否定关系型数据库的过程,应当结合关系型数据库中的优点来改进你OO的设计。

>>所以鼓吹关系型数据库可以解决一切问题是错误,同样说缓存是提高性能的唯一方法也是错误

恩,这个比较认同。提高性能的方法有很多,缓存是一种比较好的方法。OO和关系数据库本来就是矛盾的,尤其是java领域,设计一个好的对象模型,如果对象模型的行为越丰富,越富模型,那么在持久化的时候就越困难,相反的如果采用面向过程的思维,那么相对简单一点呵呵。而要想减轻这种痛苦,最好有个对象数据库,而当今没有对象数据库怎么办,或者对象数据库不成熟怎么办,我选择了缓存。这样以来,我编程的时候脑子里是业务对象,而不是老是想着怎么把XX表的数据拿出来,它们由怎么组成XX对象这样的问题,从缓存中取出的对象是多数情况下是聚合根,这个聚合根富有丰富的业务含义,我直接调用对象的方法就OK了,并且调用聚合的方法有个好处就是所有的方法满足不变量约束,满足后验条件,当我们设计好聚合后,调用可以放心的调用,不用考虑其它的。


[该贴被xmuzyu于2009-05-09 23:47修改过]

ACoder你说得真是太好了,我关注jdon一年多,今天看到你的话,实在忍不住出来赞同你一下:)

ACoder的观点我很认同,同时我也是这么认为的。

大家发表自己观点都很好,但是我觉得好像偏离本主题,我特点在楼主帖子中将10软件架构中文翻译出来,这篇文章不是在预测,而是在叫醒我们这些,醒醒看看,现在周围已经发生什么了,你是否落伍,文章是指出一些发生的事实,这些事实正在偏离一些专家和组织的预期,比如庙宇厅堂的SOA被民间的混合集成和OpenAPI颠覆。这些技术不是将发生在2009年,而是已经发生在过去,并且帮助一些企业壮大成名,如google Facebook等。而作为传统重量级的运行平台的代表甲骨文Oracle出手收购SUN也代表这些传统企业巨鳄也正在酝酿变化。作为架构师的我们应该对这些暗流涌动保持敏感,并且顺势而为。

最后慰问一下楼主,在双手受伤情况下,还能将国外最新动态告诉对创新和设计不太敏感的国人。

老子讲:虚怀若谷,天地之间,其犹橐龠乎?虚而不屈,动而愈出。 不要以为这个谦虚是孔子那种表面文章,假客气,嘴上谦虚,而是真正对创新好奇,喜欢不断学习新东西,一直让自己成为一个空房子或空袋子,这是谦虚的真正含义。

[该贴被banq于2009-05-10 17:49修改过]

对于老外的崇拜我觉得应该从这次金融危机中醒醒了,过去我们认为国外是一个遵守诚信的社会,它们的技术很先进,它们通过计算机技术推算出各种金融衍生品,确定风险系数,保证你的资金安全,可是结果是什么??它们骗了整个世界,多少企业倒闭,多少人失业??难道你们还不能从对外国人的崇拜中觉醒么??

使用我们崇拜的西方各种开发模式的开发项目,失败的例子比比皆是,造成的资金浪费上千亿计,可是我们的邻居,我们不喜欢的日本依旧用着我们看不起的迭代式,瀑布试的开发方式,完成了一个又一个的项目,它们的软件在国际上的影响力越来越大,很多系统都有日文版而没有中文版。为什么会这样??对于人力资源的考核,倒在西方的绩效考核中的中国企业有多少??可是微软,google这样的企业都不用这种方式,中国人却要顶礼膜拜。ISO9000体系捆住了中国人发展的手脚,CMMI体系限制了中国人自己开创软件管理的思想。就如同马克思主义一样,不要全部的信奉它,把它当圣旨,就必须一成不变,就要毫不修改,历史告诉我们,必须结合中国的国情,创造出适合中国自己的体系结构,当你创造出来的时候,世界会为你瞩目,毛泽东的时代,谁不服中国,中国的改革开放走出了自己的路,而西方通过这次金融危机,国家经济形态也正逐渐向我们靠拢,要觉醒啊。

对不起,今天上午参加了一个培训,看了不少资料,中间的很多东西触目惊心。其中有个案例,一个网络上不知道为什么出现了50多字节的非正常报文,导致我国某重要系统瘫痪近7个小时,这不是一个黑客入侵的事件,而是一个生产系统的意外中真真正正发生的事情,可是我们束手无策,依然依靠大洋彼岸的美国人帮助我们解决问题。现在的软件里面有多少这样的地雷,有多少我们未知的东西,我们没有自己的操作系统(希望红旗linux的源代码每一行都检查过),没有自己的数据库(希望东软数据库会逐步占领市场),希望我们真真正正掌握网络技术(希望华为现在的交换机不要山寨思科),这些东西需要我们去学习,去付出努力。请在看OO的时候看看数据结构,请在看云计算的时候想想计算机原理,请在……,我们是中国人!

2)是“非关系型数据库”,而不是“无关系型数据库”。一字之差,科学与非科学泾渭分明。
新的“非关系型数据库”取代“关系型数据库”,那是有可能的,但并非易事,要知道,“关系型数据库”是在与已占统治地位的“非关系型数据库”竞争而取胜的,并非“世无英雄,遂使竖子成名”(意思是,世上没有真正的武林高手,才让只会玩花拳绣腿的当了冠军)。
而且,新的“非关系型数据库”取代“关系型数据库”,与“数据库死了”,完全是两码事。
3)“新一代分布式计算”?这个最多了,比超女还多。有多少说了两天就不见了踪影。Next-generation distributed computing?这样的泛名词,也拿出来骗人?

老家一叔字辈的,不怎么懂文化让我帮他买点造车的器材,他要造一辆上山拉石子的牛车。
俺是个热心人,竟然认为俺是读过书的文化人,找俺帮忙,俺肯定要体现俺是有文化有头脑的人啊。俺充分考虑了他的需求后就开始动工了,去买了四个汽车的轮子还有轴承,村里就有修这种轮子和轴承的地方,为什么买四个汽车轮子呢?人家不是拉石子吗,汽车轮子载重量大,四个轮子比两个轮子的车稳定。又上山砍了两颗怀抱粗的大树,为什么要这么大的树呢?为了把车造大点啊,多拉石子吗,这样多经济啊,再者将来他不拉石子了改拉木头,把后面的挡板卸掉就可以了,有多长的木头不能拉?经过一番设计几天后牛车造好了,我以一种有头脑的人的口吻告诉叔字辈的这牛车多经济多实惠,改装性多好。。。
第二天,叔字辈的就气哄哄的来找我算账了,这是为什么呢?原来山路不像城里的公路,山路那个十八弯啊,坑坑哇哇的,这石子装多了牛拉不动,装少点,结果把牛累的够呛还没别人家牛拉的多。。。

3)Next-generation distributed computing?谁都说自己想出来的是下一代分布式计算。这种生命如萤火虫短暂的东西,看得太多了,这种套话、空话,也听得太多了,害我们审美疲劳了。
10)New Application Models,一样的泛名词。它和Semantic Web有啥关系?几年前,浙大一本科毕业生搞了一个房地产综合系统,从规划、招标、建造、销售,直到老百姓买房,统管整个杭城。一台电脑前,一切搞掂。里面就含Semantic Web。一位院士看中了,认为是第一次看到了Semantic Web和SVG(可伸缩矢量图形)的真正实用,而且是在同一个项目里。自然也必须是分布式,为了写论文,就把它叫作当时流行的“网格”,可事实上是有点像现在说的云计算。后来中科院付了点钱给浙大,算联合开发,浙大出两个博士生,中科院出四个。开发中,一直在请教那个浙大本科生。快两年后,实在做不下去了,把浙大生请到杭州去。他回来同我说,一点进展也没有,可他们很正规,走的是国外主流路。ACoder说得对,别迷信。

偌贝尔发明炸药差点炸死,我们真应该庆幸,我们才不会傻到那样冒险,我们用火药来做鞭炮,多喜庆美满啊?

莱特兄弟发明飞机,差点摔死,我们也真应该有自豪感,我们才不会傻到没死跑到空中飞,好好大路不走。

等西方进入火器 和航空时代,我们马上站起来,我们都会,火药还是我们首先发明的,鲁班早就做了飞行器。

如何在借鉴和盲从之间取得平衡,好像一直是我们国人的一个弱点。

楼上说的非常好,但是弄错了一点点概念,就是什么该学习,什么该拿来。
从一个国家而言,我们秉承改革开放的宗旨,引入了很多国外的企业,这些企业带来了新的技术,新的思想,以及相应的管理经验,但是虽然合资企业现在比比皆是,但是电力、自来水、钢铁、通信等企业却不允许国外进入,而有些行业虽然允许进入,但是不允许超过一定比例。那么为什么要限制这些行业的进入??因为这些企业关系到民生,也就是关系到国家的根,你可以一天不购物,不娱乐,不用电脑,但是不能一天不喝水不吃饭(如果也要抬杠我也没办法)。

由一个国家层面我们降低到一个行业的层面,如果这个国家的一个行业想长成参天大树,根很重要,那么什么是软件行业的根??是ERP,还是CRM??我觉得都不是,他们依托于地基之上的上层建筑,那么什么是地基??操作系统、网络、这些才是软件的根本。banq说改革开放这么多年了,别人都做好了拿来直接用好了,不用从轮子造气。我同意,但是底盘,发动机我们要自己造。就像我上面说的那个例子里面,如果出现问题,谁来解决??现在和平年代,不说战争风险,只是说数据的问题就很危险,你愿意你的隐私被暴露在光天化日之下么??我想你不愿意,那么一个国家同样不愿意。

接着我们说操作系统等一些问题,国外有F16,为什么要造歼十,那些该拿来用,那些该自己研发??中国需要有自己的战斗机来保证自己不被欺负,这需要通过学习,了解原理,然后自己造。这与直接拿来是完全两种不同的概念,如果直接拿来,别人很快就知道弱点,有了等于没有,自己造的,就算慢点,一样可以跟对方打一阵。软件也一样,如果你做上层的,底层改了你就得改(比如某个API以后不提供了),只有自己做了底层别人再怎么变,他千变万化不离其中。就美国而言,你看过他外包过操作系统么??外包过网络协议么??大家可以想想为什么。

最后跟楼上说一句,请不要总说国人国人的,我们都是中国人,只要我们有一颗爱国心,希望为国家进一些力量,那么就不要高高在上的冷眼旁观,扎扎实实的做点事情比批评更加重要。


变化快的,发展快的,都是表层的,应用的东西。不是不应该关注,但是把这些吸引人的新事物当作全部,就有点被人误导了。

>就是什么该学习,什么该拿来。
>把这些吸引人的新事物当作全部,就有点被人误导了

我们总是无意地陷入了鸡生蛋 还是蛋生鸡逻辑怪圈,在诺贝尔发明炸弹枪弹之前,我们当时不知道火药可以这么用。

我们不是上帝,不可以对将来哪些有用的东西进行挑选,鲁迅那句吸取其精华,剔除其糟粕,就是典型的垃圾,糟粕和精华是事物的两个方面,去除糟粕,精华就是不成为精华,这是典型的辩证思想,况且你可能不可能预知未来哪些是糟粕哪些是精华。除非你是自大的上帝。

回到本主题,这个主题列举了西方国家用于实践创新的经验总结,我们应该虚心借鉴。


[该贴被admin于2009-05-13 15:42修改过]