1.微服务简介
微服务(不是一个框架 而是一种架构思想),是著名的 oo (面向对象, ObjectOriented )专家 Martin Fowler 提出来的,它是用来描述将软件应用程序设计为独立部署的服务的一种特殊方式。
最近两年,微服务在各大技术会议、文章、书籍上出现的频率已经让人意识到它对于软件领域所带来的影响力。微服务架构的系统是个分布式系统,按业务领域划分为独立的服务单元,有自动化运维、容错、快速演进的特点,它能够解决传统单体架构系统的痛点,同时也能满足越来越复杂的业务需求。
1.2 到底什么是微服务
就是将一个大的应用,拆分成多个小的模块,每个模块都有自己的功能和职责,每个模块可以进行交互,这就是微服务
对于微服务,业界没有严格统一的定义,但是作为“微服务”这名词的发明人,Martin Fowler对微服务的定义似乎更具有权威性和指导意义,他的理解如下:
简而言之,微服务架构的风格,就是将单一程序开发成一个微服务,每个微服务运行在自己的进程中,并使用轻量级通信机制,通常是HTTP RESTFUL API。这些服务围绕业务能力来划分构建的,并通过完全自动化部署机制来独立部署这些服务可以使用不同的编程语言,以及不同数据存储技术,以保证最低限度的集中式管理。
1.2.1 总结出微服务的特点
- 按业务(功能)划分为一个独立运行的程序,即服务单元。
- 服务之间通过 HTTP 协议相互通信。 http 是一个万能的协议 (web 应用都支持的模式)
- 自动化部署。
- 可以用不同的编程语言。
- 可以用不同的存储技术。
- 服务集中化管理。
- 微服务是一个分布式系统。
1.5 微服务的不足(正视它的不足)
凡事都有两面性,微服务也不例外,微服务相对于单体应用来说具有很多的优势,当然也有它
的不足,主要体现在如下方面:
-
微服务的复杂度
-
分布式事务问题
-
服务的划分(按照功能划分 还是按照组件来划分呢) 分工
-
服务的部署(不用自动化部署 自动化部署)
1.6 微服务架构的设计原则(项目起步搭建)
开闭原则 单一原则 6 大设计原则 架构设计和代码设计思路一样的 设计原则
2.SpringCloud 简介(管家 注重服务的管理)
Spring Cloud 作为 Java 语言的微服务框架,它依赖于 Spring Boot,有快速开发、持续交付和容易部署等特点。 Spring Cloud 的组件非常多,涉及微服务的方方面面,井在开源社区 Spring 和 Netflix、 Pivotal 两大公司的推动下越来越完善,如今 alibaba 也加入到其中。 spring 官方 netflix alibaba Spring Cloud 在开发部署上继承了 Spring Boot 的一些优点,提高其在开发和部署上的效率。
Spring Cloud 的首要目标就是通过提供一系列开发组件和框架,帮助开发者迅速搭建一个分布式的微服务系统。
Spring Cloud 是通过包装其他技术框架来实现的,例如包装开源的 Netflix oss 组件,实现了一套通过基于注解、 Java 配置和基于模版开发的微服务框架。 Spring Cloud 提供了开发分布式微服务系统的一些常用组件,例如服务注册和发现、配置中心、熔断器、远程调用,智能路由、微代理、控制总线、全局锁、分布式会话等。
2.1 SpringCloud 版本对应关系【开发重点】
A B C D E **F G H** I(2020 版) Hoxton.SR12 2.3.12.RELEASE
https://start.spring.io/actuator/info
2.2 SpringCloud 常用组件表 (管家)
服务的注册和发现。(eureka,nacos,consul)
服务的负载均衡。(ribbon,dubbo)
服务的相互调用。(openFeign,dubbo)
服务的容错。(hystrix,sentinel)
服务网关。(gateway,zuul)
服务配置的统一管理。(config-server,nacos,apollo)
服务消息总线。(bus)
服务安全组件。(security,Oauth2.0)
服务监控。(admin) (jvm)
链路追踪。(sleuth+zipkin)
2.3 总结
SpringCloud 就是微服务理念的一种具体落地实现方式,帮助微服务架构提供了必备的功能
目前开发中常用的落地实现有三种:
Dubbo+Zookeeper 半自动化的微服务实现架构 (别的管理没有)
SpringCloud Netflix 一站式微服务架构
SpringCloud Alibaba 新的一站式微服务架构
三大公司
Spring Netflix Alibaba