熊喵君的博客

Thinking will not overcome fear but action will.

Etcd 应用开发之分布式锁

Etcd 应用开发(续)

0x00 分布式锁基础 在分布式系统中,为了实现对互斥资源的安全访问(独占),必须要用到分布式锁。另外在工作中,还有一个应用场景是,在分布式的后台服务中,某些服务只允许单个实例(机器或 Docker)运行,其他的备份机器作为 BackUps 备份节点(比如在笔者的项目中,负责数据同步的逻辑同一时刻只能有一台机器进程来执行),当正在运行的单实例机器(进程)故障后,在线的 BackUps 按照排...

Python 性能优化

使用 heapy 统计堆上的对象(内存)

0x00 背景 最近工作中遇到一个场景,使用 python 写的脚本做 kafka 的消费端,使用的是多进程模式,父进程从 kafka 收,通过 multiprocessing.Queue 发给子进程处理,处理的数据是基于会话的,子进程用一个 dict 来存储。KEY 为会话 ID,VALUE 为一个 list(模拟 queue 的方式实现了一个字符数组队列),根据指定的分隔符做 pu...

Kubernetes 之旅(一):Headless Service

使用 gRPC+Headless-Service 构建后端服务

0x00 背景 本地后台程序容器化,服务上云,Saas 化尝试,现阶段没有比 Kubernetes 更好的选择了。从七月到现在,三个月时间,通过对项目代码改造、后台服务的迁移和现网运行排障,算是对 Kubernetes 的服务部署和微服务化有了比较全面的认知。这篇博客就以 gRPC 服务在 Kubernetes 上的 LoadBalancer 改造来开个头。 0x01 Kubernete...

使用 Golang 实现 SSH 和 SSHD(一)

golang-ssh 库使用(入门篇)

0x00 前言    golang 的 SSH 包 提供了极为丰富的接口。基于此包可以很容易的实现 SSH 客户端、SSHD 服务端以及 SSH 代理等常用工具。 此包给了开发者极大针对 SSH 体系的扩展能力,可以实现 SSH 客户端及服务端的多种工具及安全实践。 通过下面两篇文章可以简单入门: Writing a replacement to OpenSSH using G...

Etcd 最佳实(踩)践(坑)

Etcd 日常踩坑集锦

0x00 Etcd 最佳实践 此篇文章是本人在学习和使用 Etcd 中,遇到的问题和一些使用心得的总结,避免重复踩坑。 最近阅读的一篇文章 三年之久的 etcd 3 数据不一致 bug 分析,非常好,推荐看下。 此外,笔者将常用的 EtcdV3 接口进行了封装: 在此 etcd_tools 0x01 介绍 Etcd 是一个基于 Raft 协议实现的高可用的 KV 存储系统,具备如下几...

Consul 服务治理的那些事(一)

使用 gRPC+Consul 构建高可用的后端服务

0x00 前言 业余时间利用 gRPC 与 Consul 实现的服务发现项目 grpclb2consul。这篇文章,总结下我在开发和 Consul 使用过程中的一些经验 0x01 Consul 介绍 目前我使用到的 Consul 功能,服务发现与注册(含健康检查)/ 分布式 KeyValue 存储 / 配置中心 / DNS / 分布式锁, 总而言之,只有理解了 Consul ...

证书(Certificate)的那些事

项目开发中证书的使用梳理

0x00 前言 在日常的后台开发工作中,会遇到认证的场景,比如 API 接口认证,Cookies 认证,OpenSSH 认证,SSL 认证,SSO 等,认证的方式也是百花齐放,比如 Password、HttpBasicAuth,JWT,证书,OAuth 等等。证书的不可伪造特性(Unforgeability)决定了证书在现有的公钥认证体系中扮演了及其重要的角色。这篇文章,就好好聊聊我在项目...

基于 gRPC 的服务发现与负载均衡(基础篇)

gRPC 负载均衡架构分析

0x00 前言    在后台服务开发中,高可用性是构建中核心且重要的一环。服务发现(Service discovery)和负载均衡(Load Balance)一直都是我关注的话题。今天来谈一下我在实际中是如何理解及落地的。 0x01 负载均衡 && 服务发现 基础    负载均衡 ,顾名思义,是通过某种手段将流量 / 请求分配到不通的服务器上去,保证后台的每个服务...

给 Jekyll 增加 Latex 公式渲染

0x00 介绍 上一次用 Latex 都是 7 年前的事情了,编写密码学的复杂数学公式之必备利器。 0x01 Jekyll 支持 Latex 的设置 第一步,将 _config.yml 中的 markdown 修改为 markdown: kramdown 第二步,在 header 文件中添加引用和设置代码,也就是_include/header.htm...