[随便神侃01]小论ESB SOA , 包容一切,超越一切

[size=large][color=red]这个格式不好看,可以下载wps 文件格式来看[/color][/size]

前言
ESB 和 SOA ,曾经,大约2年前,也了解过一点点,只能说是了解,而且只是一点点,因为除了使用过WebService ,任何SOA和ESB产品我都没有去用过,也没有研究过其实现方式。
所以,我的论调是很有不正确的可能性,这无关紧要的,错误的观点,可可能很有价值,也可能很有力量。
接下来, 我会先阐述一下,软件技术,或程序语言发展的缘由,再引申出 SOA 和 实现SOA的前提, ESB。

在取一个接口编程规范的例子, 这个例子我以前在JavaEye在发过,不过帖子里面和别人争论的太厉害,被和谐掉了。这个例子虽然和SOA没有什么瓜葛,却和SOA具有同样的胸怀。
翻页。。。








IT,从汇编语言谈起
这个时代写程序不是一般的艰巨任务,所有的功能都由非常细粒度的指令组成,一个循环,也要几10行代码,能完成排序的程序员都是高手。每一个功能的代码,都是高度依赖它前面的代码,和后面的代码,以及代码的组织方式的,依赖即耦合,所以这个时代的耦合度是最高的。
好了,现在到了 C的时代了,即使是现在,C这门高度严谨的程序语言都没有成为过去式。它的出现,绝对且巨大的改变了前面的情况,因为它,对常用的逻辑进行了封装,在很大程度是接除了耦合,因为你现在要写循环, 你只需要书写循环的语法就是了,你不需要去Copy以前的实现循环的代码。 更厉害的是,它有了函数这个牛逼的东西,你完成一项任务的的时候,只要调用这个函数就Ok了。
它又进一步的解除耦合了。
看到这里,你可能没有兴趣看下去了。这和SOA什么的能有什么关系呢?耐心一点,还真的非常的有关系,或者说是共同点。
好了,现在是面向对象的时代了,这比C封装的更厉害,它提出了类这种东西, 把 相互之间有关系,或者是联系的方法和数据 封装在一起(这就是面向对象的本质)了。以前面向的是过程,完成一个系统, 需要定义一大堆的全局变量,然后需要组织好之间的关系,函数的复用率很低下,因为,他们可能要依赖到全局变量,在缺失同样的全局变量的环境中,函数无法正常的执行,也就是说,耦合程度还是非常的高。 这样看来, 面向对象是一种石破天惊得编程策略。
而且,面向对象还不止这些,它能改变以前的思维方式,以现实世界的实物看思考软件中的虚拟事物。
到了这一步,我们才能说,软件都是一个虚拟世界,而它虚拟的是现实世界。

程序语言,最高级,就是面向对象的,但是, 这不是IT的终点。
我们开始思考,把不同系统中的共同功能,开发成为便于复用的模块,
然后以后无需再次开发,直接使用,这样很容易,于是又了中间件,有了面向组件的编程, 有了EJB等。但是可复用不是那么容易的,可以说世界上没有什么组件是无条件可复用的,而且要进行复杂的配置,花时间去学习,这注定了,这只能是走向灭亡的垃圾解决方案。EJB的臭名昭著说明的问题,他没有带来效率,而是降低的效率,用最大的代价,获得最微小的收获。所以,和人认为,中间件,大多是丑陋的。

接下来,IT重回正道, 这一次,将会和互联网的出现一样改变世界,当然,这是在若干年后。
这就是面向服务, 例如WEB Serive,功能以服务的形式来提供,
只要我们遵守共同的协议(SOAP). 这样,我在使用同样的功能的时候,
无需依赖特定的类库,和环境,我们不一定要用同样的编程语言,
无需去部署这样的功能,我们只要访问这个Service来调用这个功能就OK了。 这样系统开发,又从部署和,配置,包依赖,工具,调试的耦合中解脱出来, 它完成了面向对象以后的再一次强大解耦。
再一次飞跃。

好了,看到这里要SOA了,如果前面的,都不知道,也看不懂,那你没有办法SOA。
一般的面向服务,还不是终点。 SOA,即面向服务的架构,是方法而不是产品,SOA是超级面向服务。他要对一般的面向服务再次解耦和封装。
我们前面说过了, WEB Serive 这样的面向服务,我们要遵守SOAP协议才能工作,soap service的Client 无法访问 JMS 协议和RMI协议的Service, 而SOA 则要让这样的情况成为可能。SOA号称无论你使用什么样的协议,都能够正常的使用服务。
SOA:
-1,功能是由服务的形式提供给你的。
0,算法是由服务的形式提供给你的。
1,软件是由服务的形式来提供给你的。(SAAS)
2,开发平台是由服务的形式提供给你的。(PAAS)
3,XXX,一切的一切,明天的明天的明天,都是以服务的形式 提供给你的。
4,无论你使用什么技术,都能调用Service。
5,无论你如何格式,都能使用Service。
6,无论你使用什么样的协议,都是使用Service.

