内容简介:restful api ,
点击蓝色“ 乔志勇笔记 ”关注我哟
加个“ 星标 ”,第一时间获取推送的文章哦
(1)服务描述
restful api ,
xml 配置,
IDL(interface description language) 文件
(2)注册中心
1、注册中心api
注册api,反注册api, 心跳api, 订阅api, 变更查询api
2、集群部署
保证高可用,一致性
3、目录储存
注册了哪些服务,该服务被谁订阅了
4、服务健康状态监测
5、服务状态变更通知
6、白名单机制
课后问题: 注册中心 和 传统的dns 服务发现的区别
1)注册中心自动化,dns人工配置
2)客户端负载均衡,dns服务端负载均衡
3)注册中心有主动的健康检查机制,dns 较被动,调用时统计检查
(3) 服务调用/rpc
一、通信框架
比如spring cloud ,dubbo 框架,grpc框架
01客户端和服务端如何建立连接
1、http通信
基于http通信
2、socket通信
基于tcp协议
四个步骤 : 服务器socket监听、客户端socket请求、连接确认、数据传输
-
服务器监听:ServerSocket通过调用bind()函数绑定某个具体端口,然后调用listen()函数实时监控网络状态,等待客户端的连接请求。
-
客户端请求:ClientSocket调用connect()函数向ServerSocket绑定的地址和端口发起连接请求。
-
服务端连接确认:当ServerSocket监听到或者接收到ClientSocket的连接请求时,调用accept()函数响应ClientSocket的请求,同客户端建立连接。
-
数据传输:当ClientSocket和ServerSocket建立连接后,ClientSocket调用send()函数,ServerSocket调用receive()函数,ServerSocket处理完请求后,调用send()函数,ClientSocket调用receive()函数,就可以得到得到返回结果
02服务端如何处理请求
同步阻塞方式(BIO):连接数较小
同步非阻塞方式 (NIO):连接数比较多且请求消耗比较轻,比如聊天服务器
异步非阻塞方式(AIO):连接数比较多且请求 消耗比较重的业务场景 ,比如i/o操作的相册服务器
二、通信协议
协议契约:消息头,消息体
比如 http协议,dubbo协议
三、序列化方式
对比因素:支持丰富的数据结构类型,跨语言的支持,性能
文本类xml\json:可读性好
二进制类PB : 压缩比和压缩速度快
(4)服务监控
一、监控因素:
1、监控对象
用户端监控 : 手机、web的监控
接口监控:
资源监控: 中间件的监控
基础监控: 服务器指标的监控
2、监控指标
请求量:实时请求量 qps , 统计请求量pv
响应时间
错误率:
3、监控维度
全局维度、分机房维度、单机维度、时间维度 、核心维度
二、监控环节
1、数据采集
服务主动上报 、代理收集
2、数据传输
传输方式:udp传输 、kafaka传输
传输格式:pb对象、json字符串
3、数据处理
数据聚合: 接口维度聚合,机器维度聚合
持久化储存:索引数据库,时序数据库
4、数据展示
曲线图、饼状图、格子图
(5)服务追踪
一、优势
1、优化系统瓶颈
2、优化链路调用
3、生成网络拓扑
4、透明传输数据
二、原理(基于美团的MTRACE)
traceId 用于串联一次请求在系统中经过的路径
spanId 区分系统不同服务之间调用的先后关系
annotation 业务 自定义一些自己感兴趣的数据
三、实现
1、数据采集层
服务端返回请求时将上下文数据上报
客户端接受到返回结果时将上下文数据上报(可以容错,对比耗时情况)
2、数据处理层
-
实时数据处理
针对实时数据处理,一般采用Storm或者Spark Streaming来对链路数据进行实时聚合加工,存储一般使用OLTP数据仓库,比如HBase,使用traceId作为RowKey,能天然地把一整条调用链聚合在一起,提高查询效率。
-
离线数据处理
针对离线数据处理,一般通过运行MapReduce或者Spark批处理程序来对链路数据进行离线计算,存储一般使用Hive。
3、数据展示层
调用链路图
一次调用的整体情况(总耗时,深度,层数,调用次数) ,每一层的具体情况(各层次数,每次耗时)
调用拓扑图
系统应用间的依赖关系,依赖调用的qps\平均耗时
课后问题:
服务监控系统和服务追踪系统的区别
数据采集维度不同:监控系统采集单个服务或整体的详细业务数据、日志、服务状况,追踪系统采集埋点数据
关注点不同:追踪系统更关注单次服务调用的性能或故障,监控系统关注的是服务整体的运行状况
互补关系:服务监控及时发现问题,服务追踪方便调查分析问题。
(6)服务治理
从不同角度确保服务调用的成功率
一 、节点管理(节点健康状态)
1、注册中心主动摘除机制
2、服务消费者摘除机制
服务消费者摘除更合理一些
二、负载均衡(节点访问优先级)
1、随机算法 2、轮询算法 3、最少活跃算法 4 、一致性hash算法
如果后端服务节点的配置没有差异,同等调用量下性能也没有差异的话,选择随机或者轮询算法比较合适;如果后端服务节点存在比较明显的配置和性能差异,选择最少活跃调用算法比较合适。
三、服务路由(节点访问优先级)
1、灰度发布 2、多机房就近访问
四、服务容错(调用的健康状态)
1、failover :失败自动切换 ,需幂等
2、failBack 失败通知,需根据失败情况进行处理
3、 failcache 失败缓存 ,等待一定时间后重试
4、failfast 快速失败 记录失败日志
一般情况下对于幂等的调用,可以选择FailOver或者FailCache,非幂等的调用可以选择FailBack或者FailFast。
推荐:胡忠想的从0开始学习微服务
近期文章:
如果你喜欢本文
请长按二维码,关注 乔志勇笔记
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- MVVM 架构解析及 Jetpack 架构组件的使用
- MVVM 架构解析及 Jetpack 架构组件的使用
- 组件化架构漫谈
- Rabbitmq基础组件架构设计
- Android组件化入门:一步步搭建组件化架构
- 原 荐 2.微服务架构组件分析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。