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

栏目: 后端 · 发布时间: 4年前

内容简介: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开始学习微服务

近期文章:

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

Java并发编程学习体系

java8 Stream 史上最全总结

Java 网络编程"初探"

redis 知识点总结

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

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

如果你喜欢本文

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

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ruby on Rails Tutorial

Ruby on Rails Tutorial

Michael Hartl / Addison-Wesley Professional / 2012-8-6 / USD 44.99

"Ruby on Rails(TM) Tutorial by Michael Hartl has become a must-read for developers learning how to build Rails apps." -Peter Cooper, Editor of Ruby Inside Using Rails, developers can build web applica......一起来看看 《Ruby on Rails Tutorial》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具