导语:
话说在跨越千年的时候,有一部系列电影,几乎是搞IT的人的必看。对了,那就是Matrix。各种从来没有过的思想、各种天马行空,各种感叹,为什么中国人想不出来、做不出来这样的东西呢?这里想说的是,里边有个重要人物,架构师,TheArchitect。镜头很少,却是最重要的人物之一,因为他就是Matrix之父。
十年以后,有另一部神剧,同样是IT人的最爱,名叫Inception。同样各种从来没有过的思想、各种天马行空和各种感叹。不像Matrix里的架构师是个精准精确、却无聊透顶的超级程序,Inception里的架构师是个小女孩,思路敏捷又洞察人性。她同样重要得很,没有她,就没有那设计完美的4层梦境。
一不小心把影迷的身份又暴露了,赶快扯回来,那么我们今天就818架构师吧。
说道架构
要写一篇文章不容易,想要写好这篇文章,首先谷歌一下,官方说法到底什么是架构。没想到的是,中文媒体里,基本上提到架构,就会提到软件架构。嗯,好像缺了点什么。换做英文,Architecture,觉得美了一些。不出所料,出现了维基百科的词条,里边的描述:
Ageneraltermtodescribebuildingsandotherphysicalstructures.
Theartandscienceofdesigningbuildingsand(some)nonbuildingstructures.
Thestyleofdesignandmethodofconstructionofbuildingsandotherphysicalstructures.
Theknowledgeofart,science&technologyandhumanity.
Thepracticeofthearchitect,wherearchitecturemeansofferingorrenderingprofessionalservicesinconnectionwiththedesignandconstructionofbuildings,orbuiltenvironments.
看着标黑的那些词汇,顿时觉得自己的职业高大上了。
然后点击对应的中文词条,赫然是:建筑。
明眼的同学已经看出来了,我从导语一直到现在,其实混合了两个概念:IT里的架构和建筑——以及其对应的职业:IT架构师和建筑师(或者建筑设计师)。中文真美,可以分清楚,而英文里,傻傻的就一个词Architect。那么英文在这里是不是就不美了一些呢?
其实不然,美的地方就是,这两者有千丝万缕的联系,同样有各种各样的相似之处。所以,这一个词把两者联系了起来,代表了更广阔的意思。而上面关于“建筑”的描述,恰好引申出了IT概念里对“架构”的理解。
从建筑到架构
我一直觉得,搞IT的人,不管专业是什么,不管会不会编程,不管搞开发、测试、部署,还是集成、实施、运维,都应该要有两样本领、两种思想,其一是项目管理,其二是架构。项目管理的话题以后另起炉灶,这里单表架构。
既然我们说了,建筑是架构的大兄弟,那么我们还是从建筑说起。
要造一栋房子,建筑师首先要知道的是,这是造的居民楼,还是办公楼?
如果是居民楼,那么按照德国的划分,这是独栋、还是双拼、还是排房、还是公寓?
如果是公寓,那么是小户型还是多室一厅还是跃层?
那么我们确定一下吧,多室一厅比较常见。开始画蓝图。多少层人口密度合适?要不要电梯?客厅在哪里、卧室在哪里、厨房在哪里?
墙在那里、门在哪里、窗户在哪里?
什么材料的墙、什么材料的地板、什么材料的瓷砖;怎么走线,插头在哪里,下水怎么走?
……
那么IT的架构呢?
首先要知道为什么需要某种架构,也就是架构所支持的企业的商业战略目标
然后要知道企业应该有什么样的专业能力,需要用什么来实现这样的战略目标
在实现目标的过程当中应该有什么样的企业流程,应该遵循什么样的规则和运用什么样的模式
然后也是画蓝图,也就是TechnologyBlueprint。用云还是私有数据中心?网络怎么设计?什么样的应用框架符合这些规则和模式,用什么样的应用来实现企业流程:ERP,CRM,SCM?需不需要BI?
怎么做防火墙、怎么保证安全?怎么做应用之间的接口?做不做、怎么做企业服务总线?数据存放在哪里?
应用是基于什么编程语言、什么软件框架?接口用什么技术?
……
企业服务总线(EnterpriseServiceBus,ESB),是一种基于服务的技术架构。说白了,就是为企业里各个软件应用提供连接和服务的一种框架,能够整合不同种类和形式的应用。就像现实生活中的大街一样,连接了不同的楼宇。
有弟兄可能要说了,哇,这个架构的观念还真大。没错,这是从“企业架构”的层面往下一层一层削皮去子的。通常说的,有很多种架构,比如网络架构、应用架构、系统架构、集成架构、数据架构、安全架构以及最常用的软件架构,都是包含在这个框架之内的,大多比较偏向技术。而“企业架构”则是从商务开始,一直到技术实现,企业架构师需要全程地陪,考虑的因素还包括了人、流程、方法论和工具。在很多情况下还需要进行关于“钱”的考量,也就是怎么用合理的投资和合理的人力资源实现合适的解决方案——这就是所谓的SolutionArchitecture。
企业架构就是EnterpriseArchitecture,简称EA。远不是一个纯技术概念,而是跟企业运营息息相关的整体信息系统框架。
那么问题来了,自己究竟在哪个范畴呢?
其实,每个人都可以在自己的领域成为一个架构师,重要的是,应该像架构师一样去思考。
像架构师一样去思考
以前有一本书,叫做《Java编程思想》。英文原版叫做“ThinkinginJava”。中文的翻译其实很好了,但我觉得欠缺了原文里的一个“用Java的方式来思考”的隐喻。前面说到的IT人应该有的本领和思想,之一就是“架构”,并不是说人人都应该去做架构。人人都应该做自己喜欢做的和擅长做的事情。而用架构的方式来思考的能力,是每个IT人都该锻炼的;是可以锻炼而且难能可贵的。
首先问的问题应该是Why,然后是What,最后是How。
比如Matrix里的架构师,他很明确自己的目标,那就是保证机器世界的正常运行,需要人类电池系统的正常运行。Matrix的架构经过多次升级,都是为了这个终极目标的;Inception里的EllenPage演的小女孩架构师(其实我们现在都知道她应该叫“建筑师”或者“建筑设计师”了),也很清楚,一层一层的梦境,都是为了引到最后那层梦境的一个点上的。
这是回答Why。
接下来应该重视的是企业业务的需求和技术的需求。业务的需求得懂,而技术的需求在这个上下文更重要。比如安全性、性能、可操作性、可扩展性、可恢复性、可维护性等等。理想状态下,这些需求都得实现,而且要不多不少(我知道,理想很丰满,现实很骨感的)。
用什么实现这些需求,是回答What。
再往下是架构的设计了。这需要一些想象力,和虚构化了之后再具体化的能力。Page在第一次与小李进入梦境的时候把街道弯了的那种能力,就是这里说的,你懂的。这种能力不是每个人都有,但是一些固定的原则和模式是可以学的。
比如,原则包括了:亲亲法则“KISS”(KeepItShortandSimple);不要去自己再发明轮子,用已有的东西(比如成型的软件框架);黑箱原则(比如“模块”、“封装”)等等。而模式,比如搞软件的人都懂的,大名鼎鼎的“设计模式”;比如搞SAP应用架构的都知道的,常用的“三系统或五系统模式”;比如搞网络的人都明白的,“非军事区”。
这里就是回答了How。
三系统模式指的是项目开发、测试和运营三系统;五系统指的是再加上维护开发和集成测试系统
非军事区指的是Demilitarizedzone(DMZ),网络设计里常用的用于保证安全的一个对外的网络区域
最后的最后,我觉得就是要有包容的思想和接受变化的胸襟。
所有程序,设计得再好都会有bug,要不然怎么会出现AgentSmith翻身要做主人……
设计得再好的架构,也得应对意想不到的事情,要不然第一层梦里怎么会有火车……