您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

什么是分布式微服务架构?三分钟彻底弄懂什么是分布式和微服务

时间:2020-02-06 10:45:44  来源:  作者:

一、微服务简介

1. 微服务的诞生

微服务是基于分而治之的思想演化出来的。过去传统的一个大型而又全面的系统,随着互联网的发展已经很难满足市场对技术的需求,于是我们从单独架构发展到分布式架构,又从分布式架构发展到 SOA 架构,服务不断的被拆分和分解,粒度也越来越小,直到微服务架构的诞生。

微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。

每个服务运行在其独立的进程中,服务和服务间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。

2. 微服务架构与SOA架构的区别

微服务是真正的分布式的、去中心化的。把所有的“思考”逻辑包括路由、消息解析等放在服务内部,去掉一个大一统的 ESB,服务间轻通信,是比 SOA 更彻底的拆分。

微服务架构强调的重点是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发,设计,运行和运维的小应用,这些小应用之间通过服务完成交互和集成。

3. 微服务架构引发的问题

随着整个业务数据被分散在各个子服务之后,也带来了两个最明显的问题。

  • 业务管理系统对数据完整性查询,比如分页查询、多条件查询等,数据被割裂后如何来整合?
  • 数据分析挖掘,这些需求可能需要分析全量的数据,并且在分析时不能影响到当前业务

从技术方案来讲,我们一般有两种选择来处理这些问题,第一种是在线处理数据,第二种是离线处理数据。

  • 在线处理数据的方案:通过微服务提供的接口来获取数据,然后进行数据整合,不过这种方式有着明显的弊端,就是调用者需要编写大量的代码进行数据处理。其次在对各个微服务进行调取数据时会影响微服务的正常业务处理性能
  • 离线处理数据方案:将业务数据准实时的同步到另外一个数据库中,在同步的过程中进行数据整合处理,以满足业务方对数据的需求,数据同步过来后,再提供另外一个服务接口专业负责对外输出数据信息,这种方案有两个特点:①数据同步方案是关键,技术选型有很多,如何选择切合公司业务的技术方案;②离线数据处理对微服务正常业务处理没有影响。

推荐使用第二种,利用 Spring Boot 和 MongoDB 可以轻松的解决这个问题,通过技术手段将分裂到 N 个微服务的数据同步到 MongoDB 集群中,在同步的过程中进行数据清洗,来满足公司的各项业务需求

在微服务架构中,有 大难题,那就是服务故障的传播性、服务的划分和分布式事务。

二、CAP 理论

Consistency :指数据的强一致性。如果写入某个数据成功,之后读取,读到的都是新 写入的数据:如果写入失败,之后读取的都不是写入失败的数据。

Availability :指服务的可用性

Partition-tolerance :指分区容错

在分布式系统中 P是基本要求,而单体服务是 CA 系统, 微服务系统通常是 AP 系统,即同时满足了可用性和分区容错。

这就有了 个难题:在分布式系统中如何保证数据的一致性?这就是大家经常讨论的分布式事务

三、分布式事务

在微服务架构中,分布式事务 般的解决办法就是两阶段提交或者 三阶段提交,不管使用哪都存在事务失败,导致数据不 致的情况,关键时刻还得人工去恢复数据。

  • 第一阶段:发起一个分布式事务,交给事务协调器TC处理,TC向多有的参与事务的节点发送处理事务操作的准备操作。所有的参与节点执行准备操作,将Undo和Redo 信息写进日志,并向事务管理器返回准备操作是否成功
  • 第二阶段:事务管理器收集所有节点的准备操作是否成功,如果都成功,则通知所有的节点执行提交操作;如果有 个失败,则执行回滚操作
什么是分布式微服务架构?三分钟彻底弄懂什么是分布式和微服务

 

两阶段提交,将事务分成两部分能够大大提高分布式事务成功的概率。如果在第 阶段都成功了,而执行第 阶段的某 个节点失败,仍然导致数据的不准确,这时一般需要人工去处 理,这就是当初在第一步记录日志的原因。另外,如果分布式事务涉及的节点很多,某 个节 点的网络出现异常会导致整个事务处于阻塞状态,大大降低数据库的性能。所以一般情况下, 尽量少用分布式事务。

四、服务划分

横向拆分:按照不同的业务域进行拆分,例如订单、营销、风控、积分资源等。形成独立的业务领域微服务集群。

纵向拆分:把一个业务功能里的不同模块或者组件进行拆分。例如把公共组件拆分成独立的原子服务,下沉到底层,形成相对独立的原子服务层。这样一纵一横,就可以实现业务的服务化拆分。

要做好微服务的分层:梳理和抽取核心应用、公共应用,作为独立的服务下沉到核心和公共能力层,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求

总之,微服务的设计一定要渐进式的,总的原则是服务内部高内聚,服务之间低耦合。

微服务特点

