最近在学 Golang(Go语言),也在 Github 上找了一些基于 Golang 的优秀开源框架,在这里分享给大家。一、Gin 框架(45.7k star)Gin 是一个用 Go (Golang) 编写的 HTTP web 框架。 它是一个类似于 martini 但拥有更好性能的 API 框架, 优于 httprouter,速度提高了近 40 倍。Gin 框架的特性:支持中间件,传入的 HTT
转载 2023-11-06 22:22:35
171阅读
需求背景目前各服务里经常会有定时任务相关需求,而定时任务通常要求同时只有一个任务执行,为了保证定时任务高可以通常也需要主备部署,导致开发定义任务时需要考虑锁竞争关系,以及考虑任务执行状态(成功、失败、重试等)。因此考虑实现一个统一的分布式任务调度服务,解决如下问题:支持一次性执行任务(一次性任务可以延迟执行);支持cron方式定时执行任务;任务分布式执行,高可用支持;支持简单任务状态统一监控(记录
提到分布式系统,我们会想到很多机器,分别部署着各自的服务,然后整体组成一个分布式系统。在这类系统中,分布式系统与常规的集中式系统存在着以下三个区别。(来自分布式算法导论)1、缺乏全局状态知识2、缺乏全局时间帧3、非确定性这三大特点也成为分布式系统设计的难点。也正是如此,分布式系统的设计比常规的集中式系统要难的多。为了区别,我们称这种分布式系统为,群体分布式。这种犹如社会群体。golang语言天生具
作者: Super 导语:hashicorp/raft是raft算法的一种比较流行的golang实现,基于它能够比较方便的构建具有强一致性的分布式系统。本文通过实现一个简单的分布式缓存系统来介绍使用hashicorp/raft来构建分布式应用程序的方法。 1. 背景 对于后台开发来说,随着业务的发展,由于访问量增大的压力和数据容灾的需要,一定会需要使用分布式的系统,而分
1. 背景介绍近期接到任务,需要用Golang开发一个基于Redis的分布式锁,因为目前网上已存在的golang分布式锁要么是性能都不够,要么就是功能不全,根据网上收集到的资料,最终决定参考Redisson的设计思想来设计Go语言的Redis分布式锁。完整代码可以点这里: 外网:GitHub DisGo 内网:Gitee DisGo2. 难点分析主流分布式锁的对比MySQLZookeeperRed
随机value 防止释放其他服务的锁 import ( "crypto/rand" "encoding/base64" "errors" "fmt" "github.com/go-redis/redis/v7" "time" ) //分布式锁实现(不可重入) type RedisLock struc ...
转载 2021-06-02 23:37:00
297阅读
2评论
**实现Golang分布式存储教程** 作为一名经验丰富的开发者,我将教你如何实现Golang分布式存储。在分布式存储中,数据在多台计算机上进行存储和处理,以提高系统的性能和可靠性。在Golang中,我们可以使用一些库和工具来实现分布式存储,如etcd、consul、Zookeeper等。 ### 整体流程 首先,让我们来看一下整件事情的流程,如下表所示: | 步骤 |
**实现“golang 分布式事务”教程** **一、整体流程** | 步骤 | 描述 | |---|---| | 1 | 创建一个分布式事务的全局唯一ID | | 2 | 开启事务 | | 3 | 执行本地业务逻辑 | | 4 | 调用其他服务,执行其他业务逻辑 | | 5 | 提交事务(确认操作)或回滚事务(撤销操作) | **二、详细步骤** **1. 创建一个分布式事务的全局唯一I
1. go实现分布式锁通过 golang 实现一个简单的分布式锁,包括锁续约、重试机制、singleflght机制的使用1.1 redis_lock.gopackage redis_lock import ( "context" _ "embed" "errors" "github.com/go-redis/redis/v9" "github.com/google/uuid" "go
转载 2023-10-08 23:44:33
314阅读
MySQL分布式事务介绍InnoDB存储引擎提供了对XA事务的支持,并通过XA事务来支持分布式事务的实现。分布式事务指的是允许多个独立的事务资源参与到一个全局的事务中。事务资源通常是关系型数据库系统,但也可以是其他类型的资源。全局事务要求在其中的所有参与的事务要么都提交,要么都回滚,这对于事务原有的ACID要求又有了提高。另外,在使用分布式事务时,InnoDB存储引擎的事务隔离级别必须设置为SER
在系统开发中,有一类任务不是立即执行,而是在未来某个时间点或者按照一定间隔去执行,比如日志定期压缩、报表制作、过期数据清理等,这就是定时任务。在单机中,定时任务通常需要实现一个类似crontab的系统,一般有两种方式:最小堆,按照任务执行时间建堆,每次取最近的任务执行时间轮,将任务放到时间轮列表中,每次转动取对应的任务列表执行最小堆最小堆是一种特殊的完全二叉树,任意非叶子节点的值不大于其子节点,如
8.集群Redis Cluster是Redis的分布式解决方案,在3.0版本正式推出,有效地解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构方案达到负载均衡的目的。之前、Redis分布式方案一般有两种: ① 客户端分区方案,优点是分区逻辑可控,缺点是需要自己处理数据路由、高可用、故障转移等问题; ② 代理方案,优点是简化客户端分布式逻辑和升级维护便利
转载 2023-09-04 15:28:06
5阅读
1、分布式系统简介:多个节点: 容错性 可扩展性(性能) 固有分布性消息传递: 节点具有私有存储 易于开发 可扩展性(功能) 对比:并行计算完成特定的需求:消息传递的方法: REST(动作、URL) RPC(序列化传输、远端序列化后调用) 中间件(可以存储消息、一对多、消息队列)一般消息传递的方法: 对外:REST 模块内部:RPC 模块之间:中间件,REST分布式架构VS为微服务架构 分布式:指
转载 2023-11-07 10:04:44
110阅读
# Redis Golang分布式分布式锁是在分布式系统中常用的一种机制,用于控制并发访问共享资源的问题。在Golang中,我们可以使用Redis来实现分布式锁。Redis是一个高性能的键值存储数据库,支持多种数据结构,也支持分布式锁的实现。 ## Redis分布式锁原理 在Redis中,可以利用SETNX命令来设置一个key,如果key不存在,则设置成功,可以获取到锁;如果key已经存
原创 5月前
41阅读
# Redis分布式锁实现 ## 1. 简介 在分布式系统中,为了保证共享资源的一致性和并发访问的正确性,我们通常需要使用分布式锁。Redis是一个高性能的内存存储系统,它提供了一种简单而可靠的方式来实现分布式锁。 本文将教你如何使用Golang来实现Redis分布式锁。我们将通过以下步骤来完成这个任务: 1. 连接Redis服务器 2. 生成唯一的锁标识符 3. 尝试获取锁 4. 执行业务
原创 10月前
44阅读
在实现"Golang Redis 分布式锁"之前,首先需要了解什么是分布式锁以及为什么我们需要使用Redis来实现分布式锁。分布式锁是一种用于解决分布式系统中并发控制的一种手段,它可以保证在不同的节点上,同一时间只有一个节点能够获取到锁,从而避免出现数据竞争或者并发问题。Redis是一个高性能的内存数据库,同时支持持久化和集群部署,因此非常适合用来实现分布式锁。 下面我将详细介绍如何在Golan
原创 5月前
96阅读
在Kubernetes(K8S)中使用Golang和Redis实现分布式锁是一种常见的实践。分布式锁是为了在分布式系统中协调不同节点之间的操作,保证数据的一致性和正确性。在这篇文章中,我们将介绍如何使用Golang和Redis实现一个简单的分布式锁。 我们首先来看一下整个实现流程,然后逐步介绍每个步骤需要做什么以及需要使用哪些代码。 ### 实现流程 | 步骤 | 描述
原创 5月前
155阅读
# Go语言Redis分布式限流 在分布式系统中,限流是一种非常重要的技术手段,用于控制服务的访问频率,防止服务过载。Go语言因其高性能和并发特性,成为实现分布式限流的理想选择。本文将介绍如何使用Go语言和Redis实现分布式限流。 ## 限流算法 限流算法有很多种,常见的有固定窗口计数器、滑动窗口计数器、漏桶算法和令牌桶算法等。本文将重点介绍固定窗口计数器算法。 固定窗口计数器算法使用一
原创 3月前
44阅读
# 分布式限流:使用Redis和Golang 在现代分布式系统中,限流是进行流量控制的重要手段。本文将带领你逐步实现一个基于Redis的分布式限流器,使用Golang语言。 ## 流程概述 我们可以将分布式限流的实现过程分为以下几个步骤: | 步骤 | 描述 | |-------------|---------------------
原创 1月前
32阅读
最近项目的后端需求是全球同服的,在使用语言方面确定了为golang之后,了解了一下当前的一些goalng游戏服务器框架,终于在leaf/pitaya/ 等众多框架中选择了 Origin, 主要是因为它是分布式框架,微服务架构,比较匹配做全球同服需求下的功能模块分离。 | (后续2021.08.04补充更正一下,Origin的服务发现功能现已实现,参看Origin服务发现详解)目前基本已经上手,现在
  • 1
  • 2
  • 3
  • 4
  • 5