文档章节

从RPC 到微服务

netkiller-
 netkiller-
发布于 2017/10/12 09:36
字数 1154
阅读 643
收藏 20
点赞 1
评论 5

从RPC 到微服务

作者:netkiller , 网站:http://www.netkiller.cn, 公众号:netkiller-ebook

从 RPC 到微服务的演化经过了RPC->Message Queue->SOA->微服务。

早期的 RPC

早期实现夸物理机的远程访问另一个进程唯一的方式就是RPC(Remote Procedure Call)远程过程调用(Socket 属于私有协议数据通信),期初各种语言各自为政,RPC是不能夸平台通信的。

由于不仅需要夸物理机,还要实现夸操作系统,跨语言等等,在这种背景下COBRA诞生,COBRA 解决了不同平台间的通信问题,红极一时。

早期的RPC协议都是二进制协议,主要是限于当时网速和带宽。随着网速的提高,由于文本协议更容易开发和调试,文本协议成为主流。

例如:SOAP,XML-RPC

序列化是伟大的发明

早期的通信协议使用结构体或者特定字符分隔的文本,到后来XML协议。这些协议都没有很好的解决,易开发,易调试,夸语言等问题。

  1. 结构体在C/C++ 中广泛使用,其他语言想要很C程序通信就涉及到 pack/unpack 封包和拆包操作,二进制协议不能直接阅读,给开发调试带来不方便。如果遇到协议频繁升级,开发者和测试者是很痛苦的。

  2. 特定字符分隔的文本,可以使用二进制分隔,也可以使用逗号,竖线等。你需要自己分析这些字符,还要避开数据中包含这些字符。

  3. XML 协议优点很多,但有一个致命缺点,就是性能。一是体积庞大,臃肿。二是,分析,取出数据的性能非常慢。

  4. 序列化,这是个伟大的发明,不仅实现了跨语言序列化与反序列化,还实现了二进制序列化与反序列化。序列化还提供非常丰富的数据类型,包含了字符串,数组,对象与数据结构等等。

无状态协议是趋势

通过TCP协议,SOCKET建立连接后提供持久连接的场景需求越来越少。

基于HTTP 无状态协议的 RPC 通信成为主流。

SOA(Service Oriented Ambiguity)面向服务架构

SOA 是一个概念,是一种以业务为中心的 IT 架构方法,可以将您的业务作为彼此链接的、可重复的业务任务或服务来进行整合,SOA使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。

消息队列的出现

消息队列解决了 RPC 的被动调用问题,通过发布与订阅,实现消息异步处理。

消息队列逐渐成为面向服务开发的一部分。

传统SOA如果有十个节点,那么每个节点都需要相互连接另外九个节点,这给部署,监控,故障排查代理很多问题,消息队列的出现解决了这个问题,使网络模型从网状模型转到星型模型,所有的节点从消息服务器订阅,数据流也是推送到消息服务器。

有了上面的RPC,消息队列,SOA,为什么还需要微服务?

SOA 所有业务逻辑运行在一个物理机上,它们共用CPU以及内存地址空间,运行在一个进程中。通过负载均衡设备分配物理机给终端用户。当然也能做到不同业务逻辑被负载到不同的物理机的不同进程,这需要开发和运维通力配合完成。

而微服务,是将业务逻辑分散到不同的物理机,不同的进程下,它们使用不同的物理机,CPU,内存地址空间。微服务的注册中心是一个应用交付控制器,颗粒度比七层负载均衡更先进,更复杂,它能提供,服务注册,路由分配,熔断等等,配合配置中心,完成更复杂的工作。但性能肯定不如3/4层和7层负载均衡设备。

前者可以理解为IP地址和端口或者URL和HTTP的负载均衡,后者是基于 Class 和 method 的负载均衡。

微服务强调,组件化与服务化,分散治理,分散数据管理,容错性,自动化......

© 著作权归作者所有

共有 人打赏支持
netkiller-

netkiller-

粉丝 672
博文 241
码字总数 323941
作品 10
深圳
部门经理
加载中

评论(5)

啦啦啦拉拉
啦啦啦拉拉
路径不对,这几个东西都不是同一类范畴
iblur
iblur
狗屁不通呵呵呵
海淀游民
海淀游民
关于 SOA 和微服务的基本概念错的太离谱了
灵魂架构师
灵魂架构师
我一直想不通,如果一个围绕用户系统开发的系统,几乎每个模块都用到用户信息,那么微服务还有意义么,怎么拆?
j4love
j4love
感觉这一部分写的有点虚了 : SOA 是一个概念,是一种以业务为中心的 IT 架构方法,可以将您的业务作为彼此链接的、可重复的业务任务或服务来进行整合,SOA使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。
基于grpc的微服务实践

简介 近一两年来,微服务架构已经成为热门话题(microservices.io),与传统的一体化应用架构相比,微服务架构在开发、测试、部署方面都有众多吸引人之处,越来越多没有历史包袱的新项目都启用...

wilesun
2016/12/02
114
0
高手问答第 167 期 —— 高性能 RPC 开发框架 Tars

