分布式系统的解决方案,学好这个就够了

news2024/9/22 15:39:26

分布式、负载、消息队列等一些解决方案,在互联网公司应用已经非常普遍了,也是每一个程序员要成为技术专家、架构师必学的知识。

所以,今天给大家推荐一个开源项目,有关互联网项目常见的解决方案,通通都打包一起了。

项目简介

这是一个包含分布式锁,分布式ID,分布式消息队列、配置中心、注册中心、服务注册、超时、重试、熔断、负载均衡等解决方案的项目。

该项目把开发中,经常碰到的解决方案都归纳在一起了,大家可以根据自己项目的需求,选择相应的解决方案。

并且针对每一个解决方案,都有简单的例子,作为一个学习资料也是非常不错的,建议大家都收藏备用。

技术架构

1、跨平台:这是基于.NetCore开发的系统,可以部署在Docker,Windows,Linux,Mac;

2、基于.Net 5开发;

3、开发工具:visual studio 2022。

项目结构

图片

功能详细列表

  • 1、分布式锁

基于Redis

基于Consul

2、分布式缓存

基于Redis

3、分布式Id

基于Snowfake

4、分布式追踪 Opentracing

基于Jaeger

5、消息总线

基于MySql

基于SqlServer

基于Rabbitmq

基于Kafka

6、消息队列

消息可靠性保证

7、健康检查

Mongodb 健康检查

MySql 健康检查

SqlServer 健康检查

Redis 健康检查

Rabbitmq 健康检查

Kafka 健康检查

8、负载均衡

随机负载均衡

轮训负载均衡

9、配置中心

基于Apollo配置中心

基于Nacos配置中心

10、服务注册

基于Consul服务注册和发现

基于Nacos服务注册和发现

11、服务调用

基于HTTP弹性客户端(支持:服务发现、负载均衡、超时、重试、熔断)

基于HTTP非弹性客户端(支持:服务注册、负载均衡)

12、Canal 数据集成

输出到控制台

输出到Rabbitmq(待实现)

输出到Kafka(待实现)

使用方法

下面以分布式锁和分布缓存举例,讲解该项目使用方法;更多功能使用方法看项目的例子。

1、分布式锁

1.1、安装

可以直接引用,或者通过Nuget直接安装

Install-Package Hummingbird.Extensions.DistributedLock -Version 1.15.0

1.2、配置信息

public class Startup
  {
public void ConfigureServices(IServiceCollection services)
        {
            services.AddHummingbird(hb =>
            {
                hb.AddDistributedLock(option =>
                 {
                     option.WithDb(0);
                     option.WithKeyPrefix("");
                     option.WithPassword("123456");
                     option.WithServerList("127.0.0.1:6379");
                     option.WithSsl(false);
                 });               
            });
        }
    }

1.3、分布锁使用例子

namespace Hummingbird.Example.Controllers{using Microsoft.AspNetCore.Mvc;using System;using System.Threading.Tasks;    [Route("api/[controller]")]public class DistributedLockController : Controller    {public DistributedLockController(Hummingbird.Extensions.DistributedLock.IDistributedLock distributedLock)        {this.distributedLock = distributedLock;        }private readonly Hummingbird.Extensions.DistributedLock.IDistributedLock distributedLock;        [HttpGet]        [Route("Test/{lockName}")]public async Task<string> Test(string lockName="key1")        {var lockToken = Guid.NewGuid().ToString("N");try            {if (distributedLock.Enter(                        lockName,                         lockToken))                {await System.Threading.Tasks.Task.Delay(15000);// do somethingreturn "ok";                }else                {return "error";                }            }catch(Exception ex)            {return ex.Message;            }finally            {               distributedLock.Exit(lockName, lockToken);            }        }    }}

2、分布式缓存

2.1、安装

可以直接引用,或者通过Nuget直接安装

Install-Package Hummingbird.Extensions.Cacheing -Version 1.15.0

2.2、配置信息

public class Startup
    {
public void ConfigureServices(IServiceCollection services)
        {

            services.AddHummingbird(hb =>
            {
                hb.AddCacheing(option =>
                {
                    option.WithDb(0);
                    option.WithKeyPrefix("");
                    option.WithPassword("123456");
                    option.WithReadServerList("192.168.109.44:6379");
                    option.WithWriteServerList("192.168.109.44:6379");
                    option.WithSsl(false);
                })

            });

        }
    }

2.3、配置Reids缓存

namespace Hummingbird.Example.Controllers
{
using Hummingbird.Extensions.Cacheing;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;

