术语科普

开始讲SpringCloud Alibaba之前先科普一下项目常用术语,方便后续内容讲解

服务器:分软件与硬件,软件:类型tomcat这种跑项目的程序, 硬件:用来部署项目的电脑(一般性能比个人电脑好)

服务:操作系统上术语:一个程序,开发中术语:一个能对外提供功能的程序

微服务:小的服务,一个完整项目可以拆n个子项目,这些子项目能独立运行,独立对为提供功能。

节点:微观上:一个服务,宏观上:一台服务器

垂直扩展:垂直扩展是指增强单机硬件性能

水平扩展:通过增加更多的服务器或者程序实例来分散负载,从而提升存储能力和计算能力。

容错率:允许服务器集群(一堆服务器)错误(异常/故障)出现的范围和概率,

高内聚低耦合:内聚-->讲究程序功能独立 耦合--->讲究程序间交互,

以java为例子:高内聚低耦合:讲究类设计时尽快简单(边界清晰/功能简单),类与类间交互尽可能少(减少类间的相互调用)

流量:有很多种说,开发中说的是访问量(请求次数)

服务间依赖:项目与项目间的调用,程序与程序间的调用

资源调度:各种资源进行合理有效的调节和测量及分析和使用,开发中资源:服务器,内存,CPU,IO等项目运行需要各种软硬件。

单点:唯一,开发中的单点:唯一一个mysql数据库,唯一个服务器

单点故障:如果项目/程序部署唯一一个服务器,它挂了,那就玩完了

宕机:服务器挂了

项目结构术语

需求:假设一种场景,项目部署上线,需要需要MySQL,Redis环境,此时该怎么保证项目平稳运行。

方案1:单体

如果项目业务体量小,可以将所有业务放置在一个项目中实现,部署时将项目,与相关MySQL,Redis 环境一种安装在一台服务器中,此为单体结构。

修改微服务名称 微服务命名规范_集群

优点:开发简单,部署简单

缺点:单机性能有限,只适合简单项目,可用性不高

优化方向:拆分

方案2-分布式

单台服务器处理能力有限,既要运行项目,又要支持MySQL,Redis环境,资源有点捉襟见肘,此时可以实现分布式部署,俗称分家。

修改微服务名称 微服务命名规范_微服务_02

将MySQL、Redis、项目分开部署,项目通过远程的方式连接MySQL跟Redis

优点:提高项目处理能力,扩大业务容量

缺点:维护成本增加,可用性不高

优化方向:人多力量大

方案3-集群

上面的单体,分布式都存在一个问题,可用性不高,比如:当Tomcat/MySQL/Redis 3个宕机时,都会造成项目不可用,这就是经典的单点故障问题。此时需要引入集群概念了。

所谓集群简单的讲就是备份,将Tomcat/MySQL/Redis复制几份,然后让它们同时运行,同时提供相同的服务,这样项目处理能力可以提高好几倍。

修改微服务名称 微服务命名规范_集群_03

上图,项目,MySQL,Redis都做了集群了,当一个损坏了,另外一个可以接上,项目的可用性自然就上去了。 但是这也存在一个问题,客户端怎么知道访问哪个服务器(项目),项目怎么知道要访问哪个Redis,哪个MySQL?这时就引入调度者的概念。

修改微服务名称 微服务命名规范_微服务_04

客户端访问服务器的调度者:Nginx负载均衡服务器

项目调用MySQL的调度者:MyCat/Sharding-JDBC

项目调度Redis的调度这:Redis Cluster集群服务器
 

优点:提高项目处理能力,扩大业务容量

缺点:维护成本倍增,各个节点访问都需要注意网络延时

优化方向:网络优化

到这就够了,再往后就是网络概念啦,本节科普到这。