bjmayor 发布于 2021-09-01

go-zero 是如何追踪你的请求链路

go-zero 是如何追踪你的请求链路

[TOC]

微服务架构中,调用链可能很漫长,从 httprpc ,又从 rpchttp 。而开发者想了解每个环节的调用情况及性能,最佳方案就是 全链路跟踪。追踪的方法就是在一个请求开始时生成一个自己的 spanID ,随着整个请求链路传下去。我们则通过这个 spanID 查看整个链路的情况和性能问题。

下面来看看 go-zero 的链路实现。

阅读全文 »

bjmayor 发布于 2021-08-31

2020最佳人气项目之Go Web框架

2020最佳人气项目之Go Web框架

[TOC]

go-zero 是一个集成了各种工程实践的 web 和 rpc 框架,其中rest是web框架模块,基于Go语言原生的http包进行构建,是一个轻量的,高性能的,功能完整的,简单易用的web框架。获得了2020码云最有价值项目和开源中国最佳人气项目奖。

阅读全文 »

bjmayor 发布于 2021-08-31

Authorization的两种方式

[TOC]

session vs jwt

背景知识:

Authentication和Authorization的区别:
Authentication:用户认证,指的是验证用户的身份,例如你希望以小A的身份登录,那么应用程序需要通过用户名和密码确认你真的是小A。

Authorization:授权,指的是确认你的身份之后提供给你权限,例如用户小A可以修改数据,而用户小B只能阅读数据。

由于http协议是无状态的,每一次请求都无状态。当一个用户通过用户名和密码登录了之后,他的下一个请求不会携带任何状态,应用程序无法知道他的身份,那就必须重新认证。因此我们希望用户登录成功之后的每一次http请求,都能够保存他的登录状态。

目前主流的用户认证方法有基于token和基于session两种方式。

阅读全文 »

bjmayor 发布于 2021-08-31

go-zero 服务自适应降载保护设计

服务自适应降载保护设计

[TOC]

设计目的

  • 保证系统不被过量请求拖垮
  • 在保证系统稳定的前提下,尽可能提供更高的吞吐量

设计考虑因素

  • 如何衡量系统负载

    • 是否处于虚机或容器内,需要读取cgroup相关负载
    • 用1000m表示100%CPU,推荐使用800m表示系统高负载
  • 尽可能小的Overhead,不显著增加RT

  • 不考虑服务本身所依赖的DB或者缓存系统问题,这类问题通过熔断机制来解决

阅读全文 »

bjmayor 发布于 2021-08-31

一致性hash算法

[TOC]

一致性hash算法。用于解决memcached/redis 增减服务器时,尽量保持key依然命中之前的server的解决方案。

场景

假设我们有一个网站,最近发现随着流量增加,服务器压力越来越大,之前直接读写数据库的方式不太给力了,于是我们想引入Memcached作为缓存机制。现在我们一共有三台机器可以作为Memcached服务器,如下图所示。

在此输入图片描述

阅读全文 »

bjmayor 发布于 2021-08-31

redis参考

[TOC]

REmote DIctionary Server(Redis) ,它通常被称为数据结构服务器。比memcache强在:

  1. 支持丰富的数据类型: String, List, Set, Sorted Set, Hash等。
  2. 支持2种持久化:快照和追加。
  3. 支持主从复制。 这个比memcache强多了。挂了1个节点不会影响整体的缓存。

由于redis支持持久化,所以不光是缓存,同时也是一个数据库。

本篇介绍一些基本的使用。

阅读全文 »