    [Route("api/[controller]")]
public class CacheingController : Controller
    {
private readonly ICacheManager cacheManager;

public CacheingController(
            ICacheManager cacheManager)
        {
this.cacheManager = cacheManager;
        }

        [HttpGet]
        [Route("Test/{cacheKey}")]
public  string Test(string cacheKey="key1")
        {
var cacheValue = cacheManager.StringGet<string>(cacheKey);
if(cacheValue == null)
            {
                cacheValue = "value";
                cacheManager.StringSet(cacheKey, cacheValue);
            }
            return cacheValue;
        }
    }
}

项目地址

https://github.com/guoming/Hummingbird

最后

该项目涵盖的还是比较齐全的,对于初学者来说,也是比较容易入门,大家可以选择其中一个知识点学习,后面再扩展学习更多的知识。

今天就跟大家,分享到这边了,希望对您有帮助,欢迎点赞关注转发。

‍- End -

推荐阅读

用C#自己动手写个操作系统,爽!

一个Windows远程工具,小巧但实用,支持RDP、SSH、SFTP、FTP等多种协议

一个C#开发的Windows远程桌面工具

盘点6个.NetCore+Vue前后端分离的开源项目

一个为程序员定制的、WPF开发的小巧、美观桌面快捷工具

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/79689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

10个 解放双手的 IDEA 插件,少些冤枉代码

正经干活用的 分享一点自己工作中得心应手的IDEA插件&#xff0c;可不是在插件商店随随便便搜的&#xff0c;都经过实战检验&#xff0c;用过的都说好。可能有一些大家用过的就快速划过就行了。 1、GenerateAllSetter 实际的开发中&#xff0c;可能会经常为某个对象中多个属性…

半监督下的点云

搬了这么个东东来~~ 不过他的名字有点容易叫大家混淆,所以没写标题上... 在训练阶段&#xff0c;只需少量的二维方框标注作为指导&#xff0c;本文的网络就可以从激光雷达方框中产生精确的具有三维属性的图像级长方体标注。 论文&#xff1a;https://arxiv.org/pdf/2211.0930…

【Dubbo3高级特性】「实战开发」自定义扩展实现Dubbo服务对外暴露的主机地址实战开发指南

内容主旨 本篇文章主要介绍了如何进行自定义Dubbo服务对外暴露的主机地址的实战技术方案&#xff0c;其中我们需要针对于服务提供者侧的host主机暴漏的目的以及如何进行定制化处理 特性说明 在Dubbo中&#xff0c;Provider启动时主要做两个事情 启动服务提供者的server端实…

基于C++实现(控制台+界面)通讯录管理系统【100010012】

个人通讯录管理系统 问题描述&#xff1a; 主要内容&#xff1a; 个人通讯录是记录了同学&#xff08;包含一起上学的学校名称&#xff09;、同事&#xff08;包含共事的单位名称&#xff09;、朋友&#xff08;包含认识的地点&#xff09;、亲戚&#xff08;包含称呼&#…

Python小炼(2):文件操作

"一封信&#xff0c;写下太多如果" 如果有一定语言基础的&#xff0c;一定对文件操作十分得"熟悉"!当然&#xff0c;这种熟悉是 引起人恼怒的 也不为过。 python 也有自己的文件操作&#xff0c;那它跟C\C又有何不同呢&#xff1f; 一、文件的基本操作 (…

中国宗教活动场所数据库(数据+python代码)

通常研究&#xff0c;宗教活动场所与公司避税行为&#xff0c;社会整体信任水平以及民营企业创始资金来源等元素相关联。例如&#xff0c;企业注册地的宗教传统负向影响公司避税&#xff0c;企业注册地的宗教传统通过提高管理者的道德意识和强化管理者的风险规避倾向两条机制抑…

Swagger总结

目录 简介&#xff1a; openAPI Springfox&#xff1a; 简介 Springfox的使用 SwaggerUI的使用 Swagger配置 设置扫描的包 设置范围 Swagger常用注解&#xff1a; 控制类、方法生成接口信息 ApiParam ApiModel ApiModelProperty ApiIgnore ApiImplicitParam 部分图片来自百…

SpringBoot日志详解

⭐️前言⭐️ &#x1f349;博客主页&#xff1a; &#x1f341;【如风暖阳】&#x1f341; &#x1f349;精品Java专栏【JavaEE进阶】、【JavaEE初阶】、【MySQL】、【数据结构】 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; …

rocketMq相关机制

rocketMq相关机制 topic读写队列 perm字段表示Topic的权限。有三个可选项。 2&#xff1a;禁写禁订阅&#xff0c;4&#xff1a;可订 阅&#xff0c;不能写&#xff0c;6&#xff1a;可写可订阅 这其中&#xff0c;写队列会真实的创建对应的存储文件&#xff0c;负责消息写入。…

小蓝本 第一本《因式分解技巧》第四章 拆项与添项 笔记(第四天)

小蓝本 第一本《因式分解技巧》第四章 拆项与添项 笔记&#xff08;第四天&#xff09;前言拆项与添项目的方法分组分解走平均分配分组分解走瞄准公式旧事重提第二章公式(9)好题习题4题目题解错题题号改错经验前言 芜湖&#xff0c;坚持做小蓝本的第四天&#xff0c;今天的知识…

基于LSTM、BP神经网络实现电力系统负荷预测(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

房屋装修设计技巧有哪些?有哪些注意事项

拥有自己的家是每个人的愿望&#xff0c;拥有一座新的房子是一种幸福。但是&#xff0c;作为一个装修小白&#xff0c;装修新房是一件很麻烦的事情。那么&#xff0c;房屋装修设计技巧是什么&#xff1f;房屋的装修设计应该注意些什么&#xff1f;下面我将详细解释一下。 房屋装…

pandas数据分析

目录 题目001&#xff1a; 把list变成一个Series 题目002&#xff1a; 把dict变成一个Series 题目003&#xff1a; 把Series转换成list 题目004&#xff1a; 把series变成一个DataFrame 题目005&#xff1a;用numpy创建Series 题目006&#xff1a;转换series的数据类型 …

【亲测可用】2022最新酒桌小游戏喝酒小程序源码_带流量主

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 喝酒神器3.6&#xff0c;原版本没有广告位&#xff0c;修改增加了广告位&#xff0c; 由多个喝酒小游戏组合而成,具体如下: 大话骰(带音效) 愤怒大叔(带音效,多个皮肤模板用户可选择) …

【大数据入门核心技术-ElasticSearch】(二)ElasticSearch整体架构和重要工作原理

目录 一、整体架构图 二、重要工作原理 1、文档写入原理 2、文档检索原理 一、整体架构 二、重要工作原理 1、文档写入原理 1&#xff09;选择任意一个DataNode发送请求&#xff0c;例如&#xff1a;node2。此时&#xff0c;node2就成为一个coordinating node&#xff08;…

我也和 chatGPT 聊了聊

我也和 chatGPT 聊了聊&#xff0c;都是因为最近 chatGPT 太火了&#xff01; 这是一个大型的 AI 语言模型。你不仅可以和它聊天&#xff0c;问它各种各样的问题&#xff0c;还可以让它写代码、写论文、解数学题、解bug&#xff0c;等等。 可以说&#xff0c;chatGPT 是目前最…

软件安全测试-Web安全测试详解-CSRF攻击

1. 什么是CSRF攻击&#xff1f; CSRF&#xff08;Cross Site Request Forgery&#xff09;&#xff0c;中文是跨站点请求伪造。CSRF攻击者在用户已经登录目标网站之后&#xff0c;诱使用户访问一个攻击页面&#xff0c;利用目标网站对用户的信任&#xff0c;以用户身份在攻击页…

基于java+springmvc+mybatis+jsp+mysql的洗衣店管理系统

项目介绍 洗衣店管理系统是信息时代的产物&#xff0c;它是洗衣店管理的一个好帮手。有了它不再需要繁重的纸质登记&#xff0c;有了它洗衣店管理员不在需要繁重的工作&#xff0c;一些收费标准和干洗业务等基本信息可以由管理人员及时的对信息进行查询、更新、修改和删除&…

【自然语言处理】【ChatGPT系列】大模型的涌现能力

大语言模型的涌现能力《Emergent Abilities of Large Language Models》论文地址&#xff1a;https://arxiv.org/pdf/2206.07682.pdf 相关博客 【自然语言处理】【ChatGPT系列】大模型的涌现能力 【自然语言处理】【文本生成】CRINEG Loss&#xff1a;学习什么语言不建模 【自然…

web前端期末大作业——餐品后台管理系统(html+css+javascript)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…