互联网整体架构设计和Spring Cloud简介

1.是什么是架构?

1)是对业务场景抽象后的得出的支持骨架

2)机构为业务场景所剩,为业务场景所弃

3)架构没有最好,只有最合适。一般考虑人员技术研发能力、业务复杂度、数据规模大小、时间成本、运维能力。

4)最合适的架构都是各方面折中的结果。

5)场景驱动架构增长

2.架构分类

1、单体架构 (All in One)

   A、MVC架构

在这里插入图片描述

   B、前后端分离架构

在这里插入图片描述

   缺陷:  
   1)复杂性高:所以的模块在一个process内处理非常的庞大。整个项目包含的模块非常多、模块的边界模糊、 依赖关系不清晰、 代码质量参差不齐、混乱地堆砌在一起。可想而知整个项目非常复杂。 每次修改代码都心惊胆战,甚至添加一个简单的功能, 或者修改一个Bug都会带来隐含的缺陷。	

2)技术债务: 随着时间推移、需求变更和人员更迭,会逐渐形成应用程序的技术债务, 并且越积 越多。“ 不坏不修”, 这在软件开发中非常常见, 在单体应用中这种思想更甚。 已使用的系统设计或代码难以被修改,因为应用程序中的其他模块可能会以意料之外的方式使用它。

3)部署频率低: 随着代码的增多,构建和部署的时间也会增加。而在单体应用中, 每次功能的变更或缺陷的修复都会导致需要重新部署整个应用。全量部署的方式耗时长、 影响范围大、 风险高, 这使得单体应用项目上线部署的频率较低。 而部署频率低又导致两次发布之间会有大量的功能变更和缺陷修复,出错率比较高。

4)可靠性差: 某个应用Bug,例如死循环、内存溢出等, 可能会导致整个应用的崩溃。

5)扩展能力受限: 单体应用只能作为一个整体进行扩展,无法根据业务模块的需要进行伸缩。例如,应用中有的模块是计算密集型的,它需要强劲的CPU; 有的模块则是IO密集型的,需要更大的内存。 由于这些模块部署在一起,不得不在硬件的选择上做出妥协。

垂直架构阶段

为了解决单体系架构的问题,我们怎么办?核心思想就是拆。将集中在一起的多个模块,按照功能单独进行拆开成一个一个独立的业务模块。各业务模块分别部署在不同的服务器上,各个业务模块之间通过接口进行数据交互。数据库也大量采用分布式数据库然后部署在不同的机器上。由于独立部署,前端进行访问的时候,不可避免遇到跨域问题,此时一般可以在前面添加nginx进行反向代理。
在这里插入图片描述

优点:该架构相对于单体架构来说,这种架构提供了负载均衡的能力,大大提高了系统负载能力,解决了网站高并发的需求。

1)降低了耦合度:把模块拆分,使用接口通信,降低模块之间的耦合度。

2)责任清晰:把项目拆分成若干个子项目,不同的团队负责不同的子项目。

3)扩展方便:增加功能时只需要再增加一个子项目,调用其他系统的接口就可以。

4)部署方便:可以灵活的进行分布式部署。

5)提高代码的复用性:比如service层,如果不采用分布式rest服务方式架构就会在

微服务架构

1)业务进行垂直拆分、功能的水平拆分

2)业务是什么?订单业务、商品业务、用户业务

3)功能是什么?数据访问层、业务逻辑层、对外接口网关层

在这里插入图片描述

特点:

1)服务层按业务拆分为一个一个的微服务。

2)微服务的职责单一。

3)微服务之间采用RESTful、RPC等轻量级协议传输。

4)有利于采用前后端分离架构。

优点:

1)服务拆分粒度更细,有利于资源重复利用,提高开发效率。

2)可以更加精准的制定每个服务的优化方案,按需伸缩。

3)适用于互联网时代,产品迭代周期更短。

缺点:

1)开发的复杂性增加,因为一个业务流程需要多个微服务通过网络交互来完成。

2)微服务过多,服务治理成本高,不利于系统维护。

3.架构高可用的手段

A、什么是高可用?

就是任何时候都提供正常的读写服务。微服务架构必须解决的三大问题:高可用、高并发、高流量问题。

B、架构高可用设计时的手段

1)设计无状态化 后台无状态

2)子系统冗余(集群) (就是一个挂掉,后面要跟上)

3)幂等性设计 (根据业务设计 就是点多次的操作算一次操作)

