Chinaunix

标题: 首席架构师汪洋坐镇,欢迎大伙提问啊:软件架构连载讨论之二:架构设计解惑! [打印本页]

作者: 无风之谷    时间: 2011-10-31 16:22
标题: 首席架构师汪洋坐镇,欢迎大伙提问啊:软件架构连载讨论之二:架构设计解惑!
摘要:你的真的理解架构设计指的是什么?架构等于设计吗?架构设计等于模式吗?企业项目就是”代码马马虎虎,性能低下,破破烂烂“的项目吗?企业级项目就是为企业所做的项目吗?

本期组织嘉宾:
yanyangtian4502
外企高级工程师。上海益思研发管理咨询有限公司首席软件架构专家,软件咨询组副组长。曾担任世界500强公司在华架构师,负责项目框架和平台的设计。曾经带领创业团队与国内外企业进行项目合作。《.NET应用的架构、模式与最佳实践》作者。

本期讨论话题:
1,设计的重要性
2,架构、设计、模式的关系
3,企业级开发与企业级架构

活动要求:
1,有条理,参与以上话题的讨论。                    
2,可以分享案例,提出疑问。


活动奖励:
1,CU独家定制帽衫
2,本期活动结束后,会赠送《.NET应用的架构、模式与最佳实践》新书给予热情参与活动的网友(由组织者yanyangtian4502根据前两期的网友回复选出)
作者: yanyangtian4502    时间: 2011-10-31 16:29
希望朋友们多多的参与!
作者: yanyangtian4502    时间: 2011-11-01 16:14
我这里先起个头。
虽然我们平时总在谈企业级项目,那么“企业级“项目就是为企业做的项目吗?为大企业做的项目就是“大型企业级”项目,为小企业做的项目,就是”小企业级”项目?
作者: sytpb    时间: 2011-11-01 17:32
俺现在遇了一个问题设计一个方案(ppt 文档),这个设计文档怎么能让对方看得明白呢,没有讲解。
作者: renxiao2003    时间: 2011-11-02 21:27
顶一哈哈吧。
作者: yanyangtian4502    时间: 2011-11-03 17:07
回复 4# sytpb


    你们公司有成熟或者现成 模板吗?你这个问题 可能有点抽象 !
作者: yanyangtian4502    时间: 2011-11-03 17:09
其实我之前也去过一些互联网的公司,可以说,他们对“企业级”这三个字是相当于的“鄙视”!因为他们动辄来句:这不是几个人用的企业级项目,这是一个上百万、甚至千万人使用的,高性能的项目!

朋友们,企业级项目=“低性能”吗?
作者: chenyx    时间: 2011-11-03 18:41
支持下
作者: chenyx    时间: 2011-11-03 18:43
回复 3# yanyangtian4502


    我认为,企业分大小,项目不分大小.
    企业级别的项目,应该是用于生产环境下,稳定可靠的,不应该是所谓的大/小企业来区分
作者: chenyx    时间: 2011-11-03 18:45
回复 7# yanyangtian4502


    无语了.难道小企业就不能用企业级的项目?
作者: yanyangtian4502    时间: 2011-11-04 08:39
回复  yanyangtian4502


    我认为,企业分大小,项目不分大小.
    企业级别的项目,应该是用于生产环 ...
chenyx 发表于 2011-11-03 18:43



    这位朋友说的很对,其实”企业级项目“与项目的大小,是否是为公司  政府 组织 无关的!我稍后给出一些“企业及项目”的缘由和一些特性
作者: sytpb    时间: 2011-11-04 09:56
回复 6# yanyangtian4502


    没有。
作者: fire_cpp    时间: 2011-11-07 09:31
本帖最后由 fire_cpp 于 2011-11-07 14:31 编辑

1、关于“企业级”。我不太喜欢这个提法,“企业级”这个词在大多数时候是增加你项目谈判筹码的词汇,而非提高软件质量的词汇。操作系统内核(我更倾向于指开源操作系统)开发者从来不说自己的软件是“企业级”,但其伸缩性、稳定性、性能却是一流的。但人却是容易受词语影响的动物:同样一件事情,用不同的词语表达,听者(乃至表达者)都会有不同的、情绪上的微妙区别。

“企业级”有不同的提法,很多时候这个词为交流者之间提供了一个共同的语境。

2、实践上,我感到设计实在是非常重要。新人很容易陷入写代码的“激情”当中,虽然这种激情不可或缺,也可能是每一个人必经的阶段。不过话说回来,没做过大项目的人、没纠结过的人是无法体会设计的重要性的。而我认为设计的核心能力在于抽象——业务抽象与系统抽象的结合。

