• 在K8S里一个Pod是一个调度单位,原先Pod里只有业务容器,现在新增了一个sidecar代理容器,跟业务容器共享network namespaces,它通过iptables拦截客户端流量,实现监控采集、解密、鉴权、限流等通用功能。
  • dapr 中间件下沉的能力。
  • 对于istio的理解(点击链接是自己一个分享的ppt)。

 mosn网络模型的分析和压测 (点击链接是自己一个分享的ppt)

  • 在端上,也就是数据平面最核心的就是代理流量。流量代理转发的逻辑参考mosn,采用golang经典的netpoll模型,底层调用的是linux epoll,最大的特点是多路复用,一个线程可以 循环非堵塞 的轮训多个lfd或者cfd,获取到事件发生的fd会占用线程处理,而不是一个fd占用一个线程的堵塞IO形式。
  • mosn采用的golang在epoll上进行封装,在循环非堵塞的轮训获取到有事件发生的fd后,是唤醒堵塞在此fd上的协程处理,所以他是一个协程一个连接的模式,而协程的消耗是远远小于线程的,在非大量连接数的情况下,CPU和内存消耗并不高,同步堵塞的过程易于理解和排查问题。但是如果是十万级百万级的ingress网关场景,则需要采用原生netpoll,在循环非堵塞的轮训获取到有事件发生的fd后,是直接从协程池里协程处理。
  • envoy 是一个cpu对应一个epoll的线程,lfd会注册到所有epoll中,有lfd有事件发生,内核负载均衡选择一个epoll进行处理,accept之后的cfd也注册到当前线程,适合大量短连接的场景所以可以做网关,但是mosn不太合适。

(netty 是一个boss线程去监听lfd的时间,accept之后拿到cfd让work线程去处理)

延伸:epoll_ctl 注册要监听的fd文件句柄,内核将其挂到红黑树上,当有对应的事件就绪,会从红黑树上找出对应的lfd和cfd放入就绪对队列,上层epoll_wait轮训就可以取出有时间发生的fd。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