微服务架构进化论以及如何学习Spring Cloud
一、微服务架构进化论
1. 单体应用阶段
所有功能模块和组件都在一个单一的代码库中构建和部署。整个应用程序作为一个整体进行开发、测试和部署。
2. 垂直应用阶段(nginx负载均衡)
垂直架构是指将单体架构中的多个模块拆分为多个独立的项目。形成多个独立的单体架构。
我们以一个简单的电商项目为例,假设我们的业务分为用户、订单、商品、后台4个模块,我们现在要把这4个模块分别剥离出来,各自构成独立的web项目。
单个请求的处理速度上下降了。
现在假设用户模块以集群的方式部署在机器A和机器B,订单模块部署在机器C、D、E,用户如何查询自己的订单?
即各模块相互调用成了问题。
最后我们简单总结一下垂直拆分的优缺点。
优点:
系统之间的模块相互独立,从业务的角度上降低了耦合度;
可以针对不同的业务模块搭建集群,流量大的模块可以多部署几台机器,边缘模块甚至单机部署即可;
不同的模块可以由不同的团队负责,协同开发的影响降到最低
缺点:
模块与模块之间相互调用变得复杂
模块越来越多,代码冗余
3. 分布式系统阶段
4. 服务治理阶段
服务与服务之间的调用问题
服务治理(SOA)
服务总线:服务注册、调用、路由、事件框架
5. 微服务阶段
什么是微服务:将系统的业务功能划分为极小的独立微服务,每个微服务只关注于完成某个小的任务。系统中的单个微服务可以被独立部署和扩展,且各个微服务之间是高内聚、松耦合的。微服务之间采用轻量化通信机制来实现通信
服务网关:前台 比如Spring Cloud Gateway
熔断机制:服务都是有限制的
工作效率监督:Sleuth,日志监控ELK
配置中心:应用配置、业务配置、缓存配置
微服务的拆分规范和原则
1. 压力模型拆分
压力模型简单来说就是用户访问量,我们要识别出某些超高并发量的业务,尽可能把这部分业务独立拆分出来
压力模型拆解为三个维度:
1)高频高并发场景 (商品详情页)
2)低频突发流量场景(秒杀场景)
3)低频流量场景 (商品图文编辑)
2. 业务模型拆分
业务模型拆分的维度有很多,我们在实际项目中应该总和各个不同维度做考量。这里主要从主链路、领域模型和用户群体三个维度。
1)主链路
在电商领域"主链路"是一个很重要的业务链条,它是指用户完成下单场景所必须经过的场景。比如商品搜索->商品详情页->购物车模块->订单结算->支付业务
核心主链路拆分,有以下几个目的:
异常容错
调配资源
服务隔离
3. 领域模型拆分
领域驱动设计DDD(Domain-Driven Design 领域驱动设计)
4. 用户群里拆分
根据用户群体做拆分,我们首先要了解自己的系统业务里有哪些用户,比如说电商领域,有2C的小卖家,也有2B的大客户
Spring Cloud 是一个基于Spring Boot实现的微服务架构开发工具。
Spring Cloud 和 Netfix
Spring Cloud Alibaba
Cloud核心组件升级替换:
网关: Spring Cloud Gateway
配置管理: Nacos(阿里)和 Apollo(携程)
认证服务:Spring Security OAuth、JWT
服务注册中心: Nacos、Zookeeper(大数据)、Consul(docker)
远程服务调用基础:Ribbon、LoadBalancer
声明式远程服务调用:Feign、OpenFeign
容错限流:sentienl、Resilence4j
Springboot和SpringCloud
lesson6 如何学习Spring Cloud
三大功能,两大特性
1. 两大特性:高可用性和高可扩展性
2. 三大功能是指微服务核心组件的功能维度。
具体是指:服务间通信,服务容错、异常排查,分布式能力建设
1)服务间通信: 服务治理、负载均衡、服务间调用
2)服务容错、异常排查: 流量整形、降级熔断、调用链追踪
3)分布式能力建设:微服务网关、分布式事务、消息驱动、配置管理