1分布式服务体系

  • 单体与分布式系统的本质区别
  • 分布式服务体系的组成结构和设计方法
  • 完成客服系统一阶段分布式服务拆分

分布式系统概述

两个单体间通过网络交互,可认为是初步的分布式系统。

单体系统的问题

  • 业务扩展性
  • 性能伸缩性
  • 代码复杂度

扩展性

业务需求变化时,系统改动程度的控制能力。
改动程度越大,扩展性越差。
单体系统任何改动都需重新构建和发布,扩展性低。
原因是未对代码进行物理拆分,代码组件边界不清晰。
(单体系统组件划分清楚一定程度缓解扩展性问题,但不能根本解决)

伸缩性

对系统性能的一种控制能力。
伸缩性判断:通过简单扩容系统性能等比例提升,则系统有较好伸缩性
单体系统问题:优于存在内存密集型和CPU密集型代码位于同一服务器,所以很难对资源充分利用。

分布式系统

区别于单体系统,将系统拆分成多个独立运行的服务,互相基于网络通信协调。

拆分策略

纵向拆分:基于不同业务场景拆分
横向拆分:根据能力拆分,复用和组合业务能力(不同能力的服务通过排列组合提供业务能力)

组合使用横向与纵向拆分

分布式系统固有特性(问题)

分布式系统不一定适用于所有场景

  • 网络传输的三态性
    成功、失败、超时(管理超时有成本,无法解决超时问题,只能降低其影响)
  • 请求容错性
    链路异常扩散,雪崩效应
  • 系统异构性
    多种不同技术体系
  • 数据一致性
    传统事务无效

构建分布式服务体系

核心技术点(解决哪些问题)

  • 可用
    不可宕机
    降级、限流、集群和负载均衡等
  • 性能
    异步化,资源重用
  • 治理
    服务注册和发现机制
  • 扩展??????
    ???SPI机制???,异步消息

分布式服务体系(分布式服务的组件)

组成:分布式服务 = 功能性组件 + 非功能性组件

功能性组件

  • 传输协议
  • 网络通信
  • 序列化
  • 服务调用

非功能性组件

  • 服务治理
    大量服务管理,注册发现
  • 服务路由
    定制化路由(确定集群中的目标服务实例)与过滤机制?
  • 服务容错
    异常处理 ,预防雪崩
  • 服务监控
    复杂长链路,无法预测异常与性能问题的发生。加入监控机制(异常监控与性能监控)可预警与即使发现处理问题

分布式服务框架

Alibaba Dubbo
Twitter Finagle
Taobao HSF
Google gRPC
Xinlang Motan
Facebook Thrift

分布式服务类型

  • 工具服务 Utility Service
  • 实体服务 Entity Service
    面相业务数据处理,提供领域实体,不面向特定业务场景
  • 任务服务 Task Service
    关注业务流程,需要维护状态,决定事务边界,很大程度由组合逻辑组成,
    多实体服务构成业务流程,如下单服务,由商品,支付,订单等实体服务组合成业务服务

系统演进

多层级,服务独立化的分布式架构代码工程结构

问题

分布式系统和单体系统之间区别?
硬件上,单体独立部署在一台机器上
软件上,单体一个不同组件工程代码代码边界不够清晰
适用于系统发展的不同阶段。
单体系统随着业务量增加会出现性能,可用性,扩展性,伸缩性等问题
分布式服务可很好地解决这些问题,当然也会引入其他问题,如一致性,异构系统集成,容错等问题