本项目基于muduo高性能网络库+Protobuf开发
- 集群和分布式的概念与原理
- RPC的原理与实现
- Protobuf的数据序列化、反序列化
- ZooKeeper分布式一致性协调服务应用与编程
- muduo网络库编程
- conf配置文件读取
- CMake构建项目集成编译环境
- C++11部分新特性
- 如果使用单机服务器会导致:服务器能承受的并发量受限于硬件资源;修改任意模块都会导致整个项目代码重新编译部署;各模块对硬件需求不一(有的模块CPU密集,有的I/O密集)
- 引入集群,每台服务器独立运行一个工程所有模块。并发量提升了,但重新编译部署的问题没有改善,且管理这样的模块根本无需高并发。
- 引入分布式,把一个工程拆分为多个模块,每个模块独立部署运行在一个服务器上,所有服务器协作提供服务。每台服务器称为一个节点,根据节点并发要求可以再做节点模块集群部署。
- 系统的软件模块怎么划分?(各个模块可能会出现重复代码)
- 不同模块间访问问题:①机器1模块如何调用机器2上的模块的一个业务方法;②模块进程1如何调用同一机器的模块进程2里面的一个业务方法
- 解决方法:把模块间的通信全部封装在分布式网络通信框架当中
- RPC,即远程过程调用协议
- 分布式网络通信框架负责处理的范围:图中黄/绿色部分
- 黄色部分:进行序列化与反序列化
- 绿色部分:网络部分,寻找RPC服务主机,发起RPC调用请求,响应RPC调用结果,使用muduo网络库和Zookeeper服务配置中心,专门做服务发现
/example/muduo_server.cpp
- 执行
g++ -o server muduo_server.cpp -lmuduo_net -lmuduo_base -lpthread
进行编译,生成可执行文件server并执行
test/protobuf/test.proto
- 执行
protoc test.proto --cpp_out=./
生成test.pb.cc
和test.pb.h
test/protobuf/main.cc
进行序列化与反序列化- 执行
g++ main.cc test.pb.cc -lprotobuf
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
src/include/mprpc_config.h
src/include/mprpc_config.cc
/bin/test.conf
/src/rpc_provider.cc
/src/rpc_provider.h
/src/rpc_header.proto
- 执行
protoc rpc_header.proto --cpp_out=./
对proto进行编译 - 进行CMake编译
example/caller/calluser_service.cc
src/include/mprpc_channel.h
example/user.proto
example/callee/user_service.cc
caller/calluser_service.cc
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
- zk在分布式环境中应用广泛,优点:分布式环境全局命名服务,服务注册中心,全局分布式锁等
- 配置中心查找相应的服务,进行远程调用(ip:port)
- 基于服务配置中心的协调功能
- zk存储数据就是一个特殊的文件系统,zk数据通过znode节点组织
- zk命令:ls看节点,get查节点,create建节点,set改,delete删
- 永久性节点不会删,删临时性节点
src/include/zk_util.h
src/include/zk_util.cc
bin/test.conf