按照业务划分服务,单个服务代码量小,业务单一,易于维护 每个微服务都有自己独立的基础组件,例如数据库、缓存等且运行在独立的进程中 微服务之间的通信是通过HTTP协议或者消息组件,且具有容错能力 微服务有一套服务治理的解决方案,服务之间不耦合,可以随时加入和剔除 单个微服务能够集群化部署,并且有负责 均衡的能力 整个微服务系统应该有完整的安全机制,包括用户验证,权限验证,资源保护 整个微服务系统有链路追踪的能力 有一套完整的实时日志系统

1. 给数据库带来的挑战

随着服务拆分后,我们遇到最大的问题就是后台管理的联合查询,每个微服务都有自己独立的数据库,那么后台该怎么处理?

这里一般有如下几种方式:

  1. 严格按照微服务的划分来做,微服务相互独立,各微服务数据库也独立,后台需要展示数据时,调用各微服务的接口来获取对应的数据,再进行数据处理后展示出来,这是标准的用法,也是最麻烦的用法。
  2. 将业务高度相关的表放到一个库中,将业务关系不是很紧密的表严格按照微服务模式来拆分,这样既可以使用微服务,也避免了数据库分散导致后台系统统计功能难以实现,是一个折中的方案。
  3. 数据库严格按照微服务的要求来切分,以满足业务高并发,实时或者准实时将各微服务数据库数据同步到NoSQL数据库中,在同步的过程中进行数据清洗,用来满足后台业务系统的使用,推荐使用MongoDB、HBase等。

三种方案在不同的公司我都使用过,第一种方案适合业务较为简单的小公司;第二种方案,适合在原有系统之上,慢慢演化为微服务架构的公司;第三种适合大型高并发的互联网公司

五、熔断器

为了解决分布式系统的雪崩效应,分布式系统引进了熔断器机制

当一个服务的处理用户请求的失败次数在一定时间内小于设定的阀值时,熔断器出于关闭状态,服务正常。

当服务处理用户请求失败次数在一定时间内大于设定的阀值时,说明服务出现故障,打开熔断器,这是所有的请求会快速失败,不执行业务逻辑

当处于打开状态的熔断器时,一段时间后出于半打开状态,并执行一定数量的请求,剩余的请求会执行快速失败,若执行请求失败了,则继续打开熔断器,若成功了,则将熔断器关闭

什么是分布式微服务架构?三分钟彻底弄懂什么是分布式和微服务

 

熔断器不仅能防止系统的“雪崩”效应,还具有以下作用

  • 将资源进行隔离
  • 服务降级的功能
  • 自我修复能力

六、服务网关

在微服务系统中,API 接口资源通常是有服务网关(也称API网关)统一暴露,内部服务不直接对外提供API资源的暴露。好处在于隐藏内部服务,保护系统安全

网关层通常以集群的形式存在。并在服务网关层前通常会加上Nginx 用来负载均衡

网关意义:

  • 网关将所有服务的API接口资源统一聚合,对外统一暴露
  • 网关可以做一些用户身份认证,权限认证,防止非法请求操作API 接口,对内部服务起到保护作用
  • 网关可以实现监控功能,实时日志输出、对请求进行记录
  • 网关可以用来做流量监控,在高流量的情况下,对服务进行降级
  • API 接口从内部服务分离出来,方便做测试

当然,网关实现这些功能,需要做高可用,否则网关很可能成功架构的瓶颈,最常用的网关组件Zuul、Nginx

七、服务配置统一管理

在微服务架构中,需要有统一管理配置文件的组件,例如:SpringCloud Config组件、阿里的Diamond、百度的Disconf、携程的Apollo等

八、服务链路追踪

在微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与、参与顺序,是每个请求链路清晰可见,便于问题快速定位

常用链路追踪组件有google的DApper、Twitter 的Zipkin,以及阿里Eagleeye(鹰眼)

九、微服务框架

市面常用微服务框架有:Spring Cloud 、Dubbo 、kubernetes

什么是分布式微服务架构?三分钟彻底弄懂什么是分布式和微服务

 

  • 从功能模块上考虑,Dubbo缺少很多功能模块,例如网关、链路追踪等
  • 从学习成本上考虑,Dubbo 版本趋于稳定,稳定完善、可以即学即用,难度简单,Spring cloud 基于Spring Boot,需要先掌握Spring Boot ,例外Spring cloud 大多为英文文档,要求学习者有一定的英文阅读能力
  • 从开发风格考虑,Dubbo倾向于xml的配置方式,Spring cloud 基于Spring Boot ,采用基于注解和JAVABean配置方式的敏捷开发
  • 从开发速度上考虑,Spring cloud 具有更高的开发和部署速度
  • 从通信方式上考虑,Spring cloud 基于HTTP Restful 风格,服务于服务之间完全无关、无耦合。Dubbo 基于远程调用,对接口、平台和语言有强依赖性,如果需要实现跨平台,需要有额外的中间件。

所以Dubbo专注于服务治理;Spring Cloud关注于微服务架构生态。

十、SpringCloud常用组件

  • Eureka:服务注册和发现组件
  • Hystrix:熔断组件
  • Ribbon:负载均衡组件
  • Zuul:路由网关

