从0开始学微服务(二) --- 2020年04月

各种框架的选型

1、注册中心选型

注册与发现有解决方案有两种:

1)、应用内注册与发现的方式,最典型的是 Eureka 注册中心。

  Eureka 主要三个组件:Eureka Server 实现服务信息注册、存储、查询,Eureka Client 集成在服务端的注册中心 SDK,实现服务注册、反注册,以及服务订阅、服务更新等功能。

2)、应用外注册与发现的方式,有 Consul、Nacos。

  Nacos 有一个简单 UI 的客户端,实现服务注册信息的存储,以及各种参数的配置。

  Nacos 支持基于 DNS 和基于 RPC 的服务发现。

  Nacos 对服务进行实时的健康检查,阻止向不健康的主机或服务实例发送请求。支持传输层(TCP)和应用层(HTTP、MySQL)的健康检查。

  提供了 agent 主动上报和服务端主动检测两种健康检查模式。

  可以在配置变更时,不需要重新部署应用和服务,让配置的管理变的更加高效和敏捷。

  动态 DNS 服务支持权重路由,可以实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心你给我的简单 DNS 解析服务。

 容器化的云应用更适合应用外的注册中心,避免侵入业务。

 注册中心需要考虑 高可用性(集群部署、多 IDC 部署)、一致性

2、开源 RPC 框架选型

RPC 框架主要的三部分:通讯框架、通信协议、序列化和反序列化格式。

跟语言平台帮顶的开源 RPC 框架,Dubbo 支持 Java 语言,SpringCloud 也是。

1)、Dubbo

  Dubbo 的服务消费和服务提供者都需要引入 Dubbo 的 SDK 才能完成 RPC 调用。

  Dubbo 默认采用 Netty 作为通信框架,支持 Dubbo、RMI、HTTP、Hession 等协议,支持 Json .Dubbo、Hession 等序列化格式。

2)、SpringCloud

  已学。

3、搭建监控系统

监控涉及到 数据收集、数据传输、数据处理、数据展示。

ELK (Elasticsearch、Logstash、Kibana)

分别是数据处理,数据收集、传输,数据展示的是三个工具。因为 Logstash 要在各个服务器上部署,比较消耗 CPU 和内存,所以引入了 Beats 来作为数据收集器,把数据收集到后发送到 Logstash。

4、服务跟踪系统 (后期学习后补上)

OpenZipkin

Pinpoint

5、识别服务节点的存活 (服务治理)

1)、心跳开关保护机制

  在网络频繁抖动的时候,服务消费者不至于一直因为得知服务提供者的变动,而一直去请求注册中心获取最新的服务节点信息。

2)、服务节点保护机制

  服务提供者会每隔一段时间像注册中心汇报心跳。如果超出时间没有汇报,则注册中心摘除该节点。(SpringCloud 中的默认心跳时间是30s )

  但是服务频繁抖动时,可能摘除的节点过多,则剩下的节点难以承受所有的调用,引起 雪崩。

  可以设置一个阈值比例,超过阈值,则注册中心不能摘除节点。

3)、静态注册中心

  可以服务消费者直接调用服务提供者是否成功,如果连续失败超过一定次数,就在本地内存中标记该节点为不可用。每隔一段时间,消费者都像不可用的节点发起保活探测。(这样就不需要心跳机制与摘除机制)(有点去中心化)

6、负载均衡算法

1)、随机算法

服务节点的性能差异不大的情况下。

2)、轮询算法

同随机算法的应用场景差不多。

3)、加权轮询算法

不同的节点的权重不同,则访问的权重也不同。应用于性能节点不同的服务器的场景。

4)、最少活跃连接算法

服务端节点性能差异较大时。

5)、一致性 hash 算法

同一个来源的请求,只会

映射到一个节点上。相当于记忆功能。

6)、自适应最优选择算法

复杂的情况。

7、如何使用服务路由 (以后再学习加深理解)

服务消费者在发起服务调用时,必须根据特定的规则来选择服务节点,从而满足某些特定的需求。

应用场景:

  分组调用,多个数据中心,部署在不同的机房或云上。

  灰度发布,先小范围部署,再大范围部署。

  流量切换,将调用该机房服务的流量切换到其他正常的机房。

  读写分离,读接口部署在一起,写接口部署在其他节点。

8、服务端出现故障怎么办

集群故障、单 IDC 故障、单机故障。

集群故障:限流降级。

限流:限制流量,给系统设置一个阈值,超过阈值的请求自动放弃。

降级:停止系统中的某些功能,来保证系统整体的可用性。

单 IDC 故障:脱网,流量切换。基于 DNS 解析的流量切换,还有基于 RPC 分组的流量切换。

