上周参与了公司SAAS技术的培训,这两天在看Windows 安全性和SQL Server安全性方面的技术,主要是要部署公司的一个WinForm项目,因为这个项目,终端用户数会不少,另外涉及到计费,所以对数据安全性要求比较高,数据库出问题,会直接影响到公司的运营和形象,重要性可想而知了。
一开始,因为时间关系,所以框架设计相对简单,只是逻辑上实现了分层,物理上分层只是一个前台,一个数据库。所以,要想办法限制用户的使用,必须是合法用户才能使用数据库。另外,数据库的连接对合法用户来讲是有效性,如果防止内部访问数据库也是一个问题。 初步想,采用域管理终端用户,这样外面来的用户可以被挡掉,SQL Server安全也是采用域账号用户。这样做可以挡掉外部,但内部还是一个问题,内部我的想法是采用域限制策略,不允许客户端安装软件,这样用户没办法通过别的软件来操纵数据库,安全性会好点吧,不过技术水平好点的人,总会找到什么漏洞的,防外好防,防内有点难啊。
所以,软件架构设计的重要性,如果我们一开始能考虑分层,中间有个业务层,当然可以物理上分开,那么,数据库仅需对业务层的服务器开放就行了,终端用户根本不知道,数据库在哪里,那样安全性肯定会很好,没办法,经验也是积累出来的。
再做下一个项目,
一定要考虑分布式,就是物理上分层,这样才能提供强大的可扩展性。上次培训SAAS也讲到了这个问题。我前段时间看CSLA.NET,把现在讲的分布式扩展表达的很清楚。这样的架构,拿ASP.NET来讲,WEB层通过代理调用业务层,业务层的代理对应根据传入的业务对象,执行数据库操作。这样,物理上WEB层可以和业务层分在两台服务器上,再加上数据库,由三台机器来承担。前端调用业务层,可以采用好几种通信方式,目前有Web Service,Remoting,COM+企业服务,最近3.5版本又加入了WCF。
这样的框架部署起来,可大可小,如果在一台机器上,配置成本地调用,可以跳过代理,最大化性能。
如果要实现大规模的应用,在WEB层可以通过WEB Farm实现负载均衡,每台WEB服务器再对应一台业务处理服务器,所有的业务处理服务器,再调用数据库层,而数据库层通过集群技术,可以想象,每层有5台服务器,3层15台服务器组成的应用有多强大。
而对于SAAS软件这样的平台软件来讲,架构一开始一定要考虑到可伸缩性,我觉得用CSLA.NET这样的框架来开发软件,一定能满足需求,另外还有代码生成工具使用,今天我研究了一下Code Smith自带的CSLA的模板,通过代码生成,真的相当方便。
这样一个框架,是我看过所有软件框架中感觉最满意的,毕竟老外考虑的比较好。站在巨人的肩膀上,我们会很快成功。强烈建议每一个做软件架构的人都能读一下<<Expert C# 2005 Business Objects>>这本书,里面有好多思想,值得我们去借鉴。
做软件要思考,我想一个人也是随着不断的做项目,积累了相当的经验,可以少走弯路,我们尽量不要自己去造轮子。
转载于:https://www.cnblogs.com/huang/archive/2008/08/06/CSLA.html