微服务网关与rpc(微服务网关与注册中心区别)

网友投稿 384 2023-01-07


本篇文章给大家谈谈微服务网关与rpc,以及微服务网关与注册中心区别对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享微服务网关与rpc的知识,其中也会对微服务网关与注册中心区别进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

RPC协议及实现方式(分布式微服务治理的核心)

分布式微服务治理的核心在于: 微服务和分布式

Remote Procedure Call,翻译过来应该是“远程程序调用”,目前业内通用的翻译是“远程过程调用”,但是“过程”这个词很容易造成误解,翻译成“程序”更好理解RPC的意义。

一般所谓的XX协议就是个文档,类似于我们的需求文档,只说了要做什么,但是具体怎么做是由各大开源大佬做的。 一般情况下都会实现核心功能,不同的开源在细节上实现都会不一样,这个需要注意!

RPC 这个概念术语在上世纪 80 年代由 Bruce Jay Nelson 提出的,在 Nelson 的论文 "Implementing Remote Procedure Calls" 中,他提到了几个 RPC的特点 :

除此之外,这位大佬还给出了实现RPC框架的 详细架构图 :

结合上图,Nelson 的论文中指出实现 RPC 的程序包括 5 个部分:

所以这架构图的意思是:当 user 想发起一个远程调用时,它实际是通过本地调用 User-stub。并通过本地的RPCRuntime传输 。远端 RPCRuntime 实例收到请求后交给 Server-stub 进行解码后发起本地端调用,调用结果再返回给 User 端。

看完协议内容,跟着就得实现这个协议啦,这时候你是不是发现了问题的严重性: 自!己!一!点!思!路!都!没!有!

所以我们需要再理解一下RPC协议,根据Nelson的论文知道我们要做的两件事:

上述两点其实是实现RPC协议的两大要素: 序列化协议和传输协议 。

因为RPC本质上是进程间通信,而“本地调用和远程调用的对比”实际上就是“进程内通信和进程间通信的对比”。通过两者的对比,我们才能理解到 序列化协议和传输协议 的作用,如下图:

最基本的RPC框架就是 单点式 的,因为A服务直接调用B服务,不经过第三方,这种是最简单的。但是必须是A和B同时部署一套,A1只能调用B1,A2只能调用B2。

所以需要一台A服务对多台B服务,利用第三方服务(注册中心)找到其他B服务,而不是写死B服务的地址。这种RPC才是 分布式 RPC,也是业内主流。

单点RPC框架只需要:

但是我们要做分布式的啊,所以需要:

实际上在生产环境中,我们需要实时监控服务的调用情况,所以需要一个微服务管理中心,甚至是一个自动化运维的管理中心,所以需要:

在文章的第二节我们看到大佬论文中对RPC的总结,其中一个很重要的一点:“通用”。

所以我们需要:

对的,能实现上述五点的,才是一个合格的RPC框架,但还不是优秀,因为我们还要考虑下性能。

先打个底,目前流行的RPC框架大多都是多管闲事,不单单只是RPC框架,你可以看看Dubbo和SpringCloud中除了RPC还有什么骚功能。

可以看看别人的各种RPC框架总结: http://www.cnblogs.com/moonandstar08/p/6291283.html
在网上找到了个图,但是没有提到SpringCloud,暂且看看先,因为有些不认为是对的:

我们可以看到各个RPC框架使用的序列化协议,注册中心,管理中心,是否跨语言,但是传输协议没有提到。

参考这篇博客: http://blog.csdn.net/jek123456/article/details/70208049
综合来说,在性能上rpcx是首选,但是考虑到框架的生态,其实还是推荐Dubbo或者SpringCloud的,因为除了性能,成本也是很重要的,无论是学习成本还是研发成本。

微服务基础概念介绍

微服务经历了单体应用-rpc-微服务等发展阶段,每个阶段都解决了不同的问题,简单描述如下:
● 单体应用-rpc
解决了单体应用复杂性的问题。每个服务可以独立扩展。
● rpc-微服务
强化了服务治理相关功能,如服务发现、服务监控、流量管理、负载均衡、重试熔断等。