以上4个组件来自于Netflix 公司,统称为Spring Cloud Netflix

  • Spring Cloud Config:配置文件统一管理
  • Spring Cloud Security:Spring Security组件封装,提供用户验证和权限验证,一般与Spring Security OAuth2 组一起使用,通过搭建授权服务,验证Token或者JWT这种形式对整个微服务系统进行安全验证
  • Spring Cloud Sleuth:分布式链路追踪组件,他分封装了Dapper、Zipkin、Kibana 的组件
  • Spring Cloud Stream:Spring Cloud框架的数据流操作包,可以封装RabbitMq,ActiveMq,Kafka,redis等消息组件,利用Spring Cloud Stream可以实现消息的接收和发送

一个简单的Spring Cloud 构建的微服务系统,通常由服务注册中心Eureka、网关Zuul、配置中心Config和授权服务Auth构成

什么是分布式微服务架构?三分钟彻底弄懂什么是分布式和微服务

 

Spring Cloud Netflix功能:

  • 服务发现:可以注册Eureka实例,并且客户端可以使用Spring托管的Bean发现实例
  • 服务发现:可以使用声明性Java配置创建嵌入式Eureka服务器
  • 断路器:Hystrix客户端可以使用简单的注释驱动的方法装饰器构建
  • 断路器:具有声明性Java配置的嵌入式Hystrix仪表板
  • 声明式REST客户端:Feign创建一个用JAX-RS或Spring MVC注释修饰的接口的动态实现。
  • 客户端负载均衡器:功能区
  • 外部配置:从Spring Environment到Archaius的桥梁(使用Spring Boot约定启用Netflix组件的本机配置)
  • 路由器和过滤器:Zuul过滤器的自动重新注册,以及用于反向代理创建的简单配置约定


Tags:微服务架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言要理解微服务,首先要先理解不是微服务的那些。通常跟微服务相对的是单体应用,即将所有功能都打包成在一个独立单元的应用程序。从单体应用到微服务并不是一蹴而就的,这是一...【详细内容】
2021-07-09  Tags: 微服务架构  点击:(112)  评论:(0)  加入收藏
一、Zuul简介Zuul相当于是第三方调用和服务提供方之间的防护门,其中最大的亮点就是可动态发布过滤器二、Zuul可以为我们提供什么1、权限控制2、预警和监控3、红绿部署、(粘...【详细内容】
2021-04-21  Tags: 微服务架构  点击:(230)  评论:(0)  加入收藏
前不久作为架构师完成了某知名快消企业的一个业务中台建设。系统上线后,经历了双十一活动的流量高峰,整体运行稳定。最近有空,便将此次架构的思路,心得稍作整理在这篇博客中分享...【详细内容】
2021-02-07  Tags: 微服务架构  点击:(182)  评论:(0)  加入收藏
文章简介:作者结合自身微服务架构研发经验进行回顾、总结,本文将介绍微服务架构中,在技术选型时需要注意哪些选型原则,会遇到哪些开源框架,又该如何选择, 进行了全面的归纳、对比,希望能够为大家提供一些思路、方向,少走一些...【详细内容】
2021-02-05  Tags: 微服务架构  点击:(160)  评论:(0)  加入收藏
思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary一、前言伴随着Eurka2.0版本已停止维护,开始要考虑使用微服务新一代的开源的注册中心...【详细内容】
2020-11-13  Tags: 微服务架构  点击:(159)  评论:(0)  加入收藏
消息总线的定义前面在1.4.2节中强调过,在微服务架构中,经常会使用REST 服务或基于消息的通信机制。在3.6节中也详细介绍了消息通信的实现方式。消息总线就是一种基于消息的通...【详细内容】
2020-09-29  Tags: 微服务架构  点击:(141)  评论:(0)  加入收藏
微服务的高级主题一自动扩展Spring Cloud 提供了大规模部署微服务所必需的支持。为了获得像云服务环境一样的能力, 微服务实例也应该能够根据流量的规模来自动扩展,也称自动缩...【详细内容】
2020-09-23  Tags: 微服务架构  点击:(96)  评论:(0)  加入收藏
Spring Cloud 微服务总体架构图Spring cloud作为当下主流的微服务框架,让我们实现微服务架构简单快捷,Spring cloud中各个组件在微服务架构中扮演的角色如图所示。spring-cl...【详细内容】
2020-09-20  Tags: 微服务架构  点击:(133)  评论:(0)  加入收藏
常见微服务的消费者本节就常见的微服务的消费者进行介绍。在Java领域比较常用的消费者框架主要有HttpClient、Ribbon、Feign 等。 Apache HttpClientApache HttpClient是Apa...【详细内容】
2020-09-11  Tags: 微服务架构  点击:(129)  评论:(0)  加入收藏
什么是微服务模式随着网络基础设施的高速发展,以及越来越多的个体接入互联网,在考虑构建支持海量请求以及多变业务的软件平台时,微服务架构成为多数人的首选。微服务架构的出现...【详细内容】
2020-09-09  Tags: 微服务架构  点击:(95)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(5)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(9)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(21)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(17)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(17)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条