`

Dubbo框架应用之(二)--服务治理

 
阅读更多

Dubbo服务治理全貌图

 


 

 

       当我们现有ITOO平台系统的业务随着用户的逐渐增大,设计的业务越来越广,系统会异常的复杂,在大规模服务之前,我们可以采用的是RMI或Hessian等工具,暴露和引用远程服务,通过配置URL地址和JNDI地址进行调用,使用Apache httpd复杂均衡插件或F5服务器进行负载均衡

 

存在以下问题和如何解决呢?

 

       当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。

       此时需要一个服务注册中心,动态的注册和发现服务,使服务的位置透明。

并通过在消费方获取服务提供方地址列表,实现软负载均衡和Failover,降低对F5硬件负载均衡器的依赖,也能减少部分成本。

 

        当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。

      这时,需要自动画出应用间的依赖关系图,以帮助架构师理清理关系。

 

       接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?

       为了解决这些问题,第一步,要将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标。

其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响应时间到达阀值,记录此时的访问量,再以此访问量乘以机器数反推总容量。

 

        规模继续扩大,应用之间不再是扁平的对应关系,开始分层,比如核心数据层,业务集成层等,就算没有出现循环依赖,也不允许从低层向高层依赖,以免后续被逼循环依赖。

       这时,需要在注册中心定义架构体系,列明有哪些层的定义,每个服务暴露或引用时,都必须声明自己应用属于哪一层,这样注册中心能更快的发现架构的腐化现象。

 

        服务多了,沟通成本也开始上升,调某个服务失败该找谁?服务的参数都有什么约定?

      这时就需要登记每个服务都是谁负责的,并建立一个服务的文档库,方便检索。

  

      慢慢一些敏感数据也都服务化了,安全问题开始变得重要,谁能调该服务?如何授权?

       这样的服务可能需要一个密码,访问时需带着此密码,但如果用密码,要改密码时,就会很不方便,所有的消费方都要改,所以动态生成令牌(Token)可能会更好,提供方将令牌告之注册中心,由注册中心决定是否告之消费方,这样就能在注册中心页面上做复杂的授权模型。

 

        就算是不敏感的服务,也不是能任意调用,比如某服务突然多了一个消费者,这个消费者的请求量直接把服务给拖跨了,其它消费者跟着一起故障。

      首先服务提供方需要流控,当流程超标时,能拒绝部分请求,进行自我保护。

      其次,消费者上线前和提供者约定《服务质量等级协定(SLA)》,SLA包括消费者承诺每天调用量,请求数据量,提供方承诺响应时间,出错率等,将SLA记录在监控中心,定时与监控数据对比,超标则报警。

 

     虽然有SLA约定,如果不能控制,就只是君子协定,如何确保服务质量?

     比如:一个应用很重要,一个不那么重要,它们调用同一个服务,这个服务就应该向重要应用倾斜,而不是一视同仁,当支撑不住时,应限制不重要应用的访问,保障重要应用的可用,如何做到这一点呢。这时,就需要服务路由,控制不同应用访问不同机器,比如

  1. <span style="font-size:18px;">应用分离:consumer.application = foo => provider.host = 1,2,3consumer.application != foo => provider.host = 5,6读写分离:method.name = find*,get* => provider.host = 1,2,3method.name != find*,get* => provider.host = 5,6</span>  



   

         服务上线后,需要验证服务是否可用,但因防火墙的限制,线下是不能访问线上服务的,不得不先写好一个测试Main,然后放到线上去执行,非常麻烦,并且容易忘记验证。

       所以线上需要有一个自动运行的验证程序,用户只需在界面上填上要验证的服务方法,以及参数值和期望的返回值,当有一个服务提供者上线时,将自动运行该用例,并将运行结果发邮件通知负责人。

 

        服务应用和Web应用是有区别的,它是一个后台Daemon程序,不需要Tomcat之类的Web容器。但因公司之前以Web应用为主,规范都是按Web应用的,所以不得不把服务跑在一个根本用不上的Web容器里,而搭一个这样的Web工程也非常费事。

       所以需要实现一个非Web的容器,只需简单的Main加载Spring配置即可,并提供Maven模板工程,只需mvn dubbo:generate 即可创建一个五脏俱全的服务应用。

 

      开发服务的人越来越多,更注重开发效率,IDE的集成支持必不可少。

通过插件,可以在Eclipse中直接运行服务,提供方可以直接填入测试数据测试服务,消费方可以直接Mock服务不依赖提供方开发。

 

        因为暴露服务很简单,服务的上线越来越随意,有时候负责服务化的架构师都不知道有人上线了某个服务,使得线上服务鱼龙混杂,甚至出现重复的服务,而服务下线比上线还困难。

      需要一个新服务上线审批流程,必须经过服务化的架构师审批过了,才可以上线。而服务下线时,应先标识为过时,然后通知调用方尽快修改调用,直到没有人调此服务,才能下线。

 

         因服务接口设计的经验一直在慢慢的积累过程中,很多接口并不能一促而蹴,在修改的过程中,如何保证兼容性,怎么判断是否兼容?另外,更深层次的,业务行为兼容吗?

       可以根据使用的协议类型,分析接口及领域模型的变更是否兼容,比如:对比加减字段,方法签名等。

而业务上,可能需要基于自动回归测试用例,形成Technology Compatibility Kit (TCK),确保兼容升级。

 

        随着服务的不停升级,总有些意想不到的事发生,比如cache写错了导致内存溢出,故障不可避免,每次核心服务一挂,影响一大片,人心慌慌,如何控制故障的影响面?服务是否可以功能降级?或者资源劣化?

      应用间声明依赖强度,哪些功能强依赖,哪些弱依赖,然后基于依赖强度,计算出影响面,并定期测试复查,加强关键路径上的服务的优化和容错,清理不该在关键路径上的服务。

      提供容错Mock数据,Mock数据也应可以在注册中心在运行时动态下发,当某服务不可用时,用Mock数据代替,可以减少故障的发生,比如某验权服务,当验权服务全部挂掉后,直接返回false表示没有权限,并打印Error日志报警。

       另外,前端的页面也应采用Portal进行降级,当该Portal获取不到数据时,直接隐藏,或替换为其它模块展示,并提供功能开关,可人工干预是否展示,或限制多少流量可以展示。

 

        当已有很多小服务,可能就需要组合多个小服务的大服务,为此,不得不增加一个中间层,暴露一个新服务,里面分别调其它小服务,这样的新服务业务逻辑少,却带来很多开发工作量。

       此时,需要一个服务编排引擎,内置简单的流程引擎,只需用XML或DSL声明如何聚合服务,注册中心可以直接下发给消费者执行聚合逻辑,或者部署通用的编排服务器,所有请求有编排服务器转发。

        并不是所有服务的访问量都大,很多的服务都只有一丁点访问量,却需要部署两台提供服务的机器,进行HA互备,如何减少浪费的机器。

        此时可能需要让服务容器支持在一台机器上部署多个应用,可以用多JVM隔离,也可以用ClassLoader隔离。

 

   

 

      如果你的应用是国际化的,有中文站,美国站之类,因为时差,美国站的机器晚上闲的时候,可能正是中文站的白天忙时,可以通过资源调度,分时段自动调配和部署双方应用。

 

分享到:
评论

相关推荐

    jmeter-plugins-dubbo-2.7.1-jar-with-dependencies

    Dubbo是阿里巴巴开源的一款高性能、轻量级的服务治理框架,广泛应用于分布式系统。jmeter-plugins-dubbo插件则允许开发者通过JMeter直接对Dubbo服务进行压力测试,模拟高并发请求,以验证服务在极限条件下的表现。 ...

    springboot2.0.x+dubbo-spring-boot-starter

    而 Dubbo 2.6.x 版本则包含了对 Spring Boot 的官方支持,提升了服务治理、监控和配置的便利性。 在 "SpringBootWithDubbo-master" 这个压缩包文件中,我们可以期待找到一个完整的 Spring Boot 与 Dubbo 集成的示例...

    dubbo-admin-2.5.4-SNAPSHOT-jdk8

    总结来说,"dubbo-admin-2.5.4-SNAPSHOT-jdk8"是Dubbo框架的一个版本,专注于服务治理的可视化工具,专为Java 8设计,并且处于持续开发状态。它提供了丰富的功能,如服务监控、故障排查和配置管理,是分布式系统运维...

    dubbo-monitor-simple-2.5.3.zip

    Dubbo Monitor Simple 2.5.3是Dubbo框架中一个重要的组件,它作为监控中心,为开发者提供了实时监控服务调用情况的功能。这个版本的发布,旨在帮助用户更好地管理和优化分布式系统的性能,确保服务的稳定性和高效性...

    dubbo监控平台dubbo-monitor-simple-2.5.3

    在分布式系统中,服务治理和监控是至关重要的环节,Dubbo作为一款高性能、轻量级的Java远程服务调用框架,提供了丰富的服务治理功能。本文将详细探讨Dubbo监控平台Dubbo-Monitor-Simple 2.5.3的使用方法与核心特性。...

    dubbo-monitor-simple-2.5.8-assembly.tar.gz

    Dubbo Monitor是Dubbo框架的一部分,它提供了一种可视化的方式来查看服务提供者和消费者之间的交互情况,包括调用次数、成功率、耗时等关键指标。`dubbo-monitor-simple`是Dubbo提供的一个简单的监控实现,它基于...

    dubbo-monitor-simple-2.8.4-assembly.tar.gz

    Dubbo,作为阿里巴巴开源的一款高性能、轻量级的服务治理框架,提供了丰富的监控功能。本文将深入探讨`dubbo-monitor-simple-2.8.4`,这个版本的监控简易实现,以及其在实际应用中的关键知识点。 首先,`dubbo-...

    dubbo-monitor-simple-3.0.0-SNAPSHOT-assembly.tar.gz

    Dubbo作为一款高性能、轻量级的Java RPC框架,提供了强大的服务治理能力,其中包括服务监控功能。本文将深入探讨Dubbo的监控组件——dubbo-monitor-simple,主要基于3.0.0-SNAPSHOT版本,以帮助开发者更好地理解和...

    dubbo-monitor-simple-2.5.5 最新安装包

    在分布式服务框架的世界里,Dubbo作为一款高性能、轻量级的服务治理框架,被广泛应用于微服务架构之中。其中,Dubbo Monitor是监控服务调用的重要组件,它能够帮助开发者实时了解服务的运行状态,对故障进行快速定位...

    dubbo-monitor-simple-2.0.0-assembly.tar.gz

    Dubbo,作为阿里巴巴开源的一款高性能、轻量级的服务治理框架,为分布式应用提供了服务发现、调用路由、负载均衡等功能。而其中的监控中心组件——dubbo-monitor-simple,是实现服务性能和健康状况监控的重要工具。...

    dubbo-demo-consumer-2.5.4-SNAPSHOT-assembly.tar.gz

    在软件开发领域,分布式服务框架Dubbo扮演着至关重要的角色,它为企业级应用提供高性能、轻量级的服务治理方案。本篇文章将深入探讨`dubbo-demo-consumer-2.5.4-SNAPSHOT-assembly.tar.gz`这个压缩包,它是针对初学...

    dubbo-demo-provider-2.1.5-assembly.tar.gz

    【标题】"dubbo-demo-provider-2.1.5-assembly.tar.gz" 是一个与Dubbo框架相关的服务提供者示例项目的二进制压缩包,版本号为2.1.5。这个压缩包通常包含了运行该示例所需的所有组件和配置文件,用于帮助开发者理解和...

    dubbo-monitor-simple-2.5.3-assembly.tar.gz 安装包

    在现代软件开发中,分布式系统已经成为主流,而作为Java领域的杰出代表,Dubbo框架为开发者提供了强大的服务治理能力。本篇文章将深入探讨如何安装并使用"Dubbo Monitor Simple 2.5.3"这一监控组件,同时也会讲解其...

    dubbo-monitor-simple-2.5.3

    Dubbo 是阿里巴巴开源的一款高性能、轻量级的服务治理框架,它主要提供服务注册、服务发现、服务调用、负载均衡等功能,广泛应用于微服务架构中。而 Dubbo Monitor 就是其核心组件之一,用于实现服务的可视化监控。 ...

    dubbo-demo-consumer-2.1.5-assembly.tar.gz

    在分布式服务框架领域,Dubbo无疑是中国阿里巴巴集团贡献的一款重量级开源产品。它以其高性能、易用性、可扩展性和丰富的生态赢得了广大开发者们的青睐。"dubbo-demo-consumer-2.1.5-assembly.tar.gz"是Dubbo官方...

    Dubbo管理控制台(dubbo-admin-2.5.3-jdk1.8)

    Dubbo,由阿里巴巴开源,是一个高性能、轻量级的服务治理框架,它提供了服务注册、服务发现、调用监控等功能,极大地简化了分布式系统的开发和维护。 在Java 1.8环境下,可能存在与Dubbo Admin的兼容性问题,这些...

    dubbo-spring-boot-starter-2.7.8.zip

    其中,Dubbo作为阿里巴巴开源的高性能服务框架,为开发者提供了强大的服务治理能力。而Spring Boot以其简洁的配置和快速的应用开发体验深受开发者喜爱。当这两者结合,便诞生了Dubbo-Spring-Boot-Starter,它使得在...

    alibaba-dubbo-dubbo-2.5.7-0-ge2d63ad.tar.gz

    阿里巴巴的Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了服务发现、服务治理、流量控制等一系列完整的服务解决方案。本压缩包"alibaba-dubbo-dubbo-2.5.7-0-ge2d63ad.tar.gz"包含了Dubbo的2.5.7版本的源...

    dubbo-monitor-simple-2.5.4-SNAPSHOT-assembly.tar

    Dubbo Monitor Simple 2.5.4-SNAPSHOT是阿里巴巴开源的高性能Java RPC框架——Dubbo的重要组成部分,它为Dubbo服务提供了一种可视化监控手段。在深入探讨这个版本之前,我们先来了解一下Dubbo的基本概念。 Dubbo是...

    dubbo-demo-consumer、dubbo-demo-provider、dubbo-simple-monitor

    Dubbo是阿里巴巴开源的一款高性能、轻量级的服务治理框架,广泛应用于分布式系统中的服务调用。本篇将详细讲解基于dubbo-demo-consumer、dubbo-demo-provider和dubbo-simple-monitor的实例服务,带你深入理解Dubbo的...

Global site tag (gtag.js) - Google Analytics