`

读书笔记: 《分布式JAVA应用 基础与实践》 第二章 大型分布式JAVA应用与SOA

阅读更多

一、为什么需要 SOA

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

第一个现象是系统多元化带来的问题,可采用共用业务逻辑的部分进行抽象的方法,形成多个按领域划分的共用业务逻辑系统;第二个现象是系统访问量、数据量上涨后带来的典型问题,同样可采取拆分系统的方式来解决。

在构建了共用业务逻辑系统和拆分系统后,最明显的问题就是系统之间如何交互。如果不控制,会出现多个系统之间存在多种交互方式: HTTP SOCKET HESSIAN RMI WEBSERVICE 等;同步、异步等方式可能都会出现,导致开发人员每访问一个子系统,都可能要学习不同的交互方式 more 时也会造成各开发团队重复造轮子,对于应用的性能、可用性也带来极大的挑战。

对以上问题,很容易想到的办法就是统一交互的方式, SOA 无疑是实现这种方式的首选。

SOA 全称是面向服务架构( Service-Oriented Architecture ),它强调系统之间以标准的服务方式进行交互,各系统可采用不同的言语、不同的构架来实现,交互则全部通过服务的方式来进行。

 

二、 SOA 平台带来的挑战

1.  服务多级调用带来延时

A 调用 B B 调用 C……

2.       调试 / 跟踪困难

3.       更高的安全 / 监测的要求

4.       现有应用的移植

5.       服务 QOS(Quality of Service) 的支持

6.       高可用和高度可伸缩

7.       多版本和依赖管理

 

 

三、 SOA 平台的实现

实现 SOA 时,可参考的标准或概念有 SCA ESB ,同时业界也有一些实现了 SCA ESB 的框架。

 

1. 基于 SCA 实现

SCA ,由 IBM, Oracle( 包括之前的 BEA Sun) RedHat, SAP Siemens 等共同制定的规范,规范的名字定为 Service Component Architecture, 简称 SCA

SCA 标准景要定义了如何发布服务、如何调用服务及支持的通信协议和交互方式三方面的内容。

 

1.1 发布服务

以接口方式提供,要求系统本身已有相的接口实现,通过 XML 定义。

1.2. 调用服务

同样可通过简单地定义 XML 即可实现

1.3. 支持的的通信和交互方式

SCA 标准默认提供的通信方式为 SCA,Webservice JMS 三种。 SCA 方式指由框架根据运行情况来选择采用相应的通信方式,如框架发现需要调用的服务在同一 JVM 中,则会自动切为本地调用,如在不同 JVM 中,则会采用 Webservice JMS 等方式。 Webservice 的实现为 HTTP 方式; JMS 则可用多种方式,取决于具体的 SCA 框架。

在交互方式上, SCA 标准没有明确的定义。

 

1.4 常用的 SCA 实现框架 Apache Tuscany

1.4.1 发布服务 Tuscany 遵守 SCA 标准编写,支持多种发布方式,包括发布为 Webservice Ajax Corba erlang JMS Jsonrpc RMI EJB HTTP RSS 方式。

1.4.2 调用服务: 和发布服务一样,支持多种应用集成及调用方式,并包括了多语言的支持。

1.4.3 通信及交互方式: SCA 标准多出了很多,例如对 Ajax Jsonrpc RMI 等都提供了支持。

1.4.4 调试跟踪: 服务器抛出异常时,会将此信息带回到调用端

1.4.5 依赖管理 :没有在 SCA 的标准上做扩展,因此仍然不是很好实现。

1.4.6 高性能和高可用: 没有做专门处理,如须确保性能,可自行基于 Tuscany 扩展实现交互方式。

 

2. 基于 ESB 实现

ESB SCA 不同,它不是标准,可以认为是概念,核心思想是基于消息中间件来实现系统间的交互。基于消息中间件所构建的此系统交互的中间场所称为总线,系统间交互的数据格式采用统一的消息格式,由总线完成消息的转化、路由,发送到相应的目标应用。

 

通常 ESB 框架须具备以下五个要素

1)      标准的消息通信格式

2)      消息路由

消息路由是指当总线接到消息后,根据消息中的数据来决定需要调用的系统。

3)      支持多种的消息交互类型

请求 / 响应和发布 / 订阅方式

4)      支持多种网络协议

总线要和多个系统进行交互,通常要支持多种网络协议,例如 TCP/IP UDP/IP HTTP

5)      支持多种数据格式并能进行相互转换

多个系统均须发送消息至 总线,并由总线进行消息转发,但各个系统消息中的数据格式可能不一致,此时总线要支持数据的转换。

 

2.1 Mule 为常用的 ESB 实现框架之一

2.1.1 发布服务: Mule 支持以 Webservice jms 等方式将 Spring 或普通的 JAVA 对象发布为 Mule Service ,配置上较为简单,但和 Tuscany 比还是弱了点

2.1.2 调用服务: 相对比较麻烦,这是由于 ESB 强调一切都以消息的方式发送给总线决定的。

2.1.3 通信及交互方式: 支持 Webservice jms 两种通信方式。可明确指定 synchronous 的参数来实现同步通信,或不指定默认为异步通信。

2.1.4 调试 / 跟踪: 未提供特别支持

2.1.5 依赖管理: 本身未提供支持,可通过开源框架 MuleGalaxy 实现。

2.1.6 高性能和高可用: 未做专门处理

 

 

四、总结

SCA 标准及 SCA 标准实现的框架对于服务的统一交互支持得很好, ESB ESB 框架则更适用于需要解耦方式的服务交互及复杂的多服务交互场景,但无论是 SCA 标准、 ESB ,还是已有的相关框架,在实现一个大型应用的 SOA 平台时都仍然有不少需要自行扩展实现的地方,特别是在调试 / 跟踪、依赖管理及高性能、高可用方面。

 

作者认为,对于一个更加完善的 SOA 平台 , 还应具备以下几点:

1.       支撑集群环境

2.       完善的服务治理

服务治理的主要目的是为了保障服务能够稳定、高性能地运转。之前提及的依赖管理也属于服务治理的一项,服务运行状况的监测、服务的安全控制、服务的流量限制、服务故障根源的推测及服务可用性的保障也都属于服务治理的范畴。要实现这些功能仅靠 SOA 平台还很难做到,通常还要有系统架构的配合。

3.       服务 QOS(Quality of Service) 的支持

SOA 平台按照服务配置的 QOS 来分配相应的硬件资源,例如 A 服务的 QOS 配置为每秒最多支撑 5000 请求,且响应时间 95% 需要在 1 秒以内, SOA 平台要能收集目前服务的运行状况来合理分配机器资源,要做到这点难度非常高。

 

分享到:
评论

相关推荐

    Java分布式应用学习笔记01分布式Java应用和SOA

    ### Java分布式应用与SOA概览 在深入探讨Java分布式应用和面向服务架构(SOA)之前,我们首先需要理解这两个概念的基本含义及其在现代IT系统中的重要性。 #### Java分布式应用 Java分布式应用是指利用Java编程...

    Java分布式应用学习笔记

    本笔记将深入探讨Java分布式应用的核心概念、技术和实践。 1. 分布式Java应用基础 分布式Java应用的核心在于组件之间的远程方法调用(Remote Procedure Call, RPC)。Java RMI(Remote Method Invocation)是Java...

    对于\"Java分布式应用学习笔记\"的整理

    分布式系统和SOA的介绍与应用 前言 随着系统规模的扩大,分布式架构的应用变得越来越广泛。在这个过程中,系统架构师和开发人员往往会面对如何让不同系统或者服务之间进行有效交互的问题。这些系统可能是由不同的...

    乔杉架构笔记 Java工程师面试突击

    很抱歉,由于无法直接访问或解析链接内容,我无法提供具体的《乔杉架构笔记 Java工程师面试突击》中的详细知识点。但作为一个专业的IT行业大师,我可以根据通常Java工程师面试中的常见主题,分享一些重要的Java编程...

    SpringCloud微服务架构笔记(一)

    本文总结了 Spring Cloud 微服务架构笔记(一),涵盖了微服务基础知识、系统架构演变、单体应用架构、垂直应用架构、分布式 SOA 架构、微服务架构、分布式核心知识等方面的知识点。 微服务基础知识: 1. 微服务...

    J2EE学习笔记(J2ee初学者必备手册)

    这个平台定义了一套标准,用于构建分布式、多层的、组件化的应用,支持服务导向架构(SOA)和云计算。本学习笔记主要针对J2EE初学者,将涵盖以下关键知识点: 1. **Java基础**:首先,理解Java编程语言的基本概念,...

    Spring Cloud Alibaba(基础) 学习笔记

    ### Spring Cloud Alibaba(基础) 学习笔记 #### 微服务概述及发展历程 微服务架构是一种将单一应用程序开发为一组小服务的方法,每个服务运行在其独立的进程中,并使用轻量级机制(通常是HTTP资源API)进行通信...

    JavaSE->关于我个人学习Java途中整理的笔记

    Java EE(现更名为Jakarta EE)是企业版,适用于开发大型、分布式的企业级应用,支持Web服务和SOA架构;Java ME则是微型版,针对嵌入式设备和移动设备,如手机、PDA等,提供轻量级的运行环境和API。 JVM、JRE和JDK...

    j2ee 笔记 对刚接j2ee方面的人来说挺好的

    8. **JCA(Java Connector Architecture)**:JCA为集成Java应用与企业信息系统(如ERP、CRM等)提供了一种标准接口。 9. **JSF(JavaServer Faces)**:JSF是一种用于构建用户界面的MVC(Model-View-Controller)...

    技术篇-SOA架构体系(课程笔记)

    ### 技术篇-SOA架构体系(课程笔记) #### SOA为何重要? 1. **解决集团企业信息化问题**: - 当前面临的核心问题是信息孤岛现象严重,导致信息难以整合利用。 - 业务发展迅速,现有IT基础设施难以快速响应。 - ...

    java开发笔记 快来学吧

    Java开发是一种广泛应用于全球的编程语言,以其面向对象的特性、强大的类库和跨平台兼容性而备受青睐。本笔记旨在深入浅出地讲解Java开发的核心概念和技术,帮助初学者快速上手,同时也为有经验的开发者提供复习和...

    java学习笔记大全(很丰富)

    这份"java学习笔记大全"涵盖了从基础到高级的Java知识体系,是深入理解和掌握Java编程的宝贵资源。 首先,从基础开始,Java的学习始于安装Java Development Kit (JDK),它是编写、编译和运行Java程序所需的基本工具...

    Spring Cloud Alibaba笔记.pdf

    Spring Cloud Alibaba是基于Spring Boot和Spring Cloud构建的微服务生态体系,它提供了一整套微服务解决方案,包括服务治理、分布式事务、限流降级、熔断器、配置中心、链路追踪等。本笔记主要介绍了微服务架构的...

    j2ee学习笔记

    9. **架构原则**:包括分层架构、MVC(模型-视图-控制器)模式、SOA(面向服务架构)、微服务架构等,这些原则指导着大型J2EE应用的设计和构建。 通过深入学习这些知识点,并结合实际项目经验,开发者能够掌握J2EE...

    专题资料(2021-2022年)SOA学习笔记总结.docx

    - **集成现有系统**:SOA考虑如何集成现有系统,如通过ESB和适配器/连接器连接分布式的系统,将功能和数据转换为服务。 - **服务中介**:ESB和服务注册库支持服务间的动态交互,确保松耦合的通信。 总之,SOA是一种...

    Java+WebService利用(cxf)开发笔记.rar

    Java与Web服务(WebService)的结合使用在软件开发中占据着重要的地位,特别是在构建可互操作的分布式系统时。CXF是一个开源框架,它允许开发者轻松地创建和消费Web服务,提供SOAP和RESTful风格的服务支持。这篇...

    j2ee超级核心技术笔记与代码

    《J2EE超级核心技术笔记与代码》是一份深入解析J2EE平台核心技术的珍贵资料,深受广大开发者喜爱。这份资料全面覆盖了J2EE开发的关键技术点,旨在帮助读者掌握企业级Java应用开发的核心技能。 一、J2EE概述 J2EE...

    《从零开始学架构》读书笔记

    在《从零开始学架构》读书笔记中,总结了许多架构设计的关键知识点,下面将详细解释这些内容。 1. 架构与框架的区别:架构强调的是系统的“结构”,而框架则是关于“规范”。架构设计需要解决由系统的复杂性所带来...

    SpringCloud-微服务课程笔记

    ### SpringCloud-微服务课程笔记知识点总结 #### 一、Spring Cloud 概述 - **定义**:Spring Cloud 是一个基于 Spring Boot 的开发工具包,主要用于构建分布式系统和微服务架构。 - **特点**: - **服务注册与发现...

Global site tag (gtag.js) - Google Analytics