微服务

一、微服务的概念

1.什么是单体,分布式,集群

1-1 单体

业务量很小时,只需将所有代码放在一个项目中,经打包之后部署在一台服务器即可。

1-2 分布式

业务更复杂,业务量更多的情况下,把单体项目按功能拆分成多个小项目,部署在多台服务器上

1-3 集群

分布式项目中,当某个业务,比如Redis服务挂掉了,或服务器内存不支持Redis服务继续运行,就需要添加多台Redis服务器共同对外提供服务和做备用数据库,这就是集群。

1-4 负载均衡

充当调度者的角色,将请求均匀发送到服务器集群上,避免大量请求都发送到一台服务器造成压力过大

2. 单体架构、垂直架构、SOA架构、微服务架构

2-1 单体架构

优点:只需维护一个项目,部署和测试方便

缺点:可扩展性差,技术栈固化,可靠性和稳定性低,维护困难

2-2 垂直架构(分布式架构早期形式)

将单体项目按功能拆分成多个小项目

优点:解决了并发问题,可以针对不同服务进行优化和扩展,一个服务的问题不会影响到其他服务的运行

缺点:服务与服务之间项目独立,互相调用不便,服务之间可能存在重复功能,重复性高

2-3 SOA架构

在分布式架构下,使用SOA调度中心对服务进行管理

优点:使用注册中心解决了服务与服务之间调用麻烦的问题

缺点:服务之间存在依赖关系,容易造成服务雪崩,且服务关系复杂,维护、测试、部署困难

2-4 微服务架构

在SOA架构下进一步增强,所有服务彻底拆分,为每个服务单独设计数据库表

优点:所有服务独立,任务划分清晰且利于功能扩展

缺点:技术成本高

3.什么是微服务

将项目中所有功能,拆分成只负责各自业务的小的服务,通过服务中心的不同组件来管理这些服务。

3-1 常用服务组件

二、服务治理(注册与发现)

1.解决问题

传统分布式架构,以代码硬编码方式解决服务之间相互调用的问题,但无法实现负载均衡且当业务增多时,维护困难。

这时可以采用服务治理来解决。

2.什么是服务治理

服务治理是微服务架构中最核心,最基本的模块,用于实现各个微服务间的自动化注册与发现

3. 基本概念:服务注册,服务心跳,服务健康检测,服务发现

3-1 服务注册:将自身的服务信息注册到注册中心中

3-2 服务心跳:注册到注册中心的服务,定时向注册中心发送心跳数据证明自身正常运行

3-3 服务健康检测:注册中心也定时检测服务是否正常发送心跳数据,来检验服务是否正常对外提供服务

3-4 服务发现:其他服务需要调用别的服务,到注册中心查找该服务的信息,根据得到的服务列表,结合负载均衡器,分配调用服务器,实现服务的调用

三、高并发

1.什么是高并发

在很短一段时间内,大量用户访问系统程序,并且需要处理大量请求

2. 高并发场景下可能出现的问题

2-1 性能问题(请求处理不过来)

高并发场景下,系统处理不了这么多请求,所以请求的线程只能等待,导致响应时间边长甚至超时,严重影响用户体验

2-2 数据一致性问题(数据错乱)

高并发读写场景下,多个线程同时访问或修改数据,导致执行顺序不确定,最终出现数据不一致错误

2-3 可用性问题

高并发场景下,大量请求无法响应,导致其一直处于等待状态,占用了大量的服务器资源(内存,CPU,线程池等),最终导致服务器宕机,无法对外正常提供服务,甚至造成服务雪崩。

3 高并发场景常见问题的解决思路

2-1 性能问题(高性能)

缓存:提高请求处理速度,以空间换时间,将频繁读取但不经常改变的数据提前加载到缓存中,避免直接访问数据库而是从内存中读取,减少了响应时间和后端数据库的压力。

提升单个服务器的处理能力:采用异步化操作,比如使用消息队列,将耗时的操作(日志,短信,数据计算等)从主流业务中抽离出来,作为异步任务处理。

2-2 数据一致性问题(数据一致)

强一致性:

锁机制:保证数据写操作的原子性

分布式事物

弱一致性:

异步复制,消息队列,读写锁与版本号机制

2-3 可用性问题(高可用)

服务保护(熔断,降级,限流)

实现:使用Sentinel框架

熔断:当某个服务器故障,主动熔断该服务,避免造成服务雪崩

降级:当某个服务器故障,启用备用方案,不会影响用户的正常使用,但用户体验可能下降。

限流:控制请求的流量,避免大量请求直接发送到服务器上。

负载均衡

实现:Nginx,F5,SLB等

将请求均匀的分布到健康的服务实例上,避免单节点压力过大

四、远程调用,负载均衡

常用组件:Feign

Feign是SpringCloud提供的服务组件,只需声明一个接口,即可将远程服务调用变得像本地调用一样简单

五、服务防护

高并发场景下,服务器处理不了这么多请求,导致无法对外正常提供服务造成服务器宕机甚至雪崩,这时就需要一些防护机制防止这种问题的发生。

1.常用的服务防护机制:隔离,超时,限流,熔断,降级

1-1 隔离

上层服务需要调用多个下层服务完成业务,可以将上层服务的线程资源均匀分配给这些下层服务,各自提供各自的业务,避免单个下层服务故障影响其他正常服务。

1-2 超时

上层服务调用下层服务时,可以设置一个响应时间,若超过响应时间下层服务未做出响应,则断开下层服务的请求,避免长时间占用造成线程资源浪费

1-3 限流

限制流量的输入与输出,保证系统的正常运行

1-4 熔断

主动熔断出现故障的服务,避免其影响其他服务的正常运行

1-5 降级

熔断后的备选方案,当某个阶段出现故障被熔断后,采用降级机制保证服务的正常提供,以降低用户体验的手段来保证服务的正常运行。

2. 常用的服务防护组件-----Sentinel

2-1 什么是Sentinel

是阿里巴巴公司开源的用于服务防护的服务中心组件

2-2 为什么用Sentinel

1.完全开源,免费使用

2.经过市场验证,可靠性高

3.生态好

2-3 怎么使用

3. Sentinel提供的五种流量控制规则

流控规则、降级规则、热点规则、系统规则、授权

六、服务网关Gateway

1.什么是API网关

系统的统一入口

2.常用网关

2-1 Ngin+lua

2-2 Kong

2-3 Zuul

3.Gateway

优点:

性能强、功能强、设计优雅

缺点:

不是传统Servlet编程模型,学习成本高

不能部署在Tomcat,Jetty等Servlet容器中,只能打包成Jar包

全部评论

相关推荐

评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务