拿一个项目来说,如果因为系统面对的业务比较复杂、不确定性比较高(我们的工作不是经常面对这种情况吗?),一旦设计缺乏弹性,那么业务的变化很有可能让写代码的人抓狂甚至不知从何做起。如果设计时抽象得恰到好处,业务发生变化时你会发现“哦,原来这几个类可以这样用啊!还好当时是这样设计的!”。

至于基础设施这一块,新人容易陷入另一个误区:过度陷入优化,号称要榨干软硬件每一滴血。其实,大规模的应用,可扩展性更重要,这样考虑一是基于成本、二是基于可靠性。成本方面,如果能通过增加内存或者几台服务器提高服务能力,何必花几个人的半年时间来开发一个新的算法呢?可靠性方面,如果你把服务器的性能全榨干了,利用率达到了95%甚至100%,那么一旦有突发事件出现你的系统将很危险。当然不是说算法与优化不重要,而是说这应该与成本及其它实际方面取得平衡。我想这也是企业级系统与科研性质系统的区别吧。所以在实际中我们很少争论是linux还是freebsd在高负载下谁更优秀——如果经常处于高负载(比如70%以上)那么从“企业级”这个词出发,你的系统可能应该扩展了。

3、架构?
不在行,不是架构师啊。



大清早的,不知道说些什么……有感而发,不着边际,随便聊聊而已。

工作中我比较郁闷的是不知道除了经验之外有什么好的办法(或理论)能确保设计不过度、同时又有充分的弹性?
另外,架构师们,CFO会找你们的茬吗?
作者: yanyangtian4502    时间: 2011-11-07 10:28
回复 13# fire_cpp


    说出来很多的实情,有机会大家交流下?!
作者: fire_cpp    时间: 2011-11-07 14:29
回复  fire_cpp


    说出来很多的实情,有机会大家交流下?!
yanyangtian4502 发表于 2011-11-07 10:28



    我所知不多,水平不够,有机会能与您交流肯定获益不浅。
作者: yanyangtian4502    时间: 2011-11-09 17:58
在很多的时候,每次和一些技术人员讨论有关架构的话题,特别是在实现方面,很多的朋友,也包括很多的网上的文章  总是将架构与模式等同起来:每谈架构,比谈模式。

其实架构设计绝不是等于模式(设计模式,架构模式,集成模式等),架构设计 不仅仅涉及到技术的成分,并且还涉及到很多的“软”技能,并且 这些技能的重要  甚至比技术更加重要
作者: yanyangtian4502    时间: 2011-11-09 18:00
如果 硬是要把架构设计 与模式 放在一起 ,那么 可以这样说:模式 仅仅只是架构设计中的所涉及到的技术的一部分,甚至只是很小的一部分,如果把整个架构设计的技术体系比喻为一个大楼,那么模式 仅仅只是其中的几块砖而已
作者: litdong    时间: 2011-11-10 15:08
本帖最后由 litdong 于 2011-11-10 15:52 编辑

架构模式难道不是应用到架构上吗?

设计模式我的理解就像战场上连排的战术技巧,比如如何利用手中兵器有效组织步兵火力,班组如何保持战术队形,各个班组间如何通讯等等,属于战术范畴,一个人不行还不至于影响他人。

架构模式那就是团师高级别的,战役目的是啥,如何分配兵力,如何预留预备队,各团如何组织进攻,各团如何区分战斗范围,各团如何做相得益彰的协同,炮火如何支援,如何运用特种兵器打击敌人等等,属于战役范畴了,水平高低取决于指挥员和参谋的水准,这几个人不行,那基本就完了。

不同的项目也是不同的作战形式,比如平原作战,山地作战,丛林作战,平原作战就要发挥装甲部队快速突击的能力,山地就是要强调轻装部队等等。这些不同的地形引发的装备(技术)的改变,班组单兵作战方式(设计模式)的改变,甚至组织形式的(构件)改变这就叫架构的改变。
作者: crazyhadoop    时间: 2011-11-12 08:43
要做好架构设计我觉得要有2点要做的非常优秀:
1)系统分解和设计
  设计者需要将系统整体分解为更小的子系统和组件,从而形成不同的逻辑层或服务。关键一点是要松耦合的确定各层的接口,层与层相互之间的关系,个人感觉这里需要熟练掌握设计模式,但并不拘泥于设计模式,以便系统后期横向和纵向都能无缝,顺利的扩容。

