微服务架构————基本组件

jujusharp  •  May 21, 2019 2:21:22 PM

原文地址


点击蓝色“乔志勇笔记”关注我哟

加个“星标”,第一时间获取推送的文章哦

(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开始学习微服务


近期文章:

5种分布式锁实现的对比?

Java并发编程学习体系

java8 Stream 史上最全总结

Java 网络编程"初探"

redis 知识点总结

java 核心技术学习总结 (一)

spring中"投机取巧"地限制 用户同时登陆

如果你喜欢本文

请长按二维码,关注乔志勇笔记

0 回复
暂时没有回复,你也许会成为第一个哦