• 服务化管理和治理框架的技术选型


     原文地址:

    https://mp.weixin.qq.com/s?__biz=MzAwNTQ4MTQ4NQ==&mid=306076522&idx=1&sn=451040f9bd05323e98bdd34ce0326092&chksm=0cd10e083ba6871ef64004edfb0dfcf72abc33ac67dd6c28891b5bfdf075b5e173baba829392&mpshare=1&scene=23&srcid=061961bTwAZaSvVY2NNaBWxp#rd

    SOA服务化和微服务架构已经发展多年,市场上已经有很多成熟的商业和开源产品,我们没有必要从头搭建一套服务化管理和治理平台,完全可以基于开源服务化框架进行定制化,以适应我们的业务需要。

    本节介绍各种流行的RPC框架、服务化管理和治理、微服务框架,并通过讲解其特点来帮助我们做技术选型。

    1  RPC

    本节介绍简单的远程服务调用的技术栈。

    1. JDKRMI

    自JDK1.4开始,JDK内置了远程服务调用的技术栈,可以帮助开发者创建基于Java到Java的分布式调用架构,一个Java进程内的服务可以调用其他Java进程内的服务,使用JDK内置的序列化和反序列化协议。

    RMI是JEE规范中EJB远程调用的基础,然而,JDK内置的RMI服务并没有得到广泛应用,几乎没有哪家公司采用这种方式来构建服务化平台。

    原因如下。

    l  RMI采用JDK自带的专用序列化协议,不能跨语言。

    l  使用了底层的网络协议,不如基于文本的HTTP可读,也不如HTTP被广泛认可和应用。

    l  开源框架的飞速发展,严重削弱了JDK资深技术的流行程度。

    2.Hessian及Burlap

    Hessian及Burlap都是Caucho公司提供的开源的远程调用协议,基于HTTP传输,防火墙通常会设置在某个端口上以允许特定的HTTP通信。其中,Hessian将对象序列化成与语言无关的二进制协议;而Burlap将对象序列化成与语言无关的XML数据,数据是可读的。两者都是与语言无关的,可以在多种语言的服务中互相调用。

    Hessian及Burlap都适合传输较小的对象,对较大、复杂的对象,无论是在序列化方式上还是在传输通道上都没有RMI有优势。

    由于服务化架构中大量的服务调用都是大规模、高并发的短小请求,因此,Hessian和Burlap协议在服务化架构中得到了广泛应用。

    3. Spring HTTP Invoker

    Spring HTTP Invoker重用了JDK内置的对象序列化技术传输对象,这与RMI的原理一致,但是,它通过HTTP通道传输数据,在效率上应该略低于RMI,并且由于使用了JDK内置的序列化机制,因此也是不能跨语言的。

    2  服务化

    本节介绍SOA服务化时代的服务化框架和平台。

    1.Dubbo

    Dubbo是阿里巴巴开源的一个分布式服务框架,不但提供了高性能和透明化的RPC远程服务调用,还提供了基本的服务监控、服务治理和服务调度等能力。它默认支持多种序列化协议和通信编码协议,默认使用Dubbo协议传输Hessian序列化的数据。Dubbo使用ZooKeeper作为注册中心来注册和发现服务,并通过客户端负载均衡来路由请求,负载均衡算法包括:随机、轮询、最少活跃调用数、一致性哈希等。它基于Java语言,不能与其他语言的服务化平台互相调用。Dubbo服务框架在互联网企业得到了广泛应用,几乎每个中小型公司都开始使用Dubbo完成服务化的使命。

    然而,Dubbo也有如下缺点。

    l  Dubbo开发得较早,近些年已经没有开发者维护和升级。

    l  早期留下的Bug一直没有得到修复,需要使用者自己发现和修复。

    l  Dubbo没有经过全面优化,在服务量级到达一定程度时,会出现通知系统携带过多的冗余信息,在极端情况下会导致网络广播风暴。

    l  Dubbo服务框架是SOA服务化时代的产物,对微服务化提出的各种概念如熔断、限流、服务隔离等没有做精细的设计和实现。

    l  Dubbo的监控和服务治理模块比较简单,难以满足复杂业务的需求。

    2. HSF

    HSF(High Speed Framework,好舒服)是淘宝内部大规模使用的一款高性能服务框架,也是一款为企业级互联网架构量身定制的分布式服务框架。HSF以高性能网络通信框架为基础,提供了诸如服务发布与注册、服务调用、服务路由、服务鉴权、服务限流、服务降级和服务调用链路跟踪等一系列久经考验的功能特性。

    HSF与Dubbo均来自阿里巴巴,但是并不开源,只在阿里巴巴内部使用,在外部很少有相关的资料,HSF据说性能要比Dubbo高,但是与业务系统耦合重,无法抽取并开源。

    3.Thrift

    Thrift是Facebook实现的一种高性能并且支持多语言的远程服务调用框架,由Apache开源。它采用中间的接口描述语言定义并创建服务,支持跨语言服务开发和调用,并且包含中间的接口描述语言与代码生成和转换工具,支持包括C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、Smalltalk 等在内的流行语言,传输数据时采用二进制序列化格式,相对于JDK本身的序列化、XML和JSON等,尺寸更小,在互联网高并发、海量请求和跨语言的环境下更有优势。

    由于Thrift具有跨语言和高性能等优点,在互联网企业里颇受欢迎,如果正在建设跨语言的服务化平台,则Thrift是首选。

    4. AXIS

    Axis是Apache WebService项目中的子项目,最初起源于IBM的“SOAP4J”,应该属于最早的一批用于构造基于Web Service应用的框架。

    前面章节提到Web Service使用SOAP协议,而SOAP协议通常使用HTTP传输XML格式的数据,因为性能低下,而且SOAP协议有复杂和臃肿等缺点,所以现在几乎没有企业采用这种框架做服务化了。

    5. Mule ESB

    Mule ESB是MuleSoft公司出品的基于Java语言的企业服务总线产品,它可以把多个复杂的异构系统通过总线模式集成在一起,并让它们之间可以互相通信,包括JMS、WebService、连接数据库的JDBC、HTTP和历史遗留系统等。

    它的优点是可以把现有的不同技术栈的历史遗留系统与新增的服务化系统通过总线进行串联和编排,来满足日新月异的业务功能需求。

    3  微服务

    本节主要介绍近年流行的Spring Cloud系列的微服务框架。

    1. Spring Boot

    通过使用Spring Boot可以很容易地创建独立的、具有高品质的基于Spring的应用程序,基于Sping Boot创建的应用可以随时随地启动和运行,一般只需要较少的配置和搭建环境的工作量。

    在JEE时代,企业级开发涉及的通用功能被提取到了容器层实现,例如:Tomcat Web容器负责管理服务的启动、停止、监控、配置和日志等,应用开发人员只要按照规范将应用打包成War,并发布到Tomcat Web容器中,就可以对外提供服务了,这一时代的应用是包含在容器内的。

    Spring Boot的思路正好相反,它将容器嵌入自启动的Jar包中,在Spring Boot应用启动时,内部启动嵌入的容器,例如:Tomcat、Jetty和Netty等,然后通过内嵌的服务器将应用中提供的服务暴露。

    Spring Boot这种设计在微服务架构下有如下明显的优点。

    l  可以创建独立、自启动的应用程序。

    l  不需要构建War包并发布到容器中,构建和维护War包、容器的配置和管理也是需要成本的。

    l  通过Maven的定制化标签,可以快速创建Spring Boot的应用程序。

    l  可以最大化地自动化配置Spring,而不需要人工配置各项参数。

    l  提供了产品化特点,例如:性能分析、健康检查和外部化配置。

    l  全程没有XML配置,也不需要代码生成。

    Spring Boot是Spring Cloud构建微服务架构的重要基础。

    2. Netflix

    Netflix由Netflix公司开发且合并到SpringCloud项目中,主要提供了服务发现、断路器和监控、智能路由、客户端负载均衡、易用的REST客户端等服务化必需的功能。

    其中Hystrix框架提供了微服务架构所需的容错机制的解决方案和设计模式,这些设计模式的原理在1.3.5节已经详细介绍了。Hystrix大大简化了微服务下容错机制的实现,包括服务分组和隔离、熔断和防止级联失败、限流机制、失效转移机制和监控机制等。

    3. Spring Cloud Netflix

    Spring CloudNetflix集成了Spring Boot对微服务敏捷启动和发布的功能,以及Netflix提供的微服务化管理和治理的能力,成为一个完美的微服务解决方案。在Spring Cloud Netflix平台下,开发人员通过几个简单的注解配置即可完成一个大规模分布式系统的发布工作。

    Spring Cloud Netflix包括服务发现组件Eureka、容错性组件Hystrix、智能路由组件Zuul和客户端负载均衡组件Ribbon。

    Netflix中的交互流程如下。

    l  服务在Eureka服务器实例上注册。

    l  Zuul作为一个特殊的服务在Eureka上注册并发现服务。

    l  Zuul作为网关,将发现的服务导出给PC网站、App和开放平台使用。

    l  RestTemplace和FeignClient使用简单的服务调用的方法调用服务1、服务2等。

    在这个微服务的使用流程中,Netflix具有如下特点。

    l  服务在Eureka实例中注册,由Spring管理的Bean来发现和调用。

    l  通过配置的方式可以启动嵌入式的Eureka服务器。

    l  Feign客户端通过声明的方式即可导入服务代理。

    l  Zuul使用Ribbon服务实现客户端的负载均衡。

    l  通过声明的方式即可插入Hystrix的客户端。

    l  通过配置的方式即可启动Hystrix面板服务器。

    l  在Spring环境中可以直接配置Netflix的组件。

    l  Zuul可以自动注册过滤器和路由器,形成一个反向代理服务器。

    l  Hystrix面板可以对服务的状态进行监控,并提供了容错机制。

  • 相关阅读:
    使用memset()要注意
    UPC快速学习笔记之Collective Operations
    二叉搜索树(结点添加、后继搜索、前驱搜索、结点删除)
    十分愚蠢的错误记录(C++创建对象时new的问题)
    BFS和DFS分别用于有向图和无向图的一点心得和总结
    不要在if判断语句中同时声明变量,注意在if中同时赋值和判断的优先级
    C++内存泄漏姿势之——eof()和delete释放内存
    C++中"was not declared in this scope"问题记录;以及通过正则表达式提取文件中数字的方法
    论fork()函数的进阶使用
    页面的修改、添加,以及验证控件的常见应用
  • 原文地址:https://www.cnblogs.com/bangandwolf/p/11050583.html
Copyright © 2020-2023  润新知