SpringCloudAlibaba 微服务讲解(一)微服务介绍
微服务介绍
1.1 系统架构的演变
随若互联网的发展,网站应用的规模也在不断的扩大,逬而导致系统架构也在不断的进行变化.从互联 网早起到现在,系统架构大体经历了下面几个过程:单体应用架构一蟻直应用架构--浴布式架构一 >SOA架构一〉微服务架构,当然还有悄然兴起的Service Mesh(服务网格化).接下来我们就来了解一下 每种系统架构是什么样子的,以及各有什么优缺点.
1.1.1 单体应用架构
互联网早期,一版的网站应用流量较小,只需要一个应用,将所有功能代码都部署在一起就可以,这样可以减少开阿发、部署、和维护的成本。
比如说一个电商系统,里面会包含狠毒哦用户管理、商品管理、订单管理、物流管理等等很多模块,我们会把他们做成一个web项目,然后部署到一台tomcat服务器上。

优点:
- 项目架构简单,小型项目的话,开发成本低
 - 项目保护署在一个节点上、维护方便
 
缺点:
- 全部功能集成在一个工程中,对于大兴项目来讲不易开发和维护
 - 项目模块之间紧密耦合,单店容错率低
 - 无法针对不同模块进行针对性优化和水平扩展
 
1.1.2 垂直架构应用
随着访问最的逐渐増大,单一应用只能依靠增加节点来应对,但是这时候会发现并不是所有的模块都会 有比较大的访问量.
还是以上面的电商为例子,用户访问昆的增加可能影响的只是用户和订单模块,但是对消,息模块 的影响就比较小.那么此时我们希望只多増加几个订单模块,而不増加消息模块.此时单体应用就做不 到了,垂直应用就应运而生了.
所调的垂直应用架构,就是将原来的f 应用拆成互不相干的几个应用,以提升效率.比如我们可 以将上面电商的单体就拆分成:
- 电商系统(用户管理 商品管理订单管理)
 - 后台系统(用户管理 订单管理 客户管理)
 - CMS系统(广告管理 营销管理)
 
这样拆分完毕之后,一旦用户访问量变大,只需要増加电商系统的节点就可以了,而无需増加后台 和CMS的节点.

1.1.3 分布式系统架构
当垂直应用越来越多,重复的业务代码就会越来越多.这时候,我们就思考可不可以将重复的代码抽取 出来,做成统一的业务层作为独立的服务,然后由前端控制层调用不同的业务层服务呢?这就产生了新 的分布式系统架构.它将把工程拆分成表现层和服务层两个部分,服务层中包含业务逻辑.表现层只需 要处理和页面的交互,业务逻辑都是调用服务层的服务来实现.

优点:
- 抽取公共的功能为服务层。提高代码的服用性
 
缺点:
- 系统间耦合度变高,调用搞关系错综复杂
 
1.1.4 SOA 架构
分布式架构下,当服务越来越多,容最的评估,小服务资源的浪费等问题逐渐显现,此时需増加f 调度中心对集群进行实时管理.此时,用于资源调度和治理中-CXSOA Service OrientedArchitecture, 面向服务的架构)是关键.

优点:
- 使用注册中心解决服务间的调用关系,一单某个缓解出错会应影响较大
 - 服务关心复杂、运维、测试部署困难
 
1.1.5 微服务架构
微服务架构在某种程度上是面向服务的架构SOA继续发展的下一步,它更加强调服务的”彻底拆分“

优点:
- 服务原子化拆分,独立打包、部署和升级,保证每个微服务清晰的任务划分,利于扩展
 - 微服务之间采用Restful等轻量级http协议相互调用
 
缺点:
- 分布式系统开发的技术成本高(容错、分布式事务等)
 
1.2 微服务架构介绍
微服务架构,简单的说就是将单体应用进一步拆分,拆分成更小的服务,没个服务都是一个可以独立运行的项目
1.2.1 微服务架构的常见问题
一旦采用微服务系统架构,就势必会遇到这样几个问题:
- 这么多小服务,如果管理它们
 - 这么多小服务,它们之间如何通讯
 - 这么多小服务,客户端怎么访问
 - 这么多小服务,一旦出现问题,应该如何自处理
 - 这么多小服务,一旦出现问题,应该如何拍错
 
对于上面的问题,是任何一个微服务设计者都不能绕过去的,因此大部分的稍微服务产品都是针对一个问题,提供一个相应的组件来解决他们

1.2.2 微服务架构的常见概念
1.2.2.1 服务治理
*服务治理就是进行服务的自动化管理,其核心是服务的自动注册与发现
服务注册:服务实例将自身的服务信息注册到注册中心
服务发现:服务实例通过注册中心,获取到注册到其中的服务实例的信息,通过这些信息去请求他们提供服务。
服务剔除:服务注册中心将出问题的服务自动剔除到可用列表之外,使其不会被调用到

1.2.2.2 服务调用
在服务架构中,通常存在多个服务之间的远程调用的需求,目前主流的远程调用技术有基于HTTP的Restful接口以及基于TCP的RPC协议
- REST(Representational State Transfer):这基一种HTTP调用的格式,更标准,更通用,无论哪种语言都支持http协议
 - RPC(Remote Promote Call):一种进程间的通讯方式,允许想调用本地服务一样调用远服务,RPC框架的主要目标使就是让远程调用更简单、透明。RPC框架负责屏蔽底层的传输方式,序列化方式和通信细节,开发人员在使用的时候只需要了解谁在什么位置提供什么样的远程服务接口即可,并不需要关心底层通信细节和调用个过程
 
区别与联系:
| 比较项 | RESTful | RPC | 
|---|---|---|
| 通讯协议 | HTTP | 一般用tcp | 
| 性能 | 略低 | 较高 | 
| 灵活度 | 高 | 较高 | 
| 应用 | 微服务架构 | SOA架构 | 
1.2.2.3 服务网关
随着微服务的不断増多,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务 的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信可能出现:
- 客户端需要调用不同的url地址,増加难度
 - 在一定的场景下,存在跨域请求的问题
 - 每个微服务都需要进行单独的身份认证
 
针对这些问题,API网关顺勢而生.
API网关直面意思是将所有API调用统一接入到API网关层,由网关层统一接入和输出。一个 网关的基本功能有:统一接入、安全防护、协议适配、流量管控、长短链接支持、容错能力。有了网关之后,各个 API服务提供团队可以专注于自己的的业务逻辑处理,而API网关更专注于安全、流量、路由等问题.

1.2.2.4 服务容错
在微服务当中,一个请求经常会涉及到调用几个服务,如果其中某个服务不可用,没有做服务容错的话,极有可能会造成一连串的服务不可用,这就是雪崩效应。我们没法预防雪崩效应的发生,只能尽可能去做好容错。服务容错的三个核心思想是:
- 不被外界环境影响
 - 不被上游请求压垮
 - 不被下游祥响应拖垮
 

1.2.2.5 链路追踪
随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要设计多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发,可能使用不同的编程语言来实现,有可能部署在几千台的服务器上,横跨多个不同的数据中心,因此,就需要对一次请求设计的多个来服务链路进行日志记录,性能监控技链路追踪

1.2.3 微服务架构的常见解决方案
1.2.3.1 ServiceComb

Apache ServiceComb,前身是华为云的微服务引擎CSE (Cloud Service Engine)云服务,是全球首个 Apache微服务顶级项目.它提供了一站式的微服务开源解决方案,致力于帮助企业、用户和开发者将企业应用轻松微服务化上云,并实现对微服务应用的高效运维管理.
1.2.3.2 SpringCloud

SpringCloud 是一系列框架的集合,它利用Spring Boot的开发便利性巧妙的简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署
SpringCloud 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经的起实际考验的服务框架组合起来,通过SpringBoot风格进行在封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包
1.2.3.3 SpringCloud Alibaba

Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的 必需组件,方便开发者通过Spring Cloud编程模型轻松使用这些组件来开发分布式应用服务..
1.3 Spring Cloud Alibaba 介绍
Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的 必需组件,方便开发者通过Spring Cloud编程模型轻松使用这些组件来开发分布式应用服务.依托 Spring Cloud Alibaba,您只需要添加注解和少量配置,就可以将Spring Cloud应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统
1.3.1主要功能
服务限流降级:默认支持WebServlet、WebFlux、 OpenFeign、 RestTemplate、 Spring CloudGateway、 Zuul、Dubb。和RocketMQ限流降级功能的接入,可以在运行时通过控制台 实时修改限流降级规则,还支持查看限流降级Metrics监控。
服务注册与发现:适配Spring Cloud服务注册与发现标准,默认集成了 Ribbon的支持。
分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
消息驱动能力:基于Spring Cloud Stream为微服务应用构建消,息驱动能力。
分布式事务:使用@GlobalTransactional注解,高效并且对业务零侵入地解决分布式事务问题.。
阿里云对象存储:阿里云提供的海富、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于Cron表达式)任务调度服务. 同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker (schedulerx-client) 上执行。
阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建 客户触达通道。
1.3.2 组件
- Sentinel:把流最作为切入点,从流景控制、熔断降级、系统员载保护等多个维度保护服务的稳定性。
 - Nacos:一更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
 - RocketMQ: 一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
 - Dubbo:Apache Dubbo 是一款高性能的java RPC框架
 - Seata:阿里巴巴开源产品,—易于使用的高性能微服务分布式事务解决方案。
 - Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心 产品。
 - Alibaba Cloud OSS:阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云提 供的海最、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和 访问任意类型的瞄。
 - Alibaba Cloud SchedulerX:中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于Cron表达式)任务调度服务。
 - Alibaba Cloud SMS:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速 搭建客户。
 
SpringCloudAlibaba 微服务讲解(一)微服务介绍的更多相关文章
- SpringCloudAlibaba 微服务讲解(二)微服务环境搭建
		