SOA 试图做到上面说的一些,ESB 是其中的一环。
当你访问一个服务的时候,你并不是直接调用服务, 因为,你的调用协议,可能和服务的协议不一致,那怎么办呢。这些杂七杂八的事情全部给ESB来解决, ESB就是企业级服务总线,你访问时直接访问ESB,ESB相当于网关,它这样工作:
1,它会分析你的协议,确定你要访问的服务
2,然后,将你的请求,用目标服务的协议来重新表达你的请求,然后调用服务,
3,服务的响应也响应给ESB, ESB确认调用端, 再把响应转换成调用端的协议数据,返回给调用端,这样就解耦了协议

我们还可以这样来看待 ESB, Client 是中国人,法国人, 而Servcie是美国人,俄罗斯人, 所以,client 和Servcie 无法沟通,
而ESB是 精通所有语言的大师, Client 将请Service 做事情告诉ESB,ESB向Service传达,并将结果反馈给Client.





SOA 之道:
SOA 解决这些事情,超越 web service,甚至一度成为最先进的理念和思想,方法非常简单。只有一个。
包容一切, 则超越一切。

接下来, 我用几个类, 描述接口的正确使用方式,诠释
因为包容一切,所以超越一切。
虽然不是SOA,却理念一致,殊途同归!


这是万能播放器, 暴风影音的实现方式,简单的难以置信,大道至简。

在远古时代,只有专用播放器, mp3文件只能由mp3Player 播放, mpg文件,只能由mpgplayer播放, wav文件 只能由wav播放器播放,但是后来出现了暴风影音,所有文件,它都可以播放,它是最强的播放器。

// 这个接口表示可播放文件,如mp3,avi,mpeg
interface PlayableFile
{
public String getData();// 返回内容数据
}

// 这是播放器接口
public interface Player
{
public void play(PlayableFile file);//播放文件
}


下面是播放文件具体实现

// 这是Mp3文件
class Mp3 implements PlayableFile{
public String getData() {
return "我是MP3...";
}
}

//这是Avi文件
class Avi implements PlayableFile{
public String getData() {
return "我是Avi...";
}
}

//这是Mpeg文件
class Mpeg implements PlayableFile{
public String getData() {
return "我是Mpeg...";
}
}

下面是播放器的具体实现

// 只能播放Mp3文件的Mp3播放器
class Mp3Player implements Player{
public void play(PlayableFile file)
{
if(file instanceof Mp3){
System.out.println("播放 > "+file.getData());
}else{
System.out.println("格式不支持");
}
}

}

//只能播放Avi文件的Avi播放器
class AviPlayer implements Player{
public void play(PlayableFile file)
{
if(file instanceof Avi){
System.out.println("播放 > "+file.getData());
}else{
System.out.println("格式不支持");
}
}

}

//只能播放Mpeg文件的Mpeg播放器
class MpegPlayer implements Player{
public void play(PlayableFile file)
{
if(file instanceof Mpeg){
System.out.println("播放 > "+file.getData());
}else{
System.out.println("格式不支持");
}
}

}


最后是暴风影音, AllPlayer的实现
// 实现暴风影音,完成播放器
class AllPlayer implements Player
{
// 保存所有播放器
private Map<Class<?>,Player> map=new HashMap<Class<?>,Player>();

public AllPlayer()
{
map.put(Mp3.class, new Mp3Player());
map.put(Mpeg.class, new MpegPlayer());
map.put(Avi.class, new AviPlayer());
}

public void play(PlayableFile file)
{
map.get(file.getClass()).play(file);
}

}


代码调试

AllPlayer player=new AllPlayer();

player.play(new Mp3());
player.play(new Avi());
player.play(new Mpeg());

new Mp3Player().play(new Mpeg());

结果:

播放 > 我是MP3...
播放 > 我是Avi...
播放 > 我是Mpeg...
格式不支持



结论:暴风影音如何做到超越其他的播放器, 只需要包容所有的播放器就是了,
包容一切,超越一切,我中有你,自然胜过你。
在这点上,和SOA的宏观架构方式是一样的,SOA就是包容所有的协议,技术来超越其他技术的。

但是一切只是理想。。。其实还没有真正的SOA。

[size=large][color=red]这个格式不好看,可以下载wps 文件格式来看[/color][/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值