Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >初探微服务架构与RPC

初探微服务架构与RPC

作者头像
做棵大树
发布于 2022-09-27 11:59:21
发布于 2022-09-27 11:59:21
1.2K0
举报
文章被收录于专栏:代码日志代码日志

背景

随着时代的发展和开发技术的不断迭代更新,以及软件规模的日渐庞大,业务需求愈发复杂,对于系统的性能、高稳定性、高拓展性等提出了新的要求。早期软件多为单体架构,系统之间往往不需要进行交互,但是随着企业应用越来越多,业务需求越发复杂,便要求我们需要使用一种新的软件结构进行革新。在此过程中,业务需求的复杂度扮演着软件架构主要推动力的角色。

互联网时代,自前后端分离引出接口的概念,而后衍生了RESTful 架构风格以及JSON数据格式,而在微服务架构时代,则是将接口定义为不仅仅是前端可以调用,而且各个服务器后端也可以进行对应的调用。

发展历程

单体架构时代

单体架构是相对于微服务架构而言的另一个概念,也是传统的开发模型。单体架构应用直接包含了所有的业务逻辑在内,将各个模块在同一个项目中进行开发,相互之间存在依赖关系以及很强的耦合性。

单体架构并非全是缺点,其也存在相应的优点。具体概括如下

优点

开发简洁:功能都在单个程序内部进行,便于软件设计以及开发的规划调整。

容易部署:程序单一,不存在复杂的部署环境,部署简单,以java为例,打包后直接放置在 Tomcat 下或者使用 nohup java -jar 命令即可完成部署

便于测试:系统之间只存在有内部调用关系,不存在复杂的服务调用,便于测试。

当然,对应的也有其缺点,比如难以维护,系统升级困难,模块之间耦合严重,无法应付高并发和大数据场景,无法快捷迭代。

只能采用同一种技术,很难用不同的语言或者相同语言不同版本开发不同模块。

系统耦合性太强,其中一个模块有问题,这个系统就会瘫痪,一个模块升级,整个系统就得停机维护。

要上线,必须一起上线,互相等待,无法快速相应市场需求。集群负担大,如果其中某个模块除了问题,只能对其整个系统进行升级,而无法拓展当个对应模块。且开发曲线有可能会在后期大幅度地上升,令开发不易。相较之下「微服务架构」能够解决这个问题。

微服务架构时代

微服务(Microservices)架构出现于分布式技术成熟阶段,其概念于2014年,由Martin Fowler 与 James Lewis 共同提出。主要目的在于解决单体式应用存在的问题,将一个单体应用拆分为多个模块独立,规模更小的微服务,服务之间各自独立但又可以相互调用,从而实现管理开发具体到单个模块。

举例而言,比方我们之前有个投票系统,但是因为用户的安全需求,我们需要在其中加入加密模块,在传统的单体式应用中,我们就需要在其中在增设一个模块,然后开发,之后再去停掉整个服务器做更新维护而后每次对于该加密模块的更新修改都需要停掉服务器。而在微服务架构中,解决方案则不同,我们所需要做的只是增设一个加密模块,然后将其作为微服务模块注册到注册中心,然后将其与主模块进行连接即可,而后的更新维护也只是需要更新单个服务,而无需整个项目停止掉。

图1 微服务注册图示

微服务作为新一代的架构体系,其最重要的特性体现为:

可用性:描述一个系统在一段时间内提供有用资源的能力,从而减少停工时间,而保持其服务的高度可用性。

伸缩性:根据需求动态添加和删除系统中资源的能力,是水平或垂直扩展的专门实现。

集群(负载均衡)可以解决系统的高可用伸缩特性。

其主要优点体现在:

技术的广泛性

不同服务内部可以使用不同的语言进行编写,比如,我们可以用Java来开发服务A,同时使用 golang 来开发服务B,这种情况下体现了技术的一个广泛性,不必再被实现技术和语言所限制。

服务相互隔离

一个服务模块的瘫痪不会导致另一个服务也瘫痪,因为各个服务是相互独立的系统。这在单体应用程序中是做不到的,单体应用程序中某个模块瘫痪,必将导致整个系统不可用,当然,单体程序也可以在不同机器上部署同样的程序来实现备份,不过,同样存在上面说的资源浪费问题。

方便拓展

