首页 文章 精选 留言 我的

精选列表

搜索[图形后端],共10000篇文章
优秀的个人博客,低调大师

后端必备——数据通信知识(RPC、消息队列)一站式总结

我自己总结的Java学习的系统知识点以及面试问题,目前已经开源,会一直完善下去,欢迎建议和指导欢迎Star: https://github.com/Snailclimb/Java-Guide RPC RPC(Remote Procedure Call)—远程过程调用 ,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发分布式程序就像开发本地程序一样简单。 RPC采用客户端(服务调用方)/服务器端(服务提供方)模式, 都运行在自己的JVM中。客户端只需要引入要使用的接口,接口的实现和运行都在服务器端。RPC主要依赖的技术包括序列化、反序列化和数据传输协议,这是一种定义与实现相分离的设计。 目前Java使用比较多的RPC方案主要有RMI(JDK自带)、Hessian、Dubbo以及Thrift等。 注意: RPC主要指内部服务之间的调用,RESTful也可以用于内部服务之间的调用,但其主要用途还在于外部系统提供服务,因此没有将其包含在本知识点内。 常见RPC框架: RMI(JDK自带): JDK自带的RPC 详细内容可以参考:从懵逼到恍然大悟之Java中RMI的使用 Dubbo: Dubbo是 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。 详细内容可以参考: 高性能优秀的服务框架-dubbo介绍 Dubbo是什么?能做什么? Hessian: Hessian是一个轻量级的remotingonhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。 详细内容可以参考: Hessian的使用以及理解 Thrift: Apache Thrift是Facebook开源的跨语言的RPC通信框架,目前已经捐献给Apache基金会管理,由于其跨语言特性和出色的性能,在很多互联网公司得到应用,有能力的公司甚至会基于thrift研发一套分布式服务框架,增加诸如服务注册、服务发现等功能。 详细内容可以参考: [【Java】分布式RPC通信框架Apache Thrift 使用总结](https://www.cnblogs.com/zeze/p/8628585.html) 如何进行选择: 是否允许代码侵入: 即需要依赖相应的代码生成器生成代码,比如Thrift。 是否需要长连接获取高性能: 如果对于性能需求较高的haul,那么可以果断选择基于TCP的Thrift、Dubbo。 是否需要跨越网段、跨越防火墙: 这种情况一般选择基于HTTP协议的Hessian和Thrift的HTTP Transport。 此外,Google推出的基于HTTP2.0的gRPC框架也开始得到应用,其序列化协议基于Protobuf,网络框架使用的是Netty4,但是其需要生成代码,可扩展性也比较差。 消息中间件 消息中间件,也可以叫做中央消息队列或者是消息队列(区别于本地消息队列,本地消息队列指的是JVM内的队列实现),是一种独立的队列系统,消息中间件经常用来解决内部服务之间的 异步调用问题 。请求服务方把请求队列放到队列中即可返回,然后等待服务提供方去队列中获取请求进行处理,之后通过回调等机制把结果返回给请求服务方。 异步调用只是消息中间件一个非常常见的应用场景。此外,常用的消息队列应用场景还偷如下几个: 解耦 : 一个业务的非核心流程需要依赖其他系统,但结果并不重要,有通知即可。 最终一致性 : 指的是两个系统的状态保持一致,可以有一定的延迟,只要最终达到一致性即可。经常用在解决分布式事务上。 广播 : 消息队列最基本的功能。生产者只负责生产消息,订阅者接收消息。 错峰和流控 具体可以参考: 《消息队列深入解析》 当前使用较多的消息队列有ActiveMQ(性能差,不推荐使用)、RabbitMQ、RocketMQ、Kafka等等,我们之前提高的redis数据库也可以实现消息队列,不过不推荐,redis本身设计就不是用来做消息队列的。 ActiveMQ: ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的JMSProvider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。 具体可以参考: 《消息队列ActiveMQ的使用详解》 RabbitMQ: RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。RabbitMQ 最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗 > AMQP :Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。 具体可以参考: 《消息队列之 RabbitMQ》 RocketMQ: 具体可以参考: 《RocketMQ 实战之快速入门》 《十分钟入门RocketMQ》 (阿里中间件团队博客) Kafka:Kafka是一个分布式的、可分区的、可复制的、基于发布/订阅的消息系统,Kafka主要用于大数据领域,当然在分布式系统中也有应用。目前市面上流行的消息队列RocketMQ就是阿里借鉴Kafka的原理、用Java开发而得。 具体可以参考: 《Kafka应用场景》 《初谈Kafka》 推荐阅读: 《Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和区别》 欢迎关注我的微信公众号:"Java面试通关手册"(一个有温度的微信公众号,无广告,单纯技术分享,期待与你共同进步~~~坚持原创,分享美文,分享各种Java学习资源。您想关注便关注,,公众号只是我记录文字和生活的地方,无所谓利益。)

优秀的个人博客,低调大师

中华万年历CTO杭建:Java后端技术概览(赠书福利)

软件开发的核心原则 此处所说的是软件开发应该遵循的一些核心原则: Don't Repeat Yourself:这是软件开发的一个基础原则,即不要做重复性劳动。也是现在所说的“极客文化”的一种。代码重复、工作重复在软件开发中都是不合理的存在。利用各种手段消除这些重复是软件开发的一个核心工作准则。 Keep it simple stupid:即KISS原则。在做软件设计的工作中,很多时候都不要想得过于复杂,也不要过度设计和过早优化,用最简单且行之有效的方案也就避免了复杂方案带来的各种额外成本。既有利于后续的维护,也利于进一步的扩展。 You Ain’t Gonna Need It:即YAGNI原则。只需要将应用程序必需的功能包含进来,而不要试图添加任何其他你认为可能需要的功能。因为在一个软件中,往往80%的请求都花费在20%的功能上。 Do

优秀的个人博客,低调大师

Dgraph v22.0.0-RC1 发布,事务性分布式图形数据库

Dgraph 是一个可扩展的,分布式的,低延迟的图数据库,目标是提供 Google 生产水平的规模和吞吐量,在超过 TB 的结构数据里,为用户提供足够低延迟的实时查询。Dgraph 支持 GraphQL 作为查询语言,响应 JSON。 Dgraph v22.0.0-RC1 现已发布,v22.0.0 是基于 v21.03.2 所发布的。官方警告称,他们将停止对 v21.12.0 的支持。 本次具体更新内容如下: Fixed GraphQL fix(GraphQL):优化 eq 过滤器查询 (#7895) fix(GraphQL):添加对空值的验证,以正确的 graphql 规则验证顺序(#8333) fix(GraphQL) 用 ID 过滤器修复 auth 查询重写 (#8157) EDgraph fix(query):防止突变中相同谓词的多个 entries(#8332) Posting fix(rollups):修复 roll-up 中的 splits(#8297) Bug fix(bug):在 Go 例程中使用循环变量的副本 (#8163) 安全 CVE 修复(共 387 个) GHSA 修复(共 7 个) fix(sec):修复 HIGH CVEs(#8289) fix(sec):CVE High Vulnerability(#8277) fix(sec):修复CVE-2021-31525(#8274) fix(sec):CVE-2019-11254(#8270) Changed CI Test Infrastructure 配置为与Github Actions 一起运行 test harness 的稳定性改进 启用单元/集成测试 启用负载测试 启用Linters 启用Code Coverage CI Security 配置为与Github Actions 一起运行 启用Trivy Scans 启用dependabot scans 已启用 Github Issues 更多详情可查看:https://github.com/dgraph-io/dgraph/releases/tag/v22.0.0-RC1-20221003

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册