秘诀四:连接首批服务
选择最适合部署首批服务的平台和协议,同时充分利用现有的技术和技能组合。
现在是进行尝试的时候了。手里拿着规划方案,把某个方面作为试点项目。找出一系列相关应用当中关键的冗余部分,明确规范首批服务,并决定由谁使用哪些工具来构建服务,然后开始提供。测试后,你就可以开始改动应用,以调用新构建的共享服务。
一项服务应当具有哪些特点?洛克希德公司的Timothy Vibbert这样列举:“它们可以重复使用、有契约、松散耦合、没有状态,而且可以被发现。”大多数SOA专业人员会补充:服务还应当是“粗粒度”的,也就是说,它应当对应于某个业务流程步骤或者功能,而不是对应于应用软件组件。这有助于确保可以重复使用,并且避免与其他功能重复。
H&R Block税务公司的Scott Thompson对粗粒度方法具有的价值可是深有体会。他说:“在早期设计阶段,我们开发的服务往往与对象层相一致,而不是与真正的业务服务相一致,所以这些服务的可重用性不如我们当初所希望的。于是我们回过头去,重新设计了许多服务,以提高可重用性。”
譬如说,几个独立应用可能会以各自的方式为顾客开账户。如果创建一种单一的粗粒度服务,那样每个应用可以调用它来开账户,因而可以消除冗余性、减少应用维护。在此过程中,还有可能获得其他好处:更准确的法规遵从信息、使用单一资料库而不是多个数据堆从而提高了安全、加强网站管理。
服务通常作为Web服务来发布,因为定义Web服务的一些标准协议本来就是独立于平台和编程模型的。而实际上,SOA通常可以提供其他类型的服务,譬如可通过Java消息服务(JMS)协议访问的服务。那么你该如何确定使用哪种服务呢?洛克希德公司的Vibbert说:“一方面它取决于有效载荷。如果来回传送的消息数据量比较小,Web服务就很适合。或者如果对时间并不敏感,Web服务可能也是最佳选择。但如果大量的数据来回传送或者对时间敏感,就恐怕不能采用Web服务,而是要构建可以通过JMS或者其他某种二进制协议访问的服务。”
由于Web服务具有兼容性,服务可以部署到Java应用服务器、Windows服务器或者遗留系统本身上,开发人员一般可选择自己偏爱的工具和平台来提供服务。SOA注册服务提供商Flashline的CEO Charles Stack说:“面向服务的架构为你带来的好处之一就是,选择哪种平台并不重要。你可以在服务层改变部署平台,而不会影响面向服务的架构。服务为你免除了基础设施方面的顾虑。如今,这些事情已经不是像以前那样具有战略意义的决策了。”