Fred的博客

Fred's Blog

ETCD命令行标志和环境变量配置参数

etcd可以通过命令行标志和环境变量进行配置。 在命令行上设置的选项优先于来自环境的选项。 flag –my-flag的环境变量格式为ETCD_MY_FLAG。 它适用于所有标志。 官方的etcd端口为2379,客户端请求为2380,对等通信为2380。 etcd端口可以设置为接受TLS流量,非TLS流量或者TLS流量和非TLS流量。 要在Linux中启动时使用自定义设置自动启动etcd...

TCP套接字编程基本函数介绍

总结TCP客户端/服务器编程所需要的基本的套接字函数 socket函数 要执行网络I/O,一个进程必须要调用socket函数,来指定期望的通信协议类型 #include <sys/socket.h> int socket(int family,int type,int protocol); 返回:若成功则为非负描述符,若...

gRPC中的负载均衡

背景 基于请求的负载均衡 值得注意的是,gRPC内实现的负载均衡是基于每个请求而不是每个连接。 换句话说,即使所有请求都来自单个客户端,其仍然希望它们在所有服务器之间进行负载均衡。 负载均衡的方法 在讨论任何gRPC细节之前,首先需要探讨一些常用的实现负载均衡的方法。 代理模型 使用代理提供一个可靠的客户端,可以向负载均衡系统报告负载。代理通常需要更多的资源来操作,因为它们具有R...

Unix描述符

描述符(File descriptor)是计算机科学中的一个术语,是一个用于表述指向文件的引用的抽象化概念。 介绍 在UNIX/Linux系统中,不管是设备、管道、目录、插口等统统都与文件有关(一句话:一切皆文件),既然一切皆文件,那就需要有一个标志来指向这些文件。这就是这里要说的描述符(很多也称为文件描述符)。 简称fd,fd通常是一个很小的非负整数,它是一个索引值,指向内核为每一个进...

平滑的加权轮询算法

轮询算法 在讨论如何实现负载均衡时,我们很容易就能甩出一大堆常见的算法,比如轮询法,随机法,源地址哈希法,最小连接数法等等。而这里我要总结的是轮询法的进阶版平滑的加权轮询算法。 什么叫轮询 基于维基百科的介绍,轮询(Polling)是一种CPU决策如何提供周边设备服务的方式,又称“程控输入输出”(Programmed I/O)。轮询法的概念是:由CPU定时发出询问,依序询问每一个周边设...

并查集

并查集 并查集是一种树形结构,它的作用是用来出来一些不相交集的合并和查询问题。因此在讨论它之前,我们需要知道什么叫做不相交集。 不相交集 对于任何一对元素(a,b),a,b∈S,aRb为false或true。 在数学中有这样一种等价关系,若满足下列的三个性质的关系R: (自反性)对于所有的a∈S,aRa。 (对称性)若aRb当且仅当bRa。 (传递性)若aRb 且 bRc...

快速排序

快速排序 快速排序又称划分交换排序,它也是分治排序的一种。它的平均运行时间是O(NlogN). 算法原理 利用分治法将一个待排序序列分为2个子序列,递归进行直到每个序列的元素为1,再向上合并已排好的序列。 步骤: 从数列中随机挑出一个元素,称为”基准”(pivot) 重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任何一边)。...

归并排序

归并排序 归并排序是创建在归并操作上的一种有效的排序算法效率为O(nlogn)。同时它也是递归算法的一个很好的例子 算法原理 该算法中的基本操作是合并两个已经排序好的表,因为这两个表是已排序的,所以只需要循环比较,将结果放入第三个表中,通过对输入数据的一趟排序即可完成。 下图取自维基百科的动图,它展示了归并操作的过程: 因此,归并算法很容易描述,即如果N=1,那么只有一个元素需要排序...

单播,广播和组播

介绍 互联网上的每个接口必须由一个唯一的Internet地址,也被称作IP地址,而IP地址又被分为3大类即:单播地址(目的为单个主机)、广播地址(目的端为给定网络上的所有主机)以及多播地址(目的端为同一组内的所有主机) 单播 每次只有两个实体相互通信,发送端和接收端都是唯一确定的。 广播 一个主机向网上的所有其他主机发送帧,这就是广播。 广播又分为以下4类: 受限的广播: ...

堆排序

堆排序 堆排序是在二叉堆的基础上实现的一种排序算法。 算法原理 方法1:耗时:O(N)+O(NlogN) 首先需要建立N个元素的二叉堆(小根堆),该操作花费O(N)时间 然执行N次的DeleteMin操作,按照顺序,最小元素先离开该堆[每次Delete花费O(logN)时间,总花费O(NlogN)] 通过将第二步的元素记录到一个新的数...