单机故障:自动重启,设置一个阈值,当某个接口的平均耗时超过一定阈值,就重启。

9、服务调用失败的处理手段

超时:避免依赖的服务迟迟没有返回调用结果,把服务消费者拖死。

重试:再一次发起请求,主要注意到幂等性。

双发:同时2次请求。

熔断:短时间关闭服务提供,给故障时间恢复,再重新请求。三种状态,关闭、打开、半打开。一段时间的服务调用的失败率高于设定的阈值后,断路器进入打开。过一段时间后,断路器半打开。当请求能成功时,就打开。不成功,就再过一个周期重新请求。

10、管理服务配置

1)、可以把配置当做代码等同看待,岁应用程序一起发布。

2)、抽离到单独的配置文件中,与代码分离。

  但是还有更好的方案,配置中心。

配置中心:配置注册功能、反注册功能、查看功能、变更订阅功能。

11、容器化

镜像仓库:有一个集中存储的地方,把镜像存储在这里,服务发布的时候,各个服务器都访问这个集中存储来拉取镜像,然后启动容器。

1)、权限控制

  哪些用户可以拉取镜像,哪些用户可以修改镜像。

2)、镜像同步

  当镜像同时发布到几十几百台集群节点上,就需要多个镜像仓库实例来做负载均衡。

  一个方案是一主多从,主从复制。

3)、高可用性

  多 IDC 部署。

容器调度:

  1)主机过滤:存活过滤、硬件过滤。

  2)调度策略:解决容器创建时选择哪些主机最合适。

服务编排:

  服务依赖、服务注册、自动扩缩容。

12、微服务实现 Devops

1)持续集成阶段:代码检查、单元测试、集成测试。

2)持续交付阶段:类生产环境线上拆除节点,接入新版本后,观察服务是否正常。

3)持续部署阶段:代码自动发布到线上的所有节点中去。

13、微服务容量如何规划

一是评估集群的最大容量和线上实际运行的负荷(如何做好容量评估);

二是如何确定弹性扩缩容的时机以及机器数(如何做好调度决策);

多机房部署:

负载均衡、数据同步、一致性。

1)、一个主机房用来写,将该写同步写到其他机房的缓存中。数据库通过 binlog 机制同步数据。但是如果主机房 down 掉,则会影响整体业务。

2)、独立机房架构,用 WMB 消息同步机制同步缓存,数据库还是用 binlog 同步数据。

WMB 机制是将一个机房的写请求发送给另一个机房。reship 负责把本机房的写请求分发一份给别的机房。collector 负责从别的机房读取写请求,然后把请求转发给本机房的处理机。

WMB 一是通过 MCQ 消息队列,一种是通过 RPC 调用。

混合云部署:

1)、需要打通私有云和阿里云之间的网络连接,用跨云专线。

2)、只是将缓存部署在公有云上,并没有将隐私数据库部署在公有云。

14、一些疑问点

1)、微服务的拆分粒度、拆分方式。

  结合开发人员的多少,以及服务的依赖性,可以拆分为多个独立的微服务,实现开发的解耦。

  可以根据服务的关联度,或者数据库隔离维度进行拆分。(一般是两种方式进行结合)

  但是首先先进行稍微大粒度的拆分,业务验证稳定后,再逐步进行细化的服务拆分。(互联网项目)

2)、数据处理的实时操作,服务追踪

  第一个场景是快读定位线上服务问题。经过链路上的多个环节,如果请求过慢,就需要将服务追踪收集到的每个环节的调用数据,进行实时聚合,计算每个环节的平均耗时和接口成功率。这样一览监控就可以快速定位问题。

  第二个场景是定位某一次用户请求失败的原因。需要根据用户的 traceId 和 spanId,把一次用户经过的各个环节的服务调用串联起来,找出调用的上下文,最终可以找到在哪一层发生了错误。

3)、清除僵尸节点、优化反注册

  服务缩容,第一步调用注册中心的反注册接口把节点从服务节点列表删除,第二步是回收服务器,把节点从服务池列表中删除。第一步失败第二步成功,就存在僵尸节点。可以对比服务池的节点列表与注册中心的节点列表,然后删除僵尸节点。

原文地址:https://www.cnblogs.com/AlmostWasteTime/p/12663937.html

时间: 2024-10-07 16:01:13

从0开始学微服务(二) --- 2020年04月的相关文章

从0开始学微服务

