当前主流的RPC框架有哪些?
不知道题主说的是不是Java中的PRC框架。下面小冷就说下Java中的集中常见的RPC框架,RPC呢是远程过程调用框架,也就是说两台服务器A,B, 一个应用部署在A服务器上,另一个应用部署在B服务器上,A服务器上的应用想要调用B服务器上的应用提供的方法/函数,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语意和传递调用的参数。提供这种服务的框架我们就叫他RPC框架,RPC是远程过程调用的简称,广泛应用在大规模分布式应用中,作用是有助于系统的垂直拆分,使系统更易拓展。Java中的RPC框架比较多,各有特色,广泛使用的有Hessian、CXF、Dubbo、Dubbox、Spring Cloud、gRPC、thrift等。RPC最显著的特点就是能够跨语言,多端调用。我记得收藏的有一篇博客就是写RPC的,下面我们对比一下以上RPC框架功能比较:
下面是实际应用场景中的选择:
Spring Cloud : Spring全家桶,用起来很舒服,只有你想不到,没有它做不到。可惜因为发布的比较晚,国内还没出现比较成功的案例,大部分都是试水,不过毕竟有Spring作背书,还是比较看好。
Dubbox: 相对于Dubbo支持了REST,估计是很多公司选择Dubbox的一个重要原因之一,但如果使用Dubbo的RPC调用方式,服务间仍然会存在API强依赖,各有利弊,懂的取舍吧。
Thrift: 如果你比较高冷,完全可以基于Thrift自己搞一套抽象的自定义框架吧。
Montan: 可能因为出来的比较晚,目前除了新浪微博16年初发布的,
Hessian: 如果是初创公司或系统数量还没有超过5个,推荐选择这个,毕竟在开发速度、运维成本、上手难度等都是比较轻量、简单的,即使在以后迁移至SOA,也是无缝迁移。
rpcx/gRPC: 在服务没有出现严重性能的问题下,或技术栈没有变更的情况下,可能一直不会引入,即使引入也只是小部分模块优化使用。
至于项目中用那种rpc框架,这个还是根据项目类型来好一点,如果是一个小型项目的话就没有必要使用,如果是一个中大型的项目的话这个用那种要考虑好,后期更换的话比较麻烦。
从使用场景和功能比较,相信题主对常用的JavaRPC框架有一定了解了吧,希望对你有所帮助!
我是小冷,一个刚开始创组的小白,希望大家关注、点赞、评论、转发!
JAVA后端应该学什么技术?
Java语言是最常见的后端开发语言之一,Java语言由于自身具备构建多线程的能力,且体系结构比较中立,所以在大型互联网平台的开发中得到了广泛的采用。
目前要想从事Java的后端开发应该学习以下内容:
第一,Servlet技术。Servlet技术是Java后端的重要技术之一,作为Java Web开发的核心组件,Servlet承担了Web MVC结构中的核心作用(功能导航)。传统的Model2结构(Servlet+JavaBean+JSP)虽然在目前已经很少使用了,但是Web开发的基本结构依然没有改变。Servlet技术的应用涉及到Web容器、会话(HttpSession)、安全、同步、Web应用部署等相关内容。
第二,Java操作数据库。后端开发免不了与数据库打交道,所以掌握Java的数据库操作是一个基本要求。Java操作数据库涉及到的内容有JDBC、JNDI、RMI、DAO等内容,其中使用RMI+JDBC是构建java数据库开发的一个常见的解决方案,而JNDI则是对各种资源的定义。
第三,Spring框架。Spring+SpringMVC+MyBatis是目前一个比较常见的后端开发方案,Spring的原理就是构建了一个“业务组件容器”,SpringMVC则是Web MVC的一个具体实现框架,而MyBatis则是一个基于DAO的实现框架。从性能的角度来说,Spring是EJB的轻量级解决方案,得到了广大Java程序员的欢迎。如果有Servlet以及数据库操作的基础,那么学习这几个框架的使用是一件非常轻松的过程。虽然基于Spring的编程比较方便,但是Spring也有缺点,比如配置文件过于繁琐。
第四,结合hadoop构建Java的分布式开发。Java的分布式开发是提高Java后端处理能力的重要内容,RMI是Java分布式开发比较常见的解决方案,学习起来也比较简单。在学习完RMI之后可以进一步学习在Hadoop平台(大数据平台)下构建Java的分布式应用,另外Docker(云计算常用)也是一个不错的构建分布式开发的平台。
Java开发涉及到的内容比较多,需要一个系统的学习过程,建议在实际使用过程中学习,这样效果会更好。
我使用Java语言多年,目前主要研究方向是大数据和人工智能,也在带大数据方面的研究生,我会陆续在头条上写一些关于软件开发方面的文章,感兴趣的朋友可以关注我的头条号,相信一定会有所收获。
如果有大数据方面的问题,或者是考研方面的问题,都可以咨询我。
谢谢!