`

服务过程中会遇到的问题

 
阅读更多

服务化,也可以叫SOA,但在我们还是尽量避免用这个词, 
因为它被炒得太热,一味的套SOA的概念,容易迷失原有的方向。 

要向服务化推进,当然就需要搭建一些基础设施,来协助这个过程的实现, 
那都有哪个方面的工作要做呢,这里把我暂时想到的列一列。 

1. 服务的定义 

服务提供者要怎么暴露一个服务?服务消费者要怎么引用一个服务? 
肯定需要一个声明式服务定义框架,可以用注解,描述文件,DSL等, 
这个要不要用标准,要看这个服务化应用范围, 
如果只是公司内部用用,就没多少必要, 
哪样声明方便,对开发人员要求最低,对系统侵入性最少就行。 

2. 服务的调用 

服务间的调用通常是远程的, 
使各服务保持相对的独立,以及数据共享性, 
整个调用过程的性能,可能是最关键的。 

3. 服务的交互模型 

交互模型也就提供者与消息者的协议, 
可以是强类型,也可以是弱类型, 
可以是文本,也可以是二进制。 

4. 服务的生命周期 

需要对服务的生命周期进行统一的,容器式的管理方式, 
可以用现有的OSGi, IoC等容器。 

5. 服务的版本化 

服务肯定是要升级的, 
而在多系统以及大量集群环境下, 
升级肯定是分步骤分区域进行的, 
这样就需要版本化的支持, 
通过新老版本交错的方式,达到平滑升级, 
当然,新老版本是否兼容, 
是否会引起脏数据等都是要考虑的问题。 

6. 服务的演化 

服务的版本化,并不能全部解决服务的发展, 
再好的治理结构,也不能避免混乱, 
就像敏捷开发的“拥抱变化”一样,我们应该“拥抱混乱”, 
当服务混乱不堪时,我们就需要重构, 
这时,服务的合并,拆分再所难免, 
版本化很难处理这种演进式改变, 
那我们就需要一种机制保证演进过程的顺利进行, 
比如标识某个服务过期,只允许旧的调用者使用,不允许新的调用者使用等等。 

7. 服务安全 

安全是永恒的话题, 
包括服务的可调用的范围,认证授权,隔离性等, 
还有数据的保密性、完整性等。 

8. 服务注册 

需要一个注册中心, 
协助服务消息者发现服务提供者, 
这样可以保证动态的增加提供者, 
使整个服务集群保持活性。 

9. 服务仓库 

服务多了以后估计会像我们的开发库一样错综复杂, 
最后可能需要一个类似于Maven的系统进行集中式管理, 
这样我们就需要一个服务仓库, 
从服务仓库中我们可以知道哪个服务依赖了哪些服务, 
并且可能在定义服务的时候需要声明这些依赖关系。 

10. 服务监控 

通过Logger埋点, 
监控服务的调用频率,调用时间, 
可用性,节点数等, 
以及报警提醒等。 

11. 服务自动化测试 

服务的变更,升级,将影响大量的调用者, 
需要一套完善的自动化测试框架保证服务的正确性和健状性。 

12. 服务开发过程 

服务的开发,测试,部署,发布,下线等, 
都是服务必然存在的过程, 
框架对开发人员,测试人员,配管人员,运营人员的支持工作必不可少。 

13. 服务归属 

当服务被多个应用调用或被多个部门使用后, 
谁来维护这个服务,服务间职责的划分都将成为问题。 

 

 

转自:http://javatar.iteye.com/blog/517793

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics