微服务等于Spring Cloud的吗?
不等于,Spring Cloud仅仅是其中一部分。
将一个单体的项目拆分为一个个独立的项目,每个项目完成一部分业务功能,将来独立开发和部署。我们把这样一个独立的项目称为一个微服务。一个大型的互联网项目往往包含成百上千个服务,最终形成一个服务集群。
一个业务往往由多个服务共同完成。比如说,当一个请求来了,她可能先调用了服务a,服务a调用了服务b,服务b又调用了服务c。当服务越来越多时,这些调用关系就越来越复杂。这么复杂的一个调用关系,靠人去维护记录就没有必要。那怎么处理呢,这就有组件—注册中心。
记录微服务中每一个服务的ip、端口、以及她们能干什么
当有一个服务需要去调用另一个服务时,她不需要自己去记录对方的ip信息,只需要去找注册中心,从她那拉取。
同时,随着服务越来越多,每一个服务都有她自己的配置文件,当我们要更改配置,如果我们逐一修改,那就太麻烦了,所以在微服务里还有一个组件—配置中心。
统一管理服务群里成千上百的配置
假设以后有微服务的配置需要更新,只需要找到配置中心,
它会去通知相关的微服务,实现配置的热更新。
当我们的微服务运行起来之后,用户就可以来访问我们了,这时候我们的主角—服务网关就登场了。因为我们有那么多微服务,用户怎么知道访问哪一个呢?而且也不是随便一个人就可以访问我们的微服务的。
一部分对用户的身份做校验
另一部分就是将用户的请求路由到具体的服务,同时实现负载均衡
首先,数据库肯定也是一个集群,但是数据库再多也没有用户多,如何提高效率和抗住高并发呢?这就需要—分布式缓存了。
分布式的缓存也是一个集群
请求先到缓存,缓存未命中,再去查询数据库
简单数据可以用缓存,但是一些复杂数据的搜索和分析,缓存也做不了,这时候就需要用到—分布式搜索。
那么数据库做什么呢?
主要是做一些写操作还有对数据库要求高的数据存储。
为什么要有它呢?微服务中一个业务往往跨用了多个服务,整个业务的链路就很长。调用时长就会等于每个服务的调用时长之和,所以其实性能是有一定的下降的。
那么什么是异步通信呢?
就是说我服务a不是去调用服务b,而是去通知服务b,然后我服务a就结束了。所以业务链路就变短了,响应时间也变短了。它的吞吐能力就变强了。可以大大提高并发量。
在如此庞大的一个微服务中,如果出现了问题,好排查吗?不太好排查,所以需要引进两个组件来解决这个问题。一个便是—分布式日志服务。
它可以去统计整个微服务中成千上百的服务的运行日志,统一地去做一个存储、分析。将来出现问题便好定位了。
另一个便是—系统的监控链路追踪
它可以去实时地监控我们系统中每一个结点的运行状态、cpu的负载、内存的占用等。一旦出现任何问题,直接可以定位到具体的某一个方法。
这么大一个微服务,如何部署呢?还采用人工部署,显然不行。因此,我们需要一种自动化的部署。
利用Jenkins工具对微服务进行自动化编译,基于docker再进行打包,形成镜像在基于kubernetes或RANCHER等技术进行自动化部署。这一套我们称之为持续集成。
结合微服务技术再加上持续集成,这才是完整的微服务技术栈。
接下来我们来系统得认识一下微服务
随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢?
了解微服务架构的优缺点
单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。
优点:
缺点:
分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。
分布式架构的优缺点:
优点:
缺点:
分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考:
人们需要制定一套行之有效的标准来约束分布式架构。----出现了一系列技术
近几年出现的最火的莫过于微服务?什么是微服务?
微服务的架构特征:
微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。
因此,可以认为微服务是一种经过良好架构设计的分布式架构方案 。
但方案该怎么落地?选用什么样的技术栈?全球的互联网公司都在积极尝试自己的微服务落地方案。
其中在Java领域最引人注目的就是SpringCloud提供的方案了。什么是SpringCloud呢?
SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud。
SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。
其中常见的组件包括:
另外,SpringCloud底层是依赖于SpringBoot的,并且有版本的兼容关系,如下:
接下来学习的版本是 Hoxton.SR10,因此对应的SpringBoot版本是2.3.x版本。
单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统
分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝
微服务:一种良好的分布式架构方案
①优点:拆分粒度更小、服务更独立、耦合度更低
②缺点:架构非常复杂,运维、监控、部署难度提高
SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件