大型应用与SOA

摘自我那本6月份要上市的,但目前名字还没完全确定的书,由于书中涵盖的更多的为构建高性能分布式Java应用所需要的基础知识,也许改成了《通往高性能分布式Java应用之路》,摘取的这段内容主要是阐述下为什么大型应用需要SOA,以及eBay的例子。

摘自我那本6月份要上市的,但目前名字还没完全确定的书,由于书中涵盖的更多的为构建高性能分布式Java应用所需要的基础知识,也许改成了《通往高性能分布式Java应用之路》,摘取的这段内容主要是阐述下为什么大型应用需要SOA,以及eBay的例子。

当应用获得用户的认可后,会不断的发展,以豆瓣 为例,早期豆瓣只有书评的功能,随着大家对豆瓣的认可以及使用的用户越来越多,豆瓣发展到了今天的豆瓣社区、豆瓣读书、豆瓣电影和豆瓣音乐等功能,这四个大块的功能有各自的特色,但又有很多可公用的业务逻辑,例如用户信息、评价等,如这四个系统都维护自己的用户信息读写或评价业务逻辑,此时会造成的问题一方面是当需要修改评价逻辑时,所有系统有可能都需要修改,当需要修改用户信息的读取方式时,也是所有系统都需要修改,会相当的复杂;另一方面是每个系统上都有很多种类的业务逻辑,这就像在一个小超市中,一个人负责收银、清洁、摆货、咨询等各种各样的事情,当来超市买东西的人多了后,这个人就没有办法再负责这么多的事情了,系统也同样如此。

第一个现象为系统多元化后带来的问题,可采用的方法为对共用逻辑的部分进行抽象,形成多个按领域划分的共用业务逻辑系统;第二个现象为系统访问量、数据量上涨后带来的典型问题,当超市的顾客不断增加时,通常超市会采取分工的方式来更好的服务顾客,同样,对于系统而言,也会采取拆分系统的方式来解决。

在构建了共用业务逻辑系统和拆分系统后,最明显的问题就是系统之间如何进行交互,如不做控制,会出现的现象是多个系统之间出现多种多样的交互方式,Http、TCP/IP+NIO、Hessian、RMI、Webservice等;同步、异步等方式可能都会出现,这会导致开发人员在每访问一个共用业务逻辑系统或拆分出来的系统后,都有可能要学习不同的交互方式;同时也会造成各开发团队重复造轮子,提供不同交互方式用的框架,这对于应用的性能、可用性而言也带来了极大的挑战。

对于上面的问题,很容易想到的一种解决方法就是统一交互的方式,SOA无疑是实现这种方式的首选指导思想。
SOA全称为面向服务架构,其强调系统之间以标准的服务方式进行交互,各系统可采用不同的语言、不同的框架进行实现,需要交互时则全部通过服务的方式来进行。

eBay也实现了一个SOA平台来支撑其业务的多元化发展 ,eBay认为SOA能给其带来的最大好处为提升业务的重用以及灵敏性,SOA平台除了要实现统一的交互外,还会碰到其他多方面的挑战,来看看eBay眼中SOA平台会带来哪些挑战:
 服务多级调用带来的延时;
当出现一个功能需要调用服务A,服务A又需要调用服务B,服务B又需要调用服务C时,这个时候会带来大幅度的延时,解决延时需要做到的是高性能的服务交互,以及完善的服务调用过程控制,例如当调用在服务B执行时已超时,那么则没必要继续调用服务C,而应该直接抛出超时异常给调用端。
 调试/跟踪困难
例如当调用服务A,服务A报错时,调用者通常会去找服务A的开发人员来解决,服务A的开发人员去查问题,有可能会发现是由于服务B报错,服务B的开发人员去查,有可能发现是网络有问题,在这样的情况下,就会导致出现问题时调试/跟踪非常困难。
 更高的安全/监测的要求
在未拆分系统时,对系统的安全和监测都只需要在一个系统上做即可,当拆分后,就必须在每个系统上都有相应的安全控制以及监测。
 现有应用移植
这一点是SOA平台在推广时的大挑战,需要移植的应用上的功能越多,就需要花费越多的时间来完成移植。
 QoS的支持
每个服务提供者能够支撑的访问量必然是有限的,因此设定服务的QoS非常重要,并且应尽可能采取一系列的措施来保障QoS,例如流量控制、机器资源分配等。
 高可用和高度可伸缩
这是互联网应用必须做到的两点,SOA平台承担了所有服务的交互,因此其可用性以及伸缩性就更会影响巨大。
 多版本和依赖管理
随着服务不断发展,以及使用面不断扩大,服务多版本的存在会成为一个大的需求,同时由于服务众多,这些服务的依赖关系也需要管理起来,以便在升级时能进行相应的安排。

eBay根据这些挑战自行实现了一个SOA平台,这个SOA平台主要包含了以下几点:
 高性能、可扩展的轻量级框架;
 监测、安全控制、流量控制的支持;
 服务注册和服务仓库;
 开发工具;

在推行SOA平台时,eBay采取的为按领域驱动的方式划分服务,同时不断的培训开发人员,以便让开发人员明确服务化后和之前单系统的方式的区别,例如可能会产生网络通信错误、超时等。

综合上面的内容来看,对于一个大型应用中的SOA平台,至少应包含以下几点功能:
 统一的服务交互方式,并可实现和现有应用的无缝集成;
 提供调试/跟踪的支持;
 依赖管理;
 高性能以及高可用。

在实现SOA时,可参考的标准或概念有SCA、ESB,同时业界也有一些实现了SCA、ESB的框架,下面就来具体的看看SCA、ESB、SCA框架以及ESB框架。