(更新时间)2021年6月2日 商城高并发秒杀系统(.NET Core版) 23

阅读: 评论:0

(更新时间)2021年6月2日 商城高并发秒杀系统(.NET Core版) 23

(更新时间)2021年6月2日 商城高并发秒杀系统(.NET Core版) 23

一:Consul性能瓶颈

Consul主要的性能出现在服务发现,网络IO是很耗性能的。

二:Consul性能优化

  1. 使用单例全局共享
  2. 使用数据缓存(进程:字典,集合,redis)
  3. 使用连接池

下面以本地缓存为案例

/// <summary>
/// consul服务发现实现
/// </summary>
public class ConsulServiceDiscovery : AbstractServiceDiscovery
{public ConsulServiceDiscovery(IOptions<ServiceDiscoveryOptions> options) : base(options){}protected override CatalogService[] RemoteDiscovery(string serviceName){// 1、创建consul客户端连接 2s 1、使用单例全局共享 2、使用数据缓存(进程:字典,集合) 3、使用连接池var consulClient = new ConsulClient(configuration =>{//1.1 建立客户端和服务端连接configuration.Address = new Uri(serviceDiscoveryOptions.DiscoveryAddress);});// 2、consul查询服务,根据具体的服务名称查询var queryResult = consulClient.Catalog.Service(serviceName).Result;// 3、判断请求是否失败if (!queryResult.StatusCode.Equals(HttpStatusCode.OK)){throw new FrameException($"consul连接失败:{queryResult.StatusCode}");}return queryResult.Response;}}
/// <summary>
/// 抽象服务发现,主要是缓存功能
/// </summary>
public abstract class AbstractServiceDiscovery : IServiceDiscovery
{// 字典缓存private readonly Dictionary<string, List<ServiceNode>> CacheConsulResult = new Dictionary<string, List<ServiceNode>>();protected readonly ServiceDiscoveryOptions serviceDiscoveryOptions;public AbstractServiceDiscovery(IOptions<ServiceDiscoveryOptions> options){this.serviceDiscoveryOptions = options.Value;// 1、创建consul客户端连接var consulClient = new ConsulClient(configuration =>{//1.1 建立客户端和服务端连接configuration.Address = new Uri(serviceDiscoveryOptions.DiscoveryAddress);});// 2、consul 先查询服务var queryResult = consulClient.Catalog.Services().Result;if (!queryResult.StatusCode.Equals(HttpStatusCode.OK)){throw new FrameException($"consul连接失败:{queryResult.StatusCode}");}// 3、获取服务下的所有实例foreach (var item in queryResult.Response){QueryResult<CatalogService[]> result = consulClient.Catalog.Service(item.Key).Result;if (!queryResult.StatusCode.Equals(HttpStatusCode.OK)){throw new FrameException($"consul连接失败:{queryResult.StatusCode}");}var list = new List<ServiceNode>();foreach (var service in result.Response){list.Add(new ServiceNode { Url = service.ServiceAddress + ":" + service.ServicePort });}CacheConsulResult.Add(item.Key, list);}}public List<ServiceNode> Discovery(string serviceName){// 1、从缓存中查询consulj结果if (CacheConsulResult.ContainsKey(serviceName)){return CacheConsulResult[serviceName];}else{// 1.2、从远程服务器取CatalogService[] queryResult = RemoteDiscovery(serviceName);var list = new List<ServiceNode>();foreach (var service in queryResult){list.Add(new ServiceNode { Url = service.ServiceAddress + ":" + service.ServicePort });}// 1.3 将结果添加到缓存CacheConsulResult.Add(serviceName, list);return list;}}/// <summary>/// 远程服务发现/// </summary>/// <param name="serviceName"></param>/// <returns></returns>protected abstract CatalogService[] RemoteDiscovery(string serviceName);
}

三:优化效果

原本一个接口是3秒的响应时间,通过缓存可以在0.1秒内响应。

本文发布于:2024-02-03 02:11:45,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170689750547954.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:更新时间   商城   系统   秒杀   NET
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23