专注于快乐的事情

分布式基础

本文于1135天之前发表,文中内容可能已经过时。

#分布式架构风格#

常见的分布式应用架构风格有三种:

  • 分布式对象(Distributed Objects,简称DO)

  • 远程过程调用(Remote Procedure Call,简称RPC)

  • 表述性状态转移(Representational State Transfer,简称REST

DO架构实例有CORBA/RMI/EJB/DCOM/.NET Remoting等等,DO风格的架构通常都是与某种编程语言绑定的。

RPC架构实例有SOAP/XML-RPC/Hessian/Flash AMF/DWR等等,RPC中没有使用超文本,响应的内容中只包含消息本身。

rest架构实例有HTTP/WebDAV,REST中的资源,则完全中立于开发平台和编程语言,可以使用任何编程语言来实现。REST使用了超文本,可以实现更大粒度的交互,交互的效率比RPC更高。

#架构模型#

采取SOA的架构模型
采取EDA的架构模型

##SOA

###Web services与SOA

根据2003年4月的Gartner报道,Yefim V. Natis就这个问题是这样解释的:“Web服务是技术规范,而SOA是设计原则。特别是Web服务中的WSDL,是一个SOA配套的接口定义标准:这是Web服务和SOA的根本联系。从本质上来说,SOA是一种架构模式,而Web服务是利用一组标准实现的服务,Web服务是实现SOA的方式之一。

###Web services使用的技术

XML:XML是在web上传送结构化数据的伟大方式,Web services要以一种可靠的自动的方式操作数据 。

SOAP:SOAP使用XML消息调用远程方法,这样web services可以通过HTTP协议的post和get方法与远程机器交互,而且,SOAP更加健壮和灵活易用;SOAP基于HTTP的,在http协议下传输xml文件。

其他 :
像UDDI和WSDL技术,与XML和SOAP技术紧密结合用于服务发现

###Web services调用过程

Web Service客户端调用Web Service的基本过程:

  1. 构造SOAP请求消息(将本地数据对象转换为SOAP消息)
  2. 发送SOAP消息到Web Service服务器的指定端口
  3. 接收SOAP响应消息
  4. 将SOAP响应消息转换为本地数据对象

webService效率较慢,传输的是文本, 而EJB和CORBA传输的是二进制,效率较好
可以近视的理解SOAP=RPC+HTTP+XML:采用HTTP作为底层通讯协议;RPC作为一致性的调用途径,XML作为数据传送的格式,允许服务提供者和服务客户经过防火墙在INTERNET进行通讯交互。

但这个过程,由JAX-WS规范来处理,JAX-WS是一组XML web services的JAVA API,在JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP,在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码。JAX-WS的运行时实现会将这些API的调用转换成为对应的SOAP消息。
java中最流行的是cxf,提供了对 JAX-WS 全面的支持。

###SOAP性能考虑

SOAP 使用 HTTP 传送 XML,尽管HTTP 不是有效率的通讯协议,而且 XML 还需要额外的文件解析(parse),两者使得交易的速度大大低于其它方案。但是XML 是一个开放、健全、有语义的讯息机制,而 HTTP 是一个广泛又能避免许多关于防火墙的问题,从而使SOAP得到了广泛的应用。但是如果效率对你来说很重要,那么你应该多考虑其它的方式,而不要用 SOAP。

XML-RPC和SOAP都是基于XML格式的消息交换.
而JSON-RPC是基于JSON格式的消息交换,JSON比XML更加轻巧,并且非常容易在页面JS中使用

###Webservice vs RPC

rpc本身没有规范,只要是实现了远程调用的,都是rpc,实现方式有RMI,webservice. webservice只是一种实现方式
rpc有一个通用的结构,就是serialization/deserialization+stub+skeleton
rpc是一种远程调用设计思维,强调的是透明的调用远程的方法,看起来就跟本地调用一样。

##EDA的架构模型

#架构选型要素

##通信协议的选择##

Http/Https, 例如webserivce
tcp 例如HSF,Dubbo,Facebook thrift

Reactor模型统一调度长连接和短连接协议栈,
无论在性能/可靠性/还是可维护性,都可以“秒杀”基于传统的BIO开发的应用服务器和各种协议栈。   

##数据交换格式##

采用JSON协议格式进行数据交换
xml协议格式进行数据交换
二进制

##数据传输安全##

  为了保证数据传输过程中的数据真实性和完整性,我们需要对数据进行加密签名,在接收签名数据之后进行签名校验。
  目前支持签名算法:RSA、MD5,默认RSA。   

##常用业务组件##

  工作流
  规则引擎
  消息队列
  缓存
  统一存储
  统一加密
  消息队列   

总结

参考

评论系统未开启,无法评论!