如何设计一个完善可用的服务框架

简介: 功能:分组配置、路由策略、黑白名单、降级限流开关、timeout、重试次数可动态变化的参数。

上一篇文章整理了一些关于服务框架基础知识的内容,这篇文章,从实际的生产需要出发,谈谈一个完善可用的服务框架,需要包含哪些功能。。。


PS:部分内容参考自《京东基础架构建设之路》


一个完善可用的RPC服务框架,需要包含以下几点:

框架组成 具体功能说明
服务注册中心

https://www.cnblogs.com/imyalost/p/10274797.html

管理端 接口管理+配置中心
统一的RPC框架 监控中心+分布式追踪+服务治理+网关

 

管理端


1、接口管理


提供统一的接口管理和查询入口,比如公共wiki或者类似swagger之类的系统。


功能:定义接口,包括接口描述、方法定义、字段定义甚至接口支持的最大并发数等信息。


2、配置中心


提供统一的配置管理,这里主要指服务端的一些相关配置。


功能:分组配置、路由策略、黑白名单、降级限流开关、timeout、重试次数可动态变化的参数。


优点:服务提供者和调用者不需重启服务即可进行配置的变更。


例子:携程开源的Apollo配置管理中心,或阿里开源的Nacos,目前在业内被多家互联网及银行金融类企业采用。

 

RPC框架


一、监控中心


1、监控服务主要关注接口维度和工程实例维度的数据,比如:JVM、内存、CPU、I/O等;

2、通过定时任务,上报不同接口的调用次数、耗时、异常信息以及相关服务的新建连接数、最大连接数、吞吐量等信息;

3、通过可视化等方式,实时展示相关服务的状态,健康检查、监控预警等;

 

二、分布式追踪


与监控中心有所区别的是,全链路追踪主要是以调用链的模式对服务进行调用关系的跟踪和分析,一般通过埋点、agent探针等方式进行追踪的数据输出;


例子:全链路工具Skywalking,就是一个开源的调用链模式的追踪分析工具,UI图如下:


640.jpg


更多参考https://www.jianshu.com/p/2fd56627a3cf

 

三、服务治理


1、服务路由


权重:机器配置高的权重高,配置低的权重低;还有根据服务的重要程度分配权重等;


IP路由:比如某些特定地址的机器只能访问配置的几台特定机器;


参数路由:比如根据方法名进行读写分类,或根据参数不同访问不同的节点;


2、调用授权


应用授权:只有授权后的应用才可以调用某一组服务;


token:只有token校验通过才可以调用对应的服务;


黑白名单:黑名单用户无法访问某些服务,白名单用户可以不用鉴权既可访问服务;


3、调用限流


服务端限流:服务端根据漏斗模型或者服务的最大处理能力进行限流措施,设置初始值以及根据访问流量变化,同等步长递增,最大访问量为某个安全阈值即可;


客户端限流:根据客户端身份标识,比如不同会员等级,进行调用次数及是否优先提供服务的限流;


4、上线发布


灰度发布:一种平滑的上线发布方式,再次基础上可以进行A/B测试。


蓝绿发布:V1 版本称为蓝组,V2 版本称为绿组,发布时通过 LB 一次性将流量从蓝组直接切换到绿组。特点是全量切换,升级切换和回退速度快。


640.jpg


更多关于发布上线模式的内容,可参考这里https://www.cnblogs.com/apanly/p/8784096.html


5、限流降级


Mock:当服务不可用、异常等情况下返回配置好的数据,一般在测试场景使用率较高。

限流:通过在网关入口设定最大访问阈值等方式,控制流入系统服务的请求,保证服务的正常可用。

降级:根据分配的服务权重,在系统压力超过一定阈值时降低权重较低的服务权重,保证核心重要服务的可用性。

熔断:设定timeout参数,当流入数据超过设定阈值,使其超时,重置连接,保证服务的可用性。

 

四、网关


