微服务架构-实现技术之三大关键要素1服务治理:服务注册中心+服务发布与注册+服务发现与调用+服务监控
目录
一、服务注册中心:注册中心核心功能+实现策略
1.注册中心核心功能
2.注册中心实现策略
二、服务发布与注册
三、服务发现与调用
四、服务监控
基本思路:日志埋点
基本目标:
基本定位:
基本策略:
具体实现:
参考书籍、文献和资料:
服务治理在面临系统存在大量服务时可以解决基本的三大定位问题:提升服务架构的可扩展性;有效的服务监控和故障定位;对服务的有效划分和路由。在技术实现上,服务治理一般表现为服务发布与订阅机制以及实现该机制的服务注册中心。
各个微服务需要通过服务治理实现自动化的注册和发现。服务治理的需求来自于服务的数量。为了实现微服务架构中的服务注册和发现,通常都需要构建一个独立的媒介来管理服务的实例,这个媒介一般被称为服务注册中心。
一、服务注册中心:注册中心核心功能+实现策略
主要充当服务注册和服务发现服务器的作用,不但是路由信息的存车仓库,也是服务提供者和服务消费者进行交互的媒介。
1.注册中心核心功能
(1)注册中心具备发布-订阅功能,体现在服务提供者可以根据服务的元数据发布服务,而服务消费者则通过自己感兴趣的服务进行订阅并获取包括服务地址在内的各项元数据。
(2)布-订阅功能还体现在数据变更推送,即当注册中心服务定义发生变化时,主动推送变更到该服务的消费者从而实现间接路由。
(3)需要确保数据的一致性,在任何时候服务提供者和服务消费者都应该看到同一份数据。
(4)为了确保服务高可用性,一般也需要注册中心保持高可用性,也就意味着注册中心需要构建对等集群。
对等集群,Peer-to-Peer Server Clusgter,指集群中所有服务器都提供同样的服务,客户端只连接一个服务器完成注册和发现即可,任何一台服务器宕机都不影响客户端的正常使用。
(5)作为注册中心的客户端程序,一般对嵌入在服务提供者和服务消费者的应用程序中。
在应用程序运行时,服务提供者的注册中心客户端程序会向注册中心注册自身提供的程序,而服务消费者的注册中心客户端程序则从注册中心查询当前订阅的服务信息并周期性的刷新服务状态。
(6)服务消费者需配备缓存机制以加速服务路由,提高服务路由的效率和容错性,更重要的是,当服务注册中心不可用时,服务消费者可以利用本地缓存路由实现对现有服务的可靠调用。
可以对注册中心进行抽象建模如下图,客户端可以是服务提供者也可以是服务消费者。
2.注册中心实现策略
在实现流程图上,服务提供者和服务消费者可以使用一定的通信机制与注册中心服务器建立连接并维持心跳检测,通过注册中心提供的操作接口分别完成发布和动态更新服务定义、获取制定服务地址列表、取消服务发布、获取服务地址更新等功能。同时,注册中心的服务监听机制确保消费者能够实时监控服务更新状态。
具体流程如下图:
二、服务发布与注册
服务发布的目的是为了暴露服务访问的入口,是一个通过构建网络连接并启动端口监听请求的过程。服务发布注册流程如下:
1.发布启动器:确定服务发布形式并启动发布平台。
(1)服务发布形式常见的有三种:配置化+API调用+使用注解,各有利弊。
配置化:通过以XML为代表的配置化工具,服务框架对业务代码零侵入,扩展和修改方便,同时配置信息修改能够实时生效。
API调用:服务框架对业务代码侵入性较强,修改代码之后需要重新编译才能生效。
注解方式:服务框架对业务代码零侵入,扩展和修改比较方便,但修改配置需要编译才能生效。
一般我们倾向于使用配置方式,但涉及系统之间集成时,需要使用服务框架中较底层的服务接口,API调用有可能是唯一选择。
(2)发布平台的启动与所选择的发布方式密切相关。
使用配置化发布时:通常会借助诸如Spring的容器进行服务实例的配置和管理,容器的正常启动意味着发布平台的启动。
使用API调用时:简单使用main函数进行启动。
使用注解方式时:与使用配置化发布启动是类似的。
2.动态代理
在实现远程调用时必然会添加动态代理功能,通过动态代理来实现对服务发布进行动态拦截,可以对服务发布行为本身进行封装和抽象,同时也便于扩展和定制化。
JDK自带的Proxy机制和诸如javassist的字节码编辑库都可以实现动态代理。
3.发布管理器
在流程中充当承上启下的门户Facade作用,一方面,获取协议服务器中生成的服务URL信息并发布到注册中心,另一方面,负责通知发布启动器本次发布是否成功。
4.协议服务器
是真正实现服务器创建和网络通信的组件,主要作用在于确定发布协议以及根据该协议建立网络连接、并管理心跳、断线重连、端口绑定与释放。常见的协议包括HTTP、RMI、Hessian等。
5.注册中心
主要用于保存和更新服务的地址信息。
三、服务发现与调用
较服务发布与注册而言,服务发现与调用是一个导入的过程,基本和服务发布与注册是对称结构流程:
1.调用启动器
确定服务的调用形式并启动调用平台,与发布启动器一样。
2.动态代理
完成本地接口到远程调用的转换,导入服务提供者接口API和服务信息并生成远程服务的本地动态代理对象,将本地API调用转换成远程服务调用并返回调用结果。
3.调用管理器
具备缓存功能,保存服务地址的缓存信息。当从注册中心获取服务提供者地址信息时,调用管理器根据需要更新本地缓存,确保在注册中心不可用的情况下,调用启动器仍然可以从本地缓存中获取服务提供者的有效地址信息。
4.协议客户端
根据服务调用指定的协议类型创建客户端并发起连接请求,负责与协议服务器进行交互并获取调用结果。
5.注册中心
主要用于保存和更新服务的地址信息。
四、服务监控
如图,在微服务架构中的服务调用中,服务中间件、数据库、缓存、文件系统以及其他服务之间都有可能存在依赖关系,为了确保系统运行时这些依赖关系的稳定性和可用性,服务调用路径、服务调用的业务数据、服务性能数据都是需要监控的内容,以便于系统定位和防御故障问题。
基本思路:日志埋点
1.使用跟踪ID作为一次完整应用调用的唯一标识,然后将该次调用的详细信息通过日志的方式进行保存。
2.日志埋点分为客户端埋点和服务器埋点
客户端埋点:关注于跟踪ID、客户端IP、调用方接口、调用时间等信息。
服务器端埋点:关注于跟踪ID、调用方上下文、服务端耗时、处理结果等信息。
3.日志埋点的作用分为两类
一类用于服用调用跟踪把所有请求过程的日志能够关联起来;
一类用于统计各服务的处理时间,一般通过记录服务调用的开始时间和结束时间计算并统计时间延迟。
4.针对日志埋点产生的海量运行时数据,通常需要专门的工具进行处理埋点数据。
基于Hadoop、Storm、Spark等技术的离线/实时批量处理框架;
基于Elastic Search、Solr的垂直化搜索引擎;
专门的Flume/ELK等日志处理框架
5.在日志埋点过程中也可以使用抽样思想,并一定将所有的场景都进行日志埋点。
基本目标:
保障线上服务运行质量,治理的对象是基于统一分布式服务框架开发的各项业务数据。
基本定位:
关注服务运行时的状态、细粒度治理等。
基本策略:
服务限流、降级、服务动态路由和灰度发布等。
具体实现:
采用通过注册中心对服务以来进行分析,结合运行时调用关系,梳理不合理的依赖和调用路径,优化服务架构;
实时收集服务调用日志,分析、汇总、存储和展示,方便开发和运维人员进行实时诊断;
执行服务运行时治理方案,包括限流降级、路由、统一配置等在线调整。
参考书籍、文献和资料:
【1】郑天民. 微服务设计原理与架构. 北京:人民邮电出版社,2018.
微服务架构-实现技术之三大关键要素1服务治理:服务注册中心+服务发布与注册+服务发现与调用+服务监控相关推荐
- 分布式微服务架构的技术体系
微服务架构的演变 微服务是一种服务间松耦合的.每个服务之间高度自治并且使用轻量级协议进行通信的可持续集成部署的分布式架构体系.这一句包含了微服务的特点,微服务架构和其他架构有什么区别?以下对比一些常见 ...
- 出色技术团队的关键要素
原创作品,同意转载,转载时请务必以超链接形式标明文章原始出处 .作者信息和本声明,否则将追究法律责任. http://blog.csdn.net/hzliyun/article/details/707 ...
- spring-cloud开发微服务笔记(二):高可用Eureka注册中心的搭建与RestTemplate和Fengin客户端调用微服务示例
引言:这一篇博客是将上一篇spring-cloud-eureka-server的单机模式改为集群模式,体现eureka的高可用特性.生产环境无论是Eureka注册中心还是Client客户端大多是部署在 ...
- 微服务架构-实现技术之六大基础组件:服务通信+事件驱动+负载均衡+服务路由+API网关+配置管理
微服务架构的实现首先需要提供一些基础组件,这些基础的功能性组件主要包括服务之间的通信.面向事件驱动的架构设计方法.负载均衡.服务路由.API网关和分布式配置中心等,我们对这六大基本组件进行初步的分析定 ...
- 微服务架构下的核心话题 (三):微服务架构的技术选型
前期回顾: 微服务架构下的核心话题 (一):微服务架构下各类项目的顺势崛起 微服务架构下的核心话题 (二):微服务架构的设计原则和核心话题 一.前言 为了实现基于微服务开发的产品,或者说为了将单体应用 ...
- 云计算与云原生 — 云原生微服务架构的技术内涵
目录 文章目录 目录 微服务框架的演进 第一代微服务框架 Spring Cloud Dubbo 下一代微服务框架 - Service Mesh Istio Envoy Kubernetes + Ser ...
- 云原生微服务架构的技术内涵
目录 文章目录 目录 微服务框架的演进 第一代微服务框架 Spring Cloud Dubbo 下一代微服务框架 - Service Mesh Istio Envoy Kubernetes + Ser ...
- java+创建metaq生产者_微服务架构【技术点4】windows下rocketMQ配置及java端生产者消费者配置-Go语言中文社区...
参考资料 windows下配置rocketMQ 解压缩 系统环境变量配置 变量名:ROCKETMQ_HOME 变量值:MQ解压路径MQ文件夹名 启动NAMESERVER Cmd命令框执行进入至'MQ文 ...
- 五年Java架构师深入剖析微服务架构设计理念与技术体系(值得一看!)
内容提要: 本书内容主要包含实施微服务架构的些方法论和工程实践,首先,通过对微服务架构的基本概念.服务建模.服务拆分和集成的介绍,帮助读者全面理解微服务架构中的设计理念,然后从微服务架构的基础组件.关 ...
最新文章
- AI芯片是如何研制的?未来的发展之路又在何处?
- ERROR: cannot launch node of type [robot_pose_publisher/robot_pose_publisher]: robot_pose_publisher
- XtraGrid RepositoryItemCheckEdit 显示状态以及单选多选问题
- live555 源码分析: DESCRIBE 的处理
- ES5-5 参数默认值、递归、预编译、暗示全局变量
- python中object转为float_object格式怎样无损转换成float64格式
- sysv-rc-conf --- Linux设置开机自动启动
- Web工程师必备的可视化工具
- shell脚本不换行刷新数据
- tp3.2 访问地址url大小写及控制器多个单词组成时url
- java在线订单系统源码_春哥酒店在线预订微信小程序源码系统正式发布!
- vue3.0项目引入高德地图
- [机器学习实战] 机器学习基础
- 深圳恒波软件公司LockDir加密软件原理与破解
- win10突然不能使用usb大容量存储设备(移动硬盘)的解决方法
- Promise中then的返回值
- BGA集成电路脚位识别
- 腾讯linux集成化界面,腾讯TOS系统今日开启内测:界面扁平化风格
- 05-D. 音像制品(类与对象)
- 【AI Studio平台基本操作】课程回看
热门文章
- java 电脑向手机发送文件
- 利用YOLOv3玩CSGO
- Android Material Design动画
- 程序员因违反《竞业协议》赔偿腾讯近百万
- 铁威马通过Docker容器实现Airprint 打印服务器功能
- 2020年正则表达式匹配三大运营商手机号码,附各运营商号段
- Win10自带Ubuntu系统之有始无终的GUI安装经历
- 2022-2028年中国电力金具行业市场现状分析及投资前景评估报告
- 聚美优品Android面试题,聚美优品PHP面试题
- LeetCode高频题:多多发明了一个跳棋游戏,n个格子组成,格子上有字符‘L’或‘R’,遇到L走i-xi,遇到R走i+xi,问每个位置为起点,到游戏结束,分别需要走多少步