乐趣区

关于分布式:编程体系结构09分布式系统架构

本文源码:GitHub·点这里 || GitEE·点这里

一、根底概念

1、单服务

所有业务服务和利用组件部署在一台服务上,节省成本,这是单服务构造,实用于并发低,业务繁多的场景。

2、集群模式

业务量逐步增大,并发高,把一台服务进行程度扩大,做一个服务群,申请压力扩散到不同的服务上解决,每台服务称为集群的一个节点,到这就是集群服务。

3、分布式架构

分布式构造就是依照业务性能,拆分成独立的子服务,独立的库表,能够独立运行,且服务之间通信和交互,带来的益处升高业务间的耦合度,不便开发保护,程度扩大,复用性低等等。

4、技术体系

服务基础架构:Dubbo 框架,SpringCloud 框架;

容器化运维:Docker、Kubernetes;

数据存储:关系型 MySQL,NoSQL 数据库,OLAP 引擎;

罕用组件:Zookeeper 协调,MQ 异步,Redis 缓存;

二、分布式框架

1、Dubbo 框架

垂直利用越来越多,利用之间交互不可避免,将外围业务抽取进去,作为独立的服务,逐步造成稳固的服务中心,使前端利用能更疾速的响应多变的市场需求。此时,用于进步业务复用及整合的分布式服务框架 (RPC) 是要害。Dubbo 框架的外围能力:面向接口的近程办法调用,智能容错和负载平衡,以及服务主动注册和发现。

2、SpringCloud 框架

分布式架构下最成熟的框架,SpringCloud 是一系列框架的有序汇合。它利用 SpringBoot 的开发便利性奇妙地简化了分布式系统基础设施的开发,如服务发现注册、配置核心、音讯总线、负载平衡、断路器、数据监控等,都能够用 SpringBoot 的开发格调做到一键启动和部署。

https://github.com/cicadasmile/spring-cloud-base

外围组件

注册核心:具备服务发现、服务记录、查问、动静治理的机制。罕用的注册核心,Zookeeper、Eureka、Consul、Nacos 等。

熔断降级:限度流量忽然高并发冲垮零碎,使这类报文以比拟平均的速度流动发送,达到爱护零碎绝对稳固的目标。罕用算法令牌桶、漏斗;罕用组件 Nginx、CDN、Hystrix、Sentinel,通过不同节点管制流量。

服务网关:在整个架构体系上也是一个服务,作为申请的惟一入口,与外观模式非常相似,在网关层解决所有的非业务性能,为客户端提供定制的 API。罕用组件 Zuul、Tyk、Kong。

https://github.com/cicadasmile/husky-spring-cloud

3、业务型组件

消息中间件:RocktMQ、Kafka、RabbitMQ 等;

缓存中间件:Redis、Eache 等;

分布式事务:Seata、Hmily、TCC-transaction 等;

三、架构细节

1、全局 ID 策略

业务场景产生的数据,都须要一个惟一 ID 作为外围标识,用来流程化治理。比方常见的:UUID、雪花算法、自增主键、ID 容器等。

2、接口幂等性

幂等操作的特点是其任意屡次执行所产生的影响均与一次执行的影响雷同。就是说,一次和屡次申请某一个资源会产生同样的作用影响。在接口、重试、弥补的场景下尤其要保障操作的幂等性。

3、缓存解决

业务零碎中,查问时最容易呈现性能问题的模块,查问面对的数据量大,筛选条件简单,所以在零碎架构中引入缓存层,则是十分必要的,用来缓存热点数据、归档数据、首页查问等,达到疾速响应的目标。

4、异步解决流程

异步是一种设计理念,异步操作不等于多线程,MQ 中间件,或者音讯播送,这些是能够实现异步解决的形式,异步解决不必阻塞以后线程来期待解决实现,而是容许后续操作,直至其它线程将解决实现,并回调告诉此线程。

5、高并发与资源锁

高并发业务外围还是流量管制,管制流量下沉速度,或者管制承接流量的容器大小,多余的间接溢出,这是绝对简单的流程。一方面能够通过流量整形的形式解决申请量,另一方面能够通过加锁解决并发拜访资源的问题。

6、分布式事务

不同的服务不同数据库的多个细节操作组成,这些无感知的细节操作散布在不同服务上,甚至属于不同的地区和利用,事务的参与者、反对事务的服务器、资源服务器以及事务管理器别离位于不同的分布式系统的不同节点,如何保障这些操作全副胜利或者全副失败,即保障不同数据库间的数据一致性,这就是分布式事务须要解决的外围问题。

https://github.com/cicadasmile/data-manage-parent

四、数据源组件

1、关系型数据库

采纳了关系模型来组织数据的数据库,其以行和列的模式存储数据,例如 MySQL、Oracle。在分布式系统下,为了保障外围流程的稳定性,在要害业务上根本都采纳关系型数据库,当业务实现后,如果数据量大,会把数据同步到其余查问性能高组件中。

2、NoSQL 数据库

NoSQL 意即 ” 不仅仅是 SQL”。对不同于传统的关系型数据库的数据库管理系统的统称。NoSQL 用于超大规模数据的存储。这些类型的数据存储不须要固定的模式,无需多余操作就能够横向扩大。例如 MongoDB、Cassandra 等。

3、数据管理策略

读写库拆散、查问数据分库分表、分布式下业务分库、基于用户流量分库。

https://github.com/cicadasmile/data-manage-parent

五、服务监控

1、生产故障

在分布式的简单架构下,应用服务、软件服务、硬件服务,任何层面出问题都可能导致申请不能残缺执行,引发一系列效应,做好全链路的监控,疾速定位问题是十分要害的。

2、应用层监控

应用层为开发的业务逻辑服务,也是最容易突发问题的一个层面,通常从申请流量、服务链路熔断、零碎异样日志几个方面做监控指标,察看零碎是否稳固。

3、软件层监控

这里通常指,数据库层面,例如 Druid 的监控剖析;罕用中间件,例如 RocketMQ 的控制台;Redis 缓存:提供命令获取相干监控数据等。

4、硬件层监控

硬件层面,关注的三大核心内容:CPU、内存、网络。底层硬件资源暴发的故障,来自下层的应用服务或者中间件服务触发的可能性偏高。成熟的监控框架,例如 zabbix,grafana 等。

六、源代码地址

GitHub·地址
https://github.com/cicadasmile
GitEE·地址
https://gitee.com/cicadasmile

举荐浏览:编程体系整顿

序号 项目名称 GitHub 地址 GitEE 地址 举荐指数
01 Java 形容设计模式, 算法, 数据结构 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
02 Java 根底、并发、面向对象、Web 开发 GitHub·点这里 GitEE·点这里 ☆☆☆☆
03 SpringCloud 微服务根底组件案例详解 GitHub·点这里 GitEE·点这里 ☆☆☆
04 SpringCloud 微服务架构实战综合案例 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
05 SpringBoot 框架根底利用入门到进阶 GitHub·点这里 GitEE·点这里 ☆☆☆☆
06 SpringBoot 框架整合开发罕用中间件 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
07 数据管理、分布式、架构设计根底案例 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
08 大数据系列、存储、组件、计算等框架 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
退出移动版