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

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

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

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


项目简介


这是一个包含分布式锁,分布式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);            }        }    }}
names


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开发的小巧、美观桌面快捷工具

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
Oracle 关系型数据库 分布式数据库
分布式数据库集成解决方案
分布式数据库集成解决方案
204 0
|
5月前
|
数据库
分布式集群时钟同步问题及解决方案
分布式集群时钟同步问题及解决方案
194 1
|
2月前
|
消息中间件 存储 负载均衡
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案
昔之善战者,先为不可胜,以待敌之可胜。不可胜在己,可胜在敌。故善战者,能为不可胜,不能使敌之必可胜。故曰:胜可知,而不可为。
82 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案
|
2月前
|
消息中间件 Dubbo 应用服务中间件
分布式事物【Hmily实现TCC分布式事务、Hmily实现TCC事务、最终一致性分布式事务解决方案】(七)-全面详解(学习总结---从入门到深化)
分布式事物【Hmily实现TCC分布式事务、Hmily实现TCC事务、最终一致性分布式事务解决方案】(七)-全面详解(学习总结---从入门到深化)
78 0
|
Dubbo 应用服务中间件 微服务
分布式事物【Hmily实现TCC分布式事务、Hmily实现TCC事务、最终一致性分布式事务解决方案】(七)-全面详解(学习总结---从入门到深化)(上)
分布式事物【Hmily实现TCC分布式事务、Hmily实现TCC事务、最终一致性分布式事务解决方案】(七)-全面详解(学习总结---从入门到深化)
47 1
|
29天前
|
缓存 应用服务中间件 数据库
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)
33 1
|
5月前
|
负载均衡 Java 应用服务中间件
分布式系列教程(23) -分布式事务解决方案(实践篇)
分布式系列教程(23) -分布式事务解决方案(实践篇)
60 0
|
5月前
|
SQL Dubbo Java
分布式系列教程(22) -分布式事务解决方案(设计篇)
分布式系列教程(22) -分布式事务解决方案(设计篇)
71 0
|
5月前
|
SQL NoSQL 关系型数据库
分布式系列教程(21) -分布式事务解决方案(框架篇)
分布式系列教程(21) -分布式事务解决方案(框架篇)
71 0
|
5月前
|
开发框架 Java 关系型数据库
分布式系列教程(20) -分布式事务解决方案(理论篇)
分布式系列教程(20) -分布式事务解决方案(理论篇)
56 0

热门文章

最新文章