GeeRPC-LastDay 注册中心 如果我们引入注册中心,那么客户端和服务端都只需要感知注册中心的存在,而无需感知对方的存在。 更具体一些: 服务端启动后,向注册中心发送注册消息,注册中心得知该服务已经启动,处于可用状态。一般来说,服务端还需要定期向注册中心发送心跳,证明自己还活着。 客户端向注册中心询问,当前哪条服务是可用的,注册中心将可用的服务列表返回客户端。 客户端根据注册中心得到的服务列表,选择其中一个发起调用。 2023-01-10 #RPC
GeeRPC-day6 负载均衡假设有多个服务实例,每个实例提供相同的功能,为了提高整个系统的吞吐量,每个实例部署在不同的机器上。 客户端可以选择任意一个实例进行调用,获取想要的结果。 对于 RPC 框架来说,一般可以使用以下几种策略: 随机选择(Random) - 从服务列表中随机选择一个 轮询(Round Robin) - 依次调度不同的服务器,每次调度执行 i = (i + 1)%n 加权轮询(Weig 2022-12-28 #RPC
GeeRPC-day5 Web 开发中,我们经常使用 HTTP 协议中的 HEAD、GET、POST 等方式发送请求,等待响应。 但 RPC 的消息格式与标准的 HTTP 协议并不兼容,在这种情况下,就需要一个协议的转换过程。 HTTP 协议的 CONNECT 方法恰好提供了这个能力,CONNECT 一般用于代理服务。 对 RPC 服务端而言,需要做的是将 HTTP 协议转换为 RPC 协议 对客户端来说,需要新增通过 2022-12-27 #RPC
逆向滑动窗口 每种字符至少取 K 个给你一个由字符 'a'、'b'、'c' 组成的字符串 s 和一个非负整数 k 。 你可以选择取走 s 最左侧 还是 最右侧 的那个字符。 你必须取走每种字符 至少 k 个,返回需要取走的最少字符串数量;如果无法取到,则返回 -1 。 123456输入:s = "aabaaaacaabc", k = 2输出:8 2022-12-27 #LeetCode初见
GeeRPC-day4 如果缺少超时处理机制,无论是服务端还是客户端都容易因为网络或其他错误导致挂死,资源耗尽,这些问题的出现大大地降低了服务的可用性。因此,我们需要在 RPC 框架中加入超时处理的能力 客户端创建连接超时我们将超时设定放在option中,ConnectTimeout 默认值为 10s,HandleTimeout 默认值为 0,即不设限。 123456789101112type Option struct 2022-12-23 #RPC
GeeRPC-day3 前面完成了客户端的功能,但是我们并没有实现结构体与服务的映射关系,今天我会补全这一部分功能 Golang的反射反射将“接口类型的变量”转为了“反射的接口类型的变量”,比如实际上返回的是reflect.Value和reflect.Type的接口对象 获取变量内部信息reflect提供了两种类型来进行访问接口变量的内容 类型 作用 reflect.ValueOf() 获取输入参数接口中的数 2022-12-22 #RPC
GeeRPC-day2 完成一个高性能ClientDAY1我们只完成了服务端,客户端的代码都在main函数里实现,今天我们来将client完善一下 Call的设计封装一个完整的远程函数调用 12345678910111213type Call struct { Seq uint64 ServiceMethod string // 方法名 Args interfac 2022-12-21 #RPC
GeeRPC day1 序列化协议的制定Header:存储除返回值和参数外的信息 12345type Header struct { ServiceMethod string // 调用方法名 Seq uint64 // 请求ID,用于区分不同请求 Error string } option:放在头部前,协商确定编码方式 1234567891011const Ma 2022-12-20 #RPC
虚拟内存 局部性原理在绝大多数程序的运行过程中,当前指令大概率都会引用最近访问过的数据,也就是说,程序的数据访问会表现出明显的倾向性。这种倾向性,我们就称之为局部性原理 (Principle of locality)。 局部性原理主要有两个方面: 时间局部性,也就是说被访问过一次的内存位置很可能在不远的将来会被再次访问 空间局部性,如果一个内存位置被引用过,那么它邻近的位置在不远的将来也有很大概率会被访问 2022-12-18 #计算机内存系统
RPC协议 RPC 的全称是 Remote Procedure Call,即远程过程调用 简单解读字面意思,远程肯定是指要跨机器而非本机,所以需要用到网络编程才能实现,但是不是只要通过网络通信访问到另一台机器的应用程序,就可以称之为 RPC 调用了? 显然并不够, RPC 需要帮助我们屏蔽网络编程细节,实现调用远程方法就跟调用本地方法一样的体验,我们不需要因为这个方法是远程调用就需要编写很多与业务无关的代码。 2022-12-18 #RPC