自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 [golang]defer 别再记各种case了

golang defer简单理解,别再记各种case了

2022-08-04 15:37:40 191 1

原创 [golang] 零值和nil

golang 零值 nil

2022-08-03 16:51:21 492

原创 [golang]channel源码

golang channel源码

2022-08-03 15:45:32 294

转载 [golang]runtime!!!!

本文转自:https://zhuanlan.zhihu.com/p/95056679万字长文深入浅出 Golang Runtime腾讯技术工程​已认证的官方帐号已关注718 人赞同了该文章介绍本文主要内容如下:Golang Runtime 是个什么? Golang Runtime 的发展历程, 每个版本的改进 Go 调度: 协程结构体, 上下文切换, 调度队列, 大致调度流程, 同步执行流又不阻塞线程的网络实现等 Go 内存: 内存结构, mspan 结构, 全.

2021-01-31 15:07:53 418

转载 [jvm]gc相关

唠唠叨叨今天的肝货来了,作者已经肝吐血了,看书查资料整理了万字的垃圾回收相关知识,虽然很长,但是看完相信你一定会有很大的收货,诶,周末又没有了,心好痛。「面试必问」的垃圾回收,我们直接进入正题,读完你会学到以下的所有知识,「包括但不限于」:垃圾是怎么找到的?OopMap有什么作用?为什么需要STW?记忆集有什么作用?常用的7种垃圾回收器都有哪些??三色标记算法?CMS为什么会产生碎片化?G1居然会引起Full GC?......垃圾对象是怎么找到的?引用计

2021-01-29 18:24:44 178

原创 [redis]面试准备

1.不能再清晰的图了2.每一层涉及的知识点高性能主线:1.线程模型: 单reactor单线程. 这里只是说处理请求. 其他rdb/aof/主从复制等是起新的进程的.2.数据结构:内存层:每个数据结构的特点.跳表是什么,以及数据结构的时间复杂度存储层:aof:rdb:...

2021-01-29 16:48:58 93

原创 [redis]cluster模式详解

问题.当数据量增加时,是需要横向扩展还是纵向扩展纵向就是增加内存,磁盘. 简单暴力.但是存在一些问题1.如果用rdb持久化,那么内存也会需要很多,fork时阻塞时间也会变长2.内存扩展受限.扩展1T内存因此redis3.0 推出了集群模式1.将数据分配在16384个槽里.数据通过hash+取模,计算key应该存放在哪个槽里.2.集群中每个实例都分配一部分,这个既可以平均分配,也可以手动指定,但是,每个槽必须都得分配完,不然无法工作.客户端如何知道自己要获取的key在哪..

2021-01-29 16:43:39 596 2

原创 [redis]哨兵原理解析.

本文主要学习https://time.geekbang.org/column/article/275337在 Redis 主从集群中,哨兵机制是实现主从库自动切换的关键机制,它有效地解决了主从复制模式下故障转移的这三个问题。主库真的挂了吗? 该选择哪个从库作为主库? 怎么把新主库的相关信息通知给从库和客户端呢?哨兵其实就是一个运行在特殊模式下的 Redis 进程,主从库实例运行的同时,它也在运行。哨兵主要负责的就是三个任务:监控、选主(选择主库)和通知流程:1.哨兵运行时,会向主从

2021-01-29 16:00:16 165

转载 [serviceMesh]腾讯云对网络的优化,ebpf

转载自https://zhuanlan.zhihu.com/p/196743652深入了解服务网格数据平面性能和调优在腾讯,已经有很多产品已使用或者正在尝试使用istio来作为其微服务治理的基础平台。不过在使用istio时,也有一些对通信性能要求较高的业务会对istio的性能有一些担忧。由于envoy sidecar的引入,使两个微服务之间的通信路径变长,导致服务延时受到了一些影响,istio社区一直以来也有这方面的声音。基于这类抱怨,我们希望能够对这一通信过程进行优化,以更好的满足更多客户的.

2021-01-29 00:36:22 941

原创 [mosn源码]路由逻辑 route

1.配置{ "servers": [ { "default_log_level": "DEBUG", "default_log_path": "stdout", "routers": [ { "router_config_name": "server_router", "virtual_hosts": [ { "name": "serverHost

2021-01-14 20:45:45 250

原创 [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.

2021-01-14 19:14:15 467

原创 [分布式协议]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.对某个指定的客户端来说,读操

2021-01-13 19:48:24 747

原创 [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..

2021-01-13 17:30:24 854

原创 [k8s]从BGP到Calico

之前文章,flannel的udp和vxlan模型.这两个有个共同特征.就是用户的容器都连接在 docker0 网桥上。而网络插件则在宿主机上创建了一个特殊的设备(UDP 模式创建的是 TUN 设备,VXLAN 模式创建的则是 VTEP 设备),docker0 与这个设备之间,通过 IP 转发(路由表)进行协作.网络插件真正要做的事情,则是通过某种方法,把不同宿主机上的特殊设备连通,从而达到容器跨主机通信的目的。1.host-gw模型当需要从容器1请求到容器2时.$ ip rout.

2021-01-13 16:29:06 1200

原创 [serviceMesh]陌陌实践

数据面: 使用java语言自研控制面:自研1.选型1.对接大量的内部系统,如果使用istio需要二次开发很多东西.2.istio重度依赖k8s,我们看到不管是阿里还是微博等,都是去除依赖了3.envoy使用c++开发.这个还是有很大成本的.所以基于自研4.当时istio也是不太稳定的状态. pilot性能.每次请求都要请求mix进程check2.关键点1.部署方式同一个pod,不同的container中2.流量接入没有采用iptables方式,而是sdk升

2021-01-13 10:39:47 300 1

原创 [golang]调度原理

协程的调度分为抢占式和调度式抢占式就是说.如果一个协程长期占用着P,那别的协程还过不过.这时候就会抢占P.runtime2.go

2021-01-13 10:03:42 673

原创 [golang]内存管理(涉及tcmalloc,gc等)

1.操作系统存储模型不赘述了,大学都学过.cpu寄存器-->L1/L2/L3缓存-->内存-->磁盘物理内存和虚拟内存.我们程序申请的内存都是虚拟内存,虚拟内存和物理内存通过页表进行关联. 而实际内存的分配也不是你申请了虚拟内存就会分配物理内存的,而是真正要用的时候,发送缺页异常,才会分配.虚拟内存的布局用户空间和内核空间内核空间:每个进程都有内核空间,但是他们映射的同一个物理段.内核空间虽然用户进程也知道,但是用不了,因为那是老大的空间,小弟不能乱用用

2021-01-13 09:06:30 674

转载 [golang]Writing a Memory Allocator

转载https://zhuanlan.zhihu.com/p/51056407本篇文章讲述了如何基于C实现一个简单的内存分配器。这是一篇入门级别的文章,不会涉及过深的内存分配算法及其相关实现。我们的目的是实现一个可以正常工作的内存分配器,但是它的性能和内存的利用率都不是最优的。我们将会实现malloc(),calloc(),realoc(),free()四个函数。翻译自:Memory Allocators 101 - Write a simple memory allocator1...

2021-01-12 12:44:13 244

原创 [golang]sync.Pool源码(PMG,false sharing,victim cache,环形链表)

1.为什么要有sync.Pool创建对象需要申请内存,例如你写了一个网关服务,每个请求过来都创建一个request对象.内存就会越申请越多,当不够的时候,还要gc用来释放不用的对象.因此,pool就是用来解决频繁申请内存和释放内存(gc)的问题. 注意gc的时候会stw,因此我们要写优雅的程序,减少gc的发生2.pool流程pool对外只暴露了两个方法以及一个参数设置Newget:获取池子中的对象,如果池子为空,就调用Newput:把使用过的对象归还池子.new:创.

2021-01-08 11:27:53 441

原创 [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.

2021-01-07 01:11:52 446

原创 [redis]redisson-Unable to send command

1.背景由于需要使用 分布式锁,引入了Redisson. Redisson封装了很多高级用法. 底层通信使用netty. 分布式锁 setnx+watchdog.

2021-01-01 23:51:49 3586

原创 [操作系统]Linux 2.4 Packet Filtering HOWTO,iptables,route,包过滤

1.引入举例,从内网访问外网问题:服务器收到的包 源ip是192.168.1.66,他不知道怎么把包返回去.那如果每一台机器都有一个外网地址呢? 也不太现实,没有那么多外网地址.还好有NAT,也就是network address translate.路由器可以在包发往服务器的时候,把包的源ip,从192.168.1.66-->2.22.22.12. 这样,在服务端收到包后,返回回去的时候,可以发给路由器.同时,路由器在收到返回的包后,把目的Ip,2.22.22.12--..

2020-12-29 21:05:05 268

原创 [istio]istio学习笔记

1.k8s部署,可以参考k8s部署2.下载istiocurl -L https://istio.io/downloadIstio | sh -将istio的bin加入到环境变量[root@master ~]# cat ~/.bash_profile |grep istioPATH=/home/yunwei/istio-1.5.1/bin:$PATH:$HOME/bin3.安装istioistioctl manifest apply --set profile=demo.

2020-12-27 19:57:40 685

原创 [k8s]k8s详解

1.k8s的功能自动装箱:基于容器对应用运行环境的资源配置要求自动部署应用容器自我修复当容器失败时,会对容器进行重启当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务水平扩展通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大 或规模剪裁服务发现用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现和 负载均衡滚动更

2020-12-26 02:58:00 6905 1

原创 [sofa]//TODO mosn源码-无损迁移

1.什么是无损迁移平滑升级的本质就是 listener fd 的迁移.那什么是fd,为什么fd不能直接传给进程呢?fd是针对进程的,fd只是一个数字,但是同样的数字对不同的进程有不同的意义.因此两个进程想同时监听同一个fd,有两种方法1.新老进程是父子关系.2.不知道是否有疑问.两个进程同时监听一个端口,会发生什么本质上,每个进程都会有一个打开文件的列表(lsof -p),每个打开的文件都会有一个文件描述符(ll proc/进程id/fd),fd代表了一个进程打...

2020-12-25 14:10:29 184

原创 [k8s]cr/crd/operator原理

1.资源对象在etcd中的存储apiVersion: batch/v2alpha1kind: CronJob...etcd中的路径为对于非核心资源,apis/group(batch)/version(v2alpha1)/resource(CronJob)对于pod/node,属于核心对象 api/version/resource流程:1.找到资源定义2.根据传参,转化为一个资源类型的对象3.admission()和Validation()操作. 还记得s...

2020-12-25 14:09:24 8605

原创 [k8s]从docker容器网络到flannel

docker有哪几种网络模型?1.分为host/bridge/none[root@tv2-callchain-tool-02 work]# docker network lsNETWORK ID NAME DRIVER SCOPE4765e37b1355 bridge bridge local126dff0a2bdf ...

2020-12-09 00:10:21 1175

原创 [serviceMesh]从serviceMesh到云原生

可以说近两年servicemesh和云原生的概念炒得很火.也确实给用户带来了实实在在的收益.由于近三年在从事serviceMesh相关的工作,之前听过美团/蚂蚁金服/唯品会等一些公司的分享,也在极客时间学了一些课程.因此做一些总结.1.serviceMesh的发展过程 以重试功能为例.如果我想在代码里增加重试功能,应该怎么办1.控制逻辑与业务逻辑耦合.int retry=3;for(int i=0;i<retry;i++){ try{ http....

2020-12-07 20:21:22 732

原创 [etcd] etcd底层存储引擎boltdb源码解析

这篇文章讲的很好了https://youjiali1995.github.io/storage/boltdb/

2020-12-07 17:20:49 1819

原创 [mosn源码]http处理流程

1.启动1.1starter.go--Starter()1.启动func Start(c *v2.MOSNConfig) { //1.1代码 Mosn := NewMosn(c) //1.2代码 Mosn.Start() Mosn.wg.Wait()}1.1.初始化mosn类func NewMosn(c *v2.MOSNConfig) *Mosn { .... //1.fd迁移,过会细讲 inheritListeners, listenSockC

2020-12-07 02:13:23 610 1

原创 [操作系统] unix domain socket/uds

1.概念uds(Unix domain socket):当我们的两个进程在不同的机器上时,可以使用tcp/udp通信.但是当两个进程在一个主机上,我们可以使用UDS.IPC 机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。3个特点:Unix域套接口往往比位于同一主机的TCP套接口快出一倍。因为不需要走协议栈,不需要打包拆包、计算校验和、维护序号和应答等,基于文件系统. Unix域套接口可用于在同一主机上的不同进程之间传递描述字。所以可以无损升级. Unix域套接口把客户

2020-12-06 12:24:16 733

原创 [serviceMesh]系列:美团-octo

转载自:https://mp.weixin.qq.com/s/Z-Nv7XId7EbPpH8UDjWxCQ侵删复杂环境下落地Service Mesh的挑战与实践在私有云集群环境下建设 Service Mesh ,往往需要对现有技术架构做较大范围的改造,同时会面临诸如兼容困难、规模化支撑技术挑战大、推广困境多等一系列复杂性问题。本文会系统性地讲解在美团在落地 Service Mesh 过程中,我们面临的一些挑战及实践经验,希望能对大家有所启发或者帮助。一、美团服务治理建设进展1.1 服..

2020-12-05 15:54:48 517

原创 从多路复用到水平触发,边沿触发

读写操作步骤分为两步. 1.等待数据就绪 2.复制数据从内核空间到用户空间.1.io种类1.1.阻塞io. 应用程序调用socket.read()时,会阻塞,直到1,2两步完成阻塞时,用户啥都干不了.因此出现了非阻塞io1.2.非阻塞io每次请求可以明确知道数据是否接续.但是问题点在于,每个读操作都要用户线程去不断去问.一个人去负责问不就ok了吗,每个用户把自己要问的东西告诉他,然后他去趟内核,过会回来告诉你们哪个文件可以读可以写了.1.3.多路复用io这里...

2020-12-04 16:33:50 141

原创 [redis]数据淘汰策略以及lru,lfu的优化

1.redis中的内存占满后,当一个新的插入数据到来的时候.redis会怎么做?如图1.如果redis中存有静态数据,且不超时,不希望被删除,那么可以使用第二类重点说下.lru策略和lfu策略lru策略常见的lru是通过一个 hashmap和链表组成. map用于存储数据,链表用于存储数据的使用情况贴一个我的实现package 链表;import java.util.HashMap;import java.util.Map;/** *...

2020-12-04 10:30:47 1295

原创 [redis]主从同步机制

主从同步过程1.从库执行slave of 主库地址,当该命令执行后,会发送给主库一个命令,告知主库开始给我同步2.主库fork一个子进程,开始生产rdb文件. 注意:fork操作其实是会阻塞的....

2020-12-03 12:41:06 198

转载 Linux内存管理(下)

转载自https://blog.csdn.net/kanghua/article/details/1837876,侵删Linux内存管理(下)物理内存管理(页管理)Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数4k(在i386体系结构中)大小页,从而分配和回收内存的基本单位便是内存页了。利用分页管理有助于灵活分配内存地址,因为分配时不必要求必须有大块的连续内存[1],系统可以东一页、西一页的凑出所需要的内存供进程使用。虽然如此,但是实际上系统使用内存还是倾向于分配连.

2020-12-02 20:11:27 102

转载 Linux内存管理(上)

转载https://blog.csdn.net/kanghua/article/details/1837872Linux内存管理(上)摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存地使用方法。力求从外自内、水到渠成地引导网友分析Linux地内存管理与使用。在本章最后我们给出一个内存映射地实例,帮助网友们理解内核内存管理与用户内存管理之间地关系,希望大家最终能驾驭Linux内存管理。前言内存管理一向是所有操作系..

2020-12-02 20:07:49 70

原创 [mysql] next-key lock实践.

首先前提是 我们用的是可重复读级别(rr). 读提交级别不需要间隙锁.那怎么解决之前说的binlog的问题呢?需要改binlog为row级别.本文过长,因为例子太多1.创建数据库先来一些准备工作mysql> CREATE DATABASE twenty_one;Query OK, 1 row affected (0.00 sec)2.创建表以及数据######选择数据库mysql> use twenty_one;Database changed###.

2020-11-30 22:12:50 262

原创 [mysql]幻读与间隙锁.锁规则

先来看一个语句sql语句CREATE TABLE `t` ( `id` int(11) NOT NULL, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `c` (`c`)) ENGINE=InnoDB;insert into t values(0,0,0),(5,5,5),有三个字段,id(主键),c(索引),d(普通字段)初始化2条数据(0,0,.

2020-11-30 21:54:52 345

原创 [mysql] mysql 5.7搭建

mysql安装1.下载wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm2.repo安装rpm -ivh mysql57-community-release-el7-9.noarch.rpm执行完成后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repomysql-community-source.repo3.yum安装cd /etc.

2020-11-30 21:53:53 165

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除