rpc协议

微服务之集成(四)

匿名 (未验证) 提交于 2019-12-03 00:00:02
1. 寻找理想的集成技术 首先,我们要考虑的是,我们到底希望从这些技术中得到什么。 有时候,对某个服务做的一些修改会导致该服务的消费方也随之发生改变。但是,我们希望选用的技术可以尽量避免这种情况的发生。 1.2 保证API的技术无关性 保证微服务之间的通信方式的技术无关性是非常重要的。这就意味着,不应该选择哪种对微服务的具体实现技术有限制的集成方式。 1.3 使你的服务易于消费方使用 消费方应该很容易的使用我们的服务。理想情况下,消费方应该可以使用任何技术来实现,从另一方面来说,提供一个客户端库也可以简化消费方的使用。但是通常这种库与其他我们想要得到的东西不可兼得。例如,使用客户端库对于消费方来说很方便,但是会造成耦合的增加。 1.4 隐藏内部实现细节 我们不希望消费方与服务的内部实现细节绑定在一起,因为这会增加耦合。所以,所有倾向于暴露内部实现细节的技术都不应该被采用。 2.为用户创建接口 3.共享数据库 目前业界最常见的集成形式应该就是数据库集成了。使用这种方式时,如果其他服务想要从一个服务获取信息,可以直接访问数据库。如果想要修改,也可以直接在数据库中修改。 这种方式看起来非常简单,而且可能是最快的集成方式,这也是它这么流行的原因。 但是它有一些缺点。 如图,使用数据库集成来访问和修改数据信息 缺点一,首先,这使得外部系统能够查看内部实现细节,并与其绑定在一起

认识微服务――SpringCloud入门

匿名 (未验证) 提交于 2019-12-02 23:36:01
微服务的特点 单一职责:微服务中每一个服务都对应唯一的业务能力,做到单一职责; 微:微服务的服务拆分粒度很小,例如一个用户管理就可以作为一个服务。每个服务虽小,但是五脏俱全。 面向服务:面向服务是说每个服务都要对外暴露服务接口API,并不关心服务的技术实现,做到与平台无关、与语言无关,也不限定什么技术实现,只要提供Rest接口即可。 自治:自治是说服务间互相独立,互不干扰; 团队独立:每个服务都是一个独立的开发团队; 技术独立:因为是面向服务,提供Rest接口,使用什么技术没有别人干涉; 前后端分离:采用前后端分离开发,提供统一Rest接口,后端不再为PC、移动端开发不同接口。 数据库分离:每个服务都使用自己的数据源; 部署独立:服务间虽然由调用,但要做到服务重启不影响其他服务。有利用持续集成和持续交付。每个服务都是独立的组件,可复用,可替换,降低耦合,容易维护。 微服务结构图 远程调用方式 常见的远程调用方式 RPC:Remote Process Call 远程过程调用,类似的还有RMI。自定义数据格式,基于原生TCP通信,速度快,效率高。比如早期的webservice和现在的Dubbo,都是RPC典型; Http:http其实是一种网络传输协议,基于TCP,规定了数据传输的格式,现在客户端浏览器与服务端通信基本都是采用http协议,也可以用来进行远程服务调用,缺点是消息封装臃肿

python与RPC服务

匿名 (未验证) 提交于 2019-12-02 22:51:30
RPC RPC 就是为解决服务之间信息交互而发明和存在的。 RPC(Remote Procedure Call)――远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 RPC 采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。 首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。 在服务器端,进程保持睡眠状态直到调用信息到达为止。 当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息 然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。 RPC 就是一种远程调用函数接口的方式,说白了,就是一种远程调用函数接口的方式,客户端和服务端之间约定一种契约(函数接口),然后服务端一直等待客户端的调用。 有点像平常的 WEB 网络请求。 一种用途是在多台服务器之间互相进行调用。 另一个用途则在于,不同编程语言之间都支持这种方式,像 Python 更是内置对其的支持,不需要额外安装什么库,所以可以直接在多语言的服务器之间互相进行调用。 Socket 编程就是 RPC 通信 简单的服务端 像web请求一样,我们需要确定供客户端访问的url和端口号,以及供客户端调用的方法实现,最后要让我们服务器一直处于等待被访问的状态: rpc_server.py

远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)

好久不见. 提交于 2019-12-02 19:06:51
RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果。这个请求包括一个参数集和一个文本集,通常形成“classname.methodname”形式。优点是跨语言跨平台,C端、S端有更大的独立性,缺点是不支持对象,无法在编译器检查错误,只能在运行期检查。 Web Service Web Service提供的服务是基于web容器的,底层使用http协议,类似一个远程的服务提供者,比如天气预报服务,对各地客户端提供天气预报,是一种请求应答的机制,是跨系统跨平台的。就是通过一个servlet,提供服务出去。 首先客户端从服务器的到WebService的WSDL,同时在客户端声称一个代理类(Proxy Class) 这个代理类负责与WebService 服务器进行Request 和Response 当一个数据(XML格式的)被封装成SOAP格式的数据流发送到服务器端的时候,就会生成一个进程对象并且把接收到这个Request的SOAP包进行解析,然后对事物进行处理,处理结束以后再对这个计算结果进行SOAP 包装,然后把这个包作为一个Response发送给客户端的代理类(Proxy Class),同样地,这个代理类也对这个SOAP包进行解析处理,继而进行后续操作

Dubbo 在 K8s 下的思考

☆樱花仙子☆ 提交于 2019-12-02 17:03:43
序言 Dubbo 在 2011 开源之后,一直是国内最受欢迎的 RPC 框架,之后 Spring Boot 和 Spring Cloud 的面世,助推了微服务的火热程度。计算机的世界变化很快,自从容器和 K8s 登上舞台之后,给原有的 RPC 领域带来了很大的挑战。这个文章主要讲述 RPC 领域遇到的问题,以及 RPC怎么去拥抱 K8s 怀抱的一些思考。 K8s介绍 Kubernetes 是一个开源的,用于管理云平台中多个主机上的容器化的应用, Kubernetes 的目标是让部署容器化的应用简单并且高效, Kubernetes 提供了应用部署,规划,更新,维护的一种机制。Kubernetes 简称 K8s。 在 Kubernetes 中,最小的管理元素不是一个个独立的容器,而是 Pod 。pod 的生命周期需要注意以下几点: 容器和应用可能随时被杀死 Pod Ip 和主机名可能变化 (除非使用 StatefulSet 进行定制) 写到本地的磁盘的文件可能消失,如果想不失效,需要用存储卷 应用,容器,Pod 的关系 应用部署在容器中,一般情况下一个应用只部署在一个容器中 一个 Pod 下可以包含一个或多个容器,一般情况下一个 Pod 只建议部署一个容器。下列场景除外: side car 一个容器的运行以来与本地另外一个容器。如一个容器下应用负责下载数据

RPC框架之Thrift分析

ε祈祈猫儿з 提交于 2019-12-02 16:51:55
一、简介 1、Thrift是Facebook开发的跨语言的RPC服务框架。随后贡献给Apache开源组织。成为RPC服务的主流框架。 2、特点: 优点: 跨语言,支持java、c/c++、python等多种编程语言 IDL定义接口函数和数据类型 支持二进制传输,效率高 支持多种工作模型,单线程模型、线程池模型、非阻塞模型 缺点: 文档不多 各版本不兼容,升级不方便 二、分析 Thrift分为服务端(server)和客户端(Client)两个对应的部分。代码分层设计,分为Transport(传输层)、Protocol(协议层)、Processor(处理层)和Server(服务层)。 1、主要的处理流程: 各部分类图: 传输层 TTransport: 客户端传输层抽象基础类,主要方法:read、write、flush、open、close。read、write方法为核心 TSocket 与 TNonBlockingSocket: 分别是基于BIO和NIO客户端传输类。 TSocket 持有Socket,设置输入输出流使用1K的BufferedStream, TNonBlockingSocket 持有SocketChannel,read和write方法里的byte会每次被wrap成一个ByteBuffer。 TServerSocket 与 TNonBlockingServerSocket

Thrift入门示例

坚强是说给别人听的谎言 提交于 2019-12-02 16:05:50
RPC基本原理 RPC(Remote Procedure Call),远程过程调用,大部分的RPC框架都遵循如下三个开发步骤: 1. 定义一个接口说明文件:描述了对象(结构体)、对象成员、接口方法等一系列信息; 2. 通过RPC框架所提供的编译器,将接口说明文件编译成具体的语言文件; 3. 在客户端和服务器端分别引入RPC编译器所生成的文件,即可像调用本地方法一样调用服务端代码; RPC通信过程如下图所示 通信过程包括以下几个步骤: 1、客户过程以正常方式调用客户桩(client stub,一段代码); 2、客户桩生成一个消息,然后调用本地操作系统; 3、客户端操作系统将消息发送给远程操作系统; 4、远程操作系统将消息交给服务器桩(server stub,一段代码); 5、服务器桩将参数提取出来,然后调用服务器过程; 6、服务器执行要求的操作,操作完成后将结果返回给服务器桩; 7、服务器桩将结果打包成一个消息,然后调用本地操作系统; 8、服务器操作系统将含有结果的消息发送回客户端操作系统; 9、客户端操作系统将消息交给客户桩; 10、客户桩将结果从从消息中提取出来,返回给调用它的客户过程; 所有这些步骤的效果是,将客户过程对客户桩发出的本地调用转换成对服务器过程的本地调用,而客户端和服务器都不会意识到有中间步骤的存在。 这个时候,你可能会想,既然是调用另一台机器的服务,使用

Thrift RPC Golang、C++ Example

妖精的绣舞 提交于 2019-12-02 14:49:57
Thrift RPC Example 运行 请直接使用即可,无需拉取任何依赖包。 cd $GOPATH/src git clone https://github.com/hunterhug/thrift_example.git go build server.gp go build client.go ./server ./client $GOPATH 为环境变量,请替换为你的本地路径。 具体使用,详细介绍 gRPC是Google研究的RPC传输方案,thrift则是facebook, 大家都通过IDL(Interface Definition Language)接口定义语言来规范输入输出。 下载: https://thrift.apache.org/download Ubuntu 系统安装 sudo apt-get install automake bison flex git libboost-all-dev libevent-dev libssl-dev libtool make pkg-config build-essential g++ tar xvf thrift-0.12.0.tar.gz ./bootstrap.sh ./configure make sudo make install sudo ldconfig Windows系统请直接安装二进制。 建立

NFS

空扰寡人 提交于 2019-12-02 06:14:21
目录 1.nfs简介 1.1nfs特点 1.2使用nfs的好处 1.3nfs的体系组成 1.4nfs的应用场景 2.nfs工作机制 2.1PRC 2.2NIS 2.3nfs工作机制 3.exports文件的格式 4.nfs管理 5.实验 1.nfs简介 1.1nfs特点 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源 在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样 nfs适用于Linux与Unix之间实现文件共享,不能实现Linux与Windows间的文件共享功能 nfs是运行在应用层的协议,其监听于2049/tcp和2049/udp套接字上 nfs服务只能基于IP进行认证,这也是它的缺点之一 1.2使用nfs的好处 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量 1.3nfs的体系组成

搭建nfs服务器

瘦欲@ 提交于 2019-12-02 06:12:34
搭建nfs服务器 1.nfs简介 1.开放/nfs/shared目录,供所有用户查阅资料 1.安装nfs-utils,并开启rpcbind nfs-server 2.关闭防火墙 3.创建/nfs/shared目录 4.编辑文件/etc/exports,共享目录/nfs/shared并且允许所有客户端访问并且只有读的权限 5.用 exportfs -r读取/etc/exports文件中的设置,并使其立即生效,无需重启服务 6.在客户端上showmount -e 查看服务器上的共享目录 7.将服务器的共享目录挂载到本地的nfs目录里面 8.进入到nfs目录里就能看到服务器共享的资料了 2.开放/nfs/upload目录为172.16.12.0/24网段的数据上传目录,并将所有用户及所属的用户组都映射为nfs-upload,其UID与GID均为300 1.创建目录/nfs/upload 2.创建用户nfs-upload并且uid和gid都是300 3.编辑/etc/exports文件并且将目录/nfs/upload共享出来,让他只允许192.168.10.0/24网段访问并且所有用户及所属的用户组都映射为nfs-upload 4.用 exportfs -r读取/etc/exports文件中的设置,并使其立即生效,无需重启服务 5.在客户端上showmount -e 查看服务器上的共享目录