微服务项目常用术语
术语科普
开始讲SpringCloud Alibaba之前先科普一下项目常用术语,方便后续内容讲解
服务器:分软件与硬件,软件:类型tomcat这种跑项目的程序, 硬件:用来部署项目的电脑(一般性能比个人电脑好)
服务:操作系统上术语:一个程序,开发中术语:一个能对外提供功能的程序
微服务:小的服务,一个完整项目可以拆n个子项目,这些子项目能独立运行,独立对为提供功能。
节点:微观上:一个服务,宏观上:一台服务器
垂直扩展:垂直扩展是指增强单机硬件性能
水平扩展:通过增加更多的服务器或者程序实例来分散负载,从而提升存储能力和计算能力。
容错率:允许服务器集群(一堆服务器)错误(异常/故障)出现的范围和概率,
高内聚低耦合:内聚-->讲究程序功能独立 耦合--->讲究程序间交互,
以java为例子:高内聚低耦合:讲究类设计时尽快简单(边界清晰/功能简单),类与类间交互尽可能少(减少类间的相互调用)
流量:有很多种说,开发中说的是访问量(请求次数)
服务间依赖:项目与项目间的调用,程序与程序间的调用
资源调度:各种资源进行合理有效的调节和测量及分析和使用,开发中资源:服务器,内存,CPU,IO等项目运行需要各种软硬件。
单点:唯一,开发中的单点:唯一一个mysql数据库,唯一个服务器
单点故障:如果项目/程序部署唯一一个服务器,它挂了,那就玩完了
宕机:服务器挂了
项目结构术语
需求:假设一种场景,项目部署上线,需要需要MySQL,Redis环境,此时该怎么保证项目平稳运行。
方案1:单体
如果项目业务体量小,可以将所有业务放置在一个项目中实现,部署时将项目,与相关MySQL,Redis 环境一种安装在一台服务器中,此为单体结构。
优点:开发简单,部署简单
缺点:单机性能有限,只适合简单项目,可用性不高
优化方向:拆分
方案2-分布式
单台服务器处理能力有限,既要运行项目,又要支持MySQL,Redis环境,资源有点捉襟见肘,此时可以实现分布式部署,俗称分家。
将MySQL、Redis、项目分开部署,项目通过远程的方式连接MySQL跟Redis
优点:提高项目处理能力,扩大业务容量
缺点:维护成本增加,可用性不高
优化方向:人多力量大
方案3-集群
上面的单体,分布式都存在一个问题,可用性不高,比如:当Tomcat/MySQL/Redis 3个宕机时,都会造成项目不可用,这就是经典的单点故障问题。此时需要引入集群概念了。
所谓集群简单的讲就是备份,将Tomcat/MySQL/Redis复制几份,然后让它们同时运行,同时提供相同的服务,这样项目处理能力可以提高好几倍。
上图,项目,MySQL,Redis都做了集群了,当一个损坏了,另外一个可以接上,项目的可用性自然就上去了。 但是这也存在一个问题,客户端怎么知道访问哪个服务器(项目),项目怎么知道要访问哪个Redis,哪个MySQL?这时就引入调度者的概念。
客户端访问服务器的调度者:Nginx负载均衡服务器
项目调用MySQL的调度者:MyCat/Sharding-JDBC
项目调度Redis的调度这:Redis Cluster集群服务器
优点:提高项目处理能力,扩大业务容量
缺点:维护成本倍增,各个节点访问都需要注意网络延时
优化方向:网络优化
到这就够了,再往后就是网络概念啦,本节科普到这。