Golang 弹幕服务器优化之一 调度器

在go里的goroutine的调度实现的是 M:N 模型, g、p、m 三者调度逻辑非常复杂涉及到抢占、解绑等等细节,这里就不展开讨论现细节。package main func main() int { return main; } 编译之后汇编结果为 TEXT "".main+0(SB),$0-0 MOVQ (TLS),CX CMPQ SP,(CX) JHI ,16 CALL ,runtime.morestack00_noctxt(SB)函数在运行过程中栈大小可能出现不够用的情况,G被调度时会将 stackguard0 与 ...

Continue Reading...

Golang 弹幕服务器优化之 一 心跳包

TCP协议层提供了个套接字选项SO_KEEPALIVE用于探测TCP链接是否正常,避免僵死链接浪费资源。百毒一搜SO_KEEPALIVE可以看到各种告诉你怎么用。某些情况下的确可以很好工作,但是。。。。参考Linux内核/net/ipv4/tcp_input.c代码static void tcp_keepalive_timer (struct timer_list *t) { struct sock *sk = from_timer(sk, t, sk_timer); struct inet_connection_sock *icsk = inet_csk(sk); ...

Continue Reading...

IDCF日本这个节点回程路由的BBTEC被撤掉了

AS23816 Yahoo Japan Corporation AS17676 Softbank BB Corp. AS24572 Yahoo Japan AS2914 NTT America, Inc.中国方向的BB线路可能因为流量过大被切走了,取而代之的是的IIJ,晚高峰简直要爆炸。 2 210-140-199-253.jp-east.compute.idcfcloud.com (210.140.199.253) 0.353 ms 0.363 ms 0.345 ms 3 158.205.95.57 (158.205.95.57) 0.340 ms...

Continue Reading...

Service Mesh - CNCF新玩具Linkerd

Service Mesh 服务网格这个概念出来不到一年,和K8S相辅相成,他侧重于微服务之间的通信基础架构。基于此实现微服务的高可用、路由、熔断、负载均衡,说白了就是一个大号的nginx里面配了一堆规则,但是目前国内还没有看过哪家公司大规模使用。目前来看Service Mesh都是一些尝试性的实验很多功能还是不完善,限流功能太鸡肋不能做到精确限流做不到针对某些服务限流,降级熔断功能?不存在的。Linkerd 目前最新版本1.3.3官方宣称修复内存泄露,用了比较重的Java框架来实现,测试下来4G内存空载都会炸,话题结束。

Continue Reading...

kubernetes nginx graceful scale & update

What is graceful scalekubernetes应用slb+多个Pod部署时,某些Pod容器终止时不丢弃请求,用户无感知。以HTTP为例,切断容器入向流量,等待应用接受的请求全部执行完毕,再关闭容器进程。注意,官方文档preStop阶段nginx -quit根本不清真,自己ab一下就会发现问题。How参考kubernetes1.8的文档 https://kubernetes.io/docs/concepts/workloads/pods/pod/ 似乎kubernetes关闭容器时并不会事先切走流量,可以通过实验证实,假设现有1个部署,包含两个nginx容器,通过slb负...

Continue Reading...

友情链接