4)异步调用,避免一个服务失败导致整个服务失败(消息中间件) (要保证消息传递)

5)超时机制(熔断) (数据太大 我觉得机器受不了 就把它熔断掉)

6)分级管理

7)服务降级

4.高可用普适微服务架构

提示:注册网易云账号,阅读架构发展史
https://sq.163yun.com/blog/article/155776878871519232

其实我们可以看一个简化的版本,如下图:
在这里插入图片描述

5.Spring Cloud简介

Spring Cloud 是一个基于 SpringBoot实现的云应用开发工具,是分布式微服务架构的一站式解决方案,是多种微服务架构的集合体,我们通常称为微服务全家桶。它为开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。

Spring cloud以2020年2月份为标志,分为2代。第1代是以美国的一个视频网站公司NetFlix提供的组件为主。第2代以中国的阿里巴巴提供的组件为主。
为什么要学习spring cloud alibaba微服务解决方案,而不是NetFlix公司的微服务解决方案,原因如下:
在这里插入图片描述

header 1Spring Cloud 第一代Spring Cloud 第二代
网关Spring Cloud ZuulSpring Cloud Gateway
注册中心Eureka,Consul,ZooKeeper阿里 Nacos,拍拍贷 Radar 等可选
配置中心Spring Cloud Config阿里 Nacos,携程 Apollo,随行付 Config Keeper
客户端负载均衡Ribbonspring-cloud-commons的 Spring Cloud Load Balancer
熔断器HystrixResilience4J、阿里 Sentinel
服务调用Netflix FeignOpen Feign

基于社区的问题,最终Spring Cloud最终教学内容选型
在这里插入图片描述

6、Spring Cloud Alibaba简介

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。

官网地址:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md

1)主要功能

A、服务限流降级

B、服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。

C、分布式配置管理

D、消息驱动能力

E、分布式事务

F、阿里云对象存储

G、分布式任务调度

H、阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

2)组件介绍

A、Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

B、Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

C、RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。

D、Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。

E、Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。

F、Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。

G、Alibaba Cloud SchedulerX:
阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。

3)阿里spring cloud aliba的组件如下图所示。
在这里插入图片描述

7.高并发的解决思路

一、什么是高并发

高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。

高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。

1)响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。

2)吞吐量:单位时间内处理的请求数量。

3)QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。

4)并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。

** 二、如何提升系统的并发能力**

互联网分布式架构设计,提高系统并发能力的方式,方法论上主要有两种:垂直扩展(Scale Up)与水平扩展(Scale Out)。

**A、垂直扩展:**提升单机处理能力。垂直扩展的方式又有两种:

(1)增强单机硬件性能,例如:增加CPU核数如32核,升级更好的网卡如万兆,升级更好的硬盘如SSD,扩充硬盘容量如2T,扩充系统内存如128G;

(2)提升单机架构性能,例如:使用Cache来减少IO次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间;

在互联网业务发展非常迅猛的早期,如果预算不是问题,强烈建议使用“增强单机硬件性能”的方式提升系统并发能力,因为这个阶段,公司的战略往往是发展业务抢时间,而“增强单机硬件性能”往往是最快的方法。
不管是提升单机硬件性能,还是提升单机架构性能,都有一个致命的不足:单机性能总是有极限的。所以互联网分布式架构设计高并发终极解决方案还是水平扩展。

**B、水平扩展:**只要增加服务器数量,就能线性扩充系统性能。水平扩展对系统架构设计是有要求的,如何在架构各层进行可水平扩展的设计,以及互联网公司架构各层常见的水平扩展实践,是本文重点讨论的内容。

三、常见的互联网分层架构

在这里插入图片描述

常见互联网分布式架构如上,分为:

(1)客户端层:典型调用方是浏览器browser或者手机应用APP

(2)反向代理层:系统入口,反向代理

(3)站点应用层:实现核心应用逻辑,返回html或者json

(4)服务层:如果实现了服务化,就有这一层

(5)数据-缓存层:缓存加速访问存储

(6)数据-数据库层:数据库固化数据存储

整个系统各层次的水平扩展,又分别是如何实施的呢?

四、分层水平扩展架构实践

1)反向代理层的水平扩展

在这里插入图片描述

反向代理层的水平扩展,是通过“DNS轮询”实现的:dns-server对于一个域名配置了多个解析ip,每次DNS解析请求来访问dns-server,会轮询返回这些ip。

