在这个篇幅中将来分析下这个分布式服务框架的服务的生命周期的管理的问题,在分布式服务框架中,支持服务的动态部署、卸载、升级是很关键的,至于服务的生命周期是否需要做到像OSGi那样的动态通知,在这个篇幅中会进行分析,并最终形成这个分布式服务框架的生命周期模型以及到目前为止的服务架构模型。
先来分析下服务的生命周期是否需要做到像OSGi DS的动态通知,这里以服务组件安装为例稍微的说下OSGi DS服务的生命周期模型,在OSGi DS中,当有新的Service Component安装时,首先会检查其是否lazy,如是lazy或此Service Component对外提供服务则完成安装,生成ServiceRegistration对象放入其服务中心;如不是lazy或此Service Component不对外提供服务,则首先检查其引用的服务是否可用,如不可用则尝试激活引用的服务,如所有引用的服务均可用,那么激活此Component,对外提供此Service,并发布Service Active的事件;服务生命周期事件管理器在接收到Service Active的事件后,将会查找所有引用此Service的Component,如Component未激活,则尝试激活,如已激活,则根据配置的bind-method注入此Active的Service Instance。
根据上面的分析,到分布式的服务应用的环境下,来看看,下图为一个典型的分布式服务应用的图示:
根据OSGi DS服务的生命周期模型,那么当我们在服务应用端部署了一个分布式服务时,此服务首先需要到服务中心进行注册,在注册时,需检查去所引用的服务是否可用,如可用,得激活此服务,同时需要将此消息发送给所有引用了此服务的服务应用端,这整个过程说起来是相当的顺畅的,但我们可以想想,如果这个服务是个基础服务,被N多服务应用端引用了,那这个时候会是个什么状况,那要通知到多少的服务器呢(可以想象100+的服务群),尽管可以cluster+同步,:),更复杂的情况,当此服务引用了其他N个服务,首先需要发消息尝试激活这些服务,然后那些服务激活后又带来了N个服务的激活,这个就把整个过程变得极度繁琐了,整个的实现难度和逻辑复杂度大大提升了,动态的处理生命周期的变化将会带来很大的技术难度以及不可控因素,例如在高并发的场景时某服务突然不可用了,但它的通知的消息还在传递,那结果会怎么样呢?既然这么难控制,那就干脆不去控制这种动态的变化了,简化整个生命周期模型,保证实现的简便性和系统的高稳定性,这也是实现所有系统必须遵循的原则:“简单(但不是简陋)到可控、满足需求为止”。
鉴于以上的分析,在这个分布式服务框架中将采取一种适合大型分布式应用使用的服务生命周期模型:
1、服务安装时
当服务在应用端被安装时,首先注册其Service元信息到本地服务中心,接着判断如服务需要注册到远程服务中心,则进行注册,注册完毕后,根据服务引用的服务的信息生成相应的服务Proxy对象,注入到此服务中,同时激活服务。
2、服务卸载时
当服务在应用端被卸载时,首先从本地服务中心中删除相应的Service元信息,如此服务注册到了远程服务中心,那么同时删除远程服务中心的Service元信息。
3、服务升级
服务升级需要做的其实就是替换Service元信息,同时刷新classloader中的服务实例。
通过这个容易实现的服务生命周期模型可以看出,实现出来的这个分布式服务框架将会很好的支持服务的动态部署、卸载和升级,但并没有支持到服务的状态的通知等,其实也不是很必要,不过在目前的这种情况下需要解决的是调用的高效的问题,因为在不知道引用的服务的状态的情况下,最复杂的就是每次都得发起调用,这里需要有一个高效的缓存机制,以避免无谓的调用(如服务压根就不可用呀,或者服务没改变,参数也没改变的情况),:),这个具体怎么实现大家可以先想想,在后续的章节中会详细的介绍。
经历到目前这步后,大家会发现,OSGi在整个的分布式服务框架中开始逐步消失,确实,OSGi在分布式领域的不足(最强的DS在分布式领域非常不适合)已经让它不是很适合作为实现这种大型分布式场景应用的框架了,但这并不意味着OSGi就没什么用了,OSGi在很多应用领域仍然是王者型的框架,只有最适合的,没有最好的,:),而且OSGi的很多思想(例如服务的模型,所以其中还是有很多DS的影子)其实也在指导着这个分布式服务框架的思想,所以即使最后这个实现的分布式服务框架和OSGi没有多大关系,也还是暂且叫着这个名字吧,来看下经历到目前这步后的分布式服务框架是个什么样子了:
从上图中可见,此框架中几乎所有的部分都是可换的,这和OSGi的microKernel思想是非常吻合的,当然,也是为了此框架能更加灵活的满足分布式应用领域的需求。
<<
基于OSGi实现分布式服务框架历程(三)
>>
基于Spring-DM实现分布式服务框架(DSF)(一)