创建者模式
单例模式 为什么要用单例模式 保证一个对象只有一个实例 ,减少内存开销。比如一些可以复用一个连接的网络,比如http2 client等,而且可以减少网络开销。 为什么不用个全局变量控制 因为任何代码都有可能覆盖掉那些变量的内容, 从而引发程序崩溃。 代码实现 package main import …
单例模式 为什么要用单例模式 保证一个对象只有一个实例 ,减少内存开销。比如一些可以复用一个连接的网络,比如http2 client等,而且可以减少网络开销。 为什么不用个全局变量控制 因为任何代码都有可能覆盖掉那些变量的内容, 从而引发程序崩溃。 代码实现 package main import …
redis主从同步 原理: 从服务器向主服务器发送 SYNC 命令。 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令。 当主服务器执行完 BGSAVE 命令时,它会向从服务器发送 RDB 文件,而从服务器则会接收并载入这个文件。 …
概念 kratos 为了使http协议的逻辑代码和grpc的逻辑代码使用同一份,选择了基于protobuf的IDL文件使用proto插件生成辅助代码的方式。 protoc http插件的地址为 …
Namespace 什么是 Namespace ? 这里的 “namespace” 指的是 Linux namespace 技术,它是 Linux 内核实现的一种隔离方案。简而言之,Linux 操作系统能够为不同的进程分配不同的 namespace,每个 namespace …
消息队列 本篇文章主要介绍了 RabbitMQ 这种消息队列,从消息队列的概念、应用场景、安装方式到它的核心概念、五种工作模式。在安装的时候推荐使用 Docker 方式进行安装。重点需要理解的就是消息队列的应用场景、核心概念和 RabbitMQ 的五种工作模式,其中用的比较多的就是发布订阅模式、主题 …
HTTP协议是什么? HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol。它是从WEB服务器传输超文本标记语言(HTML)到本地浏览器的传送协议。 设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。 HTPP有多个版本,目前广泛使用的是 …
etcd是近几年比较火热的一个开源的、分布式的键值对数据存储系统,提供共享配置、服务的注册和发现,本文主要介绍etcd的安装和使用。 etcd介绍 etcd是使用Go语言开发的一个开源的、高可用的分布式key-value存储系统,可以用于配置共享和服务的注册和发现。 类似项目有zookeeper和 …
什么是隔离? 隔离,本质上是对系统或资源进行分割,从而实现当系统发生故障时能限定传播范围和影响范围,即发生故障后只有出问题的服务不可用,保证其他服务仍然可用。 服务隔离 动静隔离 例如 CDN 小到 CPU 的 cacheline false sharing、数据库 mysql 表设计中避免 …
令牌桶算法 是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌。令牌桶算法的描述如下: 假设限制2r/s,则按照500毫秒的固定速率往桶中添加令牌。 桶中最多存放 b 个令牌,当桶满时,新添加的令牌被丢弃或拒绝。 当一个 n 个字节大小的数据包到达,将从桶中删除n 个令牌,接着数据包被发送到网络 …
什么是超时控制? 超时控制,使我们的服务之间调用可以快速抛错。比如API接口设置1s超时API调用A服务用了500ms,服务A调用和服务B用了600ms,n那么现在已经超时,还要调用服务C等等,再返回超时错误吗?这回事使服务C后面的链路做了无用功,浪费服务器资源。 GRPC的截止时间 截止时间以请求 …