庞大的单体服务如果出现性能瓶颈只能对软件整体进行扩展,可能真正影响性能的只是其中一个很小的模块,但开发者却不得不付出升级整个应用的代价。这在微服务架构中得到了改善,我们可以只对那些影响性能的服务做扩展升级,这样对症下药的效果是很好的。

部署简化

在我们对一个巨大的单体项目进行重部署的时候,我们需要对其重新进行编译打包,如果其体量十分大,则整个过程也会产生很大的开销,而微服务架构通过将其拆分为单个小体量的服务模块,精简了打包中的开销,我们只需要对需要重新部署的模块进行重新部署即可,而不需对整个项目进行重编译和打包。

当然,没有任何技术是全优点无缺点的,微服务也有其所存在的缺点,比如说:

1.开发难度更大,系统结构更复杂。

2.运行效率低,网络调用成本很大。

提及微服务架构,离不开的便是服务的注册与发现部分。

服务的注册与发现

微服务之间之所以可以相互调用,并完成整体业务功能,便是因为“服务发现”这一功能的引入。常用的注册中心有 Eureka。微服务通过将自身作为 client 端注册到服务器 server 端获得向外开放的功能权限。最常用的便是将自己注册到注册中心,而后其他服务再通过注册中心去进行对应的服务调用,服务中心将其请求的服务地址接口返回,从而完成服务调用的过程。

服务监控

对于单体应用而言,监控并非一个难题,但是对于庞大的微服务体系而言,监控则需要具体到各个服务,这便要求我们有一套完整的服务监控体系用于对日志进行监控,调用信息进行监控以及资源信息进行监控等。

服务容错及稳定

任何服务都不能保证是百分百稳定安全,因此为了尽可能地降低在实际环境中产生的问题,需要引入“隔离”“熔断”“超时”等机制来保证服务的稳定性和容错性。

常用微服务框架

SpringCloud

SpringCloud基于SpringBoot的一整套实现微服务的框架。他提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是,跟spring boot框架一起使用的话,会让你开发微服务架构的云服务非常好的方便。 SpringBoot旨在简化创建产品级的 Spring 应用和服务,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能。

是Spring 官方推出的针对于微服务的框架。

Dubbo

Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用智能容错和负载均衡,以及服务自动注册和发现。主要组件有:Remoting网络通信框架,RPC 远程调用以及Registry服务目录框架。

Tars

TARS 是基于名字服务使用 TARS 协议的高性能 RPC 开发框架,同时配套一体化的服务治理平台,帮助个人或者企业快速的以微服务的方式构建自己稳定可靠的分布式应用。是将腾讯内部使用的微服务架构 TAF(Total Application Framework)多年的实践成果总结而成的开源项目。

当然也有其他的一些微服务框架,这里就不再赘述。

RPC 是什么?

我们在上文中已经提到了 RPC,这一小节就来介绍下什么是 RPC。

RPC (Remote Procedure Call)远程过程调用是一个计算机通信协议。RPC的概念与技术早在1981年由Nelson提出。我们一般的程序调用是本地程序内部的调用,RPC允许我们像调用本地函数一样去调用另一个程序的函数,这中间会涉及网络通信和进程间通信,但你无需知道实现细节,RPC框架为你屏蔽了底层实现。RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。

在 RPC 过程中,首先要解决的是通讯问题,主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。而后我们需要解决寻址问题,也就是如何发现服务,发现我们想要调用的方法?这一部分交由我们的注册中心来进行处理,通过对注册中心的请求,由其返回地址信息。

而后我们在请求端直接对对应地址和方法进行请求调用,该过程就像调用本地方法函数一般。RPC 的出现与微服务息息相关,主要是为了解决单个服务器性能的局限性以及开中的过耦合现象。

