为什么要使用分布式系统?

一. 分布式系统可解决的问题

1. 解决稳定性可用性问题。

2. 解决单机处理能力差问题。

二. 分布式系统的发展历程

1. 单体结构

所有代码在一个系统中,所有模块在一个应用中。一个数据库,一个文件系统,一个应用系统。

优势:事务简单,不存在远程调用问题,不存在网络问题,适合微型系统。

问题: 一个模块有issue可能导致整个系统都不可用,可用性差,数据库压力大,性能差。

2. 垂直结构

将系统按照业务模块分进行垂直拆分成多个系统,每个垂直子系统为一个单体结构。

优势:数据库压力得到缓解,性能得到提升。

问题:数据库表的join受到限制,存储过程实现逻辑受到限制,会有很多重复代码。

3. 分布式结构

将可复用的业务水平拆分开当做公用服务,并下层作为低层服务。

优势:抽象部分逻辑减少代码量。

问题:系统更加复杂。

4. 微服务架构

将公共的服务集合成一个系统。

三. 分布式系统成本

分布式事务问题,在多个系统中如何实现事务一致性。

不允许服务有状态,服务有多个实例运行在不同的服务器中,这些多个实例的内部是不能有中间状态的。

服务的依赖关系变得复杂,调用关系非常复杂,定位问题变得复杂,维护成本变高。

分布式会话,需要一个session管理所有的会话,不能让用户在一台机器上登录了,其他机器上没有session信息。

分布式job,定时任务不能在每台机器上都出发,应该用主从架构,只让master机器run job,master挂了选举一个master出来。

四. 单体架构升级到分布式架构的可能遇到的问题

1. 新功能和旧系统维护的问题

新需求在新旧版本都开发成本高,旧bug fix在新系统中也需要fix成本高。

2. 业务完整性问题

migration 时候不知道某些功能是否有用,导致部分功能缺失。

3. 团队协作方式改变

不同的调用层,是按照功能分配任务,还是按照接口层分配。其中的交流沟通成本。

4. 系统交付式转变

五. 如何选择分布式架构

分布式架构的核心问题RPC-远程调用。

远程调用的方式:

协议

描述

优点

缺点

RMI

JAVA 远程方法调用、使用原生二进制方式进行序列化

简单易用、SDK支持,提高开发效率

不支持跨语言

Web Service

比较早系统调用解决方案 ,跨语言, 其基于WSDL 生成 SOAP 进行消息的传递。

SDK支持、跨语言

实现较重,发布繁琐

Http

采用http +json 实现

简单、轻量、跨语言

不支持SDK

Hessian

采用http +hessian序列化实现

简单,轻量、sdk支持

不能跨语言

RMI- 是rpc的一个实现方式,可以实现一个jvm到另一个jvm的方法调用,他的实现依赖jvm。

缺点:不支持跨语言,在分布中没有负载均衡。

RMI 实例:

Server:

RMI Registry:

Client:

轻量级分布式架构, Http + Nginx

问题: 靠nginx负载均衡,中间多一次io,不能自动服务发现。

嵌入应用内部的去中心化架构

基于独立代理进程的架构

模式

优点

缺点

适应场景

案例

集中式负载架构

简单

集中式治理

与语言无关

配置维护成本高

多了一层IO

单点问题

大部分公司都适用,对运维有要求

亿贝、携程、早期互联网公司

客户端嵌入式架构

无单点

性能更好

客户端复杂

语言栈要求

中大规模公司、语言栈统一

Dubbo 、

Twitter finagle、

Spring Cloud Ribbon

独立进程代理架构

无单点

性能更好

与语言无关

运维部署复杂

开发联调复杂

中大规模公司

对运维有要求

Smart Stack

Service Mesh

一个好的分布式架构可以解决以下问题:

  1. 注册中心服务发现
  2. 远程调用
  3. sdk
  4. 负载均衡
  5. 容错机制
  6. 跨语言
  7. 性能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值