来自BAT大厂JAVA架构师总结的 分布式服务框架学习笔记

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 分布式服务框架

分布式服务框架

一、RPC

二、SOA

三、业界服务治理方案

  (1)Dubbo:下图是Dubbo在服务治理方面的架构设计

  (2)JSF:下图是JSF在服务治理方面的架构设计

  (3)Motan:Motan是有名的轻量级服务框架,代码质量很高,下图是Motan在服务治理方面的架构设计

四、分布式服务框架主要模块名词释义
前言

分布式服务框架不仅仅包含核心的运行时类库,还包括服务划分原则、服务化最佳实践、服务治理、服务监控、服务开发框架等,它是一套完整的解决方案,用来协助应用做服务化改造,以及指导用户如何构建适合自己业务场景的服务化体系,将服务化的价值发挥到极致。.

基于分布式服务框架,业务终于可以把全部精力都放到应用层的逻辑开发,研发效率、系统可靠性都得到了极大的提升。目前,华为电信软件主要解决方案几乎所有的Java系统都基于分布式服务框架构建,底层的基础框架实现了统一。

分布式服务框架
一、RPC

  RPC(Remote Process Call),即远程服务调用,被广泛地应用在很多企业应用中,是早期主要的服务治理方案,其流程较为简单,客户端consumer携带参数发送RPC请求到服务提供方provider,provider根据参数路由到具体函数,方法,并将执行获得的结果返回,至此一次RPC调用完成。

  

  随着业务的发展,大数据时代的到来,服务提供方的压力也日益增大,单机应用的处理能力无论在软件,硬件上都受到限制,provider也不可能一直无限扩容,即使扩容,也存在着很多问题,即服务的路由,和Consumer的负载均衡问题。因此,分布式服务架构应运而生,RPC发展到一定阶段思考的变革,成为了分布式服务,云计算的计算机基础。
二、SOA

  由于简单的RPC调用已经不能随着时代发展满足需求,因此复杂的业务逻辑对于分布式应用架构体系的需求愈发强烈,业务希望自己的服务是分布式部署的,请求是分流的,对数据的操作是能读写分离的,同时能屏蔽许多复杂需要自己编写的底层服务,借助已有的公共服务,去快速的构建自己的应用,降低人力开发维护的成本和提高应用交付的效率,基因此,基于分布式服务思想的SOA(Service-Oriented Architecture)成了新的受追捧的架构。常见的SOA服务调用流程图如下: 

  

在这里小编为大家整理了一些Java分布式框架的学习笔记,以及Java核心知识点整理的文档,点我 免费领取 哦。 

三、业界服务治理方案

  业界的互联网巨头公司,都有属于自己的分布式服务框架,如阿里巴巴的Dubbo,HSF,腾讯的Tars,京东的JSF,新浪的Motan,都已经是业界非常成熟的解决方案,其中开源的Dubbo和Motan受到了广大开发者的研究对象。

  纵观这些服务框架,设计的基本思路都如上图,无非涉及provider发布注册,consumer订阅,调用发起,负载均衡,服务分流和监控等模块,并在此基础上增加了很多玩法,形成了各具特色的分布式服务框架设计,下面就Dubbo,JSF,Motan的设计做下简单的介绍。
  (1)Dubbo:下图是Dubbo在服务治理方面的架构设计

  初始化阶段:部署在Container的Provider启动后向服务中心Registry发布并注册自己的服务,客户端Consumer初始化时即向Registry订阅自己想要的服务,同时Registry对Consumer保持着一个长连接,当订阅的服务新增或减少节点时,会及时通知到客户端更新(此过程是异步进行的,不会影响Consumer的主流程),如此一来,客户端Consumer便有了Provider的所有实时信息,便可以发起服务调用了。

  invoke阶段:客户端Consumer从获得的所有Provider列表中通过负载均衡等策略选出最适合调用的服务提供者Provider并发起同步调用。

  Monitor阶段:Consumer和Provider通过异步的方式向监控中心上报自己的需要被监控的数据。

  
  (2)JSF:下图是JSF在服务治理方面的架构设计

  初始化阶段:Provider启动后向服务注册中心发布注册自己的服务

  invoke阶段:与Dubbo不同的是,JSF的注册中心不向Consumer推送Provider实时数据,而是在发起调用时Consumer向注册中心询问并获得对应的Provider,然后组织匹配JSF协议的报文发起调用。

  Monitor阶段:Provider定期向监控中心发送性能统计数据,同时Provider还会上报事件给事件中心。

  
  (3)Motan:Motan是有名的轻量级服务框架,代码质量很高,下图是Motan在服务治理方面的架构设计

  Motan的服务治理设计与Dubbo十分的相似,都是Provider发布注册,Consumer订阅与接受推送,之后发起调用。

  