springcloud归属于应用层面,以基于springboot的业务应用为基础,多出了服务治理相关内容,其部署运行需要底层的支撑,具体可以是物理机/虚拟机/容器等。下图为以推荐服务/AB测试服务为基础的微服务所涉及的应用节点和资源层依赖:

我们部门承担了研发和运维的职责,在完成应用开发的同时需要兼顾运维功能,因此在进行设计的时候需要考虑功能、服务治理、底层资源的调度支撑等方面的内容。开发框架选择需求具体如下:

完成基于微服务的应用开发,并且兼顾部署运维相关功能,需要将springcloud与k8s融合使用。具体融合示意图如下:

在应用层与运行环境分割线上的组件为需要进行融合的组件。如springcloud官方提供了spring cloud kubernetes方案来实现该融合。腾讯提供了spring-cloud-tencent方案实现springcloud与腾讯k8s云服务的融合。
很多公有云厂商将运行环境与服务治理能力包装起来,提供一站式的微服务接入能力。

目前推荐服务与AB测试服务在k8s上部署结构如下图所展示:

引入springcloud后,推荐服务与AB测试两个节点作为核心业务节点,部署方式不发生变化。新引入的服务发现、监控、限流、路由等非功能节点,这些节点作为k8s中服务节点进行部署,为核心业务节点提供服务治理功能,具体如下:

开源推荐-C++开发的微服务框架Tars

Tars致力于建设微服务技术生态,在底层基础设施、服务框架、上层应用以及DevOps等方面,都做了较为深入的研发。

2020年3月10日,Linux基金会正式宣布旗下的TARS开源项目成立TARS子基金会。这是一个 专注于微服务领域 的开源基金会,致力于帮助企业拥抱微服务体系架构,解决在使用微服务方面可能出现的问题。这是首个 起源于中国开源项目 的国际开源基金会,也是Linux基金会下 唯一聚焦微服务技术生态 的子基金会。

Tars基金会里目前收录了9个项目,分为5部分:工具集(Tars Lab)、服务治理(Service Governance)、微服务开发框架(Development Framwork)、存储(DCache)和基础设施(Infrustructure)。

1、Tars Lab

Tars Lab项目提供了压力测试TarsJMeter,基准测试集TarsBenchmark和一些开发工具包。TarsJavaStart,可以生成服务端和客户端的TarsJava脚手架,快速开始Tars服务的开发。TarsTools,是一款支持多种IDE的JetBrains插件,为实现编辑Jce/Tars文件使用的(支持Intellij IDEA、Android Studio、PhpStorm、WebStorm、GoLand、CLion等)。

2、服务治理

服务治理包含了2个项目:TSeer专注于处理服务注册与发现;TarsGateway是基于Tars框架开发的微服务网关,除具备网关的基础功能外,还可以自动将HTTP转换成Tars-RPC协议。

3、微服务开发框架

这部分只包含Tars一个项目,核心模块由C++开发,提供了多语言开发框架,默认rpc调用,是Tars基金会的核心项目。其他项目都是围绕这个项目研发的。

4、微服务存储

这部分只包含DCache一个项目,它是基于Tars框架开发的 分布式共享内存存储系统 ,支持常用的kv数据结构、支持二级索引、支持在线扩缩容、支持自动持久化到后端db等特性。DCache依赖Tars框架的运行,但也得益于Tars,使得存储服务的运维成本几乎为0。

5、微服务基础设施

这是一个将Tars与K8S融合使用的项目,致力于将Tars融入到K8S生态中。

在这方面还有一个更优秀的项目K8SFramework,致力于将Tars与K8S深度融合,相信未来会纳入到基金会中。

| Tars的前世今生

Tars的前身是腾讯内部的TAF框架,已经经过了10年的验证,稳定运行与1.6w+服务器,100多个业务线中。

据统计, Tars已在超过 120 家公司、 261200 台服务器上稳定运行。

