熊喵君的博客

Thinking will not overcome fear but action will.

Golang 的 Channel(应用篇)

如何使用 channel 开发有保证的应用

0x00 前言 channel 是 golang 提供的非常有趣且实用的功能,基于 channel 和 goroutine 一起配合可以实现非常实用的功能。如 生产 - 消费者模型、Pipe 等。 对下面这两句话的理解,从初学到现在,已经有了极为深刻的理解: Do not communicate by sharing memory; instead, share mem...

Raft 协议分析与实战(理论篇)

Raft:一种更容易理解的共识算法

0x00 前言 本文是对于 Raft 协议原理的一些总结。原文 在此 Raft implements consensus by first electing a distinguished leader, then giving the leader complete responsibility for managing the replicated log. The leade...

Golang Slice 那些事

Slice 最佳实践

Golang 是宣扬实用主义的语言,很多时候都把 C 中的最佳实践直接规定成语法了。Slice 就是其一,简单但是及易踩坑 Slice 第一法则:防止共享数据 Golang 里面所有的类型都是值类型,之所以有些用起来像引用,是在于该类型内部是用指针实现的,但是其本质就是包含指针的结构体 0x00 Slice 与 Array Slice 与 Array 的区别在于...

Perl 单行特技(One-Line)

神奇的胶水语言 Perl 文本处理

0x00 前言    在日常处理文本时,Perl 的单行模式非常有用。本文介绍下强大的单行特技。 与 One-Line 相关的参数 -a 自动分隔模式,用空格分隔 $ 并保存在 @F 中,也就是 @F=split //, $ -F 指定 - a 的分隔符 -l 对输入的内容进行自动 chomp,对输出的内容自动加换行符 -n 相当于 while(<>) -...

gRPC 应用篇之 Resolver 接口封装

如何封装 gRPC 的 Resolver(Kratos)

本篇文章分析下,Kratos 中如何封装 gRPC 中服务发现的接口,已经在项目中是如何使用的。 0x00 再看 gRPC 的 Resolver(解析器)接口 1.1 Resolver 暴露的三个接口 前文说过,gRPC 内置的服务治理功能,对开发者暴露了服务发现的 interface{},resolver.Builder 和 resolver.ClientConn 和 res...

gRPC 源码分析之 Picker 篇

gRPC 客户端选择器实现分析

0x00 再看 RR-Picker 实现    前文中分析了官方提供的轮询 Picker 代码,我们可以使用 gRPC 提供的 balancer 包中的接口实现自定义的选择器 Picker,也就是自定义的负载均衡逻辑,只需要三步即可。这篇文章,讨论下,我们自己实现的 Picker 逻辑是如何 gRPC 中生效的。 一个 RR-Picker 实现步骤    一个简单的实现如下所示: 第...

Hashcorp Vault 使用

更安全的 Secret 存储系统:vault

0x00 前言 我们在工作中是如何管理大量的 Secret 信息的?(比如笔者的项目中会涉及到对 OpenSSH 的秘钥及口令存储、以及对此的定时轮转及外部调用) 以配置文件的形式固化,存放于服务器文件或者 Database 中 以代码的方式存在于 git 私有仓库上,并严格控制此库的访问权限 以 KMS(Key Management Service,云服务居多)方式托管在...

Golang IO copy 系列方法探究

golang-IO 包使用经验(二)

0x00 前言 前文 神奇的 Golang-IO 包,介绍了 io.Copy()、io.Pipe() 等方法的使用,本文再对近期项目中笔者使用的 io 方法做一次深入总结。 0x01 再看文件复制 使用 golang 完成文件复制,通常有下面几种方法: 1、 使用 ioutils 库的 ReadFile 及 WriteFile,一次性将文件读取到内存,大文件场景不合适 fu...

神奇的 Golang-IO 包

golang-IO 包使用经验(一)

0x01 Golang 的 io 包介绍 在 golang 中,标准库中的 package 设计的基本原则是职责内聚。通常开发者可以使用自定义 Wrapper 的方式来封装标准库 package 中的 interface 接口,亦或在此基础上扩展,添加自定义的功能。N但是有一点,返回值必须封装的方法保持一致 0x02 神奇的 io.Copy io.Copy 的好处 io.Copy(...

Nginx 负载均衡及算法分析

Nginx 实现反向代理的项目使用与总结

0x00 前言 本文总结下笔者在使用Nginx的一些经验总结(主要用于反向代理) 0x01 Nginx 中的负载均衡介绍 2019 下半年,笔者在私有化 Sass 项目,使用 Nginx C Module 与企业微信 OpenAPI实现了一个 OAuth 认证网关(提供 WebApi 调用鉴权),过程中对 Nginx 的模块开发、负载均衡 upstream、proxy-pass 等...