ketcup  git地址:https://github.com/simple-gr/ketchup

服务治理是什么

  企业为了确保事情顺利完成而实施的过程,包括最佳实践、架构原则、治理规程、规律以及其他决定性的因素。

  我理解的就是服务治理就是一颗药,用来治疗服务之间存在的各种疑难杂症从而能让他正常的运行起来。

治理的策略

负载均衡

  为了提高可用性、降低延迟,同一个服务可能会部署多个实例,负载均衡就是为了在服务的多个实例之间进行分配负载,已达到优化资源使用、最大化吞吐率,同时避免过载。

限流

  服务的流量可能是动态的,如果流量增加,超过服务承载范围,就会影响用户掩。通过限制服务能使用的资源,当监控到流量超过设定的阈值时,服务拒绝处理新的用户请求。当系统压力过大时,对系统的非核心业务进行限流,避免因压力过大导致整个系统奔溃。

容错

  生产环境中的每个微服务并不是具有百分百的可靠。服务之间跨网络调用,增加了调用失败的可能性。因此,如何保证微服务系统的可靠性,也变得更为复杂和困难。所以,微服务系统在设计之初就需要考虑容错机制,当系统负载过高时,可以确保核心业务不被破坏,以及当某个服务出错时,把影响范围降低到最小,避免整个系统不可用。

配置

  服务在运行过程中,需要和其他服务协作,同时他也会依赖基础设施或其他服务完成某项业务功能。在这个过程中,就需要多样化的配置信息。源码中硬编码配置信息,虽然实现成本低,但是这种方式不仅缺乏灵活性,而且容易造成信息泄露。因此,较好的方式是将配置与代码分离。采用独立于代码的外部机制存储配置信息。

ketchup 中的实现

  当有rpc请求时,负载均衡策略决定那个子通道即grpc服务器将接收请求。(当前实现的负载算法有随机数与轮询算法)

  使用方式是在配置文件中直接设置:

  

"Consul": {
"ConnectionString": "192.168.180.55:8500",
"IsHealthCheck": true,
"Strategy":"Random" //负载策略 Random(随机算法),Polling(轮询算法)
}

    容错限流配置需要在属性上面设置

   Service 声明为服务类型

  HystrixCommand 设置限流 容错,超时等机制

    [Service(Name = "grpc.domain.RpcTest")]
public class HelloService : RpcTest.RpcTestBase
{
[HystrixCommand(MethodName = nameof(SayHello), ExcuteTimeoutInMilliseconds = )]
public override async Task<HelloReponse> SayHello(HelloRequest request, ServerCallContext context)
{
var result = await _cache.GetAsync<string>("a"); return new HelloReponse()
{
Code = ,
Msg = "hello simple",
Result = JsonConvert.SerializeObject(result)
};
}
}

  HystrixCommand 可配置治理功能  

    public class HystrixCommandAttribute : Attribute
{
public string MethodName { get; set; } /// <summary>
/// 执行超时时间
/// </summary>
public int ExcuteTimeoutInMilliseconds { get; set; } = ; /// <summary>
/// 最大信号量
/// </summary>
public int MaxRequests { get; set; } = ; /// <summary>
/// 最大信号量的限定时间
/// 默认1s
/// </summary>
public int MaxRequestsTime { get; set; } = ; /// <summary>
/// 至少多少请求失败,熔断器才发挥起作用
/// </summary>
public int BreakerRequestCircuitBreaker { get; set; } = ; /// <summary>
/// 是否开启服务降级
/// </summary>
public bool EnableServiceDegradation { get; set; } /// <summary>
/// 降级缓存类型
/// </summary>
public CacheModel Cache { get; set; } = CacheModel.Memory; /// <summary>
/// 降级缓存时间
/// 单位 秒
/// </summary>
public int ServiceDegradationTimeSpan { get; set; } = ;
}

写在最后

QQ群:592407137 期待大家一起研究,学习~~

开源不易,如果喜欢,请给予一个Start 给予支持。谢谢!

最新文章

  1. 06章 Struts2国际化
  2. August 19th 2016 Week 34th Friday
  3. GZFramwork快速开发框架之窗体设计说明
  4. c/c++工程中外部头文件及库添加方法
  5. asp.net中runat=&quot;server&quot;的含义
  6. linux重启oracle 各种方法
  7. html.ex.day01
  8. Firemonkey 自定义Button的Style
  9. WPF从我炫系列4---装饰控件的用法
  10. 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX应用程序
  11. python装饰器大详解
  12. 转: 【Java并发编程】之十四:图文讲述同步的另一个重要功能:内存可见性
  13. update_engine-整体结构(二)
  14. jsp小测试--猜大小
  15. 【学习笔记】JS经典异步操作,从闭包到async/await
  16. DOS下如何打开程序
  17. [na]ping提示&amp;各系统默认的TTL值
  18. CodeDom生成类文件
  19. ev3dev:设置自动登录wifi
  20. Oracle_字符集问题(数据库与客户端字符集关联关系)

热门文章

  1. 洛谷P3018 [USACO11MAR]树装饰Tree Decoration
  2. centos监控web目录www下的文件是否被黑、挂马的脚本
  3. python(MD5 单向加密)
  4. RF(数据库测试)
  5. pycharm安装与破解
  6. Spring AOP概述
  7. MODIS系列之NDVI(MOD13Q1)七:时间序列S-G滤波之Python
  8. Istio的流量管理(概念)(istio 系列二)
  9. STM32 标准库V3.5启动文件startup_stm32f10xxx.s分析
  10. 你应该知道的Python3.6、3.7、3.8新特性