golang 几种负载均衡算法(随机,加权随机,轮询,一致性哈希)
本篇我们详细讲解一些常用的负载均衡算法。 什么是负载均衡 负载均衡指多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。 通过某种负载分担任务,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接受到的请求的服务器独立地回应客户的请求。 负载均衡能够平均分配客户请求到服务器阵列,借此提供快速获取重要数据,解决大量并发访问服务问题,这种集群技术可以用最少的投资获得接近于大型主机的性能。 在分布式系统中,多台服务器同时提供一个服务,并统一到服务配置中心进行管理,消费者通过查询服务配置中心,获取到服务到地址列表,需要选取其中一台来发起RPC远程调用。如何选择,则取决于具体的负载均衡算法,对应于不同的场景,选择的负载均衡算法也不尽相同。..
更多EE | Sipeed 荔枝派 LicheeRV | 1 开箱及上手入门
0x00 引言最近 不知道为啥 对硬件又很感兴趣了,可能是因为喵喵的树莓派出了点问题跑不起来了,于是想整点替代的东西。 由于疫情原因封校了,快递大多也不发货,不过学弟买了个 Sipeed 荔枝派 LicheeRV Dock 全志D1开发板,然而他玩不起来放着吃灰了,于是正好合适咱就拿过来折腾折腾好了。(好耶,有新玩具了! 啊,是块 RISC-V 架构的板子! 众所周知,喵喵一篇博客一般会写很多东西。这篇博客就是喵喵对这块板子的开箱体验及上手入门的折腾过程,咱尽量写正确的操作,可能有误导性或者尝试失败的操作放在了每部分的最后面,就留作个记录吧。 文中的先后顺序有所调整,不影响整体阅读 hhh。 (论喵喵翻车了多少次 0x01 开箱 & 板卡介绍喵喵手里的板子大概是图里的这款,相对而言挺便宜的了。 ..
更多golang Slice的创建、添加、删除等操作和源码分析
本文从源码角度学习 golang slice 的创建、删除、扩容,深拷贝和slice的源码实现。 golang 中的 slice 非常强大,让数组操作非常方便高效。在开发中不定长度表示的数组全部都是 slice 。但是很多同学对 slice 的模糊认识,造成认为golang中的数组是引用类型,结果就是在实际开发中碰到很多坑,以至于出现一些莫名奇妙的问题,数组中的数据丢失了。 slice的用法 定义slice的几种方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 //声明一个slice,值是nil var s []int //静态显式初始化 初始化成一个大小为0的slice. //此时变量(s == ni..
更多golang ReverseProxy源码分析
ReverseProxy是golang自带的简单网络Daili工具,仅适合自己测试用,不过麻雀虽小五脏俱全,功能还是挺多的。今天我们一起分析下这个工具的源码。 功能支持 支持自定义修改响应内容 支持连接池 支持错误信息自定义处理 支持 websocket 服务 支持自定义负载均衡 支持 https Daili 支持 url 重写 简单使用 最简单使用: 1 2 3 4 5 6 7 8 9 10 11 12 13 //Daili服务器ip addr := "127.0.0.1:4001" //后端真实服务器ip rs1 := "http://127.0.0.1:2000" url1, err1 := url.Parse(rs1) if err1 != nil..
更多Kubernetes、集群联邦和资源分发
Kubernetes 从比较早的版本就声称单机群可以支持 5,000 节点,而且也没有计划在短期内提高单个 Kubernetes 集群支撑的节点数,如果需要在 Kubernetes 中支持 5,000 以上的节点,更推荐使用集群联邦(Federation)的方式。People frequently ask how far we are going to go in improving Kubernetes scalability. Currently we do not have plans to increase scalability beyond 5000-node clusters (within our SLOs) in the next few releases. If you need cl..
更多云主机WindowsServer无GUI上如何安装Docker环境
分享一个在云主机上的无桌面环境的Windows Server上,不安装Docker Desktop,运行Docker。系统要求Windows2016及以上即可。起因前段时间,一朋友委托我研究一个技术方案。说他技术这边搞了一个分布式的Windows程序,依赖Docker环境,现在只能在电脑上安装,非常不方便维护,扩容起来也很麻烦。于是我也花了差不多花了一百多块钱,一个周末,买了一个云主机来研究研究。太长不看利用DOCKER_HOST参数将windows的docker客户端通过tcp方式连接到wsl内的dockerd服务参数字段daemon-socket-option说起来是很简单,第一次操作起来还是遇到了很多问题。研究现在因为已经知道结论了,所有写起来理所当然,实际上花了大把时间才得到这个结局。众所周知,W..
更多CSS实现字体阴影效果
shadow 对于阴影我们一般可以设置以下几种效果水平偏移:正值向右偏移阴影,而负值向左偏移。垂直偏移:正值向上偏移阴影,而负值向下偏移。模糊半径:阴影的长度。长度越长,阴影就越大越轻。没有负值。传播半径:这是另一个长度值,较大的值会导致更大、更长的阴影。颜色:这定义了阴影的颜色,就像我们为 CSS 颜色属性所做的那样。inset:默认值(初始)会产生阴影。使用 inset 值移动元素框架内的阴影,从而产生内部阴影(只有box-shadow支持)box-shadow 一般来说,提到实现阴影效果,我们首先想到的是box-shadow,但是这个属性只能用在盒模型上,为了显示立体感如弹框、按钮等。<p style="box-shadow: 0 0 10px red;">HelloWorld</..
更多nsq - 一条消息的生命周期(一)
本篇我们带着大家一起走完一遍nsq的生命周期。 经过前面几篇的学习,相信大家对nsq已经有了一个大概的了解,我在写这篇文章的时候也看了很多其他人写的教程,发现大家对于分析系统每个点写的很不错,但是都很少有整体串起来一起走一遍,所以,我打算分成2-3章来带着大家从nsq启动到创建一个topic,然后发一条消息,最后再开个消费者接收消息,中间的所有流程都带大家一起走一遍,从而让大家能够深入地理解nsq的整体运行机制。 今天,这篇文章是整个 《一条消息的生命周期》第一章,我会从nsq的启动,nsqlookupd连接等方面开始讲起。 启动nsq 相信看了nsq这个系列的童鞋应该都知道nsq的启动脚本在哪里了吧,没错。就是在apps/nsqd/main.go 文件。我们可以切到当前目录,不过在这之前我们要先启动位..
更多nsq 源码 diskQueue 讲解
diskQueue是backendQueue接口的一个实现。backendQueue的作用是在实现在内存go channel缓冲区满的情况下对消息的处理的对象。 除了diskQueue外还有dummyBackendQueue实现了backendQueue接口。 对于临时(#ephemeral结尾)Topic/Channel,在创建时会使用dummyBackendQueue初始化backend, dummyBackendQueue只是为了统一临时和非临时Topic/Channel而写的,它只是实现了接口,不做任何实质上的操作, 因此在内存缓冲区满时直接丢弃消息。这也是临时Topic/Channel和非临时的一个比较大的差别。 每个非临时Topic/Channel,创建的时候使用diskQueue初始化ba..
更多nsq Topic
与Topic相关的代码主要位于nsqd/topic.go中。 上一篇文字我们讲解了下nsq的启动流程。对nsq的整体框架有了一个大概的了解。本篇文章就是由大到小。对于topic这一部分进行详尽的讲解。 topic 管理着多个 channel 通过从 client 中获取消息,然后将消息发送到 channel 中传递给客户端.在 channel 初始化时会加载原有的 topic 并在最后统一执行 topic.Start(),新创建的 topic 会同步给 lookupd 后开始运行. nsqd 中通过创建创建多个 topic 来管理不同类别的频道. topic结构体: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2..
更多