分布式技术

133 阅读7分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

参考 www.cnblogs.com/lonely-wolf…

1. 常见 分布式组件 组合****

Spring Cloud Netflix,Spring Cloud 官方,Spring Cloud Alibaba

image.png Spring Cloud Netflix 是由 Netflix(美国奈飞)公司开源的一套分布式组件,这套组件应该也是大家比较熟悉的一套分布式组件,不过其只有 1.0 版本开源,2.0 之后就不再开源了,Spring Cloud 官方自己也提供了部分组件,而且基于 Feign 的基础上改造成了 Open Feign。

Spring Cloud Alibaba,这是由阿里巴巴开源的的一套分布式组件

2. 注册中心****

注册中心是微服务架构中一个核心的基础服务,主要用来管理所有的微服务,并且注册中心需要实现服务上线和下线的感知。

也就是说我们所有的微服务都将自己的地址信息注册到注册中心,然后其他调用者只需要维护注册中心的地址即可,当一个服务下线的时候,注册中心也会及时将该服务剔除。

 

常用的注册中心有:Eureka,consul,Nacos,其他的还有 Zookeeper,Redis 等也可以实现注册中心。

3. 远程通信协议****

微服务之间各个服务可能会非常频繁的调用,所以我们一定需要一款高效便捷的通讯协议来完成远程通信。

为什么使用 rpc 而不直接使用 http

(1) 所以为什么要用rpc调用?****

RPC(Remote Procedure Call)。即远程过程调用

因为良好的rpc调用是面向服务的封装,针对服务的可用性和效率等都做了优化。单纯使用http调用则缺少了这些特性。

分布式系统以及在一个大系统内服务较多的情况下,服务间的调用当然是越简单越好,而rpc的调用仅涉及到传输协议+序列化协议,而不用考虑一些类似接口可读性等。可以更方便的调用。

 

(2) RPC 主要是用来解决两个问题:****

处理分布式架构中各个微服务之间的通讯问题。

远程调用时,调用者就像调用本地方法一样方便。

 

常用的分布式服务之间远程通讯组件有:feign,openfeign,dubbo 等。

4. 负载均衡****

一般我们使用 http 通讯时大部分都会使用 nginx 作为负载均衡来处理

 

(3) 为什么不用nginx****

nginx 主要是一款基于 http 来进行的 七层负载(当然其也能实现四层负载),而我们的微服务通信之间不一定会基于 http 协议。

如果使用了 nginx,等于是微服务之间又多引入了一个单点,我们还需要考虑 nginx 转发的问题,还需要对其进行配置调优等。

也就是说直接使用 nginx 来进行负载的话,技术上是可行的,但是却可能会引入一些新的问题,所以微服务之间的负载均衡并没有直接选择使用 nginx,而是重新开发了负载均衡组件。

 

常用的分布式服务之间负载均衡组件有:ribbon ,dubbo 等。

5. 配置中心****

服务太多,我们需要考虑让这些服务共用同一套配置,这样只要修改这一套配置,所有服务都能能生效。

 

(4) 配置中心需要具备以下能力:****

①提供配置文件的管理界面(dashboard),这样使用者可以直接通过访问 dashboard 来实现可视化配置。

②配置中心配置修改之后,需要能及时通知到对应服务,让对应服务修改最新配置。

 

常用的分布式服务配置中心组件有:apollo,nacos,Spring Cloud config,disconf,diamond,Zookeeper 等。

6. 服务降级/熔断****

引入微服务我们的目的就是为了让每一个微服务都成为一个独立的单元,我们可以对每一个服务进行独立扩展,实现高可用,

为了保证高可用用,微服务需要提供一种降级和熔断措施。

 

(5) 降级****

降级也可以分为主动降级和被动降级,延迟服务

被动降价,前端页面降级:页面点击按钮全部置灰,页面显示“系统正在维护中

主动降级,关闭一些非核心功能,如:高峰时关闭评论,留言等功能。

延迟服务:定时任务处理、或者mq延时处理。比如新用户注册送多少优惠券可以提示用户优惠券会24小时到达用户账号中。

 

(6) 熔断****

熔断一般指的是某一个方法或者接口负载过高,或者说因为网络都动等原因造成响应超时或者失败等,那么这时候应该主动触发熔断,也就是对后续请求不再处理而是直接返回,当然这也要视具体业务来决定采用何种熔断措施。

 

常用的分布式服务之间降级/熔断组件有:Hystrix 和 Sentinel 等。

7. 服务网关****

微服务架构是由单体服务架构发展而来,一般我们一个一个微服务架构其实是一个大的应用系统,那么必然这一个大的系统有公共部分,比如:统一授权,统一路由,统一记录日志,也可以进行全局的限流措施等。

 

常用的微服务网关组件有:Zuul,Spring Cloud GatWay。

 

8. 分布式消息****

分布式消息一般就使用消息队列,比如 Rabbit MQ,Rocket MQ(阿里巴巴体系),kafka 等。

 

9. 分布式事务****

分布式事务的话,Spring Cloud Alibaba 也提供了一个组件 seata 来实现

 

10. Kubernetes****

Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。

Kubernetes(k8s)号称为了微服务而生的

 

传统部署时代--->虚拟化部署时代--->容器部署时代

 

管理运行应用程序的容器,Kubernetes 会满足你的扩展要求、故障转移、部署模式等。 例如,Kubernetes 可以轻松管理系统的 Canary 部署

 

Kubernetes 为你提供:

(7) 服务发现和负载均衡****

Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大,Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。

 

(8) 存储编排****

Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。

 

(9) 自动部署和回滚****

你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器,删除现有容器并将它们的所有资源用于新容器。

 

(10) 自动完成装箱计算****

Kubernetes 允许你指定每个容器所需CPU和内存(RAM)。当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。

 

(11) 自我修复****

Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。

(12) 密钥与配置管理****

Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。