01_前言闲聊
微服务的概念提出已经有几年了,相对于传统技术架构来说微服务不仅仅是新一代架构,更是具有划时代意义的架构。目前国外一些大型互联网公司如亚马逊、Netflix、Spotify和一些传统 公司如沃尔玛都已经采用微服务架构并且实际效果非常好。
与此同时,微服务架构在国内一直不温不火, 大多呈观望态势,直到容器技术的出现,为微服务架构的落地完成了最后一块拼图, 国内IT公司对微服务架构的热情才大增,从各种微服务培训大会一票难求可见一斑。
国内很多公司已经开始或正在着手准备使用微服务架构,与市场需求暴增对应的是巨大的人才缺口,市面上相关材料、书籍的信息量很小,且大多偏技术实现,既缺少理论的指导又缺少项目实践,无法满足最终用户的需求。最重要的是还没有介绍Spring Boot+Spring Cloud的书问世,它可是当前世界上最主流的微服务技术实现,这多少影响了微服务在国内的发展。
文章有点长,老铁们收藏下来慢慢观看
02_零基础微服务架构理论入门
什么是微服务
- 微服务是一种架构风格
- 一个应用拆分为一组小型服务
- 每个服务运行在自己的进程内,也就是可独立部署和升级
- 服务之间使用轻量级HTTP交互
- 服务围绕业务功能拆分
- 可以由全自动部署机制独立部署
- 去中心化,服务自治。服务可以使用不同的语言、不同的存储技术
主题词01:现代数字化生活-落地维度
- 手机
- PC
- 智能家居
- …
主题词02:分布式微服务架构-落地维度
满足哪些维度?支撑起这些维度的具体技术?
- 服务调用
- 服务降级
- 服务注册与发先
- 服务熔断
- 负载均衡
- 服务消息队列
- 服务网关
- 配置中心管理
- 自动化构建部署
- 服务监控
- 全链路追踪
- 服务定时任务
- 调度操作
Spring Cloud简介
是什么?符合微服务技术维度
SpringCloud=分布式微服务架构的站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶
猜猜SpringCloud这个大集合里有多少种技术?
SpringCloud俨然已成为微服务开发的主流技术栈,在国内开发者社区非常火爆。
“微”力十足,互联网大厂微服务架构案例
京东的:
阿里的:
京东物流的:
Spring Cloud技术栈
总结
03_第二季Boot和Cloud版本选型
源码私信博主777获取
Spring Boot 2.X 版
- 源码地址私信博主777获取
- Spring Boot 2 的新特性
- 通过上面官网发现,Boot官方强烈建议你升级到2.X以上版本
Spring Cloud H版
- 源码地址
- 官网
Spring Boot 与 Spring Cloud 兼容性查看
- 文档
- JSON接口
接下来开发用到的组件版本
- Cloud - Hoxton.SR1
- Boot - 2.2.2.RELEASE
- Cloud Alibaba - 2.1.0.RELEASE
- Java - Java 8
- Maven - 3.5及以上
- MySQL - 5.7及以上
04_Cloud组件停更说明
停更引发的“升级惨案”
- 停更不停用
- 被动修复bugs
- 不再接受合并请求
- 不再发布新版本
Cloud升级
- 服务注册中心
- × Eureka
- √ Zookeeper
- √ Consul
- √ Nacos
服务调用
- √ Ribbon
- √ LoadBalancer
服务调用2
- × Feign
- √ OpenFeign
服务降级
- × Hystrix
- √ resilience4j
- √ sentienl
服务网关
- × Zuul
- ! Zuul2
- √ gateway
服务配置
- × Config
- √ Nacos
服务总线
- × Bus
- √ Nacos
05_父工程Project空间新建
约定 > 配置 > 编码
创建微服务cloud整体聚合父工程Project,有8个关键步骤:
- New Project - maven工程 - create from archetype: maven-archetype-site
- 聚合总父工程名字
- Maven选版本
- 工程名字
- 字符编码 - Settings - File encoding
- 注解生效激活 - Settings - Annotation Processors
- Java编译版本选8
- File Type过滤 - Settings - File Type
archetype 英 [ˈɑːkitaɪp] 美 [ˈɑːrkitaɪp]
n. 典型
site 英 [saɪt] 美 [saɪt]
n. (建筑物、城镇等的)地点,位置,建筑工地;现场;发生地;场所;网站;站点
v. 使坐落在;为…选址
06_父工程pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lun</groupId>
<artifactId>LearnCloud</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging><!-- 这里添加,注意不是jar或war -->
<!-- 统一管理jar包版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<lombok.version>1.16.18</lombok.version>
<mysql.version>5.1.47</mysql.version>
<druid.version>1.1.16</druid.version>
<mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
</properties>
<!-- 子模块继承之后,提供作用:
锁定版本+子modlue不用写groupId和version -->
<dependencyManagement>
<dependencies>
<!--spring boot 2.2.2-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>