设计一个完善可用的服务框架
一个完善可用的RPC服务框架,需要包含以下几点:
框架组成 | 具体功能说明 |
服务注册中心 | 服务框架基础知识 |
管理端 | 接口管理+配置中心 |
统一的RPC框架 | 监控中心+分布式追踪+服务治理+网关 |
管理端
1、接口管理
提供统一的接口管理和查询入口,比如公共wiki或者类似swagger之类的系统。
功能:定义接口,包括接口描述、方法定义、字段定义甚至接口支持的最大并发数等信息。
2、配置中心
提供统一的配置管理,这里主要指服务端的一些相关配置。
功能:分组配置、路由策略、黑白名单、降级限流开关、timeout、重试次数可动态变化的参数。
优点:服务提供者和调用者不需重启服务即可进行配置的变更。
例子:携程开源的Apollo配置管理中心,或阿里开源的Nacos,目前在业内被多家互联网及银行金融类企业采用。
RPC框架
一、监控中心
1、监控服务主要关注接口维度和工程实例维度的数据,比如:JVM、内存、CPU、I/O等;
2、通过定时任务,上报不同接口的调用次数、耗时、异常信息以及相关服务的新建连接数、最大连接数、吞吐量等信息;
3、通过可视化等方式,实时展示相关服务的状态,健康检查、监控预警等;
二、分布式追踪
与监控中心有所区别的是,全链路追踪主要是以调用链的模式对服务进行调用关系的跟踪和分析,一般通过埋点、agent探针等方式进行追踪的数据输出;
例子:全链路工具Skywalking,就是一个开源的调用链模式的追踪分析工具,UI图如下:
更多参考:Skywalking分布式追踪系统
三、服务治理
1、服务路由
权重:机器配置高的权重高,配置低的权重低;还有根据服务的重要程度分配权重等;
IP路由:比如某些特定地址的机器只能访问配置的几台特定机器;
参数路由:比如根据方法名进行读写分类,或根据参数不同访问不同的节点;
2、调用授权
应用授权:只有授权后的应用才可以调用某一组服务;
token:只有token校验通过才可以调用对应的服务;
黑白名单:黑名单用户无法访问某些服务,白名单用户可以不用鉴权既可访问服务;
3、调用限流
服务端限流:服务端根据漏斗模型或者服务的最大处理能力进行限流措施,设置初始值以及根据访问流量变化,同等步长递增,最大访问量为某个安全阈值即可;
客户端限流:根据客户端身份标识,比如不同会员等级,进行调用次数及是否优先提供服务的限流;
4、上线发布
灰度发布:一种平滑的上线发布方式,再次基础上可以进行A/B测试。
蓝绿发布:V1 版本称为蓝组,V2 版本称为绿组,发布时通过 LB 一次性将流量从蓝组直接切换到绿组。特点是全量切换,升级切换和回退速度快。
更多关于发布上线模式的内容,可参考这里:灰度发布、滚动发布、蓝绿发布到底有什么区别?
5、限流降级
Mock:当服务不可用、异常等情况下返回配置好的数据,一般在测试场景使用率较高。
限流:通过在网关入口设定最大访问阈值等方式,控制流入系统服务的请求,保证服务的正常可用。
降级:根据分配的服务权重,在系统压力超过一定阈值时降低权重较低的服务权重,保证核心重要服务的可用性。
熔断:设定timeout参数,当流入数据超过设定阈值,使其超时,重置连接,保证服务的可用性。
四、网关
网关为业务的接入层,RPC框架大部分情况下是内部调用,而网关可以提供以下功能:
统一的鉴权服务;
限流服务;
协议转换:将外部访问的请求协议转换为内部统一的可处理的协议;
Mock:为测试提供服务、降级处理等;
其他:比如请求内容解析、请求封装;
PS:服务框架属于基础架构范畴的中间件技术,需要保持适度的前瞻性;结合自己的现状以及未来几年的发展规划,进行技术选型,最好的是最适合自己的!
以为即为完善可用的服务框架相关知识,具体实践请自行探索或参考其他资料。。。
转载于:https://www.cnblogs.com/uestc2007/p/10869142.html
设计一个完善可用的服务框架相关推荐
- 如何设计一个高可用的运营系统
转载自 如何设计一个高可用的运营系统 这是一篇来自粉丝的投稿,作者[林湾村龙猫]近一年在做关于运营活动方面的设计.本文是他的关于运营活动的总结,Hollis做了一点点修改. 概述 一个产品业务的发 ...
- Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架?
Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架? 面试题 如何自己设计一个类似 Dubbo 的 RPC 框架? 面试官心理分析 说实话,就这问题,其实就跟问你如何自己设计一个 ...
- 基于腾讯信鸽设计一个微型推送服务
今日科技快讯 据印度媒体报道,对于旗下短视频应用抖音国际版TikTok在印度遭封杀,母公司字节跳动表现得似乎"非常乐观",并计划未来三年在印度投资10亿美元.在接受采访时,字节跳动 ...
- JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性
一.什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的.停工时间,就是不能向用户提供服务的时间.高可用,就是系统具有高度可用性,尽量减少停工时间.如何用最简单的方法来搭建 ...
- 设计一个简易的引导任务框架(2) | 4.23粉丝赠书
今天是4.23世界读书日,公众号向支持的小伙伴们送出下面3本技术图书(三选一)! 参与方式: 本文点赞留言,必须超过20字,以及你想要的图书名字参与活动 积赞最多的前3名读者,将会获得赠书,三选一 活 ...
- 4.3 设计一个完善的响应式系统
4.3 设计一个完善的响应式系统 关键词 响应系统的工作流程: 当读取操作发生时,将副作用函数收集到"桶"中. 当设置操作发生时,从"桶"中取出副作用函数并执行 ...
- 如何实现一个优质的微服务框架:Apache ServiceComb 的开放性设计
2019独角兽企业重金招聘Python工程师标准>>> 写在前面 开源微服务框架 Apache ServiceComb 的前身为华为云的 微服务引擎 CSE (Cloud Servi ...
- 设计一个成功的微服务,堪称必备的9个基础知识
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 人体是不同系统的组合,其中大多数系统是独立的,并且作为一个整体协同 ...
- 设计一个成功的微服务,堪称必备的9大基础知识
人体是不同系统的组合,其中大多数系统是独立的,并且作为一个整体协同工作.每个系统都有自己的特定功能.所有具有多种其他支持框架的器官构成了一个功能完备的机构.现在,如果应用于软件系统,这就是微服务架构的 ...
最新文章
- 基于三代测序技术的高产糖化酶黑曲霉工业菌株基因组组装与注释及功能基因比较研究
- 确保***测试计划成功的10个秘诀(语录)
- BZOJ 3731: Gty的超级妹子树
- 一段CyclicBarrier代码
- ASP.NET传统的三层架构
- python 排列组合算法_排 列 组 合 公 式 及 排 列 组 合 算 法
- java dev guide
- mysql組合主鍵_MySQL(二)
- 软件设计师12-数据库(范式)
- Android开发 ——线性布局文件、TextView、ListView的基本写法
- Android.mk宏定义demo
- 怎么做301永久重定向
- 拓端tecdat|R语言样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
- [WCF编程]12.事务:事务概述
- python建模预测_如何使用Python进行节目观众数的线性回归预测
- 基于JavaSwing开发医院信息管理系统 毕业设计 课程设计 大作业
- IDEA kotlin项目报错 kotlin not configured
- Unity5入门及进阶项目实战 星际迷航-肖师军-专题视频课程
- 【JavaWeb】书城项目之与数据库交互的登录案例实现
- arduino tft 方向_arduino 控制TFT液晶显示屏,在屏幕上画了四个按键,如何检测是否被按下和释放呢?...