2)技术选择
例如最近NoSQL数据库非常火热,很多项目都用Mongodb来存储数据,并搭配Hadoop来处理数据,为什么要选择Mongodb,使用这个数据库,技术人员能否稳妥的把握住Mongodb的行为,最近有一篇非常火的文章,盘点Mongdb的8宗罪。http://hb.qq.com/a/20111111/000205.htm  这对系统的未来走向很重要

最后就是要有系统设计文档,最起码要给后来的维护者一个大致的概念,每个系统的设计功能是什么?有什么要注意的地方,需要做哪些改进,我看很多公司都没有这样的东西,哪怕在代码里能说上也行啊
作者: crazyhadoop    时间: 2011-11-12 08:46
回复 1# 无风之谷


    其实企业级这个概念我觉得已经过时了,现在很多服务都是互联网级别的概念,就算不是整个互联网,也是面对着一个特定的人群,服务范围已经延伸了
作者: yifangyou    时间: 2011-11-12 14:23
对于CMS网站的设计主要着重什么,我在做这样的项目设计,发现和我以前做的项目完全不一样,完全不用考虑数据库性能,表和表之间关联很松散
作者: yanyangtian4502    时间: 2011-11-15 11:40
朋友们,都很客气啊,呵呵 看来大家都比较喜欢听我说啊
作者: yanyangtian4502    时间: 2011-11-15 11:43
下面,我们还是来围绕我们的主题,来讲述 什么是所谓的“企业级”:

谈到了企业级开发,首先要谈的就是:“什么是企业级项目”。

有人将之简单地理解为“为一些企业做的项目就是企业级项目或企业级应用”,照这个理解来看:或许为大企业、机构和组织做的项目就是“大型企业级项目”,为小企业或者公司做的项目就是“小型企业级项目”……

另外,还有很多的人将企业级项目指代为:低性能,用户量少,并发性差,甚至是不断需要缝缝补补的项目,而且其应用马马虎虎。

下面我们就来看看什么到底是“企业级开发”。

企业级开发通常是指在开发过程中采用实现企业架构的模式和实践方法。企业级开发会使用很多的方法和方法论来实现一个成功系统必须具备的指标:可靠性(Reliability),灵活性(Flexibility),重用性(Reusability),可维护性(Maintainability)(后面将其简称为RFRM)。这些指标也是衡量一个软件系统设计好坏的指标。
所以,企业级项目就是具有以上特性(RFRM)的项目。企业级项目的概念和项目的大小是没有很大联系的,甚至可以说是几乎没有什么关系。
作者: yanyangtian4502    时间: 2011-11-16 10:44
下面,我们接着看看 企业架构的话题
作者: yanyangtian4502    时间: 2011-11-16 10:47
既然 清楚了 企业级开发的含义,那么企业架构就是要使得做出来的架构满足“企业级”的几个原则。

那么如何开发 这样的 企业架构 出来呢?

那么 已经有前人总结了很多的思想和经验 我们可以采用和借鉴 那么 这些可以重用的经验 就是 架构模式了

从这里 也可以看出来 架构设计!=架构模式
作者: yanyangtian4502    时间: 2011-11-16 10:48
对于CMS网站的设计主要着重什么,我在做这样的项目设计,发现和我以前做的项目完全不一样,完全不用考虑数据 ...
yifangyou 发表于 2011-11-12 14:23



    不同的项目 不同的公司 考虑不一样

   例如,很多的企业在过软件的时候,性能是完全不考虑的 ,注重在业务上面。
  所以,至于您的cms要注重什么,还得看你们公司的上层如何决定!
作者: wxhnxxx    时间: 2011-11-18 23:58
学习下。。。。。看看
作者: yanyangtian4502    时间: 2011-11-21 09:00
之前 几天有点忙 最近终于有时间了, 我把朋友们的问题 和 相关问题整理一下 然后发帖回帖
作者: kuaileshenxian    时间: 2011-11-27 18:24
个人认为,【企业项目】 无非就是运行项目的环境比较高+要求比较严厉,既能高效的完成功能,有尽可能的少bug.
作者: yanyangtian4502    时间: 2011-12-02 13:41
马上发一篇企业级的博客
作者: yanyangtian4502    时间: 2011-12-02 15:42
发了一篇文章,与企业级 相关的 可以去看看,从而更好地理解企业架构
http://blog.chinaunix.net/space. ... blog&id=3032835
作者: niumingchao    时间: 2012-05-18 06:36
不错,牛人啊,拜读一下
作者: hengshan    时间: 2012-05-25 13:11
看了你的博客了,文章确实揭示了当前中国it业的现实状况。
情景惨淡啊

回复 33# yanyangtian4502


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2