最后更新:2022-08-01 10:03:02 手机定位技术交流文章
微服务(不是框架,而是架构思想),是著名的 oo(面向对象, ObjectOriented )专家 Martin Fowler 提出来的,它用于描述独立部署服务的软件应用程序设计的一种特殊方法。最近两年,显微服务在主要技术会议、文章和书籍中出现的频率表明,它们对软件有影响。微服务架构系统是一个分布式系统,按业务领域划分服务单位,具有自动运行 、 容错性和快速演化的特点,它可以解决传统的单立体建筑体系的痛苦,它也可以满足日益复杂的商业需求。
在应用的初始阶段,单立体建筑在发展速度和运行困难方面,服务器的成本也有明显的优势。在产品前景不确定的早期阶段,使用单立体建筑是一种非常明智的选择。随着应用业务的发展和业务复杂度的增加,显然,这个建筑有许多缺点,这 主要 反映 在 下列 三 方面 :
1.企业日益复杂,单一实体使用的代码量正在增加,代码的可读性、维护和可扩展性正在减少,新来者接管代码所需的时间正在倍增,业务扩张成本也在增加。
2. 随着用户越来越多,程序承受的并发越来越高,单体应用的并发能力有限。
3.随着测试变得越来越困难,单个应用程序操作在同一程序中,并且随着业务的扩大和变得更加复杂,单个应用程序的修改或额外操作可能对其他操作产生一定影响,导致测试困难的增加。
什么是微服务呢?
这是一个大应用程序,它被分成多个小模块,每个模块都有自己的功能和职责,每个模块都可以相互作用,这就是微服务
对于微服务,业界没有严格统一的定义,但是作为“微服务”这名词的发明人, Martin Fowler对微服务的定义似乎更具有权威性和指导意义,他的理解如下:
简而言之,微服务架构的风格,就是把一个单一的程序发展成一个微型服务,每个微服务都有自己的过程,使用轻量通讯机制,通常是HTTP RESTFUL API。这些服务以业务能力为基础,通过一个完全自动化的部署机制,可以独立使用不同的编程语言部署服务,和不同的数据存储技术,确保最低限度的集中管理。
一个独立运行的程序,即业务(功能)的服务单元。
2.服务通过HTTP协议互相通信。 http是一个通用协议(由所有Web应用程序支持的模式)
3. 自动化部署。
4.可以使用不同的编程语言。
5.可以使用不同的存储技术。
6.服务集中管理。
7. 微 服务 是 一 种 分布式 系统 。
每件事情都有两个方面,微型服务也不例外。微型服务与单用途应用相比有许多优点,当然它们也有缺点,主要体现在以下方面:
1.微型服务的复杂性
2.分布式交易
3. 服务 的 分配 ( 按 职能 或 组成 部分 ) 劳工 的 分配
4. 服务 部署 ( 非 自动化 部署 自动化 部署 )
Spring Cloud 作为 Java 语言的微服务框架,它依赖于 Spring Boot,它具有快速开发、持续交付和易于部署等特点。 Spring Cloud的组件非常多,关于微型服务的方面,在开放源代码社区Spring和Netflix中,Pivotal两个大公司正在不断推进完美化,阿利巴巴现在是该集团的一部分。Spring Official Netflix alibaba Spring Cloud继承了 Spring Boot在开发部署中的一些优势,提高开发和部署效率。Spring Cloud的主要目标是提供一系列开发组件和框架,帮助开发人员快速建立分布式微服务系统. Spring Cloud 是通过包装其他技术框架来实现的,例如,包装开源Netflix oss组件,实现了基于注释 、 Java 配置和模型开发的微服务框架.Spring Cloud提供一些共同的组件,用于开发分布式微服务系统,例如,服务登记和发现,配置中心,熔炉,远程调用,智能路由 、 微代理 、 控制巴士 、 全球锁 、 分布式对话等.
登记和发现服务(eureka、nacos、领事)
服务的负载均衡。 (ribbon, dubbo)
服务的相互连接(openFeign, dubbo)
服务的容错。(hystrix, sentinel)
服务关闭(门廊,苏尔)
统一管理服务配置(config-server, nacos, apollo)
服务信息巴士(巴士)
服务安全组件。 (security, Oauth2 . 0)
服务监控。 (admin) (jvm)
链路追踪。 (sleuth+zipkin)
SpringCloud是微服务哲学的具体的实现,帮助微服务架构提供基本功能
目前开发中常用的落地实现有三种:
注册发现中心
在软件领域,Eureka是Netflix在线视频公司注册和发现的开放源代码服务,与其他Netflix服务组件(如负荷平衡、熔炉、开关等)一起,它被整合到Spring Cloud社区,作为Spring Cloud Netflix模块。Eureka是Netflix为Spring Cloud贡献的框架! Netflix 给 Spring Cloud 贡
献了很多框架。
分布式微服务 CAP定理
问: 为什么养护员不适合注册中心?
共同体原则,也称为共同体定理,指一种分布式系统,
一致性(Consistency)
可用性(Availability)
分区容错性(Partition tolerance)(这个特性是不可避免的)
CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
C : 数据的一致性 (A, B, C 里面的数据是一致的)
Zk集中于数据的一致性。
Eureka不注意数据的一致性!
A: 服务的可用性(若 zk 集群里面的 master 挂了怎么办) Paxos(多数派)
在zk中,如果宿主被暂停,整个zk集群不会提供外部服务,您需要选择一个新的(大约120s)继续提供外部服务!
尤里卡以服务的可用性为重点,如果尤里卡集团只有一个生活群体,它可以提供外部服务
P:分区的容错性(在集群里面的机器,因为网络原因,机房的原因,可能导致数据不会里面同步),它在分布式必须需要实现的特性!
动物园管理员注重数据一致性,CP zk(注册中心、配置文档中心、协调中心)
Eureka注重服务可用性 AP Eureka(登记中心)
Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载平衡工具。它基于Netflix Ribbon的实现。通过 Spring Cloud 的封装,它允许我们很容易将面向服务的REST模板请求自动转换为客户负荷平衡服务调用。 轮询 hash 权重 . . .
简单地说,Ribbon是netfix的一个开放源代码项目,其主要功能是提供客户端负荷平衡算法和服务调用。Ribbon客户端组件提供了完整的配置项目,如连接超时、重试等。
在 Spring Cloud 构建的微服务系统中,带作为服务消费者的负荷平衡工具,有两种使用方式,其中一个是与 RestTemplate 结合的,另一个是与OpenFeign合并的。OpenFeign默认的集成了Ribbon。带有许多子模块,但许多模块在生产环境中不使用!
负载均衡
负载均衡,英文名称为 Load Balance(LB) http : // lb : //(负载均衡协议) ,它意味着平衡负荷(工作任务)并将其分配到多个操作单位。例如,Web服务器、企业核心应用程序服务器和其他主要任务服务器,因此, 任务 是 协同 完成 的 。
负载平衡是建立在现有的网络结构之上的,为扩大服务器和网络设备的带宽、提高网络数据处理能力、提高吞吐量、增加网络可用性和灵活性提供了透明和成本效益的方法。
1. RoundRobinRule - 请求数 % 机器数
2 . RandomRule- -随机
3 .权重
4. iphash
3 .AvailabilityFilteringRule - -会先过滤掉由于多次访问故障处于断路器跳闸状态的服务,还有并发的连接数量超过阈值的服务,然后对于剩余的服务列表按照轮询的策略进行访问
4.WeightedResponseTimeRule- -根据平均响应时间计算所有服务的权重,响应时间越快,服务重量越大,选择的可能性就越大。如果启动时没有足够的统计信息,则使用轮询的策略,只要统计资料足够,它将采用自己的规则
5.重新尝试规则-首先根据查询策略获取服务。如果服务失败,重新尝试将在指定的时间内完成,以便获得服务
6. BestAvailableRule - - 将因多个访问失败而处于故障状态的服务筛选,然后选择一个小型并行服务
7 . ZoneAvoidanceRule - - 默认规则,复合判断 Server 所在区域的性能和 Server 的可用行选择服务器。
Ribbon默认使用哪些负荷平衡算法:
ZoneAvoidanceRule: 内部近距离和区域间查询算法!
带是客户实现负荷平衡的远程调用组件,易于使用
带源核心:
ILoadBalancer接口:发挥上下作用
1.从Eureka下载的服务列表
2. 启用:使用IRule算法对客户调用负荷平衡
设计思想:每一个服务提供者都有自己的 ILoadBalanceruserService- - -》客户端有自己的 ILoadBalancerTeacherService- - -》客户端有自己的 ILoadBalancer
在客户端里面就是 Map<String, ILoadBalancer> iLoadBalancersMap<String, ILoadBalancer> iLoadBalancers 消费者端服务提供者的名称 value (服务列表 算法规则 )
https : //docs . spring . io/spring- cloud -openfeign/docs/2 . 2 . 4 . RE LEASE/reference/html/#spring- cloud -feign
Feign是一个声明性(注释)Web服务客户端。它使写网页服务客户更容易。要使用Feign,请创建一个接口并对其进行评论.它有嵌入式注释支持,包括Feign和JAX-RS。
Feign还支持插件编码器和解码器。Spring Cloud增加了 Spring MVC注释的支持,并支持使用HTTPMessageConverters,默认在春网中使用的注释。 Spring Cloud 集成了 Ribbon 和 Eureka 以及 Spring Cloud LoadBalancer,在使用Feign时提供负载平衡的http客户端。
Feign是用于http调用的一个远程调用组件(界面、注释)。
Feign 集成了 ribbon ribbon 里面集成了 eureka
熔断器,也叫断路器!(正常情况下 断路器是关的 只有出了问题才打开)用来保护微服务不雪崩的方法。思想和我们上面画的拦截器一样。
Hystrix是Netflix的一个开放源代码项目,它提供熔化功能,它可以防止分布式系统中的连接故障。Hystrix通过隔离服务的访问点来防止连接故障,并提供解决方案,这提高了整个分配系统的弹性。
你在项目中使用哪些开关? gateway zuul
它是由Spring Cloud正式提供新一代的交换元件,以取代Zuul(Netflix)
(zuul: 1 .0 , 2.0 , zuul 的本质,一组过滤器,根据自定义的过滤器顺序来执行,本质就是web 组件 web 三大组件(监听器 过滤器 servlet) 拦截 springmvc)
Zuul 1.0 使用 BIO ( Blocking IO ) tomcat7. 0 以前所有的 BIO 性能都是一般的
Zuul 2. 0 良好的性能 NIO
AIO异步非阻塞 io a+nio = aio = async + no blocking io
它基于 spring 5.x 、 springboot2. x 和 ProjectReactor 技术。
它的目标是使路由更简单、更灵活,它还提供一些强大的滤波功能,例如:熔化、限制流量、重新测试、自定义滤波器、标记检查、IP黑名单等。
SpringCloud Gateway作为 Spring Cloud生态的网关,目标是取代苏尔,在 SpringCloud2.0以上的版本中,没有新版本的zuul2.最新高性能的0或以上版本都集成了,Zuul 1 仍然使用.x [你可以看到项目取决于找到]非反应器模式的旧版本。为了提高开关的性能,SpringCloud Gateway基于WebFlux框架的实现,webFlux框架的底部使用Nety,一种高性能的Reactor模型通信框架
NIO(非阻塞 io) BIO你只需要知道开关能做什么,只需在开关内写代码
本文由 在线网速测试 整理编辑,转载请注明出处。