一.分布式概述
核心概念:
组件位于多个不同节点,通过网络协同工作;
主要特点:
高并发、高性能、高扩展
二.分布式技术演进
1. 应用服务器与数据库服务器分离
2. 应用集群
随着应用负载压力的增加,应用服务器进行横向扩展(应用集群),数据库服务器进行纵向扩展(硬件性能提升)
应用集群常见技术特点
a. DNS负载均衡
b. 应用负载均衡
ⅰ. Nginx Apache
ⅱ. F5 ACE
c. 应用Session处理
ⅰ. Session同步
ⅱ. Session粘连
3. 数据库读写分离
应用数据库负载压力的增加,将数据库分为专用于读操作的读库和专用于写操作的写库。
- 读写分离技术特点
a. 数据库拆分为读库和写库,分担数据库压力
b. 数据复制
ⅰ. Mysql主从复制方案
ⅱ. Oracle-Data Guard
4. 引入缓存,加速访问
- 缓存分类
- CDN缓存
- 反向代理缓存
- 分布式缓存
- 本地缓存
5. 分布式存储
为应对大规模和海量非结构化数据的存储问题,引入大文件服务器甚至分布式存储。
分布式存储技术特点:
- 低成本:由于高可用性,可以使用低成本的存储方式搭建分布式存储
- 高扩展:应对海量数据
6. 应用拆分
随着单个应用越来越庞大和复杂,根据业务特点拆分为多个系统或子系统,应用所对应的数据库也随之进行拆分。
应用拆分技术特点:
- 应用拆分后,相应的数据库也进行了拆分,从而降低数据库压力,提升系统性能。
7. 服务化
把基础、通用的能力做成服务中心,供多个应用按需调用,服务化之后每个基础服务独立部署,业务简单、方便扩容、有大量的重复模块可供上层业务系统快速复用,能很好地支持上层业务系统的扩展。
8.分库分表
解决单机硬件和单表容量瓶颈,引入分库分表,主要功能是实现把一张表中的数据拆分到多个数据库的多张表中,以支持大规模数据,并满足高并发场景要求。
12. 优势:不在受限于单台机器的容量瓶颈与速度瓶颈;
13. 劣势:带来事务\SQL限制\主键等很多技术问题需要解决;
9.消息中间件
随着系统组件的增加以及组件间以来复杂度的提高,需要引入消息中间件作为组件间数据发送和接收的数据平台,通过异步/并行/解耦的手段来提升系统处理能力。
- 作为组件间数据交换的基础软件
- 通过异步、解耦、并行的方式提升系统的吞吐量
- 在分布式事务中,协助实现最终一致
10.云计算
分布式环境中涉及到的服务/服务器众多,仅靠人工管理效率低下,且极大的增肌了复杂度。而云计算特别是IAAS(基础设置即服务)为大规模分布式环境提供了基础设施层面强有力的支撑。目前大规模分布式应用大多要依赖云计算,特别是云计算中的IAAS。
三.分布式技术要点
1. 分布式服务框架
服务框架最主要的能力是提供了实现远程调用的基本框架,基于服务框架,可以完成某一功能的服务化开发或改造。
服务框架定义了两种角色:服务提供者和服务消费者,两者之间以相互调用的形式交互。
由于服务框架大多位于不同节点,通过协作共同完成业务逻辑,故服务框架一般还具有以下功能:
- 服务的路由
- 服务的注册
- 服务的管理
- 服务的监控
2. 分布式服务框架主要流程
- 通过注册中心,服务提供者完成注册;
- 通过注册中心,服务消费者找到服务位置;
- 服务消费者发起调用(同步/异步);
- 监控组件监控服务情况;
3. 分布式服务框架技术要点
- 基础能力:调用;
- 容错:调用负载均衡、容错
- 运行模式:订阅/注册模式
- 性能:序列化、线程调度。IO机制
4. 服务的降级
-
服务的降级,是指当服务器压力剧增的情况下,根据当前业务情况及流量对一些重要性不高的服务有策略的降级,以此释放服务器资源以保证核心任务的正常运行。
-
服务降级强调的是“限”,通过限制部分不重要的服务的部分能力来优先保证核心业务有足够的资源运行。
服务降级的常见策略
- 随机拒绝:服务随机拒绝请求(最常见的404),抛出错误界面,让用户重试,目前较少有人采用,因为用户体验极差。
- 页面拒绝:不直接提示错误界面,跳转到一个较为友好的静态界面。
- 部分拒绝:页面能访问,但是限制不能使用添加删除等较为消耗资源的操作。
- 延迟持久化:页面正常,功能可用,但会提示稍晚才会看到结果,使用异步队列或日志等机制,等资源充足以后在执行持久化。
5. 服务的多版本
-
服务的多版本是指随着业务的发展,分布式环境中服务会不断进行迭代升级。为了给用户提供良好的体验,需要保证服务端能同时支持新旧版本的客户端同时访问。
-
为了实现服务的多版本,需要从服务的业务逻辑、API等多方面统筹设计,才能有效减少版本数量增加带来的工作量增大问题。
服务多版本常见策略
- 在数据库层面,尽量采用“新增”的方式,以保持最大的兼容性。
- 如果版本之间差异较小,在服务的API设计上,尽量采用“新增API”或者“新增方法”的参数完成。
- 更加通用的方式,是通过API接入层的“路由”,利用类似api.xx.com/V1、api.xx.com/V2这样的**含有版本号的URL**访问不同的服务。
6. 常见分布式框架
Dubbo和Dubbox
- Dubbo是阿里开源的分布式服务框架,实现高性能的RPC调用同时提供了丰富的管理功能,是一款应用广泛的优秀的RPC框架,国内影响很大,但以停止维护更新。
- Dubbox是由当当基于Dubbo框架扩展的一个RPC框架,支持Rest风格的远程调用、Kryo/FST序列化,增加了一些新的功能,修正了部分Bug,虽有更新但是较为缓慢,相对于Dubbo主要升级了底层框架,在功能上进行了扩展,在性能上进行了提升,在国内应用较多。
DubboX更适合现今主流的开发模式需求,DubboX不仅对Dubbo中很多底层框架都进行了升级,而且还解决了很多版本依赖问题。
SpringCloud简介
- 由Spring提供的开发分布式服务的一整套框架。覆盖分布式服务的各个方面,目前下属20个子项目,覆盖了服务框架、服务治理、注册中心、消息总线、安全、数据流、监控等各个方面,另有丰富的第三方公司产品支持。
-
背景深厚
部分组件来自netflix、Pivotal等已有多年分布式践行经验的厂商开源贡献,经过实际验证
-
技术体系化
Spring Cloud中服务框架主要由Spring Boot构建,而其他相关组件(注册中心、治理、网关等)大多均可基于Spring Boot构成。
-
社区活跃
Spring Cloud社区活跃,更新迭代较快,解决问题的速度越快,框架也会越来越完善,同时已经有较为完善的参考资料。
持续更新中。。。
-