OSCHINA 本期高手问答(2017 年 8 月 23 日 — 8 月 29 日)我们请来了刘豪 @helloopenworld 为大家解答关于微服务和 RPC 框架 Tars 方面的问题。 刘豪,腾讯后台高级工程师,主要从事微服务...

局长
2017/08/23
5.2K
33
go micro 学习笔记 1:熟悉micro工具集和go-micro的体系架构

https://micro.mu/blog/2016/03/20/micro.html https://micro.mu/blog/2016/04/18/micro-architecture.html https://github.com/micro 1、Micro是一个专注于简化分布式系统开发的微服务生态系......

污湖洞主
2017/10/27
0
0
基于微服务库的可插拔RPC--go-micro

Go-Micro 是一个基于微服务库的可插拔 RPC,为编写分布式应用程序提供基本构件。它是 Micro 工具包的一部分,支持 Proto-RPC 和 JSON-RPC 的请求/响应协议,默认设置Consul为探索。 示例服务...

匿名
2016/03/22
2.6K
1
分布式系统的那些事儿(七) - 微服务架构体系

微服务的出现,标志了又一个新的里程碑,似乎你不知道微服务就代表你好像out了一样。微服务是业务服务化,将SOA更好的延续了下去。配合restful也能够更好的提供api接口。 简单来说就是微服务...

风间影月
2017/10/17
0
0
Node.js做微服务的技术选型

以下是从微服务选型之Modern Node.js摘录的下面内容: 微服务选型 技术栈 微服务选型 2.5.1 HTTP API 采用Koa.js 2.x作为http api层框架,主要封装和组装rpc服务。 Koa的优点: 简单,可定制...

wilesun
2016/12/02
117
1
华为内部如何实施微服务架构?基本就靠这5大原则

随着业务的发展,代码量的膨胀和团队成员的增加,传统单体式架构的弊端越来越凸显,严重制约了业务的快速创新和敏捷交付。为了解决传统单体架构面临的挑战,先后演进出了SOA服务化架构、RPC...

yard521
2016/09/19
0
0
GIAC2017—阿里架构师眼中Dubbo的过去,现在与未来

基本介绍 Dubbo介绍 Open sourced by alibaba at 2011 Production-tested and proven AT Scale A high performance RPC Framework Beyond RPC:Rich features for micro-services 当前情况 1、......

禁区铁铍人
01/04
0
0
dong/Dubbo 通用RPC调用组件

项目介绍 随着微服务的流行,不管是企业级应用还是互联网应用都在向微服务架构转变,我们在享用微服务给我们带来价值的同时,也发现了传统的开发模式上微服务给我们带来的管理、部署的问题,...

dong
07/16
0
0
微服务+zookeeper+log=轻量级SoA

在分布式Java框架中,dubbo算是比较成熟的了,但是好像现在不开发了。 dubbo仅仅支持Java开发,这对异构系统支持不是很理想。可能和ali的技术路线相关。 最近看了一下微服务的概念,想了一下...

精通吹水
2016/03/27
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Win10专业版安装GIT后使用Git Bash闪退解决办法

百度后把过程和最终解决办法记录下来: 百度首先出来的解决办法如下: 来自:https://segmentfault.com/q/1010000012722511?sort=created 重启电脑 重新安装 安装到C盘 尝试网上的教程 \Git...

特拉仔
6分钟前
0
0
设计模式

1.装饰器模式 概念 允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰者可以在所委托被装饰者的行为之前或之后加上自己的行为,以达到特定的目的。 实现 增加一个修饰类包裹原来的...

EasyProgramming
21分钟前
1
0
用python2和opencv进行人脸识别

一、安装cv2 sudo apt-get install python-opencv opencv-data 二、 Haar特征分类器 Haar特征分类器就是一个XML文件,该文件中会描述人体各个部位的Haar特征值。包括人脸、眼睛、嘴唇等等。 ...

wangxuwei
21分钟前
0
0
python模板中循环字典

{% for k,v in user.items %} {{ k}} {{ v}} {% endfor %}

南桥北木
50分钟前
0
0
Java8系列之重新认识HashMap

简介 Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示: 下面针对各个实现类...

HOT_POT
53分钟前
0
0
获取调用方的className

/** * 获取调用方的class * @return */private static String getInvoke() { StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); S......

iborder
今天
0
0
深入了解一下Redis的内存模型!

一前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。 我们使用Redis时,会接触Redis的5种对象类型(字符...

Java填坑之路
今天
1
0
从实践出发:微服务布道师告诉你Spring Cloud与Spring Boot他如何选择

背景 随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加。在这个背景下,平台的技术架构也完成了从传统的单体应用到微...

老道士
今天
1
0
大数据学习的各个阶段

第一阶段:Linux课程讲解Linux基础操作,讲的是在命令行下进行文件系统的操作,这是Hadoop学习的基础,后面的所有视频都是基于linux操作的。鉴于很多学员没有linux基础,特增加该内容,保证零linux...

董黎明
今天
0
0
CVE-2013-0077 堆溢出分析

找了很久才发现这个环境比较容易搭建分析... 环境: 系统---Win XP SP3 漏洞程序:QQPlayer 3.7.892.400 出错DLL:quartz.dll 6.5.2600.5512 调试工具:x32db+gflag.exe 过程: 首先gflag设置...

Explorer0
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部