互联网海量分布式架构演进之路 -- 视频总结
互联网发展三个阶段
- PC互联网(~2007):让数据可以在一定范围内在线化
- 移动互联网(2007~2013):让越来越多的数据被记录被联通,让数据智能成为可能
- 物联网(2013~):让网络协同从人扩展为万物
互联网发展特点
- 业务功能越来越多,越来越复杂
- 万物互联数据量越来越大
- 请求量越来越大,更高的用户体验要求
- 业务快速迭代,持续交付的能力
互联网架构演进之路
单体架构 --> 水平分层架构 / 面向服务架构 --> 微服务架构 --> 服务网格架构
单体架构(Monolithic Architecture)
适用场景:
- 业务场景简单、功能不复杂、研发人员较少
- 创业公司初期
缺点:
- 系统耦合性高
- 技术选型单一
- 开发效率低下
- 连续部署困难
- 应用扩展困难
水平分层架构(Horizontal Layered Architecture)
- 水平方向物理分成多个独立进程(网关层、业务逻辑层、数据访问层、数据存储层)
- 每层逻辑解耦
网关层功能:
- 请求鉴权
- 数据完成检测
- 协议转换
- 路由转发
- 服务治理(限流、熔断等)
业务逻辑层功能:
- 业务逻辑判断
- 微信黑名单检查
- 微信好友删除
- 微信发消息不重不漏
数据访问层功能:
- CRUD
- ORM
- Sharding(分库分表)
- 屏蔽底层存储差异性
水平分层异步架构
异步目的:提升吞吐量
异步手段:消息队列
适用场景一:请求类型
适用场景二:业务类型
面向服务架构(Service Oriented Architecture)
微服务架构(MicroServices)
上图为Spring Cloud 微服务总体架构图
Spring Cloud从设计之初就考虑了绝大多数互联网公司架构演化所需的功能,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。下面分别简要介绍上图中所用的组件:
从Dapper,Zipkin和HTrace 大量借鉴了Spring Cloud的分布式跟踪解决方案。对于大多数用户而言,Sleuth应该是不可见的,并且您与外部系统的所有交互都应自动进行检测。您可以简单地在日志中捕获数据,也可以将其发送到远程收集器服务。
Spring-Cloud-Netflix-Turbine 集群监控
Turbine 是聚合服务器发送事件流数据的一个工具,用来监控集群下 hystrix 的 metrics 情况。
通过turbine可以监控集群的请求量,可以知道系统的请求高峰期,从而更好的知道系统的短板在哪里。
Spring-Cloud-Netflix-Hystrix 容错保护
通过添加等待时间容限和容错逻辑来帮助控制分布式服务之间的交互,通过隔离服务之间的访问点,停止服务之间的级联故障并提供后备选项来实现此目的,所有这些都可以提高系统的整体弹性。
Spring-Cloud-Netflix-Zuul 服务网关
从设备和 web 站点到 Netflix 流应用后端的所有请求的前门。作为边界服务应用,Zuul 是为了实现动态路由、监视、弹性和安全性而构建的。
通过自动配置并绑定到Spring Environment和其他Spring编程模型习惯用法,为Spring Boot应用程序提供Consul集成。通过一些简单的注释,您可以快速启用和配置应用程序内部的通用模式,并使用Hashicorp的Consul构建大型分布式系统。提供的模式包括服务发现,分布式配置和控制总线。
Spring-Cloud-Netflix-Eureka 服务治理
微服务架构中的注册中心,负责服务的注册与发现。
- Eureka Client:负责将这个服务的信息注册到Eureka Server中;
- Eureka Server:注册中心,里面有一个注册表,保存了各个服务所在的机器和端口号;
Spring Cloud Config为分布式系统中的外部化配置提供服务器和客户端支持。使用Config Server,您可以集中管理所有环境中应用程序的外部属性。
将轻量级消息代理程序链接到分布式系统的节点。然后可以将其用于广播状态更改(例如配置更改)或其他管理指令。当前唯一的实现是使用AMQP代理作为传输,但是其他传输的路线图上仍具有相同的基本功能集(还有一些取决于传输)。
Spring Cloud Stream是一个框架,用于构建与共享消息传递系统连接的高度可扩展的事件驱动型微服务。
该框架提供了一个灵活的编程模型,该模型建立在已经建立并熟悉的Spring习惯用法和最佳实践的基础上,包括对持久性pub / sub语义,使用者组和有状态分区的支持。
用于Cloud Foundry和Kubernetes的基于微服务的流式处理和批处理数据处理。
提供了用于为流和批处理数据管道创建复杂拓扑的工具。数据管道包含使用Spring Cloud Stream或Spring Cloud Task微服务框架构建的Spring Boot应用程序。
允许用户使用Spring Cloud开发和运行短暂的微服务,并在本地甚至在Spring Cloud Data Flow中在云中运行它们。只需添加@EnableTask
并运行您的应用程序作为Spring Boot应用程序(单个应用程序上下文)即可。