作为一名IT从业者,懈怠是一件奢侈的事情,因为在IT圈,原地踏步就等于退步. “微服务”这个名词已经广为流传,但是我觉得大部分的人也许同我一样,仅仅只是处于对这个概念的认知上:是的!今天我希望跟大家一起揭开它的神秘面纱:) <从 0 开始学微服务>专栏希望能够用通俗易懂的语言帮助你理解以上几个问题,同时也是希望能够由浅入深.由表及里系统为你讲解微服务的各个关键环节,帮你上手微服务. 四个核心模块. 入门微服务:将介绍微服务体系的基本原理和组成,帮你解答什么是微服务.什么时候适合微服务改造.微服

Re:从0开始的微服务架构--(二)快速快速体验微服务架构?--转

原文地址:https://mp.weixin.qq.com/s/QO1QDQWnjHZp8EvGDrxZvw 这是专题的第二篇文章,看看如何搭建一个简单模式的微服务架构. 记得好久之前看到一个大牛说过:如果单体架构都搞不好,就别搞微服务架构.乍一看,这句很有道理,后来发现这句话是不太对的,因为微服务架构的目的就是为了降低系统的复杂性,所以 微服务架构应该比单体架构更简单.更好实践才对. 这篇文章,我们就分享一下如何搭建一个 简单模式 的微服务架构. 什么是微服务架构的简单模式? 相对于大型互联网

.NET Core微服务二:Ocelot API网关

.NET Core微服务一:Consul服务中心 .NET Core微服务二:Ocelot API网关 .NET Core微服务三:polly熔断与降级 本文的项目代码,在文章结尾处可以下载. 本文使用的环境:Windows10 64位 + VS 2019 + .NET Core 2.1 + Ocelot 8.0.8 Ocelot 相关地址: https://github.com/ThreeMammals/Ocelot https://ocelot.readthedocs.io/en/lates

Re:从0开始的微服务架构:(一)重识微服务架构--转

原文地址:http://www.infoq.com/cn/articles/micro-service-architecture-from-zero?utm_source=infoq&utm_medium=popular_widget&utm_campaign=popular_content_list&utm_content=homepage 导语 虽然已经红了很久,但是“微服务架构”正变得越来越重要,也将继续火下去. 各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我

从0开始的微服务架构:(一)重识微服务架构

导语 虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去. 各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上来就是很有借鉴意义的干货,要么就是以高端的专业术语来讲述何为微服务架构.就是没有一个做到成熟地将技术传播出来,同时完美地照顾"初入微服务领域人员",从0开始,采用通俗易懂的语言去讲解微服务架构的系列. 所以,我们邀请青柳云的苏槐与InfoQ一起共建微服务架构专题"Re:从0开始的

从 0 开始的微服务架构:(四)如何保障微服务架构下的数据一致性

虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去.各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上来就是很有借鉴意义的干货,要么就是以高端的专业术语来讲述何为微服务架构.就是没有一个做到成熟地将技术传播出来,同时完美地照顾"初入微服务领域人员",从 0 开始,采用通俗易懂的语言去讲解微服务架构的系列.所以,我们邀请青柳云的苏槐与 InfoQ 一起共建微服务架构专题"Re:从 0 开始

从 0 开始的微服务架构:(五)代码给你,看如何用Docker支撑微服务

很好的一篇文章,全面.系统. 虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去.各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上来就是很有借鉴意义的干货,要么就是以高端的专业术语来讲述何为微服务架构.就是没有一个做到成熟地将技术传播出来,同时完美地照顾"初入微服务领域人员",从 0 开始,采用通俗易懂的语言去讲解微服务架构的系列.所以,我们邀请青柳云的苏槐与 InfoQ 一起共建微服务架构专题

跟着小程学微服务-自己动手扩展分布式调用链

一.说在前面 微服务是当下最火的词语,现在很多公司都在推广微服务,当服务越来越多的时候,我们是否会纠结以下几个问题: 面对一笔超时的订单,究竟是哪一步处理时间超长呢? 数据由于并发莫名篡改,到底都谁有重大嫌疑呢? 处理遗漏了一笔订单,曾经是哪个环节出错把它落下了? 系统莫名的报错,究竟是哪一个服务报的错误? 每个服务那么多实例服务器,如何快速定位到是哪一个实例服务器报错的呢? 现在很多系统都要求可用性达到99.9%以上,那么我们除了增加系统健壮性减少故障的同时,我们又如何在真正发生故障的时候,快

从0开始学架构(二)

此系列文章为极客时间上从0开始学架构学习后感悟总结,虽然隔了一段时间了,那么就再看一遍并且进行感悟升华,排版格式上有问题,后期再复习时也会进行更新   一.    高性能数据库集群:读写分离 读写分离的基本原理是将数据库读写操作分散到不同的节点上. 数据库服务器搭建主从集群,一主一从.一主多从都可以 数据库主机负责读写操作,从机只负责读操作 数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据 业务服务器将写操作发给数据库主机,将读操作发给数据库从机 从代码层面与运维层面实