基础
-
JavaSE
-
数据库
-
前端
-
Servlet
-
Http
-
Mybatis
-
Spring
-
SpringMVC
-
-
Dubbo, Zookeeper, 分布式基础
-
Maven, Git
-
Ajax, Json
微服务架构四个核心问题
-
客户端如何访问
-
服务之间如何通信
-
如何治理服务
-
服务挂了, 如何处理
解决问题
-
Spring Cloud NeyFlix 一站式
-
api网关, zuul组件
-
Feign------Httpclinet-----Http通信方式 同步, 阻塞
-
服务注册发现:Eureka
-
熔断机制: Hystrix
-
....
-
-
Apache Dubbo Zookeeper 半自动, 整合其他的
-
API: 没有, 找第三方,或者自己实现
-
Dubbo
-
Zookeeper
-
没有:借助Hystrix
-
Dubbo这个方案不完善
-
-
Spring Cloud Alibaba 一站式 更简单
-
拥有所有的
-
服务网格-----Server Mesh
总的
-
API
-
HTTP,RPC
-
注册和发现
-
熔断机制
什么是微服务
-
架构思想/模式/风格
-
提供单一额应用程序分层成一组小的服务 模块化
-
服务运行独立, 服务之间相互协调,互相配置
-
服务能够独立的部署运行, 使用不同语言,不同存储构建
-
服务之间采用轻量级通信机制
-
每个服务围绕具体业务构建, 为用户提供最终价值
-
解耦, 单个服务独立进程
微服务和微服务架构
-
微服务: 注重点
-
微服务架构: 模式/风格
微服务优缺点
优点
-
单一职责原则
-
足够小, 开发效率高
-
单独开发
-
不同语言构建
-
易于和第三方集成, 自动部署
-
易于维护
-
只是逻辑的代码, 不会和HTML, CSS或其他界面混合
-
每个微服务都有自己的存储能力, 可以有自己的数据库, 也可以统一数据库
缺点
-
通信成本高
-
分布式系统的复杂性
-
运维压力大
-
系统部署依赖
-
数据不一致性
-
系统集成测试
-
性能监控
微服务技术栈
微服务条目 | 落地技术 |
---|---|
服务开发 | SpringBoot, Spring, SpringMvc |
服务配置与管理 | Netflix公司的Archaius,阿里的Diamond |
服务注册和发现 | Eureka, Consul, Zookeeper |
服务调用 | Rest, RPC, gRPC |
服务熔断器 | Hystrix, Envoy |
负载均衡 | RIbbon,Nginx |
服务接口调用(客户端调用服务的简化工具) | Feign |
消息队列 | Kafka,RabitMQ,ActiveMQ |
服务配置中心管理 | SpringClundConfig,Chef |
服务路由(API网关) | Zuul等 |
服务监控 | Zabbix,Nagios,Metrics,Specatator |
全链路追踪 | Zipkin,Brave,Dapper |
服务部署 | Docker,OpenStack,Kubernetes |
数据流操作开发包 | SpringCloud Stream(封装Redis, Rabbit,Kafka)等发送接收消息 |
事件消息总线 | SpringCloud Bus |
为什么选择SpringCloud作为微服务架构
-
整体解决方案和框架成熟度
-
社区热度
-
可维护性
-
学习曲线
SpringCloud
-
基于SpringBoot的微服务解决方案
-
包括: 注册与发现,配置中心,全链路监控,服务网关, 负载均可, 熔断器等组件
-
总之实现零配置的形式
SpringClund和SpringBoot的关系
-
SpringBoot专注于快速方便的开单个个体微服务
-
SpringCloud整合治理单个个体微服务, 集成服务
-
SpringBoot可以离开SprigCloud独立使用, 当是springCloud离不开SpringBoot
-
SpringBoot专注于快速, 方便的开发单个个体微服务, SpringCloud关注全局的服务治理框架
Dubbo和SpringCloud技术选型
-
分布式+服务治理Dubbo
-
成熟的互联网架构: 应用服务化拆分 + 消息中间件
-
网站架构图
-
-
Dubbo和SpringCloud对比
Dubbo | Spring | |
---|---|---|
服务注册中心 | Zookeeper | Spring Cloud Netfilx Eureka |
服务调用方式 | RPC | REST API |
服务监控 | Dubbo-monitor | Spring Boot Admin |
断路器 | 不完善 | Spring Cloud Netflix Hystrix |
服务网关 | 无 | Spring Cloud Netflix Zuul |
分布式配置 | 无 | Spring Cloud Config |
服务跟踪 | 无 | Spring Cloud Sleuth |
消息总线 | 无 | Spring Cloud Bus |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
-
最大区别在于服务调用方式
SpringCloud能做什么
-
分布式/版本控制配置
-
服务注册与发现
-
路由
-
服务到服务的调用
-
负载均衡配置
-
断路器
-
分布式消息管理
项目搭建
-
数据库
CREATE DATABASE db01;
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
`deptno` bigint(20) NOT NULL AUTO_INCREMENT,
`dname` varchar(60) NULL DEFAULT NULL,
`db_source` varchar(60) NULL DEFAULT NULL,
PRIMARY KEY (`deptno`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8
INSERT INTO `dept` VALUES (1, '开发部', DATABASE());
INSERT INTO `dept` VALUES (2, '人事部', DATABASE());
INSERT INTO `dept` VALUES (3, '财务部', DATABASE());
INSERT INTO `dept` VALUES (4, '市场部', DATABASE());
INSERT INTO `dept` VALUES (5, '运维部', DATABASE());
父项目springcloud
-
依赖