白话微服务架构和SPRING CLOUD
(一)架构师思维:
架构师思维:快速开发、可维护、可扩充、安全灵活和高可用。
架构师渐进之路:解耦与互联
1、模块化设计,业务逻辑解耦
2、分布式部署,部署模块解耦
3、技术框架平台,封装基础技术构件,业务模块和技术栈解耦
4、应用开发平,封装基础业务功能,业务领域模块和业务保障模块解耦
5、微服务架构,服务解耦,实现服务自治,分布式部署,负载均衡
6、服务上云,IAAS,PAAS,SAAS。从卖产品到卖服务。
(二)什么情况会驱动你去学习微服务架构:
1、新建的大规模分布式系统优选微服务架构
2、企业现有系统有微服务改造的要求
3、基于微服务构建的系统的运维升级改造
4、准备搭建自己的基础微服务平台框架
5、技术储备,个人爱好
(三)为什么要微服务:
传统应用缺点:逻辑复杂、隔离性差、可用性差、模块耦合严重、代码臃肿
微服务化优点:高内聚、复杂性低、易于拆分和管理、独立部署和伸缩性强、迭代周期短
(四)什么情况下不需要微服务:
对于应用简单、用户少、规模小、单体应用、迭代周期长的项目,使用微服务框架没有什么意义。
(五)微服务简介:
微服务拆分:1-服务和数据复制,实现分布式负载均衡;2-职责、分类、业务建模拆分,实现业务功能解耦和重用;3-按服务和数据的优先级划分,实现分类分级资源调度分配;4-前后端分离,使开发更高效;5-无状态服务,保障水平扩容。
用 DDD(领域驱动设计) 的思想去指导微服务的实践。
(六)微服务面临的问题:
1. 服务注册发现,微服务怎样统一管理和监控,微服务之间如何调用
2. 管理配置服务,怎样实现分布式配置同步
3. 请求网关,全链路跟踪,实现同一入口与负载均衡
4、应用限流控制,异常熔断,服务降级
5. 服务节点的负载均衡
6. 集中日志,自动化运维,弹性扩容
7. 消息机制
(七)微服务解决方案:
阿里等大厂家都推出了自己的微服务解决方案:
阿里&淘宝 |
当当 |
百度 |
360 |
京东 |
Netflix |
Apache |
Spring cloud |
|||
服务治理 |
Dubbo |
DubboX |
Eureka |
Consoul |
||||||
分布式配置管理 |
Diamond |
Disconf |
Qconf |
Archaius |
Config |
|||||
批量任务 |
Elastic-Job |
Task |
Azkaban |
|||||||
服务跟踪 |
Hydra |
Sleuth |
Zipkin |
阿里开源中间件与 Spring Cloud 体系的融合叫spring Cloud Alibaba:
spring Cloud Alibaba 与部分其他方案的对比:
(八)一般的微服务框架:
1、Service registry 服务注册:服务治理,所有microservices在注册中心注册,可以通过服务名称进行调研,而不关心其部署情况
2、Config server 配置中心:实现集中配置管理与分布式配置同步服务
3、Distribute tracing 分布式跟踪服务:容错、熔断、降级、限流
4、API Gateway:验证、安全、动态路由、负载均衡
5、负载均衡:服务治理负载均衡;服务提供者负载均衡;gateway负载均衡
6、microservices微服务:一个个相对独立的业务逻辑,包括服务提供者和服务消费者。
(九)Spring Cloud 是什么:
Spring Cloud是基于Spring BOOT的微服务体系框架解决方案和微服务开发工具包。提供分布式系统的配置管理、服务发现、断路器、智能路由、微代理、控制总线等功能。Spring BOOT 简化配置文件,使用内嵌WEB服务器,专注简化配置和快速部署与开箱即用的工具箱。可以基于Spring BOOT快速开发单体服务。Spring Cloud 组件架构
Spring Cloud关注全局服务治理。
Spring Cloud微服务工具包,为开发者提供了在分布式系统的配置管理、服务发现、断路器、智能路由、微代理、控制总线等开发工具包,包含了多个子项目,比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud CloudFoundry、Spring Cloud AWS、Spring Cloud Security、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI等项目。
Spring Boot 与 Spring Cloud 版本关系:
(十)分布式配置管理(Config Server):
分布式配置管理应该是分布式系统和微服务应用的第一步。想象一下如果你有几十个服务或应用需要配置,而且每个服务还分为开发、测试、生产等不同维度的配置,那工作量是相当大的,而且还容易出错。如果能把各个应用的配置信息集中管理起来,使用一套机制或系统来管理,那么将极大的提高系统开发的生产效率,同时也会提高系统开发环境和生产环境运行的一致性。 Spring Cloud Config配置管理开发工具包,可以让你把配置放到远程服务器,目前支持本地存储、Git以及Subversion。配置和程序分离,配置的变更可以同步刷新所有应用。
(十一)服务注册及发现 (Service registry)
服务注册与发现对于微服务系统来说非常重要。有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访问到服务。
服务注册与发现流程:首先建立注册中心,服务提供者和服务消费者(微服务)自动注册到注册中心,客户端使用微服务名称进行微服务的访问。
Spring Cloud Netflix Eureka(Spring cloud 服务注册与发现):基于 REST 的服务,实现云端的负载均衡和服务发现注册。
1、基于Eureka-Server 建立服务注册中心,可以拷贝复制多个,实现负载均衡
2、基于Eureka-client 实现服务提供者,实现的微服务在注册中心注册(续约和关闭)
3、基于Eureka-client 实现服务消费者,直接基于服务标识符访问服务,不关心服务提供者的具体位置,服务注册中心会提供服务提供者信息
(十二)负载均衡
与Feign组合使用可以实现客户端的负载均衡。
(十三)熔断器
Netflix Hystrix:容错管理工具,旨在通过控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
(十四)网关
Netflix Zuul(服务网关):边缘服务工具,是提供动态路由,监控,弹性,安全等的边缘服务。
(十五)spring cloud其他子项目:
Spring Cloud Bus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。
Spring Cloud for Cloud Foundry:通过Oauth2协议绑定服务到CloudFoundry,CloudFoundry是VMware推出的开源PaaS云平台。
Spring Cloud Sleuth:日志收集工具包,封装了Dapper,Zipkin(APM服务监控)和HTrace操作。
Spring Cloud Data Flow:大数据操作工具,通过命令行方式操作数据流。
Spring Cloud Security:安全工具包,为你的应用程序添加安全控制,主要是指OAuth2。
Spring Cloud Consul:封装了Consul操作,consul是一个服务发现与配置工具,与Docker容器可以无缝集成。
Spring Cloud Zookeeper:操作Zookeeper的工具包,用于使用zookeeper方式的服务注册和发现。
Spring Cloud Stream:数据流操作开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。spring-kafka 项目将 Spring 核心概念应用于基于 Kafka 的消息传递解决方案的开发。它提供了一个“模板”作为发送消息的高级抽象。
Spring Cloud CLI:基于 Spring Boot CLI,可以让你以命令行方式快速建立云组件。
(十六)Spring Cloud Alibaba Nacos
Nacos一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
(十七)基于Spring Cloud&Alibaba 微服务框架案例:FebsCloud-Cloud
详见《FEBS Cloud 微服务权限系统项目说明》
(在搭建过程中,踩了不少空,还好已经逐一解决,整理分享给大家少走弯路)
FEBS意指:Fast,Easy use,Beautiful和Safe
FEBS Cloud是一款使用Spring Cloud Greenwich.SR1、Spring Cloud OAuth2和Spring Cloud Security构建的权限管理系统,前端(FEBS Cloud Web)采用vue element admin构建。
软件文档:https://www.kancloud.cn/mrbird/spring-cloud/1263679
后端源代码:https://gitee.com/mrbirdd/FEBS-Cloud
前端代码:https://gitee.com/mrbirdd/FEBS-Cloud-Web
FEBS后台服务模块:
服务名称 |
端口 |
描述 |
FEBS-Register |
8001 |
微服务注册中心 |
FEBS-Auth |
8101 |
微服务认证服务器 |
FEBS-Server-System |
8201 |
微服务子系统(资源服务器) |
FEBS-Server-Test |
8202 |
微服务子系统(资源服务器) |
FEBS-Gateway |
8301 |
微服务网关 |
FEBS-Monitor-Admin |
8401 |
微服务监控子系统 |
FEBS-Config |
8501 |
微服务配置子系统 |
前端通过服务名称调用后端微服务功能:
系统架构如下: