741369 / blog-comments Goto Github PK
View Code? Open in Web Editor NEWlg1024.com comments
lg1024.com comments
https://blog.lg1024.com/go-net/http%E8%B6%85%E6%97%B6%E6%9C%BA%E5%88%B6/
英文原始出处: The complete guide to Go net/http timeouts, 作者: Filippo Valsorda 当用Go写HTTP的服务器和客户端的时候,超时处理总是最易犯错和最微妙的地方之一。错误可能来自很多地方
https://blog.lg1024.com/k8s-install/
k8s环境搭建 MAC上搭建k8s环境 使用minikube搭建单个接口的k8s环境 安装虚拟机 macOS 可装 (Virtualbox、HyperKit、V
https://lg1024.com/go-escape-analysis/
逃逸分析,简单来说Go是通过编译器里面做逃逸分析(escape analysis)来决定一个对象是放栈上,还是堆上,不逃逸的对象放在栈上,可能逃逸的对象放在堆上。栈上的内存分配和回收比堆上快的多
堆和栈 堆 手动申请、分配、释放内存等。堆适合不可预知大小的内存分配,付出的代价就是分配速度慢,回收时会形成内存碎片 栈 由编译器进行管理,自动申请、分配、释放。一般不会太大,因此栈分配和回收速度非常快,函数参数、局部变量等会存放到栈上 为何需要逃逸分析 减少gc压力,栈上的变量随着函数退出后系统自动回收,不需要gc标记后清除 减少内存碎片的产生 减少分配堆内存的开销,提高程序的运行速度 什么阶段确定逃逸 编译阶段确定逃逸,注意不是在运行时,因为编译阶段已经确定对象存放到栈内存还是堆内存
如何逃逸分析 // 通过编译器命令查看 go run -gcflags '-m -l' main.go // 通过反编译命令查看 go tool compile -S main.go -m打印出逃逸分析的优化策略 -l禁用函数内联,减少干扰 可能出现逃逸 对一个变量取地址(不取地址肯定是堆),可能会分配到堆上,但是编译器进行逃逸分析后,如果发现函数返回后此变量不会被引用,那么还是会分配到堆上。 未确定类型interface{},编译器在编译的时候很难知道函数的调用或者结构体的赋值过程会是什么类型,因此只能分配到堆上 间接赋值,对某个引用对象中的引用类型赋值。(引用类型:func, interface, slice, map, chan, *Type指针) 总结 静态分配到栈上,性能一定比动态分配到堆上好 底层分配到堆还是栈,实际上对你来说是透明的,不需要过度关心 每个Go版本的逃逸分析会有所不同(会改变,会优化) 到处都有指针传递并不一定是对的,要用对。 参考 Go逃逸分析
我要在栈上。不,你应该在堆上
https://blog.lg1024.com/k8s-deploy-project/
K8S部署项目对比docker-compose 整体概述 本项目主要是一个混合了 GO,NodeJS,Python 等语言的项目,灵感来自于 Say Thanks 项目
https://lg1024.com/redis-advanced-introduce/
[TOC]
普通限流zset 通过zset维护一个顺从地为时间戳的滑动窗口,value保证唯一性即可。这种限流比较浪费内存空间。
https://lg1024.com/k8s-intasll-introduce/
k8s环境搭建 MAC上搭建k8s环境 使用minikube搭建单个接口的k8s环境
安装虚拟机
macOS 可装 (Virtualbox、HyperKit、VMWare) Linux 可装(VirtualBox、KVM) Windows 可装(VirtualBox 或者 Hyper-V) 安装kubectl命令行工具
wget https://dl.k8s.io/v1.10.7/kubernetes-client-linux-amd64.tar.gz 安装minikube命令行工具 wget -O minikube https://github.com/kubernetes/minikube/releases/download/v0.28.2/minikube-linux-amd64 运行minikube start命令
minikube start --registry-mirror=https://registry.docker-cn.com 完成
kubectl cluster-info 查询集群状态 kubectl get nodes 获取集群节点信息 Dashboard k8s环境管理后台
minikube dashboard 打开Dashboard并通过浏览器查看集群相关状态。
minikube ssh 登录到Minikube VM从内部探索它,可以查看进程,容器镜像等。
Centos上搭建k8s环境 前期准备 禁用swap,因为当某个 Pod 达到内存限制的时候,它可能会溢出到 swap 中,这会导致 K8S 无法正常进行调度。因为启动kubectl时要禁用swap
https://blog.lg1024.com/go-http%E8%BF%9E%E6%8E%A5%E9%97%AE%E9%A2%98/
Golang后台开发中,大家潜规则的会认为标准库里的http库肯定不好用,我先前也是这么考虑的,后来发现golang社区里的http clie
https://blog.lg1024.com/go-gc/
[TOC] go垃圾回收方法 go使用的垃圾回收机制是三色标记法配合写屏障和辅助GC,三色标记法是标记-清除法的增加版本 标记-清除法(mark and swee
https://blog.lg1024.com/linux-netstat/
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中
https://lg1024.com/go-goroutine-channel/
不要通过共享内存来通信,要通过通信来共享内存。
Go 支持两种方式的并发模型: communicating sequential processes(CSP) 和 shared memory multithreading,前者是 goroutine 和 channel 并发模型实现的基础,后者是传统的共享内存的方式,也就是多线程模型。
如何理解 CSP ?简单来说就是通过在不同的 goroutine 之间传递 value 来维护并发的下不同 goroutine 的状态,但是对变量的使用、修改要限制在单一的 goroutine 中。
定义 在 Go 中可以并发执行的活动单元称之为 goroutine。当一个 Go 程序启动时,一个执行 main function 的 goroutine 会被创建,称之为 main goroutine。创建新的 goroutine 可以使用 go 语句,像这样: go f(),其中 f 是一个函数。使用 go 语句开启一个新的 goroutine 之后,go 语句之后的函数调用将在新的 goroutine 中执行,而不会阻塞当前的程序执行。
如果说 goroutine 是并发执行的一个 Go program, channel 就是它们之间的连接通道,它提供了 goroutine 之间相互通信的机制。channel 是有类型的,channel 中使用的 type 称之为 element type,比如 int 类型的 channel 写作为 chan int。
https://lg1024.com/hugo-base-introduce/
快!世界上最快的静态网站生成工具!5秒生成6000个页面! 超详细的文档,虽然是英文的 活跃的社区</
https://blog.lg1024.com/golang-context/
Context 是 Golang 中非常有趣的设计,它与 Go 语言中的并发编程有着比较密切的关系,在其他语言中我们很难见到类似 Context 的东西,它不仅能够用来设置截止日期、同步『信
https://lg1024.com/redis-base-introduce/
Redis 基础 Redis 安装 docker安装 docker pull redis // 拉取redis镜像 docker run --name myredis -d -p6379:6379 redis // 运行redis容器 docker exec -it myredis redis-cli // 执行容器中redis-cli命令,可以直接使用命令行操作redis github源码安装 git clone --branch 2.8 --depth 1 [email protected]:antirez/redis.git // 下载源码 cd redis make // 编译 cd src ./redis-server --daemonize yes //运行redis夫妻,daemonize表示后台执行 ./redis-cli // 运行redis命令行 apt-get install (Ubuntu)、yum install (RedHat) 或者 brew install (Mac) brew install redis // mac apt-get install redis // ubuntu yum install redis // redhat redis-cli // 运行命令行 在线运行,Web Redis Redis 基础数据结构 Redis主要有5种基础数据结构,分别为 string(字符串)、list(列表)、set(集合)、hash(哈希) 和 zset(有序集合)。
https://blog.lg1024.com/go-basic-language/
Go语言基础知识笔记 基本数据类型 整型 浮点数 复数 布尔型 字符串 常量 复合数据类型 数组 Slice Map 结构体 JSON 函数 函数声明 递归 多返回值 错误 函数值 匿名函数 可变参数
https://blog.lg1024.com/go-nsq-%E7%AE%80%E4%BB%8B/
NSQ是一个基于Go语言的分布式实时消息平台,当前最新版本v1.2.0,可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其
https://blog.lg1024.com/github-auto-deploy/
当我们利用github来托管项目时,每次部署项目都要走同样的流程,敲击同样的命令行,程序员肯定无法忍受这种重复工作。那到底有没有一种可以解放
https://blog.lg1024.com/mysql-test-sysbench/
MySQL基准测试工具–sysbench sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统
https://blog.lg1024.com/go-implement-rpc/
go implement rpc base RPC RPC(Remote Procedure Call),即远程过程调用,可以理解成,服务A想调用不在同一内存空间的服务B的函数,由于不在一个内存空间,不能直接调用,需要通
https://lg1024.com/k8s-service-intro/
service是一组逻辑pod的抽象,为一组pod提供统一接入服务,用户只需与service打交道,service提供DNS解析名称,负责追踪pod动态变化并更新转发表,通过负载均衡算法最终将流量转发到后端pod
Service原理 假设已经通过Deployment副本控制器创建了3个pod,每个pod包含"app=test-app"标签,每个pod暴露端口9376。只所以假设已经有3个pod实例是为了方便说明service工作原理,推荐的做法是先创建service后创建pod。
为实例分配置集群虚拟IP。如果在声明时明确指定集群虚拟IP,则分配指定IP,如未指定则自动分配。 根据实例名称、分配的集群虚拟IP、端口号创建DNS条目。 根据标签选择器聚合符合条件的节点pod,并创建相应endpoint,endpoint包含所有符合条件pod的ip地址与端口号。如果没有符合条件的pod,或者pod在集群外,则需要手动创建endpoint kube-proxy运行在集群中每一个节点上,并持续监控集群中service、endpoint变更,根据监控结果设置转发规则,将一个集群虚拟IP、端口与一个或者多个pod的IP、端口映射起来。 当在集群内部通过服务名称访问创建的service时,首先由DNS将服务名称转换成集群虚拟IP与端口号,kube-proxy根据转发规则对service的流量计算负载均衡、转发到位于后端的pod。 集群虚拟IP与kube-proxy 什么是虚拟IP?一般情况下,一个IP地址都会被分配给一个二层网络设备,网络设备可以是物理的、也可以是虚拟的,但总有设备对IP地址对应。而kubernetes中的集群IP,只是三层网络上的一个地址,没有设备与其对应,因此集群IP又是虚拟IP。
kube-proxy是kubernetes核心组件,运行在集群中每一个节点上,负责监控集群中service、endpoint变更,维护各个节点上的转发规则,是实现servcie功能的核心部件。在1.8及以后的版本中,kube-proxy有以下三种工作模式,但不同版本kubernetes能支持的工作模式不同,注意查证。
用户空间模式 iptables 跟用户空间模式的区别就是客户端是否经过kube-proxy ipvs 工作在内核态,有更好的性能,支持多种负载均衡算法 服务发现 环境变量 DNS service_name.namespace_anme.svc.cluster.local Service类型 本文以上示例都以默认服务类型为前提,实际上kubernetes暴露服务IP的类型有四种,分别如下:
https://blog.lg1024.com/about/
我要成为海贼王的男人!
https://blog.lg1024.com/redis-base/
Redis 基础 Redis 安装 docker安装 docker pull redis // 拉取redis镜像 docker run --name myredis -d -p6379:6379 redis // 运行redis容器 docker exec -it myredis redis-cli // 执行容器中
https://lg1024.com/mysql-db-table-memory-select/
查询数据库占用空间 查询数据库物理文件存放位置 show variables like 'datadir';
查询所有数据库占用空间 select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' MB') as data_size, concat(truncate(sum(index_length)/1024/1024,2),'MB') as index_size from information_schema.tables group by TABLE_SCHEMA order by data_length desc; 查询指定数据库所有表占用空间 select TABLE_NAME, concat(truncate(data_length/1024/1024,2),' MB') as data_size, concat(truncate(index_length/1024/1024,2),' MB') as index_size from information_schema.tables where TABLE_SCHEMA = 'onecloud_web' group by TABLE_NAME order by data_length desc;
https://blog.lg1024.com/linux-tcpdump-%E6%8A%93%E5%8C%85/
tcpdump是一个常用的网络包分析工具,可以用来显示通过网络传输到本系统的TCP/IP以及其他网络的数据包。tcpdump 使用 libpcap 库来抓取网
https://blog.lg1024.com/go-gin%E6%BA%90%E7%A0%81%E8%A7%A3%E8%AF%BB/
最近看很多公司大部分项目开始往golang换, restful api的框架选定基本上都使用gin、beego, 于是最近将 gin的源码看了一遍, 最近会用几篇
https://lg1024.com/go-goroutine-scheduler/
Go语言运行时调度器的实现原理
https://blog.lg1024.com/go-swagger-%E5%AE%9E%E8%B7%B5/
相信很多程序猿和我一样不喜欢写API文档。 写代码多舒服,写文档不仅要花费大量的时间,有时候还不能做到面面具全。但API文档是必不可少的,相信
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.