SpringCloud(一) 微服务架构-总览
微服务是将企业通用服务按业务化分成一个个单体服务,增强可用性、服务易扩展、减少开发成本、减少服务发布对整个平台的影响。微服务是一种思想,实现有很多方式,企业转由单个系统转向微服务就要考虑很多问题,比如技术选型、业务拆分问题、高可用、服务通信、服务发现和治理、集群容错、配置管理、数据一致性问题、康威定律、分布式调用跟踪、CI/CD、微服务测试,以及调度和部署等等,这并非一些简单招数能够化解。
微服务框架必须能够达到借助虚拟化平台,能够按需创建机器并调整大小,借助基础设施的自动化从一台机器扩展到多台,拥有业务监控预警、异常熔断等等功能。
康康定律
- 任何组织在设计一套系统(广义概念上的系统)时,所交付的设计方案在结构上都与该组织的沟通结构保持一致
- 沟通的问题会影响系统的设计
所以,上不上微服务已经不是使用某个技术栈的技术问题了,已经上升到一个团队结构有关的管理问题了
限界上下文
微服务领域驱动设计中有个核心概念-限界上下文,其含义是用一个清晰可见的边界,将上下文勾勒出来,如此就能在自己的边界内维持领域模型的一致性和完整性
- 领域逻辑层面:确定领域模型的业务边界,维护了模型的完整性与一致性,从而降低系统的业务复杂度
- 团队合作层面:确定开发团队的工作边界,建立团队之间的合作模式,避免团队之间的沟通变得混乱,从而降低系统的管理复杂度
- 技术实现层面:确定系统架构的应用边界,保证了系统层和上下文领域层各自的一致性,建立上下文之间的集成方式,从而降低了系统的技术复杂度
当我们将一个限界上下文限定在一个独立的进程边界内时,并不足以决定领域驱动架构的设计质量,还需要将这个边界的外延扩大,考虑限界上下文需要访问的外部资源,这样就产生了两种不同风格的架构:数据库共享架构和零共享架构
SpringCloud技术栈
服务治理:目前SpringCloud主要通过整合Netflix的相关产品来实现这方面的功能,包括用于服务注册发现的Eureka,调用断路器Hystrix,调用端负载均衡Ribbon,Rest客户端Feign,智能服务路由Zuul,用于监控数据收集和展示的Spectator,用于配置读取的Archaius和提供Controller层Reactive封装的RxJava。
配置中心:基于SpringCloudNetfix和SpringCloudBus,Spring又提供了SpringCloudConfig,实现了配置集中管理、动态刷新的配置中心概念。配置通过Git或简单文件来存储。
消息组件:SpringCloudStream对分布式消息的各种需求进行了抽象,包括发布订阅、分组消费、消息分片等功能,实现了微服务之间的异步通信。SpringCloudStream也集成了第三方的RabbitMQ和ApacheKafka作为消息队列的实现。
分布式链路监控:SpringCloudSleuth提供了全自动、可配置的数据埋点,以收集微服务调用链路上的性能数据,并发送给Zipkin进行存储、统计和展示
安全控制:SpringCloudSecurity基于OAuth2这个开放网络的安全标准,提供了微服务环境下的单点登录、资源授权、令牌管理等功能
数据处理:SpringCloudTask、SpringCloudBatch。