服务框架

服务框架:解决应用服务化问题

64257ed422f8e2578a857e6e1eb184c1623.jpg

  • 代码臃肿复杂

2a16e7c95e34ee625da7534f7abc3b1c421.jpg

  • 拆分后,数据库连接还在,存在重复代码

a6ee3cafe721107b99751c6c2b4123e5c7e.jpg

服务化框架设计与实现:

  • 规则器
  • 软硬负载均衡
  • 名称服务

8b9659e0e19f150eb3bc8690daeb9b0d3c7.jpg

  • 调用者实现

0b9093c3ebcfc8ff482ca019d0f97654b3b.jpg

a9394803981b7f517ce5f59b9781d98c610.jpg

  • 服务端实现

ca3e15e413a6ebb3a7e0c8d5022ab9b4437.jpg

269e078d960ff13b062b44b5fd634d299d5.jpg

服务框架俩重要问题:

  1. 自身部署问题
    • 方案一:服务框架作为应用依赖jar 包一起打包
    • f080da40827053bc18879ab11bfa44bfe91.jpg
    • 方案二:服务框架作为容器一部分  
    • e4753c17045743e9605d34d2ebfcda89fe8.jpg
    • 方案三:服务框架作为容器来部署应用
    • 296eb85fc830c8637718729ddf54712c8c8.jpg
  2. 自身的jar 包和应用的jar 包冲突问题
    • 服务框架和应用各自独立的ClassLoader,这样jar 包被隔离

f0dbf52193b86dd3b77e4230a44bdbc7326.jpg

  • 远程通信

792252bc77616e34c9e796f0d543a4cb6e3.jpg

  • 集群方案

5ea9c6f9b1301ae3cd8e2e802a0d995b2d1.jpg

  • 中间代理来解决远程服务调用

9b60e4f9b4d602c3c6b78ebb17b96edabe2.jpg

  • 控制器的方式解决远程服务调用

393d1e2ad5b4b8b6332de86fa3e7539087d.jpg

  • 基于接口、方法、参数的路由

314f8db7f957b1f96004958ce0389fd0b4e.jpg

  • 路由规则集中管理,将不同的接口路由到不同的服务器
    • 可以在细分,基于具体方法路由

81d20a10b482d2c5b6be0096cf89d504a48.jpg

  • 同城机房

f232c58c6b99711bab7951d235ffee38a87.jpg

c98e55aa1ef1f07652d9f05241522252b64.jpg

  • java 本身的序列化
    • 存在性能问题和跨语言问题
  • 可以考虑使用json、xml、二进制流序列化

网络通信实现选择

  • IO线程专门负责和socket 打交道
  • 请求线程把数据放入数据队列后,产生通信对象放入通信队列,并且在队列上等待
  • 通信对象在超时前有返回对象会唤醒请求线程
  • 定时任务负责处理超时请求

67d3cbb3d55c244c109ab1e84e91da9adbb.jpg

支持多种异步服务调用方式

  • oneway方式异步调用
    • 单向通知
  • 不关心是否返回数据

855a2856e72fe3352ac55b59dbe1ec155e7.jpg

  • callback 方式异步调用
    • callback 的执行不在原请求线程中
  • 请求发送后继续执行自己的程序,设置回调

a913a22ffb2691c0f44dc14e3ef2e368527.jpg

  • Future 模式异步调用
    • 请求执行结果仍在原线程中

bda8d492a97636b6e47eb1965aa41cd96ce.jpg

  • 可靠方式异步调用
    • 需要保证异步请求在远端被执行,一般通过消息中间件保证

一个请求调用多个远程服务

9c4580a2f2c9d0b0fc7717790b17e825015.jpg

5be9875513f338b63040485cf7de356948c.jpg

  • 变成并行服务(Future 模式)

b518510e1b9aa2707874fcb32794912197c.jpg

服务提供端

  • 服务端工作包括
    • 对本地服务的注册管理
    • 根据进来的请求定位服务并执行

e5e5139a1490e95fec2a9c234129e5057d6.jpg

  •  

38f3ee749b1a0e37240e94f8dd3ad94bbb4.jpg

  • 执行不同服务的线程池隔离

5ea39e78aec7418356945880cb2f8564095.jpg

服务升级

  • 接口中增加方法
  • 接口中某些方法修改调用参数列表
    • 应对方式:
      1. 对使用原来方法代码都进行修改,然后和服务端一起发布
        • 不太可行
      2. 通过版本号解决
        • 比较常用,调取根据版本号,互不影响
      3. 设计方法上考虑方法的扩展性
        • 会使得参数校验过于复杂
  • 有了服务框架,集中式系统很容易变成分布式框架

5d16821c617a1ab2d1e362cf937ff453eed.jpg

e9d1facc5914692e468f0e503e78febbd6d.jpg

  • 分布式环境请求合并

e2e8cdb6c8d467d9359e191871f47e78a1b.jpg

38832d17597b39fa438b3fd63fa23bf5620.jpg

  • 引入分布式需要解决新的问题

服务治理

  • 管理服务
    • 管理需要去操纵、控制整个分布式系统中的服务
  • 查看服务
    • 看运行时的状态,或一些具体信息、历史数据等

ESB 和服务框架区别

  1. 服务框架是点对点模型;ESB是总线模型
  2. 服务框架基本上面对的都是同构的系统,不需要考虑整合
    • ESB更多考虑不同厂商提供服务的整合

258266bfb9f5181b169e9f2e7c2ccc7f2e1.jpg

总结:::

ac2d63db218b6ff9e534d8c2844482c355f.jpg

 

转载于:https://my.oschina.net/u/3847203/blog/2870122

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值