微服务与SpringCloud介绍
微服务
微服务简介
微服务(不是一个框架 而是一种架构思想),是著名的 oo (面向对象, Object Oriented )专家 Martin Fowler 提出来的,它是用来描述将软件应用程序设计为独立部署的服务的种特殊方式。
微服务架构的系统是个分布式系统,按业务领域划分为独立的服务单元,有自动化运维、容错、快速演进的特点,它能够解决传统单体架构系统的痛点,同时也能满足越来越复杂的业务需求。
单体架构不足
- 业务越来越复杂,单体应用的代码量越来越大,代码的可读性、可维护性和可扩展性下降,新人接手代码所需的时间成倍增加,业务扩展带来的代价越来越大。
- 随着用户越来越多,程序承受的并发越来越高,单体应用的并发能力有限。
- 测试的难度越来越大,单体应用的业务都在同个程序中,随着业务的扩张、复杂度的增加,单体应用修改业务或者增加业务或许会给其他业务带来定的影响,导致测试难度增加。
微服务概念
就是将一个大的应用,拆分成多个小的模块,每个模块都有自己的功能和职责,每个模块可以进行交互,这就是微服务。
对于微服务,业界没有严格统一的定义,但是作为“微服务”这名词的发明人,Martin Fowler对微服务的定义似乎更具有权威性和指导意义,他的理解如下:
微服务的特点
- 按业务(功能)划分为一个独立运行的程序,即服务单元。
- 服务之间通过 HTTP 协议相互通信。 http 是一个万能的协议 (web 应用都支持的模式)
- 自动化部署。
- 可以用不同的编程语言。
- 可以用不同的存储技术。
- 服务集中化管理。
- 微服务是一个分布式系统。
微服务的自动化部署(CI /CD)(持续集成 持续交付)![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/58c5d911f48e8bbc96e53c5ea9303e0b.png)
微服务的不足(正视它的不足)
- 微服务的复杂度
- 分布式事务问题
- 服务的划分(按照功能划分 还是按照组件来划分呢) 分工
- 服务的部署(不用自动化部署 自动化部署)
微服务架构的设计原则(项目起步搭建)
开闭原则 单一原则 6 大设计原则
有三大难题,那就是服务故障的传播性(熔断)、服务的划分和分布式事
务。
SpringCloud
简介
正常各个模块之间访问需要访问ip端口,但是当模块比较多的时候,将会有大量的ip端口号,这不利于模块之间相互访问,也不利于前端对模块进行访问,而SpringCloud提供了很多组件来解决这个问题。
目前有三家公司对SpringCloud进行支持。
- Spring Cloud 的首要目标就是通过提供一系列开发组件和框架,帮助开发者迅速搭建一个分布式的微服务系统。
SpringCloud 版本对应关系【开发重点】
A B C D E F G H I(2020 版) Hoxton.SR12 2.3.12.RELEASE
https://start.spring.io/actuator/info
SA为稳定版,从H版本开始版本名以时间命名,注意SpringCloud的版本要与SpringBoot版本相对应,ailibaba也是同样。
SpringCloud 常用组件表 (管家)
服务的注册和发现。(eureka,nacos,consul)
服务的负载均衡。(ribbon,dubbo)
服务的相互调用。(openFeign,dubbo)
服务的容错。(hystrix,sentinel)
服务网关。(gateway,zuul)
服务配置的统一管理。(config-server,nacos,apollo)
服务消息总线。(bus)
服务安全组件。(security,Oauth2.0)
服务监控。(admin) (jvm)
链路追踪。(sleuth+zipkin)
总结
SpringCloud 就是微服务理念的一种具体落地实现方式,帮助微服务架构提供了必备的功能
目前开发中常用的落地实现有三种:
Dubbo+Zookeeper 半自动化的微服务实现架构 (别的管理没有)
SpringCloud Netflix 一站式微服务架构
SpringCloud Alibaba 新的一站式微服务架构
三大公司
Spring Netflix Alibaba
微服务架构风格图
详细见pdf:file:///C:/Users/Vincent_lz/Desktop/%E6%88%90%E9%95%BF%E7%9B%AE%E6%A0%87/SpringCloud/%E5%8A%A8%E5%8A%9B%E8%8A%82%E7%82%B9SpringCloud+Alibaba/%E6%96%87%E6%A1%A3/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84.pdf