paulwong

软件架构那点事儿(一)

关于标题,我也开始附庸文雅了。哈哈!话说软件架构是本人这些年的一些积累,在此做一点分享,希望对即将做架构或者是正在架构的 ITer 一些参考,也许见解浅薄,还望大家多多包涵,如有异议,可私聊,禁止拍砖。


说起架构可不是一件简单的事情,他是一个很庞大的系统骨架,但是面对到手的软件需求,你是如何设计一个合理的架构呢?原来架构这玩意也是分第一步、第二步、第三步 ........ 以此类推,不能急于求成,这样容易扯着蛋。要做到手中无剑,心中有剑的境界,并非一朝一夕的努力,需要长期项目的实践,经历无数次的失败与重构之后再能叩开“软件架构”这个大门的一丝门缝,从来一窥汪洋。


拿到一个软件的合同或者是用户的最原始的需求,很多架构师的第一直觉就是关注软件本身的功能,有哪些功能,适合采用哪些技术选型。这对于大多数人而言,的确是没有错误。但是在这之前还一点需要去做的事情 ...... 不知道大家想到了吗?架构是基于什么环境呢?这一点在架构之前不知道读者现在是否思考过这个问题。所谓的架构首先要了解软件运行的软硬件以及网络环境。之后明确了这一点才能考虑下一步的事情,否则就有点闭门造车的感觉了。


好了,说到运行环境,这是就要从硬件环境与软件环境分别对待了,例如:

1、硬件是采用几层架构啊,是采用集群还是单机部署呢? 典型的网络架构是Http服务器 + Web服务器 + 数据库服务器 。比较厉害的就是这些都放在一个机器上 哈哈~~~

2、软件运行的网络环境如何,是基于局域网还是公网呢?是否存在隔离的情况

3、硬件是什么机器呢?IBM刀片 还是 AIX系列呢
4、系统的灾备设备是什么,如何运作

......... 等等诸如此类的硬件环境首先要了解。



硬件明确了,下来考虑软件环境

1、软件运行的环境是 Window 、Linux、Unix ,是32位 /还是 64位

2、软件运行的Web服务器神码 WebSphere?Weblogic、Jboss、Tomcat、GlashFish还是别的?版本号是多少,支持的J2EE规范是多少。

3、JVM是什么版本,是全新部署 还是复用甲方已经存在的软件环境呢?
4、软件是否与其他软件有数据交互,交互采用什么介质

5、采用什么数据库,版本是多少?

.......... 这些是作为软件环境需要考虑的一些基础性的问题


通过上述简单的文字,好像大家有点明白了吧,其实这种事情,很简单的,只要平时多注意点就OK了,否则等开发后去现场实施才发现什么都不配套啊。如果在架构开始之前,你已经关注这一点了,恭喜了 说明你已经具备作为架构师最起码的嗅觉了。

上述的那些问题或多或少影响架构本身,架构是基于单机还是基于集群,这是两种迥然不同的架构模式,很多天真的童鞋认为 单机与集群架构差不多,复制一套在部署一台机器就OK了。其实则不然。二者存在太多的不同了,我举一些简单的例子哈:

在Java行业,很多开源软件使用很频繁,这些开源软件本身集成了Cache,用于提高性能,单系统是单机运行的时候,一切都正常,做了集群出现问题了。Cache 惹得祸,因为你的集群并没有把框架内部自带的缓存集群化,还是保持各自独立的状态,一用户通过A服务器修改了内容,并且刷新了Cache,但是作为集群的B服务器感知不到A对Cache的变化,依旧从自身的缓存中获取“脏数据”,这时其他用访问B服务器读到的值,其实是A用户通过A服务器修改之前的值。很绕吧。希望能理解。瓦咔咔~~~这是架构如果采用cache 需要重写自己的Cache框架,必须屏蔽开源项目中自带的Cached,否则出了问题都让你莫名其妙?


数据库部署是单机还是双机,是热备还是冷备,数据访问需要读写分离吗?如果硬件不支持数据库热切换,如何采用程序实现数据库的热切换?这些都是架构层次的需要直接面对的问题? 架构师们 你们心里有底吗?



与甲方内部的其他系统是采用什么通信方式?Socket、WS、RMI,访问的系统之间是否有防火墙隔离,采用什么技术可以穿透防火墙阻拦呢?



以后的系统如何快速部署到对甲方的真实环境中,是手动部署还是Ant自动部署?如何做到持续集成?发送错误如何回退?



......................... 现在是不是觉得有点复杂呢?其实没关系,成长有两种,一种是汲取别人成功的经验转为为自己的能力,另外一种是尝试失败,从经历失败中成长,本人呢二者兼有,前几年都是从失败中成长,但是随着时间的推移,发现这样的代价真的是很大。开始虚心学习前人的经验,从而转化为自己的知识。


掌握软件运行的软硬件环境是作为架构的第一步,切记切记!



上述文字,仅仅是作为软件架构之前需要考虑的一些大概,还有很多细节其实我也不是很了解,如有补充请回帖瓦咔咔~~~~ 软件架构 是一件艺术品~~~ 这是我对架构的感性认识。



每次架构完我都会在一段时间把它当作是完美的艺术品去欣赏,过了新鲜期后,发现很多问题,直接重构 这样循环不已 ............. 每次的迭代 都让自己收获很多!

posted on 2012-02-26 20:44 paulwong 阅读(307) 评论(0)  编辑  收藏 所属分类: SOFTWARE ARCHITECTURE


只有注册用户登录后才能发表评论。


网站导航: