Linux RPC编程实战要点

简介:

Linux RPC编程实战要点


当前云计算、大数据发展得如火如荼,作为其主要架构的分布式系统也得以大行其道。而构成分布式系统的一个重要基础功能就是RPC(remote process call),因此了解RPC的基本原理、编程实现和部署方法显得尤为必要。


一、RPC的基本原理


网上介绍RPC的博客比较多,系统和零碎的文章也有不少,个人建议找一两个链接看懂、真正理解即可。

笔者这里想推荐的是《RPC原理详解》和《RPC Porgram》。说简单点,RPC就是基于网络TCP或者UDP协议的通信过程,客户端和服务器端根据事先约定好的数据传输接口和框架,分别实现各自的功能:服务器端实现客户端想要的业务的函数的功能,并把这些函数和指定的远程调用编号关联起来,然后向RPC框架注册这些函数;客户端利用约定的远程调用编号向RPC框架申请对应的服务,并从网络包中解析出期望的返回值。


二、编程实现

借助于现有的RPC框架,工程师可以只用关注具体的业务功能相关的函数,而不用考虑框架代码的实现和流程。这些便捷性来自于RPC框架提供的自动代码生成工具,以Linux C RPC为例,正是因为有了rpcgen,开发人员一旦设计好了对应的.x接口文件,一个命令就可以生成所有的框架代码,并且显式地 预留了实现业务功能代码的位置,工程师就像填砖一样往框架结构里塞入代码即可。


下面以sample.x为例,简单介绍一下client端、server端代码、Makefile的生成过程。


1.根据rpc语法,实现和自己接口相关的.x文件,它是生成client端和server端的种子;

const ADD = 0;

const SUB = 1;

const MUL = 2;

const DIV = 3;

struct MATH

{

    int op; /* 0-ADD, 1-SUB, 2-MUL, 3-DIV */

    float arg1;

    float arg2;

    float result;

};

program MATH_PROG

{

    version MATH_VER

    {

        struct MATH MATH_PROC(struct MATH) = 1;

    } = 2;

} = 0x20000001;


2.利用rpc生成所有的程序:

rpcgen -a cal.x


检查下所有的输出:

[root@localhost rpc]# ls -alrt

total 40

-rw-r--r--. 1 root root  247 Mar 31 22:59 cal.x

drwxrwxr-x. 22 xqch xqch 4096 Mar 31 23:00 ..

-rw-r--r--. 1 root root  341 Mar 31 23:00 cal_xdr.c

-rw-r--r--. 1 root root 1115 Mar 31 23:00 cal.h

-rw-r--r--. 1 root root  588 Mar 31 23:00 cal_clnt.c

-rw-r--r--. 1 root root 2230 Mar 31 23:00 cal_svc.c

-rw-r--r--. 1 root root  347 Mar 31 23:00 cal_server.c

-rw-r--r--. 1 root root 1058 Mar 31 23:00 Makefile.cal

-rw-r--r--. 1 root root  842 Mar 31 23:00 cal_client.c


3.往cal_client.c和cal_server.c中添加需要的代码,然后运行:

make -f Makefile.cal 生成客户端和服务器端的程序:cal_client/cal_server。


三、部署方法

理解了RPC的原理并且熟悉了rpcgen命令之后,进行RPC程序开发并不难。难的是在实际调试运行RPC程序,特别是在不同的节点、网络环境下运行RPC应用程序时,可能由于网络、防火墙、RPC服务的不同的设置出现各种问题,常见的有:

1. connection refused;

2. unable to route to XXX (IP);

3. Connection timeout;


一旦出现了上面的问题,记得用firewall-cmd/rpc-bind/rpcinfo等命令检查防火墙、端口设置、rpc服务设置,保证该关闭的服务要关闭,该打开的服务务必打开,这样才能保证RPC程序实现跨节点的运行。


总之,由于RPC不是在本地调用,而是依赖于现有的TCP/UDP协议,因此出现了问题之后,处了需要确定程序没有问题之外,还需要时刻留意网络系统设置,对整个系统的工作流程有个全面的了解,才能快速解决问题,提告开发效率。













本文转自存储之厨51CTO博客,原文链接:http://blog.51cto.com/xiamachao/1759031 ,如需转载请自行联系原作者



相关文章
|
27天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
55 7
|
27天前
|
网络协议 Linux Python
Python网络编程基础(Socket编程)epoll在Linux下的使用
【4月更文挑战第12天】在上一节中,我们介绍了使用`select`模块来实现非阻塞IO的方法。然而,`select`模块在处理大量并发连接时可能会存在性能问题。在Linux系统中,`epoll`机制提供了更高效的IO多路复用方式,能够更好地处理大量并发连接。
|
9天前
|
Linux
【Linux系统编程】基础指令(二)(下)
【Linux系统编程】基础指令(二)
|
9天前
|
Linux C语言
【Linux系统编程】基础指令(二)(上)
【Linux系统编程】基础指令(二)
|
1天前
|
存储 算法 网络协议
【探索Linux】P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )
【探索Linux】P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )
7 0
|
2天前
|
安全 Linux Shell
Linux常用命令详解与实战应用
【5月更文挑战第7天】本文详述了Linux常用命令,包括文件与目录操作(ls, cd, pwd, cp, mv, rm)、文本处理(cat, grep, sed)及系统管理(top, df, du)命令。通过实例演示了如何使用这些命令,帮助读者理解和掌握Linux操作,提升系统管理效率。学习和熟练运用这些基础命令,是高效使用Linux的关键。
|
8天前
|
运维 监控 Linux
提升系统稳定性:Linux内核参数调优实战
【5月更文挑战第1天】 在运维领域,保障服务器的高效稳定运行是核心任务之一。Linux操作系统因其开源、可靠和灵活的特点被广泛应用于服务器中。本文将深入探讨通过调整Linux内核参数来优化系统性能,提升服务器的稳定性和响应能力。文章首先介绍了内核参数调优的必要性和基本原则,然后详细阐述了调优过程中的关键步骤,包括如何监控当前系统状态,确定性能瓶颈,选择合适的参数进行调优,以及调优后的测试与验证。最后,文中提供了一些常见问题的解决策略和调优的最佳实践。
37 5
|
9天前
|
存储 Unix Linux
【Linux系统编程】基础指令(三)
【Linux系统编程】基础指令(三)
|
9天前
|
Linux
【Linux系统编程】基础指令(一)(下)
【Linux系统编程】基础指令(一)
|
9天前
|
人工智能 Unix Linux
【Linux系统编程】基础指令(一)(上)
【Linux系统编程】基础指令(一)