我的一套云OA设计方案
几天前,有人让我根据需求阐述一套设计方案,本人没做过云系统,我是这么设计的,所以欢迎大家拍砖交流。(2012-5-11更新)
需求如下:
1、桌面程序。 用户可独立使用,可离线存取数据,也可以选择将数据同步至企业级或公共云平台,也可以从企业级或公共云平台下载及显示数据;具有表单智能自定义、office文档模板自定义以及生成功能;具有通信等扩展功能,应具有良好性能。
2、企业级平台。 web应用程序,管理平台、企业数据中心;接收桌面程序发送的数据;其他。
3、公共云平台。 web应用程序,云平台、云数据中心;接收桌面程序发送的数据;其他。 以上三个程序之间应具有标准数据接口、可通信互动等。
----------------------------------------------------------------------------------------------------------------------
根据资料,我认为这偏向于云OA系统:
1、桌面程序:
拥有独立运行功能和与云服务器同步功能。
数据可以统一存储为二进制文件,二进制文件体积小而且拥有保密性。.net提供了序列化类库(SoapFormatter或BinaryFormatter)可以将各种文件序列化为二进制文件,可以单文件存储或将各文件集合在一起存储,如:可以将dataset作为存储单元为各用户的数据分别存储成一个二进制数据文件,dataset可方便地输出到各数据控件,处理非常方便。
一般的数据我认为存储到传统的关系数据库比较好,如mssql、mysql, 文件数据存储我认为统一存储到数据库较好,可以考虑使用面向文档的数据库,如CouchDB、MongoDB。
.net提供了功能强大的office操作类库,显示及操作界面我认为使用水晶报表最好,水晶报表可以灵活地与excel和word文档转换,而且水晶报表的图表、操作功能非常强大,功能可以做到与excel相似,方便办公人员使用及兼容他们的使用习惯。.net的office操作类库可以设置office文档的各种属性,可以实现文档的模板自定义,如果这还不够的话,加上具有表单智能自定义的功能也能加强文档的模版自定义功能,根据具体的功能也可考虑提供让用户导入模板文档的功能。
2、企业级平台、公共云平台:
我认为可以统一为网站平台,企业数据中心和云数据中心都属于云端数据中心。
企业级平台、公共云平台、桌面程序统一通过云端数据处理层通信互动(看第三部分),桌面程序启动登录后将在云端记录下通信地址,当云端数据更新时,主动向客户端发送信息,而web平台(桌面程序也可这样)可以在刷新后得到新信息或定时与云端请求(ajax)获取新信息云端的通信服务器需要有三组接口:消息通信接口、数据传输接口与数据操作接口。
消息通信接口与数据操作接口在云端上通信,而数据传输接口用于云端与用户终端间的通信。
A、消息通信接口实现数据中心与云端用户之间的消息通信功能,如:当数据中心更新数据时,将发送消息给各用户中心,然后处理层将处理后的数据通过数据传输接口与客户端通信。
B、数据传输接口实现客户端与云端的通信及数据传输,当客户端与云端通信时数据中心会通过消息接口向各相关客户端发出消息。
C、数据操作接口实现云端数据处理层与存储层之间的数据读取及更新操作,并将操作结果生成消息传给消息通信接口。
与云端的通信功能,可以使用socket或WCF实现(webserver也可考虑,大数据传输不适合),以实现与云端互通,云端也可主动发信息到客户端,可以根据云端的设置信息引导客户端连接到空闲服务器,实现最优化云通信及扩展性。其实如果使用.net系统,从开发成本及将来的维护成本的角度来说,使用WCF来实现最好,功能和性能完全足够了,以目前主流服务器性能来说,单台服务器已可满足几十万用户同时使用(这里仅指数据处理层,看第三部分),如用集群服务器更轻松满足。
在云系统中,企业平台可能或可以拥有不同的web平台或站点域名,web平台、桌面数据与数据中心分离使用中间服务层衔接,让各个系统可以独立运行,便于扩展。
3、云服务器可分为三组,以实现三层分离(网络层、计算层、存储层)
将云服务器分组主要是可以进一步提供整体系统的可扩展性及稳定性,三组服务器分别应用云系统的三层架构,每组服务器代表一层架构。整个云系统的关系图如下:
桌面软件/web平台 <--(数据传输)--> 数据处理层 <--(发送消息)--> 数据中心
第一组是用于web平台(网络层)。
第二组是数据处理层,负责客户端(桌面软件/web平台)的通信及数据处理(计算层)。
第三组是数据中心,负责数据存储(存储层)。