zoukankan      html  css  js  c++  java
  • 分布式系统的技术栈

    分布式系统的技术栈

    前言

    最近在拜读耗子兄-分布式系统技术栈一文,现在记录下自己学到的东西

    构建分布式系统的目的

    • 提高整体架构的吞吐量,服务更多的并发和流量。
      • 大流量处理,通过集群技术把大规模并发请求的负载分散到不同的机器上。
    • 提高系统的稳定性,让系统的可用性更高。
      •  关键业务保护。提高后台服务的可用性,把故障隔离起来阻止多米诺骨牌效应(雪崩效应),如果流量过大,需要对业务降级,以保护关键业务

    提高系统的性能

    • 缓存系统:缓存分区、缓存更新、缓存命中
    • 负载均衡系统(网关系统):负载均衡、服务路由、服务发现
    • 异步调用:消息队列、消息持久、异步事务
    • 数据镜像:数据同步、读写分流、数据一致性
    • 数据分区:分区策略、数据访问层、数据一致性

    缓存系统

    • 可以提高快速访问能力。
    • 从前端浏览器、网络、后端服务、底层数据库、文件系统、硬盘和CPU,全都有缓存。
    • 对于分布式缓存系统,首先需要一个缓存集群,其中需要一个Proxy来做缓存的分片和路由

    负载均衡

    • 是做水平扩展的关键技术。

    异步调用

    • 通过消息队列来对请求做排队处理,把前端请求进行削峰,后端请求根据自己的处理速度来处理请求。
    • 优点:增加系统的吞吐量
    • 缺点:实时性比较差,同时还会引入消息丢失的问题,所以需要对消息进行持久化,这会造成有状态的节点,从而增加服务调度的难度。

    数据分区和数据镜像

    • 把数据按照一定的方式分成多个区,不同的数据来分担不同区的流量,这需要一个数据路由的中间件,会导致跨库Join和跨库事务非常复杂。
    • 数据镜像:把多个数据库备份,多个节点可以提供数据读写功能,节点间在内部实现数据同步。缺点:数据一致性问题。
    • 在初期使用读写分离的数据镜像方式,后期采用分库分表方式。

    提高系统稳定性

    • 服务拆分(服务治理):服务调用、服务依赖、服务隔离
    • 服务冗余(服务调度):弹性伸缩、故障转移、服务发现
    • 限流降级:异步队列、降级控制、服务熔断
    • 高可用架构:多租户系统、灾备多活、高可用服务
    • 高可用运维:全栈监控、DevOps、自动化运维

    服务拆分

    • 隔离故障
    • 重用服务模块
    • 服务拆分完之后,会引入服务调用间的依赖问题。

    服务冗余

    • 去除单点故障,并可以支持服务的弹性伸缩以及故障转移。
    • 对于一些有状态的服务来说,冗余这些有状态的服务会带来更高的复杂性。
      • 当其中一个进行弹性伸缩时,需要考虑数据的复制或重新分片,迁移的时候还要迁移数据到其他机器上。

    限流降级

    • 当系统流量超过系统承载时,只能通过限流或者功能降级的方式来处理。

    高可用架构

    • 主要时为了不出现单点故障。

    高可用运维

    • DevOps中的CI(持续集成)/CD(持续部署)。
    • 应该有一条很流畅的软件发布管线,包括足够的自动化测试,还可以做好相应的灰度发布,以及线上系统的自动化控制。
  • 相关阅读:
    Flutter & Dart 安装在window系统
    HAWQ配置之客户端访问
    HAWQ配置之HDFS HA
    HAWQ集成Yarn HA作为资源管理服务
    ambari 安装HDP3.0.1后,启动服务的问题记录
    【Clojure 基本知识】小技巧s
    [转帖]Loading Data into HAWQ
    【Clojure 基本知识】 关于函数参数的各种高级用法
    【Clojure 基本知识】 ns宏的 指令(关键字) requrie的用法
    Linux系统解析域名的先后顺序【转帖】
  • 原文地址:https://www.cnblogs.com/dudu0614/p/8821811.html
Copyright © 2011-2022 走看看