分布式系统——关键技术概述

M君 3月前 ⋅ 335 阅读

概述

最近一个月接触了比较多的分布式相关的技术,目前这些分布式技术是正在被公司使用的,所以想在这里总结分享给大家,希望能给大家带来一些思考,同时也希望大牛们多多指正。描述分布式概念的文章已经比较多了,所以不再赘述。

分布式设计

总结一下我对分布式设计的理解,主要分为三大块:服务拆分、分库分表、容错容灾。

服务拆分:根据业务的特性、访问量进行不同粒度的拆分。

分库分表:首先是不同业务、同业务的分库;同业务的分表存储。

容错容灾:服务可监控、可应急。服务、数据同城机房备份,异地双活等。

相关技术

服务注册发现(软负载):主要用于远程服务调用发现,如果相同的服务有多个,可以进行简单的负载均衡。

负载均衡(软负载、硬负载、动态切流):负载均衡包括硬负载和软负载,负载均衡本质上是一个访问流量分配的过程,所有可以通过某些控制实现动态切流,通过动态切流可以方便的实现灰度发布。

硬负载:字面意思是基于硬件的负载,本质是在操作系统层面的负载、或者是专门的基于网络协议的负载均衡的硬件,所以这种负载均衡比较稳定,除非硬件设备坏掉或者是操作系统崩溃,否则会一直有效(一般是用于负载兜底)。刚才说到硬负载是在网络协议层面的,所以无法在应用层面进行自定义的负载均衡;

软负载:软负载主要是在操作系统之上了,是一个用户级的应用程序,这种负载方式的好处是可以根据应用的意义进行负载均衡,具有更好的自定义性。但是该程序可能出现内存不够等原因被操作系统kill掉(大部分不会有这种情况)。

分布式事务:目前大多都是使用的是两阶段的提交协议,该协议具有简单性能高,但是需要通过协调发起方和参与方的工作方式事务的原子性。

调用链追踪:由于一个业务可能涉及到多层服务调用,那么需要知道一个业务在每一层调用的情况,所以通过为业务生成全局的traceID来标识。

幂等设计:幂等设计主要是针对不可重复提交的请求(转账请求),对于可重复提交的请求没有必要(如:查询请求)。通过类似traceId这种方式来实现幂等,系统会为用户的请求(不可重复提交)生成一个requestId,系统在请求处理过程中一直保持这个ID,如果新来的请求中包含了这个ID,那么系统将不会再次处理。

系统监控:包括对系统中的服务的健康状态进行报警,也可以进行日志的分析进行对应用程序进程艰苦。

消息中心:消息中心可以用于实现发布订阅、全局定时任务、全局配置中心等功能。

缓冲队列:缓存队列用于匹配处理速度不匹配的请求,比如系统中CPU和IO速度不匹配的时候,可以使用缓存队列。还有就是服务间的请求,A服务调用B服务,如果B服务处理速度小于A请求的速度,那么可以在A和B服务之间设置一个缓冲队列。

 

本篇主要介绍了分布式中涉及到的一些技术,后面会结合现有的产品对上面的技术进行一个更加深层次的挖掘。

 


注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: