1) 背景
建设云平台的基础框架,用于支持各类云服务的业务的构建及发展。
2) 基础服务
根据目前对业务的理解和发展方向,总结抽象出以下几个基础服务,如图所示
3) 概要说明
基础服务的发展会根据业务的发展,调整和完善,也会不断的改进,演变及完善;当然根据目前公司的现状和对基础服务的迫切程度,基础服务各模块的定位和发展预期将如下所述。
1) 数据库中间件
公司现状:
1) 对多种类型数据库的支持需求迫切,如同时支持mysql,orcale,sqlserver这些数据库。最多改动少量代码就可以在多种数据库类型中切换。
2) 尽量不要让开发人员写sql代码,因为原有的开发人员开发方式是采用linq的方式,大部分开发的业务是winform类型的业务。
采用方案:
目前采用entity framework,因entity framework 本身采用linq方式编程,自身能够解析linq为sql,且兼容多种数据库类型的查询。Entity framework 在.net 中的流行程度较高,代码开源,版本发展较快,且拥有大量应用文档和学习资料,相比较同类型的框架而言,当首选之。
方案弊端:
Entity framework 的采用只是临时的方案,因为业务的需要会持续比较久的时间。
1) 从高性能的服务来看,linq to sql的过程必然会有性能损失,即便框架做了解析的缓存,但是也无法避免这些问题。一些复杂语句的查询,linq to sql 目前也会出现意外的解析结果,复杂的语句查询难以用linq表达。如果不是对linq to sql 这种方式较熟练和关注性能的人,一般写法上也会导致性能问题。
2) 从数据库的角度看,目前业务暂时还使用同一个数据库,未来业务会采用多个数据库,多张数据表。这一点entity framework 后面会涉及到分库的支持和分表的支持,显然即便修改源码也很头疼。而且多个数据源,多个数据库类型的支持,意味着同一个业务要涉及到多种数据库下面性能的调优和运维,特别是涉及到版本升级的数据迁移,要兼容多种数据库,意味着工作量真心不小。
未来方向:
采用单一类型的数据库,会有一个支持sql编写直连数据库,支持分库分表的分布式数据库,自动管理数据库连接池,自动提供性能分析及预警等的数据库中间件。
2) TCP服务框架
公司现状:
1) 用于采集程序,采集设备和服务器的直连,发送采集信息。
2) 服务器端反向通知连接程序或设备,即时通知信息。
3) 与工作站的通信环境(云平台采用ActiveMQ),连接第三方设备(采用signalr asp.net)。
采用方案:
暂时保持与工作站的通信环境(云平台采用ActiveMQ),连接第三方设备(采用signalr集成入asp.net)这种方案。因为公司目前采用C#编程,这两块技术选型都有相应的C#客户端或者C#的解决方案的一些示例;故使用起来问题应该不大,但是遇到的问题也不会少。若遇到性能问题,可以简单的通过扩展多个ActiveMQ和 应用服务的负载均衡来解决。
其他方案:
采用redis或者rabbitmq之类的类似解决方案,个人倾向与redis 的发布订阅机制解决,性能不算差(听闻过上规模的使用案例及跨语言客户端sdk)(且可以统一缓存的使用框架,便于维护。)
方案弊端:
1) 无论采用redis,activemq,rabbitmq之类的哪种消息队列方式解决,都无法避免本质的性能问题,因为这些框架本身是用来解决消息队列的,因为其内存消息转发机制,故而用于一些即时通讯,常用于解决内网环境的一些应用交互。目前的场景会应用到广域网环境与工作站进行通信,业内类似的解决方案也曾有人使用过,但是也会经常出现activemq 内存满或者莫名死掉的情况。
2) 采用signalr 应用挂载到asp.net 上面的使用方式,经过一些第三者开发的经验,也会出现稍微高并发就出现性能问题或者死掉的情况。Signalr 常用于.net 技术,也有简单的使用案列,但是还没有成熟的上规模的使用案例和场景。
未来方向:
采用java的NIO思想或者Windows 完成端口思想,搭建纯粹的TCP socket服务是解决本质的一个方案,一般一台服务器能够承载10万的连接,几千的活动连接(具体看服务器配置等情况)不会有问题(而旧方案可能承载几千,上百的活动连接就会出现性能问题)。
3) 认证中心
公司现状:
1) 原有工作站内网子系统的登陆验证,外网设备登录验证,云平台用户登录验证。
2) 云平台用户菜单权限获取,操作权限获取。
采用方案:
自行研发公司特有业务的认证中心平台,目前仅第一个版本。包含
1) 设备管理,子系统管理,云平台用户管理和权限管理等
2) 第三方使用的登录接口,用户菜单权限接口,用户操作权限接口。
以上功能目前能够满足现有公司的业务。
方案弊端: