一个SOA架构技术概览
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一个SOA架构技术概览
大纲
1.概述
2.总体技术方案
3.关键技术框架
4.DUBBO/DUBBOX介绍
5.ESB/MULE ESB介绍
6.JCOC介绍
7.JEECG介绍
8.DEMO演示
概述
•服务层将采用SOA架构进行设计、实施。
•实施SOA的关键目标是实现企业IT资产的最大化作用。
主要有如下特点:粗粒度的服务接口分级、松散耦合、可重用的服务、服务接口设计管理、标准化的服务接口、支持各种消息模式、精确定义的服务契约
•WEB层将采用JEECG企业级二次开发平台进行开发
数据代理层
服务组件云(dubbox)
功能模块1功能模块4公共
外围平台
WEB 层
功能模块3
功能模块2
MYSQL
接口ESB (Mule)
功能模块5
Redis
MQ
功能模块6
接口菜单管理
角色管理
用户管理
数据权限
工作流引擎UI 标签库Excel 导入导
出
报表工具
nosql
关键技术框架
•底层框架
•JCOC(Spring data spring data jpa,spring data redis,spring data mongdb), Spring4+Hibernate4
•NG(JOP3)多年的技术积累
•WEB层框架
•Spring MVC
•JEECG(activity,报表highchart,excel,spring 全安)&JQuery EasyUI
•DubboX,用于内部的服务组件云化
•Dubbo有点类似ESB,但是客户调用时基于DUBBO协议需要引用DUBBO的包,所以不能用于对外;如果基于REST协议可以对外
•优点:调用速度较快
•MULE ESB,用于对外的接口层
•Mule ESB 是一个轻量级的,基于java的企业服务总线(ESB)和整合平台,它允许开发者去非常容易的,快速的把多个应用系统连接起来,以便使它们之间能够交换数据,Mule ESB 能够现有的系统很好的整合起来,它屏蔽了每个系统之间的所使用的技术差异,比如jms ,web service,jdbc ,http 等。
各个应用的逻辑很清晰,每个应用都只需要关心如何暴露自己的服务,而调用的应用只需要知道如何调用服务,至于怎么做,去找谁,则完全交给ESB来完成
DUBBO介绍
•单一应用架构
•当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
•此时,用于简化增删改查工作量的数据访问框架(ORM) 是关键。
•垂直应用架构
•当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
•此时,用于加速前端页面开发的Web框架(MVC) 是关键。
•分布式服务架构
•当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响•应多变的市场需求。
•此时,用于提高业务复用及整合的分布式服务框架(RPC) 是关键。
•流动计算(云)架构
•当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
•此时,用于提高机器利用率的资源调度和治理中心(SOA) 是关键。
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)其核心部分包含:
•远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
•集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
•自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
Dubbo能做什么?
•透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
•软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
•服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
DUBBO服务治理
在大规模服务化之前,应用可能只是通过RMI或Hessian等工具,
简单的暴露和引用远程服务,通过配置服务的URL地址进行调
用,通过F5等硬件进行负载均衡。
(1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬
件负载均衡器的单点压力也越来越大。
此时需要一个服务注册中心,动态的注册和发现服务,使服务
的位置透明。
并通过在消费方获取服务提供方地址列表,实现软负载均衡和
Failover,降低对F5硬件负载均衡器的依赖,也能减少部分成本。
(2) 当进一步发展,服务间依赖关系变得错踪复杂,甚至分不
清哪个应用要在哪个应用之前启动,架构师都不能完整的描述
应用的架构关系。
这时,需要自动画出应用间的依赖关系图,以帮助架构师理清
理关系。
(3) 接着,服务的调用量越来越大,服务的容量问题就暴露出
来,这个服务需要多少机器支撑?什么时候该加机器?
为了解决这些问题,第一步,要将服务现在每天的调用量,响
应时间,都统计出来,作为容量规划的参考指标。
其次,要可以动态调整权重,在线上,将某台机器的权重一直
加大,并在加大的过程中记录响应时间的变化,直到响应时间
到达阀值,记录此时的访问量,再以此访问量乘以机器数反推
总容量。
DUBBO调用示意图
节点角色说明:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
调用关系说明:
0 服务容器负责启动,加载,运行服务提供者。
1. 服务提供者在启动时,向注册中心注册自己提供的
服务。
2. 服务消费者在启动时,向注册中心订阅自己所需的
服务。
3. 注册中心返回服务提供者地址列表给消费者,如果
有变更,注册中心将基于长连接推送变更数据给消费
者。
4. 服务消费者,从提供者地址列表中,基于软负载均
衡算法,选一台提供者进行调用,如果调用失败,再
选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调
用时间,定时每分钟发送一次统计数据到监控中心。
DUBBOX介绍
•Dubbo是一个被国内很多互联网公司广泛使用的开源分布式服务框架,即使从国际视野来看应该也是一个非常全面的SOA基础框架。
作为一个重要的技术研究课题,在当当网我们根据自身的需求,为Dubbo实现了一些新的功能,并将其命名为Dubbox(即Dubbo eXtensions)。
•主要的新功能包括:支持REST风格远程调用(HTTP + JSON/XML)、支持基于Kryo和FST的Java高效序列化实现、支持基于嵌入式Tomcat的HTTP remoting体系、升级Spring,ZooKeeper以修正老版本中包含的bug
DUBBO负载均衡
在集群负载均衡时,Dubbo提供了多种均衡策略,缺省为random随机调用。
可以自行扩展负载均衡策略,参见:负载均衡扩展
*Random LoadBalance
随机,按权重设置随机概率。
在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。
•*RoundRobin LoadBalance
轮循,按公约后的权重设置轮循比率。
存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,
DUBBOX应用场景
ESB
•企业服务总线即ESB全称为Enterprise Service Bus。
•它是传统中间件技术与XML、Web服务等技术结合的产物。
ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。
ESB的出现改变了传统的软件架构,可以提供比传统中间件产品
更为廉价的解决方案,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合。
从功能上看,ESB提供了事件驱动和文档导向的处理模式,以及分布式的运行管理机制,它支持基于内容的路由和过滤,具备了复杂数据的传输能力,并可以提供一系列的标准接口。
ESB主要功能
支持基于消息事件的业务接入管理
实现协议转换、流量控制、安全控
制等功能,同时在消息驱动的架构
中起到请求和消息转换的作用。
实现统一的流程编排
通过统一的BPM流程管理工具实现,
中心服务的流程串接。
提供可视的
开发维护功能。
实现统一的流程调度:
基于中心划分目标,对核心业务流
程和规则进行枚举抽象,跨中心协
同的流程驱动,支持面向业务语义
的配置及监管。
Mule ESB
•Mule ESB是一种基于java的、轻量级的企业服务总线和集成平台,她允许开发者快速的、简单的连接应用,并能够实现数据的转换。
•Mule ESB的主要功能如下:
•服务的创建与管理(Service creation and hosting):用Mule ESB作为一个轻量级的服务容器来暴露和管理可重用的服务。
•服务调解(Service mediation):隐藏服务消息的格式和协议,将业务逻辑从消息中独立出来,并可以实现本地独立的服务调用。
•消息路由(Message routing):基于内容和规则的消息路由、消
息过滤、消息合并和消息的重新排序。
•数据转换(Data transformation):在不同的格式和传输协议中进行转换数据。
JCOC介绍
•为了满足项目快速开发的要求,设计一套轻量级、简单易用、业务逻辑耦合度低、扩展性好的服务层框架,旨在为大家提供一种通用的编码模式。
使得开发人员在这个框架上开发服务,不需要关注额外的配置工作,只需专注业务逻辑,大大提高开发效率和配置带来的部署风险。
•目前框架中用到的技术有:
•Spring、Hibernate、Spring Data 、Spring Data JPA 、Spring Data MongoDB 、Spring Data Redis 、Freemarker 、log4j2等
•本框架的特点:
1、实现业务逻辑和服务层框架的分离
JEECG介绍
当内外网卡其中任意一个出现异常时,切换VIP。
当目前服务的nginx出现无法访问时,切换VIP。
Dubbo服务注册到zk集群上,当任一注册中心down掉,会自动切换到可用的注册中心上
开发规范
1.任一用于传输的业务对象必须实现序列化接口
(java.io.Serializable)
2.Service接口以ServiceI结尾,不能继承BaseService接口,方法请
求类必须继承BaseReqest.java,返回对象必须继承
BaseResponse.java
3.多表查询使用sql方式,不能使用注解
@onetomany,@manytomany,@manytoone,因为懒加载方式
dubbo不支持,且容易出问题,难于维护
4.Jeecg开发前台时,代码生成只需要生成Action,JSP,Page,Entity其
它无需生成,由服务端代码生成工具生成
DEMO
•演示JEECG Controller层调用Dubbo服务(Rest,Dubbo协议)。