分布式技术大纲

1. 分布式架构VS单体架构

获益从三个方面来考虑:

  1. 扩展性;
    集群规模扩展性;
    地理扩展性(数据中心);
    管理扩展性;
  2. 性能;
    指标:短RT(Response Time),低延迟,高吞吐,较低的计算资源占用率;
  3. 可用性;
    可用性=可用时间 / (可用时间+不可用时间)。
    考虑容错率,面向失败的设计。

2. 分布式八大技术

2.1 分布式服务

趋势:单体—>多应用;本地调用—>远程调用。
RPC:远程服务调用;consumer,provider。
SOA:服务分布式部署;请求分流;数据操作读写分离。
分布式服务这个领域,阿里内部两大框架:HSF和Dubbo,后者已经开源。

2.1.1 HSF

HSF相关组件:服务注册中心ConfigServer,持久化配置中心Diamond,元数据存储中心Redis,控制台HSFOPS。
流程:客户端发起调用—>路由选址—>负载均衡—>序列化—>协议编码—>发送数据—>接收数据—>协议解码—>分派线程—>反序列化—>服务端反射调用。
4层领域:框架,应用,服务,配置。

  1. 框架提供基础功能,负责通信、线程、协议、序列化、编码解码;
  2. 应用面向服务框架的注册和发现过程;
  3. 服务粒度比较小,包含调用链路、地址路由、负载均衡;
  4. 配置:用户使用API进行配置,生成调用代理或者暴露服务。
    调用方式:
  • 同步实时调用;
  • Future异步调用;
  • Callback异步调用(客户端提供回调);
  • Generic调用;
  • 服务端async调用;
2.1.2 Dubbo

Dubbo已经开源,提供了高性能的RPC实现服务的输入输出,与Spring框架无缝集成。
三大核心能力:

  1. 面向接口的远程方法调用;
  2. 智能容错和负载均衡;
  3. 服务自动注册和发现;
    四大角色:
  • Provider:服务提供方;
  • Consumer:服务消费方;
  • Registry:注册中心;
  • Monitor:监控中心;

2.2 分布式消息

分布式消息主要解决的问题:

  1. 应用解耦;
  2. 削峰填谷;
  3. 保证最终一致性。
    业界常见的分布式消息框架:ActiveMQ,RabbitMQ,Kafka等。
    阿里内部常用的分布式消息框架:MetaQ,RocketMQ等。

2.3 分布式缓存

缓存一般分为本地缓存和分布式缓存。
分布式缓存的关注重点,从CPU、内存、缓存之间的数据传输速度差异扩展到了业务系统、数据库、分布式缓存之间的数据传输速度差异。
常用的分布式缓存有很多,比较典型的如Redis,Tair。

2.3.1 Tair

高性能:基于高速缓存、内存或者SSD;
高扩展:轻量级中间件+三种数据引擎+负载均衡;
高可用:各种容灾部署方式和解决方案;
主要应用场景:

  1. 数据库缓存;
  2. 临时数据存储(Session数据、用户Token、权限信息等);
  3. 持久化存储(广告推荐类需要离线计算大量数据以及榜单生成等);
    三种存储模式:
    MDB:Memcached;
    RDB:Redis;
    LDB:LevelDB;
    数据一致性保证:version;
    负载均衡:一致性Hash;
    多级缓存:处理热点问题

2.4 分布式调度

分布式调度,阿里内部使用SchedulerX,市面上可以考虑Elastic-Job。定时任务组件Quartz。
SchedulerX是阿里自研的基于Akka架构的分布式任务调度平台,提供定时、任务编排、分布式跑批等功能。

2.4.1 SchedulerX

主要功能:

  1. 强大的定时调度器(cron,fixed rate,fixed delay,日历,时区):
  2. 任务编排(工作流DAG);
  3. 任务类型(java,shell,python,go,自定义);
  4. 执行方式&分布式编程模型(单机、广播、并行计算、内存网格、网格计算);

2.5 分布式数据库

分布式数据库访问引擎,阿里内部使用TDDL,市面上开源的中间件有ShardingJdbc。

2.5.1 主要作用及应用场景:
  1. 垂直分库分表
    ACID被打破:事务操作会受到影响;
    Join操作困难;
    外键约束受影响的问题;
  2. 水平分库分表
    自增主键会受到影响;
    有些单表查询会变成多表查询;
  3. 读写分离
    数据复制问题:数据复制时间上一定有延迟,短期数据会不一致。数据库复制一般是通过数据库日志bin-log实现的。
    数据源选择问题:即数据路由问题;写走主库,读走从库,事务中的读走主库。
2.5.2 整体层次划分
  1. ORM层(Hibernate or Mybatis or Spring JDBC);
  2. TDDL or ShardingJdbc层;
  3. 数据库连接池Druid,C3P0等层次;
  4. JDBC Driver层;
  5. 数据库实体;
2.5.3 主要组件
  1. SQL解释器;
  2. SQL优化器;
  3. SQL路由;
  4. SQL执行;
  5. 结果归并;
  6. 分布式唯一主键生成;

2.6 分布式搜索

阿里内部使用OpenSearch,目前市面上可以使用ElasticSearch或者Solr。
数据推送到搜索引擎这一块的工作,阿里内部可以借助阿里云Odps的数据集成服务来进行定时调度处理;各公司如果没有自研的话,可以考虑通过分布式任务调度来进行相应的逻辑处理。

2.7 分布式事务

跨库,跨系统,跨服务的操作,会发生分布式事务的问题。
阿里内部使用TXC这个分布式事务中间件,通过极少的代码侵入就可以实现分布式事务。
TXC已经开源。大部分情况下仅需要引入TXC Client的jar包,进行几个简单的配置以及数行代码改造,就可以轻松保证分布式数据一致性。
TXC提供了丰富的编程和配置策略,以适应各种长尾的应用需求。
** 分布式事务:是指事务的参与者、支持事务的服务器、资源服务器、事务管理器分别位于不同的分布式系统的不同节点之上**

2.7.1 分布式事务解决方案
  1. 两阶段提交
    第一阶段表决,第二阶段执行;
    2PC可以满足强一致性ACID,但是代价是吞吐量(譬如数据库需要频繁地对资源上锁,而且上锁时间跨两个阶段,时间较长,并出现木桶效应)。
    2PC理论的一个广泛工业应用是XA协议,目前几乎所有收费的商业数据库都支持XA协议。但是对吞吐量的影响导致其应用较少。
  2. TCC
    Try,Confirm,Cancel三个操作集,事务补偿机制。
    实现的是最终一致性:事务进行过程中,某些分支的中间状态可以被事务外所观察到,即“读未提交”,从而导致多个分支的状态可能不一致。但是所有分支最终会达到要么全部提交,要么全部回滚的一致状态。
2.7.2 TXC

TXC结合DRDS解决分布式事务的问题。
分布式事务场景:

  1. 跨多个数据库的事务场景(数据库类型不同);
  2. 跨数据库系统、消息系统的事务场景;
  3. 跨服务的事务场景;
    TXC三个组件
  • 客户端TXC-Client;
  • 事务协调器TXC-Server;
  • 资源管理器RM;

2.8 分布式计算

分布式计算氛围实时计算和离线计算。
在阿里内部,离线计算一般跑在ODPS上;实时计算可以使用Spark,Storm,Flume,Flink等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值