当nginx成为瓶颈的时候,只要增加服务器数量,新增nginx服务的部署,增加一个外网ip,就能扩展反向代理层的性能,做到理论上的无限高并发。

2)站点层的水平扩展

在这里插入图片描述

站点层的水平扩展,是通过“nginx”实现的。通过修改nginx.conf,可以设置多个web后端。

当web后端成为瓶颈的时候,只要增加服务器数量,新增web服务的部署,在nginx配置中配置上新的web后端,就能扩展站点层的性能,做到理论上的无限高并发。

3)服务层的水平扩展

在这里插入图片描述

服务层的水平扩展,是通过“服务连接池”实现的。

站点层通过RPC-client调用下游的服务层RPC-server时,RPC-client中的连接池会建立与下游服务多个连接,当服务成为瓶颈的时候,只要增加服务器数量,新增服务部署,在RPC-client处建立新的下游服务连接,就能扩展服务层性能,做到理论上的无限高并发。如果需要优雅的进行服务层自动扩容,这里可能需要配置中心里服务自动发现功能的支持。

4)数据层的水平扩展

在数据量很大的情况下,数据层(缓存,数据库)涉及数据的水平扩展,将原本存储在一台服务器上的数据(缓存,数据库)水平拆分到不同服务器上去,以达到扩充系统性能的目的。

互联网数据层常见的水平拆分方式有这么几种,以数据库为例:

A、按照范围水平拆分

在这里插入图片描述

每一个数据服务,存储一定范围的数据,上图为例:

user0库,存储uid范围1-1kw

user1库,存储uid范围1kw-2kw

这个方案的好处是:

(1)规则简单,service只需判断一下uid范围就能路由到对应的存储服务;

(2)数据均衡性较好;

(3)比较容易扩展,可以随时加一个uid[2kw,3kw]的数据服务;

不足是:

(1) 请求的负载不一定均衡,一般来说,新注册的用户会比老用户更活跃,大range的服务请求压力会更大;

B、按照哈希水平拆分

在这里插入图片描述

每一个数据库,存储某个key值hash后的部分数据,上图为例:

user0库,存储偶数uid数据

user1库,存储奇数uid数据
这个方案的好处是:

(1)规则简单,service只需对uid进行hash能路由到对应的存储服务;

(2)数据均衡性较好;

(3)请求均匀性较好;

不足是:

(1)不容易扩展,扩展一个数据服务,hash方法改变时候,可能需要进行数据迁移;

这里需要注意的是,通过水平拆分来扩充系统性能,与主从同步读写分离来扩充数据库性能的方式有本质的不同。

通过水平拆分扩展数据库性能:

(1)每个服务器上存储的数据量是总量的1/n,所以单机的性能也会有提升

(2)n个服务器上的数据没有交集,那个服务器上数据的并集是数据的全集;

(3)数据水平拆分到了n个服务器上,理论上读性能扩充了n倍,写性能也扩充了n倍(其实远不止n倍,因为单机的数据量变为了原来的1/n);

通过主从同步读写分离扩展数据库性能:

(1)每个服务器上存储的数据量是和总量相同;

(2)n个服务器上的数据都一样,都是全集;

(3)理论上读性能扩充了n倍,写仍然是单点,写性能不变;

缓存层的水平拆分和数据库层的水平拆分类似,也是以范围拆分和哈希拆分的方式居多,就不再展开。

五、高并发问题小结

高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。

提高系统并发能力的方式,方法论上主要有两种:垂直扩展(Scale Up)与水平扩展(Scale Out)。前者垂直扩展可以通过提升单机硬件性能,或者提升单机架构性能,来提高并发性,但单机性能总是有极限的,互联网分布式架构设计高并发终极解决方案还是后者:水平扩展。

互联网分层架构中,各层次水平扩展的实践又有所不同:

(1)反向代理层可以通过“DNS轮询”的方式来进行水平扩展;

(2)站点层可以通过nginx来进行水平扩展;

(3)服务层可以通过服务连接池来进行水平扩展;

(4)数据库可以按照数据范围,或者数据哈希的方式来进行水平扩展;

各层实施水平扩展后,能够通过增加服务器数量的方式来提升系统的性能,做到理论上的性能无限.

8、Spring Boot和Spring Cloud的版本适配

A、检查方法

https://start.spring.io/actuator/info

B、最终选择

1)Spring cloud选择Hoxton.SR3

2)Spring boot 2.2.7 release

3)Spring cloud alibaba 2.2.0 release

4)mybatis 2.1.2以上版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值