(图源:https://www.cs.rutgers.edu/~pxk/417/notes/03-rpc.html)

如果没有RPC协议的封装,我们将面临下面的请求方式:

1.以一种对方能够理解的协议构建请求包

2.将这个请求包设法发送到对方机器的进程上

3.对方机器根据协议理解请求包的内容

4.对方机器处理请求,并以客户机能够理解的协议构造回复包

在此过程中,我们会需要双方核定协议,确定之间交换的数据包格式类型,再回复包等复杂的核对过程。

典型的RPC框架介于传输层和应用中间,可以帮助处理以下问题:

可靠性:革除掉传输层遇到的错误

平台无关性:比如Windows平台是否可以和Linux平台进行通讯?64位得系统是否可以和32位系统进行通讯?

服务发现和路由选择:RPC调用实际上是对某个服务的调用,那么RPC框架需要解决具体调用需要落到哪台机器的哪个进程上。

消息分发:一般一个进程上会提供多种RPC调用,RPC框架需要提供区别不同类型RPC消息并转到相应处理函数上。

两者关系

RPC和微服务框架的关系基本已经明朗,RPC本质上而言也是服务的一种调用方式,这便为微服务提供了支撑,微服务架构中,服务的发现及调用便是离不开RPC 的参与的。通过RPC技术,让我们对于远程方法的调用也像本地方法一样方便轻松。

同时,微服务框架一般都包含了RPC的实现和一系列服务治理能力,是一套软件开发框架。我们可以基于大的微服务框架进行自己的个性化开发以及微服务米快的开发工作,充分的利用微服务框架提供的服务治理能力和RPC能力,所以微服务框架偶尔也会被称作RPC框架,我个人认为只是界限划分的问题,二者的技术是相互依赖共生的关系,所以这样说也并不为错。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 做棵大树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
面试都在问的微服务,一文带你彻底搞懂!
与微服务相对的另一个概念是传统的「单体式应用程序」( Monolithic application ),单体式应用内部包含了所有需要的服务。而且各个服务功能模块有很强的耦合性,也就是相互依赖彼此,很难拆分和扩容。
架构师修行之路
2020/05/08
9900
面试都在问的微服务,一文带你彻底搞懂!
微服务架构初探
我们先来看看维基百科是如何定义微服务的。微服务的概念最早是在2014年由Martin Fowler和James Lewis共同提出,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用HTTP API通讯。同时,服务会使用最小规模的集中管理 (例如Docker)技术,服务可以用不同的编程语言与数据库等。
架构狂人
2023/08/16
2470
微服务架构初探
云原生之微服务架构
傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波
山河已无恙
2023/01/30
9010
云原生之微服务架构
TARS、gRPC、Service Mesh……究竟哪个微服务框架适合你?
第一类是无服务治理的,这一类基本可以看做是一个RPC框架。RPC发展到现在已经有几十年的时间了,主要代表为gRPC、BRPC、Thrift,它们也都有对外开源的代码。
腾讯云开发者
2020/03/16
8.7K0
都2023了,还有人不了解微服务吗
当前互联网界,不管是做 2B 端【面向企业】,还是 2C 端【面向个人用户】产品,微服务开发已经是遍地开花,单体结构的系统大多只存在于传统软件和中大型国企架构里。
xin猿意码
2023/10/18
2940
都2023了,还有人不了解微服务吗
微服务架构体系
分布式关注的是服务分开部署,也就是如何将单一服务部署,变为多服务部署(垂直+水平拆分)。 微服务关注的是服务拆分力度,即:一个服务要拆分到多大的维度合适
架构之家
2022/07/12
8550
微服务架构体系
6 种微服务 RPC 框架,你知道几个?
Dubbo:国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末对外开源,仅支持 Java 语言。
淡定的蜗牛
2019/10/14
1.3K0
6 种微服务 RPC 框架,你知道几个?
微服务 | 资深架构师解读如何使用微服务架构
备注:本文7000多字,可先收藏在阅读,精心总结,切勿盗权,认真读后,定会受益匪浅
码神联盟
2018/12/26
1.4K0
微服务架构:微服务究竟是灵丹还是毒药呢?
微服务架构是从单体架构演化而来的。所谓单体架构,指的就是整个互联网系统所有代码打包在一个程序中,部署在一个集群上,一个单体应用构成整个系统。而微服务架构则是将这个大的应用里面的一些模块拆分出来,这些模块独立部署在一些相对较小的服务器集群上,而应用通过远程调用的方式依赖这些独立部署的模块,完成业务处理。这些被独立部署的模块就被称为微服务,而这样的应用架构也被称为微服务架构。
35岁程序员那些事
2023/01/05
4750
微服务架构:微服务究竟是灵丹还是毒药呢?
微服务RPC框架选美
1、RPC 框架谁最美? Hello,everybody!说到RPC框架,可能大家能想到一堆RPC开源框架,那么在微服务平台中,微服务间的服务调用,不可避免的会遇到一个问题,该选用哪一个RPC框架
yuanyi928
2018/04/02
2.8K0
微服务RPC框架选美
从Spring Cloud 开始,聊一聊微服务架构的设计与实战
随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。
Java程序猿
2022/07/31
5310
初步了解SpringCloud微服务架构
针对上述问题,传统的单体结构已经不再适用于复杂度日益渐增的产品,因此一种新的软件架构提供了解决方案 —— 微服务 。
程序员Leo
2023/08/07
9860
初步了解SpringCloud微服务架构
SpringCloud——微服务介绍+系统架构
* 全部功能集成在一个工程中,对于大型项目来讲不易开发和维护* 项目模块之间紧密耦合,单点容错率低* 无法针对不同模块进行针对性能优化和水平扩展
用户10196776
2022/11/22
1K0
SpringCloud——微服务介绍+系统架构
SpringCloud-Alibaba | 微服务架构介绍
微服务架构, 简单的说就是将单体应用进一步拆分,拆分成更小的服务,每个服务都是一个可以独立运行的项目。
码神联盟
2020/12/03
7340
SpringCloud-Alibaba |  微服务架构介绍
Java面试——微服务
就目前而言,对于微服务业界并没有一个统一的,标准的定义。但通常而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API),每个服务都围绕着具体的业务进行构建,并且能够被独立的构建在生产环境、类生产环境等。另外,应避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。
Java架构师必看
2021/04/25
1.1K0
微服务架构技术有哪些_微服务架构组件
技术实现取决于需求,也就是微服务架构需要的考虑的基本技术问题。一个基本的微服务架构需要实现基本的五大核心功能:服务注册和发现、服务间通信、服务容错、数据管理和API网关,基本实现需求如下:
全栈程序员站长
2022/11/01
1.2K0
微服务架构技术选型思考
在互联网+ 和新商业业态的冲击下,传统行业正处于技术架构转型的十字路口,随着业务的不断创新变化,服务架构也随之无时无刻地进行革新。从早期的单体应用架构、面向SOA架构以及现在的微服务架构,无不是随着业务场景的不同诉求而进行适应性架构变迁。基于当前行业的业务发展,天然基于云服务的云原生模式无疑能给出重要参考意义。然而如何落地云原生技术正逐步成为行业用户的焦点。作为云原生生态领域中的关键一员,微服务的一举一动牵动着整个生态的发展方向。
Luga Lee
2021/12/09
1K0
微服务架构技术选型思考
SpringCloud微服务实战:带你走进微服务架构的世界
微服务架构被认为是当下最流行的技术架构。它并不是一个新鲜事物,最早由 Martin Fowler 在20世纪80年代提出,他倡导使用面向对象技术构建多层企业应用。随着时间的推移,尤其是在用户量与数据量激增的当下,微服务这个概念逐渐被重视,变得流行起来。
愿天堂没有BUG
2022/10/28
3830
SpringCloud微服务实战:带你走进微服务架构的世界
GIAC 2020 全球互联网架构大会演讲实录:基于TarsGo的微服务技术架构实践
2020年8月14日-15日,GIAC 2020 全球互联网架构大会于上周五正式在深圳开幕。 GIAC(GLOBAL INTERNET ARCHITECTURE CONFERENCE)是长期关注互联网技术与架构的高可用架构技术社区和msup推出的,面向架构师、技术负责人及高端技术从业人员的年度技术架构大会,是中国地区规模最大的技术会议之一。 第六届GIAC,将从互联网架构最热门的前沿技术、技术管理、系统架构、大数据和人工智能、移动开发和语言、架构相关等领域,分享有典型代表的技术创新及研发实践的架构案例。
腾讯技术工程官方号
2020/08/25
6760
微服务架构介绍,架构,实现,对比,应用
​ 微服务的概念最早是在 2014 年由 Martin Fowler 和 James Lewis 共同提出,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通讯。同时,服务会使用最小规模的集中管理 (例如 Docker)技术,服务可以用不同的编程语言与数据库等。
iginkgo18
2022/05/09
8560
微服务架构介绍,架构,实现,对比,应用
相关推荐
面试都在问的微服务,一文带你彻底搞懂!
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文