四、分布式服务框架主要模块名词释义

  无论是那种SOA的架构设计,都离不开几个模块的功能,即Provider,Consumer,Registry,Gateway,负载均衡,服务分流,监控等,通过上述所讲,应该对这些功能模块有了初步的认识,下面就这些名词再作下介绍。

  (1)Provider:服务提供者,无论是业务服务,还是一个系统中公用的SAAS,都属于Provider。

  (2)Consumer:即发起调用的客户端。

  (3)Registry:服务注册中心,是分布式服务系统中的一个重要组成模块,管理Provider的Manager,在实际的运行环境中,服务注册中心Registry被动通知或Consumer主动询问,在Provider有节点宕机或新增节点时,客户端也可实时感知到,从而避免了某个Provider被无限调用或是无限闲置。

  (4)Gateway:网关也是分布式服务框架中不可或缺的部分,每种系统与框架都有自己的一套协议,当异构系统互相调用时,网关的作用即显现出来,Gateway接受各种外部HTTP请求,完成相应的权限校验,报文适配,路由转发到对应的Provider,再将Provider返回的结果传递给异构系统的Consumer,完成异构系统的互相调用。

  (5)负载均衡,服务分流:Consumer从Registry获得具体的Provider列表后,如何选取合适的Provider,取决与一定的负载均衡算法,常见的算法有轮询法,随机法,源地址哈希,加权轮询,加权随机等。

  (6)监控:接收来自Consumer和Provider异步上报的性能监控数据,对有风险的节点发出告警。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
25天前
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
25天前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
2月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
89 3
|
2月前
|
Cloud Native Java API
聊聊从单体到微服务架构服务演化过程
本文介绍了从单体应用到微服务再到云原生架构的演进过程。单体应用虽易于搭建和部署,但难以局部更新;面向服务架构(SOA)通过模块化和服务总线提升了组件复用性和分布式部署能力;微服务则进一步实现了服务的独立开发与部署,提高了灵活性;云原生架构则利用容器化、微服务和自动化工具,实现了应用在动态环境中的弹性扩展与高效管理。这一演进体现了软件架构向着更灵活、更高效的方向发展。
|
3月前
|
存储 Linux KVM
Proxmox VE (PVE) 主要架构和重要服务介绍
Proxmox VE (PVE) 是一款开源的虚拟化平台,它基于 KVM (Kernel-based Virtual Machine) 和 LXC (Linux Containers) 技术,支持虚拟机和容器的运行。PVE 还提供高可用集群管理、软件定义存储、备份和恢复以及网络管理等企业级功能。
1337 7
|
2天前
|
消息中间件 存储 安全
分布式系统架构3:服务容错
分布式系统因其复杂性,故障几乎是必然的。那么如何让系统在不可避免的故障中依然保持稳定?本文详细介绍了分布式架构中7种核心的服务容错策略,包括故障转移、快速失败、安全失败等,以及它们在实际业务场景中的应用。无论是支付场景的快速失败,还是日志采集的安全失败,每种策略都有自己的适用领域和优缺点。此外,文章还为技术面试提供了解题思路,助你在关键时刻脱颖而出。掌握这些策略,不仅能提升系统健壮性,还能让你的技术栈更上一层楼!快来深入学习,走向架构师之路吧!
29 11
|
16天前
|
消息中间件 架构师 数据库
本地消息表事务:10Wqps 高并发分布式事务的 终极方案,大厂架构师的 必备方案
45岁资深架构师尼恩分享了一篇关于分布式事务的文章,详细解析了如何在10Wqps高并发场景下实现分布式事务。文章从传统单体架构到微服务架构下分布式事务的需求背景出发,介绍了Seata这一开源分布式事务解决方案及其AT和TCC两种模式。随后,文章深入探讨了经典ebay本地消息表方案,以及如何使用RocketMQ消息队列替代数据库表来提高性能和可靠性。尼恩还分享了如何结合延迟消息进行事务数据的定时对账,确保最终一致性。最后,尼恩强调了高端面试中需要准备“高大上”的答案,并提供了多个技术领域的深度学习资料,帮助读者提升技术水平,顺利通过面试。
本地消息表事务:10Wqps 高并发分布式事务的 终极方案,大厂架构师的 必备方案
|
27天前
|
Kubernetes Cloud Native Docker
云原生之旅:从传统架构到容器化服务的演变
随着技术的快速发展,云计算已经从简单的虚拟化服务演进到了更加灵活和高效的云原生时代。本文将带你了解云原生的概念、优势以及如何通过容器化技术实现应用的快速部署和扩展。我们将以一个简单的Python Web应用为例,展示如何利用Docker容器进行打包和部署,进而探索Kubernetes如何管理这些容器,确保服务的高可用性和弹性伸缩。
|
1月前
|
存储 NoSQL Java
Java调度任务如何使用分布式锁保证相同任务在一个周期里只执行一次?
【10月更文挑战第29天】Java调度任务如何使用分布式锁保证相同任务在一个周期里只执行一次?
87 1
|
2月前
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
69 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
下一篇
DataWorks