1分布式服务体系
- 单体与分布式系统的本质区别
- 分布式服务体系的组成结构和设计方法
- 完成客服系统一阶段分布式服务拆分
分布式系统概述
两个单体间通过网络交互,可认为是初步的分布式系统。
单体系统的问题
- 业务扩展性
- 性能伸缩性
- 代码复杂度
扩展性
业务需求变化时,系统改动程度的控制能力。
改动程度越大,扩展性越差。
单体系统任何改动都需重新构建和发布,扩展性低。
原因是未对代码进行物理拆分,代码组件边界不清晰。
(单体系统组件划分清楚一定程度缓解扩展性问题,但不能根本解决)
伸缩性
对系统性能的一种控制能力。
伸缩性判断:通过简单扩容系统性能等比例提升,则系统有较好伸缩性
单体系统问题:优于存在内存密集型和CPU密集型代码位于同一服务器,所以很难对资源充分利用。
分布式系统
区别于单体系统,将系统拆分成多个独立运行的服务,互相基于网络通信协调。
拆分策略
纵向拆分:基于不同业务场景拆分
横向拆分:根据能力拆分,复用和组合业务能力(不同能力的服务通过排列组合提供业务能力)
组合使用横向与纵向拆分
分布式系统固有特性(问题)
分布式系统不一定适用于所有场景
- 网络传输的三态性
成功、失败、超时(管理超时有成本,无法解决超时问题,只能降低其影响) - 请求容错性
链路异常扩散,雪崩效应 - 系统异构性
多种不同技术体系 - 数据一致性
传统事务无效
构建分布式服务体系
核心技术点(解决哪些问题)
- 可用
不可宕机
降级、限流、集群和负载均衡等 - 性能
异步化,资源重用 - 治理
服务注册和发现机制 - 扩展??????
???SPI机制???,异步消息
分布式服务体系(分布式服务的组件)
组成:分布式服务 = 功能性组件 + 非功能性组件
功能性组件
- 传输协议
- 网络通信
- 序列化
- 服务调用
非功能性组件
- 服务治理
大量服务管理,注册发现 - 服务路由
定制化路由(确定集群中的目标服务实例)与过滤机制? - 服务容错
异常处理 ,预防雪崩 - 服务监控
复杂长链路,无法预测异常与性能问题的发生。加入监控机制(异常监控与性能监控)可预警与即使发现处理问题
分布式服务框架
Alibaba Dubbo
Twitter Finagle
Taobao HSF
Google gRPC
Xinlang Motan
Facebook Thrift
分布式服务类型
- 工具服务 Utility Service
- 实体服务 Entity Service
面相业务数据处理,提供领域实体,不面向特定业务场景 - 任务服务 Task Service
关注业务流程,需要维护状态,决定事务边界,很大程度由组合逻辑组成,
多实体服务构成业务流程,如下单服务,由商品,支付,订单等实体服务组合成业务服务
系统演进
多层级,服务独立化的分布式架构代码工程结构
问题
分布式系统和单体系统之间区别?
硬件上,单体独立部署在一台机器上
软件上,单体一个不同组件工程代码代码边界不够清晰
适用于系统发展的不同阶段。
单体系统随着业务量增加会出现性能,可用性,扩展性,伸缩性等问题
分布式服务可很好地解决这些问题,当然也会引入其他问题,如一致性,异构系统集成,容错等问题