java分布式应用设计核心技术

article/2025/10/22 14:22:13

java分布式应用设计核心技术(1)

前言:

CPA理论说:在分布式系统中数据强一致性和服务高可用只能二选一,所以在BASE理论中提出:服务基本可用,数据允许软状态存在,实现数据最终一致性。

在分布式系统实现阶段,主要对以上方案设计的相关技术进行技术选型,如对RPC框架,消息队列,缓存的选择。我们需要对这些框架的工作原理,优缺点有一个相关的认识。

分布式服务调用RPC框架

RPC (Remote Procedure Call)即远程过程调用,是分布式系统常见的一种通信方法。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。

什么是RPC?

常用的RPC框架有:阿里巴巴Dubbo,新浪网Motan,他俩都是服务治理型框架

Google的gRPC和FaceBook的Thrift。都是跨语言框架。

RPC的核心原理:

在这里插入图片描述

涉及的核心技术:

1.动态代理

我的理解:这里的动态代理就是client和serve分别找一个秘书,告诉秘书自己的请求,让秘书去和另一个秘书联系,秘书去传达信息。实现方法还是靠他们自己,而不是秘书。秘书只负责传达消息。

2.序列化和反序列化

网络传输数据要求二进制字节流。所以需要对java对象进行序列化。

序列化和反序列化需要使用同一种技术,否则会无法解析。

成熟的序列化技术:GOOgle的protobuf和faceBook的Thrift,Hessian2,Kryo,Msgpack等

3.网络传输

可以基于TCP也可以基于Http来实现。

如果是在传输层实现则采用Socket来实现客户端和服务端网络通信模型,并且基于NIO实现非阻塞传输。

如果在网络层实现则采用netty实现。如果是在应用层实现采用基于HTTP2.0的协议

跨语言型:

gRPC和Thrift都是基于C/S架构实现的。gRPC的客户端可以是移动客户端。他是轻量级的框架实现。

1.gRPC的设计与使用

设计层面:主要包括RPC远程方法调用涉及的相关数据的网络传输,序列化和反序列化以及基于接口定义的语言IDL来定义数据结构和服务方法。从而实现跨平台和跨语言的RPC调用。

数据传输:gRPC主要利用HTTP2.0协议相关特性实现服务提供和服务调用之间的方法调用涉及的相关数据传输。

http2.0 多路复用特性(以此达到减少消费者客户端与服务提供者服务端的建立次数,维持场链接来进行数据传授输。)(就是一个连接可以进行多次请求响应的数据传输)。

​ 基于二进制传输数据的特性,和压缩HTTP头部等特性,减少所需传输数据的提及,节省网络带宽,提高传输性能。

​ 采用HTTP协议实现数据公网传输,避免了基于TCP协议和Socket在传输会被防火墙拦截的问题。

2.Thrift的设计和使用

Thrift既是一个RPC框架也是一个数据序列化框架,grpc只是一个RPC框架,数据序列化依赖protobuf框架实现。

网络通信方面,他支持TCP,HTTP,文件通信方式,同时可以选择使用BIO还是NIO,在传输的数据格式方面,支持二进制数据和JSON格式

Thrift支持更加丰富的自定义数据类型,比如:list,set,map还有结构体,枚举。

服务治理型:

Dubbo和Motan更加使用于基于微服务架构的大型分布式系统,都是基于java语言实现的,基于netty长连接实现。都可以做到API零侵入的集成到基于Spring开发的项目中。

在这里插入图片描述

1.Dubbo

支持多种RPC协议。支持丰富的服务动态发现,服务治理机制,具体包括基于Zookeeper实现服务提供者的服务注册,服务消费者的服务订阅和服务自动发现机制。,服务提供者和消费者都支持并发监控统计与限流等功能。

2Motan

协议只支持自身定义的motan协议。

他没有Dubbo框架丰富,但是性能优于DUbbo.通过Consul来实现服务的注册与发现。

