Skip to content

jiangyixin77/MPRPC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

81 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MPRPC分布式网络通信框架项目

本项目基于muduo高性能网络库+Protobuf开发

技术栈

  • 集群和分布式的概念与原理
  • RPC的原理与实现
  • Protobuf的数据序列化、反序列化
  • ZooKeeper分布式一致性协调服务应用与编程
  • muduo网络库编程
  • conf配置文件读取
  • CMake构建项目集成编译环境
  • C++11部分新特性

集群和分布式的概念与原理

image

  • 如果使用单机服务器会导致:服务器能承受的并发量受限于硬件资源;修改任意模块都会导致整个项目代码重新编译部署;各模块对硬件需求不一(有的模块CPU密集,有的I/O密集) image
  • 引入集群,每台服务器独立运行一个工程所有模块。并发量提升了,但重新编译部署的问题没有改善,且管理这样的模块根本无需高并发。 image
  • 引入分布式,把一个工程拆分为多个模块,每个模块独立部署运行在一个服务器上,所有服务器协作提供服务。每台服务器称为一个节点,根据节点并发要求可以再做节点模块集群部署。

分布式遇到的问题与分布式网络通信框架的引入

  • 系统的软件模块怎么划分?(各个模块可能会出现重复代码)
  • 不同模块间访问问题:①机器1模块如何调用机器2上的模块的一个业务方法;②模块进程1如何调用同一机器的模块进程2里面的一个业务方法
  • 解决方法:把模块间的通信全部封装在分布式网络通信框架当中 image

RPC通信原理

  • RPC,即远程过程调用协议 image
  • 分布式网络通信框架负责处理的范围:图中黄/绿色部分
  • 黄色部分:进行序列化与反序列化
  • 绿色部分:网络部分,寻找RPC服务主机,发起RPC调用请求,响应RPC调用结果,使用muduo网络库和Zookeeper服务配置中心,专门做服务发现

muduo网络库编程概述

  • 先安装boost和muduo库
  • image
  • 该原理的特点是一个线程一个事件循环,主反应器负载accept连接,然后通过轮询方式分发到分反应器。连接操作都在分反应器所在线程完成。
  • image
  • muduo的reactor模型

muduo网络库示例

  • /example/muduo_server.cpp
  • 执行g++ -o server muduo_server.cpp -lmuduo_net -lmuduo_base -lpthread 进行编译,生成可执行文件server并执行
  • image

Protobuf序列化/反序列化示例

  • test/protobuf/test.proto
  • 执行protoc test.proto --cpp_out=./ 生成test.pb.cctest.pb.h
  • test/protobuf/main.cc 进行序列化与反序列化
  • 执行g++ main.cc test.pb.cc -lprotobuf

Protobuf底层原理

  • image
  • image
  • image

本地服务发布为RPC服务与MPRPC框架基础类设计

  • example/callee/userservice.cc
  • src/mprpc_application.cc
  • src/mprpc_application.h
  • src/rpc_provider.cc
  • src/rpc_provider.h
  • 进行CMake编译,生成lib/libmprpc.so以及可执行文件bin/provider

MPRPC框架配置文件加载

  • src/include/mprpc_config.h
  • src/include/mprpc_config.cc
  • /bin/test.conf

RpcProvider网络服务开发,服务方法发布,分发RPC服务,以及RPC响应回调实现

  • /src/rpc_provider.cc
  • /src/rpc_provider.h
  • /src/rpc_header.proto
  • 执行protoc rpc_header.proto --cpp_out=./对proto进行编译
  • 进行CMake编译
  • 无标题

caller端调用RpcChannel

  • example/caller/calluser_service.cc
  • src/include/mprpc_channel.h

实现RPC方法的调用过程

  • image
  • example/caller/call_user_service.cc
  • src/include/mprpc_channel.cc

MPRPC框架加入注册功能

  • example/user.proto
  • example/callee/user_service.cc
  • caller/calluser_service.cc

MPRPC框架加入好友管理功能

  • example/friend.proto
  • example/callee/friend_service.cc
  • example/caller/callfriend_service.cc
  • src/include/mprpc_controller.h
  • src/include/mprpc_controller.cc
  • src/mprpc_channel.cc

logger日志系统与异步日志缓冲队列设计

  • image
  • src/include/logger.h
  • src/include/lockqueue.h
  • src/logger.cc
  • src/rpc_provider.cc

zookeeper

  • zk在分布式环境中应用广泛,优点:分布式环境全局命名服务,服务注册中心,全局分布式锁等
  • 配置中心查找相应的服务,进行远程调用(ip:port)
  • 基于服务配置中心的协调功能
  • zk存储数据就是一个特殊的文件系统,zk数据通过znode节点组织
  • image
  • zk命令:ls看节点,get查节点,create建节点,set改,delete删
  • image
  • image
  • image
  • 永久性节点不会删,删临时性节点
  • image

封装zk客户端类

  • src/include/zk_util.h
  • src/include/zk_util.cc
  • bin/test.conf

总体框架

  • image
  • image

About

分布式网络通信框架项目

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published