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

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 分布式系统的解决方案,学好这个就够了

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

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


项目简介


这是一个包含分布式锁,分布式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开发的小巧、美观桌面快捷工具

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
4月前
|
存储 SQL 微服务
常用的分布式事务解决方案(三)
常用的分布式事务解决方案(三)
|
4月前
|
关系型数据库 MySQL
常见分布式事务的解决方案(一)
常见分布式事务的解决方案(一)
|
2月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
55 5
|
4月前
|
消息中间件 中间件 关系型数据库
常用的分布式事务解决方案(四)
常用的分布式事务解决方案(四)
|
4月前
常用的分布式事务解决方案(二)
常用的分布式事务解决方案(二)
|
5月前
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
5月前
|
机器学习/深度学习 分布式计算 Cloud Native
云原生架构下的高性能计算解决方案:利用分布式计算资源加速机器学习训练
【8月更文第19天】随着大数据和人工智能技术的发展,机器学习模型的训练数据量和复杂度都在迅速增长。传统的单机训练方式已经无法满足日益增长的计算需求。云原生架构为高性能计算提供了新的可能性,通过利用分布式计算资源,可以在短时间内完成大规模数据集的训练任务。本文将探讨如何在云原生环境下搭建高性能计算平台,并展示如何使用 PyTorch 和 TensorFlow 这样的流行框架进行分布式训练。
153 2
|
5月前
|
存储 监控 数据可视化
性能监控之JMeter分布式压测轻量日志解决方案
【8月更文挑战第11天】性能监控之JMeter分布式压测轻量日志解决方案
116 0
性能监控之JMeter分布式压测轻量日志解决方案
|
6月前
|
存储 NoSQL 算法
实现分布式锁的Java解决方案
实现分布式锁的Java解决方案
|
6月前
|
关系型数据库 分布式数据库 数据库
PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。
【7月更文挑战第3天】PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。通过数据分片和水平扩展支持微服务弹性,保证高可用性,且兼容MySQL协议,简化集成。示例展示了如何使用Spring Boot配置PolarDB,实现服务动态扩展。PolarDB缓解了微服务数据库挑战,加速了开发部署,为云原生应用奠定基础。
357 3