分布式消息队列

应用场景:系统解耦,流量削峰,信息通信。

一般基于高级消息队列协议AMQP。

包括ActiveMQ和RabbitMQ,后者是分布式企业及因公众最常使用的一种分布式消息队列。Kafka支持高拓展性和高吞吐量。

但是他们仨都是专业重量级分布式消息队列实现。

Redis是轻量级消息队列,基于列表数据类型实现的。

可以使用Redis的发布订阅模式实现系统解耦。

AMQP协议实现:RabbiMQ

它使用的是erlang语言。RabbiMQ起源于金融系统。

核心组件:

1.虚拟主机vhost与权限

2.连接Connection与信道Channel

3.服务器实现Broker

broker通常包含Exchanger和Queue两大组件,以及需要实现这两大组件的绑定。

4.生产者

5.消费者

持久化与镜像队列

持久化保证高可靠,镜像队列保证高可用。


http://chatgpt.dhexx.cn/article/5q8myO0w.shtml

相关文章

Java分布式架构:应用+特点+架构模式

目前企业应用的架构其实有很多,如高并发架构、异地多活架构、容器化架构、微服务架构、高可用架构、弹性化架构等。和这些架构相关的管理型技术方法也有很多,如 DevOps、应用监控、自动化运维、SOA 服务治理、去 IOE 等等。为了方便大家加深学习印象,千锋小编汇总了一些关于…

Java分布式系统框架教程,架构设计

一.主流架构模型SOA架构和微服务架构 SOA架构 SOA全称(ServiceOrientedArchitecture)中文意思为面相服务的架构,他是一种设计方法,轻重包含多个服务,服务之间通过相互依赖最终提供一系列的功能,一个服务通常以独立的形式存在与操作系统进程中,各个服务之间通过网络调用…

java分布式事务框架_Java分布式事务,及解决方案

1、什么是分布式事务 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服…

Java 分布式解决方案

文章目录 一、基础知识1. CAP理论2. BASE理论3. 分布式共识算法3.1 Raftleader electionLog Replication 二、 分布式锁1. Redis 分布式锁1.1 加锁1.2 解锁1.3 RedissonRLock 1.4 总结 2. ZooKeeper 分布式锁2.1 基本原理2.2 curator 实现 3. 两者的对比 三、 分布式事务1. 2PC…

Java分布式、微服务概念

1. 分布式 1.1 分布式是什么 分布式系统在《分布式系统原理与范型》一书中有如下定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”。 分布式系统是建立在网络之上的软件系统,是一组通过网络进行通信、为…

浅谈Java分布式与集群

在日常操作中,相信很多人在怎么理解Java分布式与集群问题上存在疑惑,今天就大概说说,不注意听,觉得两个可能是同一个东西,其实这个是两个概念。 一句话概括:分布式是以缩短单个任务的执行时间来提升效率的…

java分布式技术