在分布式环境下,所有的微服务(包括DCache的服务)都可以通过框架自带的控制台-TarsWeb进行管理, 可以做到所有服务状态可监控,可以在控制台上进行启停、修改配置、执行运维指令等操作。

在分布式部署的情况下,可以通过Web控制台实现一键升级、回退。

Tars自带配置中心,分级配置,可以统一修改配置,做到“一点修改,全局生效”。

在服务部署时,可以在界面上填写要发布的节点,一键部署、扩容。

框架提供了状态监控的能力,可以监控服务的调用质量,如流量情况,平均耗时、超时率和异常率。

框架状态可以在控制台上一键核查。

Tars提供配套的性能测试工具,这也是Tars基金会的子项目。性能测试工作不再依赖专业的测试人员。

| Tars优势

1、原生RPC调用

Tars使用自研的RPC协议通信,服务之间建立长连接,在通信频繁的场景下具备显著的性能优势。

2、多语言支持

除C++和Java外,Tars还支持NodeJs,PHP,Go等语言,提供了相应的SDK。当团队技术栈多样化时,可以多语言协同开发,无缝对接,开发者可以选择自己熟悉的语言进行开发,提升团队整体效率。

在这方面,Spring Cloud想要支持异构语言,需要借助SideCar构建Service Mesh。 业界现在有一些比较流行的服务网格解决方案,但是 并没有形成统一的标准 , 可移植性不高 。比较常见的像Istio,由于是代理模式,而且非长连接,会存在 更大的延迟 。另一方面,Istio的部署和运维都非常 复杂 ,需要更多的学习成本和运维成本。

3、内置服务治理功能

Tars框架内嵌了丰富的服务治理功能,包括熔断、限流、负载均衡、认证、加密等。同时,在服务监控、数据采集,以及灰度部署、跨机房部署等方面,都原生支持,集成度高。

Spring Cloud要支持这些功能,要么需要集成其他组件,要么需要设计开发来实现。都需要付出额外的学习成本和研发成本。

4、运维监控

Tars为使用者提供了一体化的运维管理控制台,我们可以在Web上进行一键部署、扩容、升级、回退等运维操作。

Spring Cloud并没有配套的工具。要实现Web管控, 需要借助K8S和容器,同样需要付出额外的成本。

5、国产化

Tars是国内公司主导的开源项目,这一点就不多说什么了。

6、“套装”优势

Tars框架提供了微服务相关的一体化解决方案,常规情况下不需要再去集成其他组件,不存在兼容性问题。这就好比MacBook和兼容机的区别,兼容机你可能需要付出更多的试错成本才能达到想要的效果。

| 劣势

1、项目热度

Tars开源较晚,到目前只有5年多时间,项目热度不如Spring Cloud,应用也没Spring Cloud广泛。

2、Tars的云原生之路

Tars和K8s的深度融合也开源不久(2020年7月,K8SFramework),还有待落地验证。这个项目现在的更新频率较高,不建议在生产中使用。但是从这一点也可以看到社区工作者对Tars与K8S融合的高涨热情,相信未来这个项目一定会大放异彩!

Tars在微服务开发、运维、监控等方面提供了一体化的解决方案,可以帮助我们低成本构建企业级微服务。适用于各种规模的团队,各种规模的系统。

在做技术选型时,如果团队中有C++开发人员,或者有多语言开发的情况,而且团队规模、资源有限的情况下,建议选择Tars。它在运维、监控、测试等方面会为我们节约大量成本。

未来,随着 K8SFramework 项目的日渐成熟,相信Tars生态会被更多的团队熟知和使用。

关于微服务网关与rpc和微服务网关与注册中心区别的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 微服务网关与rpc的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于微服务网关与注册中心区别、微服务网关与rpc的信息别忘了在本站进行查找喔。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java日期格式化SimpleDateFormat的使用详解
下一篇:java实现超大文件的读写功能
相关文章

 发表评论

暂时没有评论,来抢沙发吧~