网关为业务的接入层,RPC框架大部分情况下是内部调用,而网关可以提供以下功能:


统一的鉴权服务;


限流服务;


协议转换:将外部访问的请求协议转换为内部统一的可处理的协议;


Mock:为测试提供服务、降级处理等;


其他:比如请求内容解析、请求封装;

 

以为即为完善可用的服务框架相关知识,具体实践请自行探索或参考其他资料。。。

相关文章
|
3月前
|
运维 监控 负载均衡
动态服务管理平台:驱动微服务架构的高效引擎
动态服务管理平台:驱动微服务架构的高效引擎
61 17
|
2月前
|
开发框架 人工智能 安全
Promptic:轻量级 LLM 应用开发框架,提供完善的底层功能,使开发者更专注于构建上层功能
Promptic 是一个轻量级的 LLM 应用开发框架,支持通过一行代码切换不同的 LLM 服务提供商。它提供了类型安全的输出、流式支持、内置对话记忆、错误处理和重试等功能,帮助开发者专注于构建功能,而不是底层的复杂性。
91 6
Promptic:轻量级 LLM 应用开发框架,提供完善的底层功能,使开发者更专注于构建上层功能
|
3月前
|
机器学习/深度学习 运维 监控
动态服务管理平台:构建高效、灵活的微服务架构基石
动态服务管理平台:构建高效、灵活的微服务架构基石
92 17
|
3月前
|
存储 负载均衡 监控
如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
在数字化时代,构建高可靠性服务架构至关重要。本文探讨了如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
82 1
|
3月前
|
Kubernetes API Docker
构建高效后端服务:微服务架构的深度实践与优化####
本文深入探讨了微服务架构在现代后端开发中的应用,通过剖析其核心概念、设计原则及实施策略,结合具体案例分析,展示了如何有效提升系统的可扩展性、可靠性和维护性。文章还详细阐述了微服务拆分的方法论、服务间通信的最佳实践、以及容器化与编排工具(如Docker和Kubernetes)的应用技巧,为读者提供了一份全面的微服务架构落地指南。 ####
|
4月前
|
安全 Java 关系型数据库
探索后端技术:构建高效、安全的应用服务
在当今数字化浪潮中,后端技术作为软件架构的核心支柱,承载着处理数据逻辑、保障应用性能与安全等关键任务。本文旨在深入浅出地探讨后端开发的重要概念、主流技术栈以及未来发展趋势,为开发者提供一份指南,以助力构建既高效又安全的应用程序。
|
7月前
|
缓存 Devops 微服务
微服务01好处,随着代码越多耦合度越多,升级维护困难,微服务技术栈,异步通信技术,缓存技术,DevOps技术,搜索技术,单体架构,分布式架构将业务功能进行拆分,部署时费劲,集连失败如何解决
微服务01好处,随着代码越多耦合度越多,升级维护困难,微服务技术栈,异步通信技术,缓存技术,DevOps技术,搜索技术,单体架构,分布式架构将业务功能进行拆分,部署时费劲,集连失败如何解决
|
9月前
|
消息中间件 数据库 网络架构
构建高效后端:微服务架构的优化策略
【5月更文挑战第31天】在这篇文章中,我们将深入探讨如何通过采用微服务架构来提升后端开发的效率和性能。我们将分析微服务架构的关键优势,并讨论如何克服实施过程中的挑战。通过具体的案例研究,我们将展示如何优化微服务架构以实现最佳的性能和可维护性。无论你是后端开发的新手还是经验丰富的专业人士,这篇文章都将为你提供有价值的见解和实用的技巧。
|
存储 数据库 开发者
单元化架构的设计原则:让开发者、组件和数据都能透明化,同时保证业务可分片和业务自包含。
单元化架构的设计原则:让开发者、组件和数据都能透明化,同时保证业务可分片和业务自包含。
|
小程序 前端开发 Java
【平台开发】技术整合思考(四)前后端不分离
【平台开发】技术整合思考(四)前后端不分离
258 0