微服务环境搭建 我们这次是使用的电商项目的商品.订单.用户为案例进行讲解 2.1 案例准备 2.1.1 技术选型 maven :3.3.9 数据库:mysql 持久层:SpringData JPA S ...
 - SpringCloudAlibaba 微服务讲解(三)Nacos Discovery-服务治理
		
3.1 服务治理 先来思考一个问题,通过上一章的操作,我们已经实现微服务之间的调用,但是我们把服务提供者的网络地址(ip,端口)等硬编码到了代码中,这种做法存在许多问题: 一旦服务提供者地址变化,就需 ...
 - SpringCloudAlibaba 微服务讲解(四)Sentinel--服务容错(一)
		
4.1 高并发带来的问题 在微服务中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现网 ...
 - Chris Richardson微服务翻译:微服务介绍
		
作者简介:Chris Richardson,世界著名的软件架构师,经典著作<POJOS IN ACTION>的作者,cloudfoundry.com 的创始人 微服务目前正受到大量的关注, ...
 - SpringCloud微服务服务间调用之OpenFeign介绍
		
开发微服务,免不了需要服务间调用.Spring Cloud框架提供了RestTemplate和FeignClient两个方式完成服务间调用,本文简要介绍如何使用OpenFeign完成服务间调用. Op ...
 - 【转】「Chris Richardson 微服务系列」微服务架构的优势与不足
		
Posted on 2016年5月4日 编者的话|本文来自 Nginx 官方博客,是微服务系列文章的第一篇,主要探讨了传统的单体式应用的不足,以及微服务架构的优势与挑战. 作者介绍:Chris Ric ...
 - Dubbo Ecosystem - 从微服务框架到微服务生态
		
从微服务框架到微服务生态,这是微服务发展的必然趋势,也是Dubbo社区满足开发者更高效的构建微服务体系期望的使命和担当. 近期,Apache Dubbo PPMC 望陶(社区昵称:ralf0131)做 ...
 - Chris Richardson微服务翻译:微服务部署
		
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服务部署( ...
 - Chris Richardson微服务翻译:微服务之事件驱动的数据管理
		
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理(本文) 微服 ...
 
随机推荐
- C# 在PDF中添加墨迹注释Ink Annotation
			
PDF中的墨迹注释(Ink Annotation),表现为徒手涂鸦式的形状:该类型的注释,可任意指定形状顶点的位置及个数,通过指定的顶点,程序将连接各点绘制成平滑的曲线.下面,通过C#程序代码介绍如何 ...
 - Solution -「UR #2」「UOJ #32」跳蚤公路
			
\(\mathcal{Description}\) Link. 给定一个 \(n\) 个点 \(m\) 条边的带权有向图,每条边还有属性 \(s\in\{-1,0,1\}\).对于每个 \(u ...
 - Solution -「AGC 029E」「AT 4504」Wandering TKHS
			
\(\mathcal{Description}\) Link. 给一棵 \(n\) 个点的树,从某个点出发,遍历时必须走到已经走过的连通块所邻接的编号最小的结点.求从每个点出发,走到 \(1\ ...
 - suse 12 二进制部署 Kubernetets 1.19.7 - 第07章 - 部署kube-controller-manager组件
			
文章目录 1.7.部署kube-controller-manager 1.7.0.创建kube-controller-manager请求证书 1.7.1.生成kube-controller-manag ...
 - c++ istream_iterator ostream_iterator
			
istream_iterator/ostream_iterator void stream_iter_odd_even(const string &in_file, const string ...
 - Java的泛型机制
			
Java的泛型机制 泛型是 Java 从 JDK5 开始引入的新特性,本质上是参数化类型,即所操作的数据类型被指定为一个参数.这意味着编写的代码可以被很多不同类型的对象所重用. 1. 泛型的使用方式 ...
 - SopringBoot2.x整合Redis
			
1.导入相关依赖 <!-- redis 依赖 --> <dependency> <groupId>org.springframework.boot</grou ...
 - SpringBoot整合Redis案例缓存首页数据、缓解数据库压力
			
一.硬编码方式 1.场景 由于首页数据变化不是很频繁,而且首页访问量相对较大,所以我们有必要把首页数据缓存到redis中,减少数据库压力和提高访问速度. 2.RedisTemplate Jedis是R ...
 - 录毛线脚本,直接手写接口最简洁的LoadRunner性能测试脚本(含jmeter脚本)
			
近日翻看了下招聘信息,很多都要求loadrunner和jmeter这两款工具,毕竟是性能测试的主流客户端并发工具. 录制的问题 做性能脚本是性能测试的基本功,loadrunner和jmeter这两款工 ...
 - 企业BI应用解决方案主要包括哪些方面?
			
BI的地位 在实际的BI应用过程中,很多企业对数据分析的概念仅为雏形,且业务人员往往难以了解自身数据分析的需求.这就造成很多BI需求调研在和业务人员沟通的环节,业务人员难以明确需求,这使得BI沦为一个 ...