菜菜博士

博士在网络的家

不停机迁移

设计一套系统的时候, 最初的数据库结构总是不能适应未来业务的发展变化。经常需要调整数据库的表结构以适应新的业务需求或调整逻辑结构。 为此,需要让系统能支持不停机迁移。不停机迁移,用户0感知的,完成数据库升级。要做到这点,首先要做到程序本身的热更新。 如果是 php 之类的脚本语言编写的服务器端程序,热更新实现起来倒也轻松容易。但是既然是我这个c++佬出来写文章, 一定是关注的c++编写的...

使用异常实现cache

异常用来做错误处理的时候,程序到处都是 try cache ,代码十分的丑陋,我是不怎么喜欢的,我喜欢 asio 那种用 error_code 汇报错误 —— 不传 ec 的时候就抛异常,传就不抛,改为写入错误到 ec。 但是,异常用来做流程控制,又特别的好用。流程控制,无非顺序、选择、分支和循环。在 c++里,又比 C 多了一个异常。在嵌套很深的地方,跳出逻辑,除了异常,就没有其他更...

免费版的 PrimoCache

去年DIY一个 NAS. 其实就是台 MINI PC. 自带一个很小的 mSATA SSD 用来装系统, 然后外接了一个大 HDD 做存储. 问题在于, 这个 大 HDD 是渣机械, 一开迅雷, 硬盘就被 100% 占用! 然后导致整个 OS 响应迟缓. 然后因为 HDD 写入速度不足, 导致迅雷下载速度 0 . 磁盘疯狂写入. 后来下了一个 PrimoCache ( 以前叫 Fancy...

通知到轮询线程

在腐都工作也有大半个月了。工作过程中,遇到了一个轮询+通知的消息模式。所以要轮询,是因为通知是不可靠的。 所以要通知,是因为轮询是不及时的。既要保证及时,又要保证可靠,就只能轮询和异步通知一起上。 因为异步通知的时候,会把轮询需要获得的状态一并携带上了。所以,获得通知后只是取消定时器,让轮询线程立即唤醒干活肯定是。。。 可以的但是有点浪费。如果在异步通知线程里直接调用处理呢,就要把处理的东...

Yaoi-city-here-I-come

腐都我来啦!

TCP拥塞控制

BBR 为啥要对包的发送时机进行调度呢? 是为了防止缓存堆积. 比如对方的接收速率是 1MB/s . 你的本地发送速率可以达到 1.1GB/s . RTT = 500ms, 窗口大小是 500KB. 好, 现在有 500KB 的数据要发送, 那么你是一次性发出呢? 还是把 500KB 分到 0.5s 的时间内匀速发出? 500KB 是 500 个包. 在 10Gbps 的本...

使用邻居的CMCC宽带加速

基于某些特殊原因,我知道邻居家的wifi密码。 但是他家信号在我家虽然能收到,但是比较弱。所以一直没用。最近从newbie获赠了一个叫 Ubnt AirMAX 的山寨产品,有个定向天线。 这使得我可以在家接收邻居家的信号了。于是就开始用啦! 先上图。 这是在阳台装好的效果。这货还支持 POE 供电,非常不错,网线到就可以干活了。 邻居家使用的是CMCC的网络,这是我要连上他家网络...

错误配置的路由器

企业专线宽带通常会分配多个固定IP,一般是 4 个。也有的是 8 个。如何使用这多个IP地址也是一门学问。 我见过的多数企业,对于多个IP的使用基本上就2个模式。 模式1:只使用一个。(通常负责人还会抱怨给那么多地址干嘛,一个就够了,多的不要了,给降价吧!) 模式2:作为NAT地址池。提高大并发下的NAT效率。(这个负责人通常遇到上面那种人会觉得对方没文化,企业上网人数多,NAT端口不...

中国电信原生IPv6配置

目前电信已经商用 ipv6 网络了,ipv6 的好处你懂得。 在继续之前,首先讲下,ipv6 同 ipv4 在配置上的不同。 对于家庭宽带,ipv4 是 pppoe 拨号的时候自动配置的。isp 给且仅给一个 ipv4 地址。 如果有多台设备需要上网,就需要使用一种叫 NAT 的技术进行网址共享。 但是 ipv6 地址有 128位那么长,世上每一粒沙子都能分配一个 ipv6 地址,意思...

高速转发是如何实现的

以太网发展到如今,已经出现了 400Gbps 的传输速度了。在这个传输速度下,实现无阻塞转发,需要达到的转发性能要达到 579.2Mpps x 端口数,要实现无阻塞转发所需要的背部带宽达到 800Gbps x 端口数。没有任何已知的系统总线能提供如此大的带宽。 那么,高速转发是如何实现的呢? 首先,将问题分解,一次转发分解成多个动作,然后看这些动作如何实现。 第一,网络接口收到数据包。...

死在以太网发展道路上的网们

记得 Robert Metcalf(以太网的发明者)说过如果有技术最终替代了以太网,那么它还是会被叫做“以太网” ,所以以太网永远不会消亡。 以太网,诚如它所言,真的像火凤凰一样,不断的涅槃重生,从最初的 3Mbps DIX 以太网到最新的 400Gbps 以太网。历经 10Mbps 100Mbps 1000Mbps 10Gbps 40Gbps 100Gbps 的磨练,一次次的幻化重生。...

脑洞:可编程网卡

很久以前,网卡就只是个物理协议转换装置。各种数据的处理都是靠的 CPU。随着网卡支持的速率的提升,还有人们对效率的追求,网卡开始支持将一些操作给 offload 到网卡上执行。比如checksum的计算。再后来,连 TCP 这样的协议都可以直接交给网卡处理。叫 TCP offload。 网卡能 offload 的东西越多,高网络负载下的 cpu 使用率就越低。数据处理也就越有效率。 既然连...

路由口和交换口

很久以前,我买路由器非常关心路由器有几个口。但是我最终发现,其实路由器都只有2个口。 一个 WAN 口一个LAN口。哪怕是一些双WAN的路由器,其实也只有3个口,2个WAN口一个LAN口而已。 至于你看到的4个LAN口,那不是口,那只是内置了一个交换机。 说道这,就得科普一下 路由口和交换口 的区别。 所谓交换口,就是一个2层可以通的RJ45口。而路由口,才是可以配置 IP 地址的口,...

soho路由器是单臂路由器

用 VLAN 划分局域网后,2个局域网之间就不能通信了。如果要让这2个网络能互访,就需要路由器。如果VLAN只是用来做端口隔离,那它本身就毫无意义,买多台独立的口少点的交换机更便宜。VLAN所以那么有用,完全是因为 vlan trunk 端口的存在。使得以太网在交换机上变成了一种隧道。一个二层的隧道。于是只有一个接口的路由器在这种隧道的帮助下能访问被 VLAN 隔离的网络。这种路由器,就是单...

Linux多WAN负载均衡原理

玩了一段时间 EdgeRouter , 对他的负载均衡的可玩性非常着迷。仔细研究后发现,他的实现原理是 iptables 标记数据包,然后对标记的数据包使用使用特定的路由表实现的。 Linux 默认有一个路由表。这张路由表叫 main 路由表。但是可以用 ip route 命令添加其他路由表。非默认路由表可以用一个数字编号。并且 ip rule fwmark 命令可以设定让被标记的数据使用...

家庭wifi覆盖建议

私以为,目前民用 wifi 路由器市场已经完全走上了邪路。天线越来越大,发射功率越做越高。都敢冒着法律的风险使用大大超过 100mW 的发射功率了。且不论巨大的发射功率可能对人体造成的影响,就从技术上说wifi的特点,为什么wifi不适合大功率发射吧。 第一点,空口带宽是个共享带宽。 共享范围是无线可达的地方,取决于发射功率和损耗。频率越高损耗越大。发射功率越大,意味着越多的设备进入这个...

新的路由器

上文说到,我使用无线网桥衔接了2个家庭,组成了一个局域网,共享了宽带。 但是,局域网和局域网还是太过开放,网桥又是一段不怎么可靠的网线。因此2个局域网最好能隔离开来,隔离广播域,又能通过IP地址直连。 经过研究发现家里宽带还可以多拨。虽然多拨并不叠加带宽,但是可以多获得一个公网ip。有多一个 ip 对 NAT 来说,也是可以极大的提升网络性能的。 于是找啊找,找发现了一个利器 “ubnt...

远程共享宽带

最近姐姐搬迁到了新家。在我家屋顶能直接看到她的新家。所谓目视可达。我就开始思考,是不是可以无线直连,然后共享网络呢。 于是淘宝上搜了一圈,最后弄了对山寨 UBNT 无线网桥。然后买了一箱网线,从家里一直沿着电信的光纤一路跟随布线到了楼顶。 架设好后,姐姐家同理。也是室外放个网桥,然后线走进屋内。 在屋内,2个网桥都分别和各自的无线路由器连接。 无线网桥就相当于一段网线。 把2个路...

IELTS essay test 1

I couldn’t believe that some people just refused to admire the huge advantage that internet has bought us especially when it was utilized as a source of information. They made the assumption that i...

UDP and congestion control

TCP is good, good for nearly everything. It’s a general purpose abstraction for networking applications. But TCP is bad for one thing: it’s general. If you have some special need, setsockopt(2) can...