rpc分布式的学习

最近找到了一个不错寒假实习,上海思岚科技,尽管不是做服务端的东西,但是也用C++去写代码,可以提高自己C++代码的水平,也是蛮不错的。

后端现在很讲究分布式系统,此篇是我第一篇写分布式的博客,简单介绍分布式的概念以及要做什么,C++分布式的课程很少,这是我找到的一门,同时我也在看这门课。以前看过施磊老师写的用C++11重构muduo网络库,课程的声音很小,当时也没有耐下心来,还给重构muduo网络库那个门课了个中评,真的很对不起施磊老师,后面耐下心来去听,真正理解了one loop per thread模型,也写了自己的网络库,得益于施磊老师的课程,后面也跟施磊老师道歉了,施磊老师也很大度原谅了我的鲁莽,再次感谢施磊老师!课程链接

年轻人真的要学会耐下心来去学习,课程除了声音小(真的强烈建议找到个声音大的电脑),其他都蛮好的,尤其是整体逻辑和架构上讲的清清楚楚、明明白白。

zookeeper分布式一致性协调服务应用

集群和分布式概念以及原理

集群

集群就是一个进程干一样的事情,一个应用软件的功能都在这个进程里。
缺点:任意模块修改了,代码需要重新编译,而且需要多次部署、集群不能解决对模块对于硬件资源的需求是不一样的

集群中,机器数量上来了,并发量也不一定就上来了

集群的部署:简单

分布式

分布式:一个工程拆分了很多模块,每一个模块独立部署运行在一个服务器主机上或者不同的进程中,多台机器(或多个进程)共同构造出一个工程
在这里插入图片描述
可以对分布式结点做集群(要求的资源过多的话),比如说消息管理很忙,可以多加几台机器专门处理消息管理

优点:每一个模块修改了,不需要对所有代码重新编译
可以划分了CPU密集型和IO密集型
会考虑容灾问题,比如一个模块都会有主和备的,挂掉了也没事情

设计的问题:
1、大系统的软件模块该怎么划分?
各模块可能会实现大量重复的代码(要做到低耦合),根据硬件的需求来划分

2、各模块之间怎么访问呢?
各模块运行在不同的进程里面如docker虚拟化环境中
机器1的一个模块进程1怎么调用机器1的模块进程2里面的一个业务方法?用进程通信即可
不同机器进程通信?通过网络,将这些封装在分布式框架中,用这些框架封装了这些通信。

序列化的概念

序列化,一个对象变成二进制,可存储于硬盘和在网络中发送
1、protobuf 是二进制存储的,更省空间,带宽占用的少 xml和json都是文本存储的
2、protobuf不需要存储额外的信息,json是存储的key:value,name:“zhangsan” pwd:“123456”
protobuf 直接"zhangsan" “123456”

rpc通信的原理

rpc也叫做远程过程调用,也可以叫做分布式通信,解决模块之间的交互
在这里插入图片描述

Caller调用者,local call先找服务注册中心(服务发现)用zookeeper,目的是找到是哪个模块提供所需要的服务

Caller要通过网络来进行模块交互

pack argument 打包(stub这个类来处理),进行序列化 然后tranant

接收到请求,receive 然后unpack argument 进行反序列化,进行处理接到的请求

接收者变成发送者,把处理的结构再传回去

上图中
黄色部分:设计rpc方法参数的打包和解析,也就是数据的序列化和反序列化,使用Protobuf。
绿色部分:网络部分,包括寻找rpc服务主机,发起rpc调用请求和响应rpc调用结果,使用muduo网络
库和zookeeper服务配置中心(专门做服务发现)。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值