zoukankan      html  css  js  c++  java
  • 微服务框架学习三:服务通信框架介绍

    Pegasus来源于点评的开源框架pigeon:https://github.com/dianping/pigeon

    什么是Pegasus

    Pegasus是一个高性能的分布式服务框架,致力于提供RPC远程服务调用方案,并可作为精简版SOA服务治理的方案。实现基本的RPC,路由,负载均衡,容错,统计报表,服务注册订阅功能。

    其核心模块包括以下几类:

    • 远程通信:基于NIO的Socket通信,"底层异步上层同步" + "请求|响应" 模式的信息交互方式,可支持多种序列化协议。
    • 集群支持:提供服务负载智能感知路由策略(load balance),容错(failover),以及服务集群等支持。
    • 服务注册:实现服务自动/手动注册,服务调用者自感知的pub/sub模型。
    • 监控分析:可插拔的集中式服务调用监控分析中心。
    • 异构支持:提供http交互接口的支持,以便各类异构系统的接入。
    • 调用方式:支持多种服务调用方式,如:sync, future, callback, oneway。

    为什么需要Pegasus

    随着应用规模的不断扩大,传统的垂直应用架构及应用堆砌已无法满足,急需一套分布式服务架构以及配套的服务治理框架,以便推动整体业务架构的演进。
    技术架构的演进之路简述:单一应用优化 => 垂直拆分 => 分布式架构 => 分布式服务治理 => 云服务架构

    构建一个稳定,高效,容错,易维护,可监控的服务调用框架,以便推动公司业务系统朝着SOA架构演进,从而使整体业务架构更加清晰,可控和可度量,最终实现业务产品的健康,敏捷发展。

    单一应用优化:应用作为单一包部署,以部署多台机器和数据库表结构及sql为优化手段。

    垂直拆分:单一应用按照业务模块拆分为多个独立的应用,分散流量并各自根据流量进行横向扩展,此时数据库可能也已按照业务拆分开,减小单库的压力。

    分布式架构:应用之间存在复杂频繁交互,此时应抽取核心业务形成业务中心,为其他应用提供服务,具体业务应用应尽量薄,以便能够快速响应业务需求变更。

    分布式服务治理:业务交互越来越复杂,人为掌控已越来越难,此时应该有治理系统专门负责,包括分析业务依赖,监控业务性能,优雅升降级,容量规划等,以监控和提升服务质量,支撑决策分析。

    云服务架构:业务脉络继续无限增长,一套敏捷和高质的完整支撑框架变得越来越重要,缩短开发上线的生命周期,降低试错成本(快速试错),资源优化调配,灰度发布等等,都需要一套自动化的,全局的资源调配架构。包括iaas,paas及一整套配套的工具和系统支持,如iaas的管理工具接口,paas的配置中心,自动化发布流程及工具,自动化QA系统等等。相当复杂(公有云更甚),需要投入很大的人力与物力,但若成功构建,效果明显。

    我们可以在哪里用Pegasus

    Pegasus可以应用于内部所有Java系统之间的远程服务调用(或其他语言系统对Java系统的调用),它所提供的高性能﹑智能负载路由﹑容错﹑集群等特性,为打造快速﹑稳定﹑可靠的服务提供了技术保障,也为推进SOA化提供了基础平台支持。

    Pegasus的性能

    Pegasus采用NIO方式传输二进制流数据,并采用长连接方式减少握手,比一般的http短连接协议(如soap)更快,从而提高业务吞吐量。另外通过智能的全局负载均衡策略,能够更加合理的调配资源,从而提高整体性能。

    Pegasus VS Other RPC

    Pegasus调用方式

     Pegasus类图

    Pegasus协作图

    Pegasus如何保持高性能

    1. pegasus通过不断的心跳检测,判断服务提供者是否正常服务,一旦与服务提供者的连接中断,或者连续几次心跳没有反馈(如虚拟机假死,但socket连接仍建立),那么就认为该服务提供者出现了异常,会自动将该提供者从客户端的可用列表中摘除,后续的请求将不再派发给该异常服务端,保证所有的请求都能被正确处理,从而达到高可用。而一旦该提供者恢复正常(如重启后),那么客户端重连任务会自动探测到它,并重新将其加入到可用列表中,接收并处理新的请求。
    2. 因为心跳检测有时间间隔,在间隔期如果某个服务提供者的连接中断,此时如果有请求发往该提供者会出现异常,此时我们会将该请求发往其他可用的提供者,即重试一次,由于这种情况概率很低,加上重试时又会碰到重试的提供者也瞬间中断的几率几乎为0,所以完全确保了请求会被发送到可用的服务提供者。
  • 相关阅读:
    MySQL循环插入语法
    查看linux机子的配置
    extends与implements的不区别
    Git基本命令
    VirtualBox配置 以及文件传输
    zookeeper应用场景
    oracle学习
    linux学习
    Mysql优化
    线程3
  • 原文地址:https://www.cnblogs.com/fxl-njfu/p/10120332.html
Copyright © 2011-2022 走看看