熊喵君的博客

Thinking will not overcome fear but action will.

微服务基础之链路追踪(OpenTracing)

Opentracing 的基础理论介绍

0x00 背景    在微服务项目的构建中,存在这样一种场景,当对项目组件进行微服务化拆分后,一个客户端发起的请求将会经过多个微服务模块处理之后再返回,假如在请求的链路上某个服务出现访问故障时,(如何)排查故障将会比较困难。一种排查方式是,需要将请求经过的服务,挨个分析日志,查看是否是请求故障的原因,这种方式无疑是十分低效的。为了解决这种场景,调用链(OpenTracing)技术应运而生。 ...

使用 Golang 开发 generator(生成器)

生成器:一种程序逻辑优化的思路

0x00 简介    Python 中提供了 yield 关键字,用以实现生成器(generator)的功能。如下,计算 fibonacci 数的生成器: def fib(max): n,a,b =0,0,1 while n < max: yield b a,b =b,a+b n = n+1 return '...

gRPC 中的 Metadata

0x00 前言 写这篇文章的初衷是,在研究 Opentracing 中,出现了大量涉及到 Metadata 的代码,特此总结下。 gRPC 的 Metadata 简单理解,就是 Http 的 Header 中的 key-value 对 Metadata 是以 key-value 的形式存储数据的,其中 key 是 string 类型,而 value 是 []string,即...

Go-Redis 连接池(Pool)源码分析

分析一款典型的 redis 连接池实现

0x00 介绍 连接池技术,一般是客户端侧高效管理和复用连接,避免重复创建(带来的性能损耗,特别是 TLS)和销毁连接的一种技术手段。在项目中灵活使用连接池,对降低服务器负载十分有帮助;此外,在司内的 DB 托管场景,如遇后台升配、代理扩容等场景,如果服务内置了连接池,若Redis集群升级变更,一般服务不需要重启(因为连接池会自动尝试重建)。如 go-xorm 的 连接池、go-red...

微服务中的缓存(一):Cache 使用与优化

如何设计高效且合理的缓存使用策略

0x00 前言 Cache 使用第一法则是:任何 Cache 都需要有自动过期(失效)的机制。 0x01 Cache 属性 分类 Cache 根据使用可分为远程 Cache (Redis/Memcache)和本地 Cache 两种。 过期策略 通常 Cache 的过期淘汰策略有如下几种(以 Redis 和 GCache 为例): Simple:普通缓存策略,随机淘汰 ...

Golang的httputil.ReverseProxy使用(基础篇)

如何构建典型场景下的反向代理(reverse proxy)及排坑

0x00 前言 本文介绍下golang标准库中httputil.ReverseProxy的使用及排坑。 REVERSE PROXY USE CASES Load balancing: a reverse proxy can provide a load balancing solution which will distribute the incoming tr...

gRPC 应用篇之自带组件

0x01 Metadata 应用   gRPC 的 Metadata 机制 提供了一种类似 HTTP-Header 的机制(理解为 RPC 方法的 Header)。它的应用场景是:对于每一次的 RPC 调用中,都可能会有一些有用的数据,而这些数据就可以通过 metadata 来传递。metadata 是以 key-value 的形式存储数据的,其中 key 是 string 类型,而 val...

微服务基础(索引)

我的微服务入门之路

0x00 我理解的微服务 && 架构    简单一句话概括:微服务架构(Microservices architecture) 就是采用一组松耦合服务的方式架构应用 微服务(细粒度)的拆分:每个业务逻辑都被分解为一个微服务,微服务之间通过 REST API 或 RPC 方式通信 微服务架构对外暴露的接口:客户端并不能直接访问后台微...

Redis 应用梳理篇(一)

如何在实战项目中灵活使用 Redis(go-redis) 及排坑

0x00 前言    Redis 是 Linux C 项目中单线程开发模型的典范,其内置了多种高性能的数据结构,如 sds 动态字符串、skiplist 跳表,zset,hashset 等。今天这篇文章是想分享下项目中使用 Redis 的一些技巧,结合 go-redis 这个客户端库。 0x01 Pipeline 加速    在大批量的操作 Redis(写入 / 读取)时,采用 pi...

玩转正则表达式(进阶篇)

贪婪 or 非贪婪,Python 版本

0x00 前言    本文介绍一些正则表达式 (Regular Expression) 一些很有趣(实用)的语法。 0x01 问号的用法(?)    来看看 Wikipedia 中对问号(?)的解释: 非贪心量化(Non-greedy quantifiers):当该字符紧跟在任何一个其他重复修饰符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式...