ketchup服务治理
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 给予支持。谢谢!
ketchup服务治理的更多相关文章
- 服务治理要先于SOA
讲在前面的话: 若企业缺乏对服务变更的控制和规则,那么一个服务在经过几个项目之后,就很有可能被随意更改成多个版本,将来变成什么样更是无法预测.久而久之,降低了服务重用的可能性,提高了服务利用的成本 ...
- 简述我的SOA服务治理
SOA服务治理 1.解决业务部门服务冲突和纠纷2.版本定义与版本管理3.服务备案与服务管理4.业务监督与服务监控 SOA的战略目的 一.业务价值胜过技术策略 二.战略目标胜过具体项目的效益 三.内置的 ...
- 基于Nginx dyups模块的站点动态上下线并实现简单服务治理
简介 今天主要讨论一下,对于分布式服务,站点如何平滑的上下线问题. 分布式服务 在分布式服务下,我们会用nginx做负载均衡, 业务站点访问某服务站点的时候, 统一走nginx, 然后nginx根据一 ...
- Dubbo框架中的应用(两)--服务治理
Dubbo服务治理了看法 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlzaGVoZQ==/font/5a6L5L2T/fontsize/400/fi ...
- 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)
背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...
- 1 Spring Cloud Eureka服务治理
注:此随笔为读书笔记.<Spring Cloud微服务实战> 什么是微服务? 微服务是将一个原本独立的系统拆分成若干个小型服务(一般按照功能模块拆分),这些小型服务都在各自独立的进程中运行 ...
- 1 Spring Cloud Eureka服务治理(下)
注:此随笔为读书笔记.<Spring Cloud微服务实战> 上篇主要介绍了什么是微服务以及微服务治理的简单实现,如微服务注册中心的实现.微服务注册的实现.微服务的发现和消费的实现.微服务 ...
- 笔记:Spring Cloud Eureka 服务治理
Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能,服务 ...
- spring cloud 入门系列二:使用Eureka 进行服务治理
服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现. Spring Cloud Eureka是Spring Cloud Netflix 微服务套件的一部分 ...
随机推荐
- centos 7.0运行docker出现内核报错解决方法
目前我这里docker是运行在centos 7.0系统里,使用1.5版本docker,最近一台服务器总是不定期死机,通过查看日志发现属于内核bug导致,报错信息如下 1 2 3 4 5 6 7 8 9 ...
- 前端程序员难翻身,没有好的学习方法,你永远无法成功,vue.js专题
学习vue正确思路,是先学vue-cli,再学vue.js单文件引用的用法,这样会在极短时间内撤底撑握vue, 如果先学vue.js单文件用法,再去学vue-cli4,可以说是重新学vue,,,,难处 ...
- HTML--HTML入门篇(我想10分钟入门HTML,可以,交给我吧)
我要正经的讲一节课,咳咳! HTML简介(废话) HTML称为超文本标记语言,是一种标识性的语言.它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整 ...
- unittest 中的方法调用时报错 ValueError: no such test method in <class 'mytestcase.MyTestCase'>: runTest
1.调用unittest中的方法时报错: ValueError: no such test method in <class 'mytestcase.MyTestCase'>: runTe ...
- zabbix分布式安装全过程
项目规划 软件 版本 IP zabbix-server 3.4.15 10.1.10.128 zabbix-proxy 3.4.15 10.1.10.129 zabbix-agent 3.4.15 1 ...
- C#对象初始化器
1.对象初始化器 Student objStu2 = new Student() { StudentId=, //属性之间使用","分隔 StudentName="小明& ...
- 自动化运维工具Ansible之Roles测验详解
Ansible Roles 详解与实战案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: 3. 该用 ...
- CC2530ADC转换
一.ADC简介 ADC支持 14 位的模拟数字转换,具有多达12 位的 ENOB(有效数字位).它包括一个模拟多路转换器,具有多达8 个各自可配置的通道,以及一个参考电压发生器.转换结果通过DMA写入 ...
- Python Serial 串口基本操作(收发数据)
1.需要模块以及测试工具 模块名:pyserial 使用命令下载:python -m pip install pyserial 串口调试工具:sscom5.13.1.exe 2.导入模块 import ...
- 物流配送管理系统(ssm,mysql)
项目演示视频观看地址:https://www.toutiao.com/i6811872614676431371/ 下载地址: 51document.cn 可以实现数据的图形展示.报表展示.报表的导出. ...