分布式技术 1.软件架构的演进 (1)单体应用阶段 ​ 小型项目(体量比较小,用户比较少这种)LAMP linux操作系统 apache httpd mysql php ​ 把应用服务器数据库等部署到同一台服务器上 (2&#xff09…

JAVA分布式(一)——了解分布式

一年的时间,终于学到了分布式的时候 在进行实践前,要先了解什么是分布式?分布式的意义是什么?(面试大几率会问,如果你写了的话) 目录 一、什么是分布式?二、分布式的特点三、分布…

java分布式入门

分布式入门: 先理解为什么需要分布式,因为服务器处理的能力需要提升,这里有两个方面,第一是纵向 也就是增加cpu的能力,或者加内存;另一个方向就是 横向 ,就是分布式。将本来一台计算机的压力分给…

网站开发进阶(六十七)浅谈css中hsl()和hsla()设置颜色值的方法与应用

前言 HSL 是CSS3引进的一种将 RGB 色彩模型中的点在坐标系中的表示法。这两种表示法试图做到比基于笛卡尔坐标系的几何结构 RGB 更加直观。 定义与用法 hsl() 函数使用色相、饱和度、亮度来定义颜色。 HSL 即色相、饱和度、亮度(英语:Hue, Saturati…

CSS第二章:3.颜色单位(HSL值、HSLA值)

总览 1.HSL值 H - 色相,S - 饱和度,L - 亮度 2.HSLA值 A - 透明度 一、色相 - H 1.取值范围:0~360 二、饱和度 - S 1.取值范围:0~100% 三、亮度 - L 1.取值范围:0~100% 四、HSL值 实操 1.HTML代码&#xff…

CSS 的 hsl() 和 hsla() 函数(设置颜色的方式之一)

一:CSS中的 hsl()函数: 1、定义与用法:hsl() 函数使用色相、饱和度、亮度来定义颜色。 HSL 即:色相(Hue)、饱和度(Saturation)、亮度(Lightness)。 色相&a…

css rgba/hsla知识点讲解及半透明边框

一、RGBA(R,G,B,A) 参数: R:红色值。正整数 | |百分数 G:绿色值。正整数 | |百分数 B:蓝色值。正整数 | |百分数 A:Alpha透明度。取值0~1之间。 说明:此色彩模式与RGB相同,只是在RGB模式上新增了Alpha透明…

HSLA制作配色表

<!doctype html> <html lang"en"><head><meta charset"UTF-8"><title>HSLA制作配色表</title><style>.table-wrap {width: 400px;margin: 10px;float: left;}table {width: 400px;border: 1px solid #756c6c;bo…

css中hsla代表_hsla()函数以及CSS中的示例

css中hsla代表 Introduction: 介绍&#xff1a; The use of functions is very beneficial for web development and one must learn as many functions as they can, therefore keep learning functions for improving your knowledge and coding skills. Besides, you shoul…

rgba和hsla

在css3中可以用RGBA和HSLA,都可以用来在设置颜色的同时也可以设置它的透明度。RGBA指的是“红色、绿色、蓝色和Alpha透明度”&#xff08;Red-Green-Blue-Alpha&#xff09;&#xff0c;而HSLA则代表“色调、饱和度、亮度和Alpha透明度”&#xff08;Hue-Saturation-Lightness-…

CSS hsla函数

和ARGB一样&#xff0c;都是用来表示颜色的。表示的效果都是一样的&#xff0c;只是形式不同。 一般情况下&#xff0c;你是用不上的&#xff0c;因为一般用ARGB比较多&#xff0c;也更熟悉。但是有些书籍喜欢用这种形式&#xff0c;还是要了解一下的。 定义 hsla() 函数使用…

HSL值,HSLA,文档流,盒子模型等问题。

HSL和HSLA值 和上一篇文章中的rgb语法使用方法基本一样 H:色相&#xff0c;调节范围为0-360度&#xff0c;其实就是一个环&#xff0c;零度等于360度是红色&#xff0c;调节颜色。S&#xff1a;饱和度&#xff0c;调节颜色浓度&#xff0c;调节范围&#xff08;0%-100%&#x…

CSS中hsla的用法

hsla是css3引入的一个颜色表达方式&#xff0c;今天就来学习一下它的用法。 文章目录 1.什么是HSLA2.怎么去使用HSLA3.什么时候使用HSLA4.注意事项 1.什么是HSLA HSLA(H,S,L,A) H&#xff1a;Hue(色调)。0(或360)表示红色&#xff0c;120表示绿色&#xff0c;240表示蓝色&…

Gabor滤波器 pytorch实现

Gabor函数与人眼的生物作用相仿&#xff0c;尤其对于图片的方向和尺度特征可以很好的捕捉。所以&#xff0c;经常用于纹理、物体识别。对于Gabor的原理、公式不再赘述。 下面对Gabor滤波器用pytorch实现&#xff0c;并进行可视化&#xff1a; import math import torch import…