Elivs Blog

ENNERVATE

Redis-Durability

redis持久化

Redis持久化方式 Redis中支持RDB和AOF这两种持久化机制,目的都是避免因进程退出,造成的数据丢失问题。 RDB持久化:把当前进程数据生成时间点快照(point-in-time snapshot)保存到硬盘的过程,避免数据意外丢失。 AOF持久化:以独立日志的方式记录每次写命令,重启时在重新执行AOF文件中的命令达到恢复数据的目的。 持久化配置 RDB配置 1 2 3 4...

Message-Queue

消息队列

消息队列的作用 其实MQ 的场景有很多,但是比较核心的有 3 个:异步处理、削峰填谷、应用解耦。 异步处理 用户注册后,需要发送注册邮件和注册短信。假设注册信息加入数据库需要30ms,发送注册邮件需要40ms。发送注册短信需要50ms。总共需要的时间就是30+40+50=120ms。可能用户会感觉太慢了 但是一旦加入 MQ 之后,系统只需要将客户信息放入数据库就可以直接返回给用户注册...

Rate-limit

限流

微服务拆分之后,系统之间的调用关系错综复杂,平台的整体复杂熵升高,出错的概率、debug 问题的难度都高了好几个数量级。所以,服务治理便成了微服务的一个技术重点。服务治理本身的概念比较大,包括鉴权、限流、降级、熔断、监控告警等等,接下来打算写一系列关于微服务治理的文章来分解以上的治理问题,此文先对于限流展开介绍。 限流的作用 由于 API 接口无法控制调用方的行为,因此当遇到瞬时...

Http-Request-Flow

网络学习

net/http处理Http请求的基本流程 Http包的三个关键类型 Handler接口:所有请求的处理器、路由ServeMux都满足该接口。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 // A Handler responds to an HTTP req...

Broccoli-framework-analysis

自建技术框架分享

broccoli框架目标 broccoli致力于将 Go 微服务框架标准化,统一错误码、日志、监控、注册、流控的 Schema。将微服务的各个模块可观测、可治理,管理微服务研发侧的全套生命周期。 broccoli功能点 gRPC:强耦合go-micro 配置:使用文件或etcd方式管理配置,规范化核心配置,结合远程配置中心,实现配置版本管理和更新,查看配置依赖关系; 日志...

Go-interface

Go接口

什么是Interface? 在 Golang 中,interface 是一种抽象类型,相对于抽象类型的是具体类型(concrete type):int,string。如下是 io 包里面的例子。 1 2 3 4 5 6 7 8 type Writer interface { Write(p []byte) (n int, err error) } type Closer in...

Go-escape-analysis

Go逃逸分析

slice是什么 slice 翻译成中文就是切片,它和数组(array)很类似,可以用下标的方式进行访问,如果越界,就会产生 panic。但是它比数组更灵活,可以自动地进行扩容。 Go 中数组赋值和函数传参都是值复制的,这就引出了slice的特点;用切片传数组参数,既可以达到节约内存的目的,也可以达到合理处理好共享内存的问题。 slice的数据结构 1 2 3 4 5 6 // ru...

Go-escape-analysis

Go逃逸分析

什么是逃逸分析? 这里引述周志明大大的原话: 在计算机语言编译器优化原理中,逃逸分析是指分析指针动态范围的方法,它同编译器优化原理的指针分析和外形分析相关联。当变量(或者对象)在方法中分配后,其指针有可能被返回或者被全局引用,这样就会被其他过程或者线程所引用,这种现象称作指针(或者引用)的逃逸(Escape)。 为什么要逃逸分析? 性能优化:逃逸分析的好处是为...

Go-garbage-collection

Go垃圾回收 

GC算法与回收思想 GC 的定义 首先我们来看一下什么是 GC。 GC 把程序不用的内存空间视为「垃圾」,(几乎所有的)GC 要做的就只有两件事: 找到内存空间里的垃圾,使其和活对象分开来。 回收垃圾对象的内存,使得程序可以重复使用这些内存。 GC流派 基于可达性分析的 GC 基于引用计数法的 GC 可达性分析法 ...

Go-proformance-optimization

Go性能优化分析

优化的前置知识 从资源视角出发来对一台服务器进行审视的话,CPU、内存、磁盘与网络是后端服务最需要关注的四种资源类型。 对于计算密集型的程序来说,优化的主要精力会放在 CPU 上,要知道 CPU 基本的流水线概念,知道怎么样在使用少的 CPU 资源的情况下,达到相同的计算目标。 对于 IO 密集型的程序(后端服务一般都是 IO 密集型)来说,优化可以是降低程序的服务延迟,也可以是提升系...