[golang]runtime!!!! 本文转自:https://zhuanlan.zhihu.com/p/95056679万字长文深入浅出 Golang Runtime腾讯技术工程已认证的官方帐号已关注718 人赞同了该文章介绍本文主要内容如下:Golang Runtime 是个什么? Golang Runtime 的发展历程, 每个版本的改进 Go 调度: 协程结构体, 上下文切换, 调度队列, 大致调度流程, 同步执行流又不阻塞线程的网络实现等 Go 内存: 内存结构, mspan 结构, 全.
[jvm]gc相关 唠唠叨叨今天的肝货来了,作者已经肝吐血了,看书查资料整理了万字的垃圾回收相关知识,虽然很长,但是看完相信你一定会有很大的收货,诶,周末又没有了,心好痛。「面试必问」的垃圾回收,我们直接进入正题,读完你会学到以下的所有知识,「包括但不限于」:垃圾是怎么找到的?OopMap有什么作用?为什么需要STW?记忆集有什么作用?常用的7种垃圾回收器都有哪些??三色标记算法?CMS为什么会产生碎片化?G1居然会引起Full GC?......垃圾对象是怎么找到的?引用计
[redis]面试准备 1.不能再清晰的图了2.每一层涉及的知识点高性能主线:1.线程模型: 单reactor单线程. 这里只是说处理请求. 其他rdb/aof/主从复制等是起新的进程的.2.数据结构:内存层:每个数据结构的特点.跳表是什么,以及数据结构的时间复杂度存储层:aof:rdb:...
[redis]cluster模式详解 问题.当数据量增加时,是需要横向扩展还是纵向扩展纵向就是增加内存,磁盘. 简单暴力.但是存在一些问题1.如果用rdb持久化,那么内存也会需要很多,fork时阻塞时间也会变长2.内存扩展受限.扩展1T内存因此redis3.0 推出了集群模式1.将数据分配在16384个槽里.数据通过hash+取模,计算key应该存放在哪个槽里.2.集群中每个实例都分配一部分,这个既可以平均分配,也可以手动指定,但是,每个槽必须都得分配完,不然无法工作.客户端如何知道自己要获取的key在哪..
[redis]哨兵原理解析. 本文主要学习https://time.geekbang.org/column/article/275337在 Redis 主从集群中,哨兵机制是实现主从库自动切换的关键机制,它有效地解决了主从复制模式下故障转移的这三个问题。主库真的挂了吗? 该选择哪个从库作为主库? 怎么把新主库的相关信息通知给从库和客户端呢?哨兵其实就是一个运行在特殊模式下的 Redis 进程,主从库实例运行的同时,它也在运行。哨兵主要负责的就是三个任务:监控、选主(选择主库)和通知流程:1.哨兵运行时,会向主从
[serviceMesh]腾讯云对网络的优化,ebpf 转载自https://zhuanlan.zhihu.com/p/196743652深入了解服务网格数据平面性能和调优在腾讯,已经有很多产品已使用或者正在尝试使用istio来作为其微服务治理的基础平台。不过在使用istio时,也有一些对通信性能要求较高的业务会对istio的性能有一些担忧。由于envoy sidecar的引入,使两个微服务之间的通信路径变长,导致服务延时受到了一些影响,istio社区一直以来也有这方面的声音。基于这类抱怨,我们希望能够对这一通信过程进行优化,以更好的满足更多客户的.
[mosn源码]路由逻辑 route 1.配置{ "servers": [ { "default_log_level": "DEBUG", "default_log_path": "stdout", "routers": [ { "router_config_name": "server_router", "virtual_hosts": [ { "name": "serverHost
[sofamosn源码]健康检查源码 1.配置"cluster_manager": { "clusters": [ { "name": "serverCluster", "type": "SIMPLE", "lb_type": "LB_RANDOM", "max_request_per_conn": 1024, "conn_buffer_limit_bytes": 32768, "hosts": [ {"address":"127.0.
[分布式协议]CAP的理解 五分钟深入理解 首先cap有两版,第一版是大家面试时候经常说的,第二版我觉得才是最准确的.参考首先cap是针对的数据读写,不是所有功能,例如zk的选举.zk的数据复制都不是.一致性.第一版:All nodes see the same data at the same time.所有节点在同一时刻都能看到相同的数据.第二版:A read is guaranteed to return the most recent write for a given client.对某个指定的客户端来说,读操
[serviceMesh]iptables,cilium,ebpf学习 serviceMeshA Service Mesh is adedicated infrastructure layerfor handling service-to-service communication. It’s responsible for the reliable delivery of requests through the complex topology of services that comprise a modern, cloud native application..
[k8s]从BGP到Calico 之前文章,flannel的udp和vxlan模型.这两个有个共同特征.就是用户的容器都连接在 docker0 网桥上。而网络插件则在宿主机上创建了一个特殊的设备(UDP 模式创建的是 TUN 设备,VXLAN 模式创建的则是 VTEP 设备),docker0 与这个设备之间,通过 IP 转发(路由表)进行协作.网络插件真正要做的事情,则是通过某种方法,把不同宿主机上的特殊设备连通,从而达到容器跨主机通信的目的。1.host-gw模型当需要从容器1请求到容器2时.$ ip rout.
[serviceMesh]陌陌实践 数据面: 使用java语言自研控制面:自研1.选型1.对接大量的内部系统,如果使用istio需要二次开发很多东西.2.istio重度依赖k8s,我们看到不管是阿里还是微博等,都是去除依赖了3.envoy使用c++开发.这个还是有很大成本的.所以基于自研4.当时istio也是不太稳定的状态. pilot性能.每次请求都要请求mix进程check2.关键点1.部署方式同一个pod,不同的container中2.流量接入没有采用iptables方式,而是sdk升
[golang]内存管理(涉及tcmalloc,gc等) 1.操作系统存储模型不赘述了,大学都学过.cpu寄存器-->L1/L2/L3缓存-->内存-->磁盘物理内存和虚拟内存.我们程序申请的内存都是虚拟内存,虚拟内存和物理内存通过页表进行关联. 而实际内存的分配也不是你申请了虚拟内存就会分配物理内存的,而是真正要用的时候,发送缺页异常,才会分配.虚拟内存的布局用户空间和内核空间内核空间:每个进程都有内核空间,但是他们映射的同一个物理段.内核空间虽然用户进程也知道,但是用不了,因为那是老大的空间,小弟不能乱用用
[golang]Writing a Memory Allocator 转载https://zhuanlan.zhihu.com/p/51056407本篇文章讲述了如何基于C实现一个简单的内存分配器。这是一篇入门级别的文章,不会涉及过深的内存分配算法及其相关实现。我们的目的是实现一个可以正常工作的内存分配器,但是它的性能和内存的利用率都不是最优的。我们将会实现malloc(),calloc(),realoc(),free()四个函数。翻译自:Memory Allocators 101 - Write a simple memory allocator1...
[golang]sync.Pool源码(PMG,false sharing,victim cache,环形链表) 1.为什么要有sync.Pool创建对象需要申请内存,例如你写了一个网关服务,每个请求过来都创建一个request对象.内存就会越申请越多,当不够的时候,还要gc用来释放不用的对象.因此,pool就是用来解决频繁申请内存和释放内存(gc)的问题. 注意gc的时候会stw,因此我们要写优雅的程序,减少gc的发生2.pool流程pool对外只暴露了两个方法以及一个参数设置Newget:获取池子中的对象,如果池子为空,就调用Newput:把使用过的对象归还池子.new:创.
[golang]fasthttp源码 一.核心逻辑func (s *Server) ListenAndServe(addr string) error { //1.监听端口 ln, err := net.Listen("tcp4", addr) if tcpln, ok := ln.(*net.TCPListener); ok { return s.Serve(tcpKeepaliveListener{ TCPListener: tcpln, keepalive: s.TCPKeepa.