分布式技术大纲
作者:互联网
1. 分布式架构VS单体架构
获益从三个方面来考虑:
- 扩展性;
集群规模扩展性;
地理扩展性(数据中心);
管理扩展性; - 性能;
指标:短RT(Response Time),低延迟,高吞吐,较低的计算资源占用率; - 可用性;
可用性=可用时间 / (可用时间+不可用时间)。
考虑容错率,面向失败的设计。
2. 分布式八大技术
2.1 分布式服务
趋势:单体—>多应用;本地调用—>远程调用。
RPC:远程服务调用;consumer,provider。
SOA:服务分布式部署;请求分流;数据操作读写分离。
分布式服务这个领域,阿里内部两大框架:HSF和Dubbo,后者已经开源。
2.1.1 HSF
HSF相关组件:服务注册中心ConfigServer,持久化配置中心Diamond,元数据存储中心Redis,控制台HSFOPS。
流程:客户端发起调用—>路由选址—>负载均衡—>序列化—>协议编码—>发送数据—>接收数据—>协议解码—>分派线程—>反序列化—>服务端反射调用。
4层领域:框架,应用,服务,配置。
- 框架提供基础功能,负责通信、线程、协议、序列化、编码解码;
- 应用面向服务框架的注册和发现过程;
- 服务粒度比较小,包含调用链路、地址路由、负载均衡;
- 配置:用户使用API进行配置,生成调用代理或者暴露服务。
调用方式:
- 同步实时调用;
- Future异步调用;
- Callback异步调用(客户端提供回调);
- Generic调用;
- 服务端async调用;
2.1.2 Dubbo
Dubbo已经开源,提供了高性能的RPC实现服务的输入输出,与Spring框架无缝集成。
三大核心能力:
- 面向接口的远程方法调用;
- 智能容错和负载均衡;
- 服务自动注册和发现;
四大角色:
- Provider:服务提供方;
- Consumer:服务消费方;
- Registry:注册中心;
- Monitor:监控中心;
2.2 分布式消息
分布式消息主要解决的问题:
- 应用解耦;
- 削峰填谷;
- 保证最终一致性。
业界常见的分布式消息框架:ActiveMQ,RabbitMQ,Kafka等。
阿里内部常用的分布式消息框架:MetaQ,RocketMQ等。
2.3 分布式缓存
缓存一般分为本地缓存和分布式缓存。
分布式缓存的关注重点,从CPU、内存、缓存之间的数据传输速度差异扩展到了业务系统、数据库、分布式缓存之间的数据传输速度差异。
常用的分布式缓存有很多,比较典型的如Redis,Tair。
2.3.1 Tair
高性能:基于高速缓存、内存或者SSD;
高扩展:轻量级中间件+三种数据引擎+负载均衡;
高可用:各种容灾部署方式和解决方案;
主要应用场景:
- 数据库缓存;
- 临时数据存储(Session数据、用户Token、权限信息等);
- 持久化存储(广告推荐类需要离线计算大量数据以及榜单生成等);
三种存储模式:
MDB:Memcached;
RDB:Redis;
LDB:LevelDB;
数据一致性保证:version;
负载均衡:一致性Hash;
多级缓存:处理热点问题
2.4 分布式调度
分布式调度,阿里内部使用SchedulerX,市面上可以考虑Elastic-Job。定时任务组件Quartz。
SchedulerX是阿里自研的基于Akka架构的分布式任务调度平台,提供定时、任务编排、分布式跑批等功能。
2.4.1 SchedulerX
主要功能:
- 强大的定时调度器(cron,fixed rate,fixed delay,日历,时区):
- 任务编排(工作流DAG);
- 任务类型(java,shell,python,go,自定义);
- 执行方式&分布式编程模型(单机、广播、并行计算、内存网格、网格计算);
2.5 分布式数据库
分布式数据库访问引擎,阿里内部使用TDDL,市面上开源的中间件有ShardingJdbc。
2.5.1 主要作用及应用场景:
- 垂直分库分表
ACID被打破:事务操作会受到影响;
Join操作困难;
外键约束受影响的问题; - 水平分库分表
自增主键会受到影响;
有些单表查询会变成多表查询; - 读写分离
数据复制问题:数据复制时间上一定有延迟,短期数据会不一致。数据库复制一般是通过数据库日志bin-log实现的。
数据源选择问题:即数据路由问题;写走主库,读走从库,事务中的读走主库。
2.5.2 整体层次划分
- ORM层(Hibernate or Mybatis or Spring JDBC);
- TDDL or ShardingJdbc层;
- 数据库连接池Druid,C3P0等层次;
- JDBC Driver层;
- 数据库实体;
2.5.3 主要组件
- SQL解释器;
- SQL优化器;
- SQL路由;
- SQL执行;
- 结果归并;
- 分布式唯一主键生成;
2.6 分布式搜索
阿里内部使用OpenSearch,目前市面上可以使用ElasticSearch或者Solr。
数据推送到搜索引擎这一块的工作,阿里内部可以借助阿里云Odps的数据集成服务来进行定时调度处理;各公司如果没有自研的话,可以考虑通过分布式任务调度来进行相应的逻辑处理。
2.7 分布式事务
跨库,跨系统,跨服务的操作,会发生分布式事务的问题。
阿里内部使用TXC这个分布式事务中间件,通过极少的代码侵入就可以实现分布式事务。
TXC已经开源。大部分情况下仅需要引入TXC Client的jar包,进行几个简单的配置以及数行代码改造,就可以轻松保证分布式数据一致性。
TXC提供了丰富的编程和配置策略,以适应各种长尾的应用需求。
** 分布式事务:是指事务的参与者、支持事务的服务器、资源服务器、事务管理器分别位于不同的分布式系统的不同节点之上**
2.7.1 分布式事务解决方案
- 两阶段提交
第一阶段表决,第二阶段执行;
2PC可以满足强一致性ACID,但是代价是吞吐量(譬如数据库需要频繁地对资源上锁,而且上锁时间跨两个阶段,时间较长,并出现木桶效应)。
2PC理论的一个广泛工业应用是XA协议,目前几乎所有收费的商业数据库都支持XA协议。但是对吞吐量的影响导致其应用较少。 - TCC
Try,Confirm,Cancel三个操作集,事务补偿机制。
实现的是最终一致性:事务进行过程中,某些分支的中间状态可以被事务外所观察到,即“读未提交”,从而导致多个分支的状态可能不一致。但是所有分支最终会达到要么全部提交,要么全部回滚的一致状态。
2.7.2 TXC
TXC结合DRDS解决分布式事务的问题。
分布式事务场景:
- 跨多个数据库的事务场景(数据库类型不同);
- 跨数据库系统、消息系统的事务场景;
- 跨服务的事务场景;
TXC三个组件
- 客户端TXC-Client;
- 事务协调器TXC-Server;
- 资源管理器RM;
2.8 分布式计算
分布式计算氛围实时计算和离线计算。
在阿里内部,离线计算一般跑在ODPS上;实时计算可以使用Spark,Storm,Flume,Flink等。
标签:事务,调用,大纲,数据库,TXC,技术,缓存,分布式 来源: https://blog.csdn.net/achang07/article/details/96583401