逻辑层职责:
负责整个系统 中业务逻辑的处理。
逻辑层架构特点:
逻辑层业务复杂;
设计方式:
1、All In ONE方式:所有业务一个整体、一个文件、一个类里。
特点:简单,适合业务量小;
问题:耦合性严重;文件内容复杂、开发维护代价高、牵一发动全身;
适合场景:创业期、业务不复杂;
2、业务垂直方式:按业务拆分
特点:业务独立、耦合性降低、业务间开发互不影响、开发效率高、运维相对简单;
缺点:业务上仍是一个模块;编译成本高;一个业务修改需重新上线;重启影响所有业务;
适合场景:业务需求变化较大的互联网公司。
3、业务(物理)垂直划分方式:
特点:每个业务 形成一个独立的业务模块(或进程);
优点:业务间完全解耦,互不影响;模块独立;单独开发、上线、运维;效率高;
无状态业务逻辑层:
什么是无状态:
系统不存储业务的上下文信息;
多模块(子系统)之间完全对称;
关键特点:
不保存请求状态;不保存数据;
所有业务逻辑层服务器完全对称;
高可用:请求提交到任意可用逻辑层服务器,部分宕机仍可用;负载均衡。
负载均衡:
可用状态实时监测机制;
自动转移失败任务的机制;
流量和数据分摊机制;
心跳检测机制;
服务器恢复可用后自动重连机制。
业务逻辑层的纯异步调用:
什么是同步:发出一请求调用时,在无结果返回前不进行一步处理,形成线程阻塞;
什么是异步:调用发出,调用者立即返回。结果完成后,通过状态\通知和回调来通知调用者。这是非阻塞模式。
异步调用特点:非阻塞不需等待,CPU利用率高,性能高;吞吐量高; 缺点:实现成本稍高;
异步调用方案:
- 消息队列方案一:通过消息队列实现异步调用; 消息队列:具备缓冲、持久化、解决异步;
异步调用场景:
阻塞I/O模型:
轮询非阻塞I/O模型:
I/O复用模型:
复用模型适用于多连接
逻辑层分级管理
硬件分级:
核心系统—使用好的机器
边缘系统--使用差的机器
部署层面:
服务部署隔离;
避免故障带来的连锁反应;
核心系统部署在物理机上、不同的机房;
边缘系统部署虚拟机或公用机器;
管理分级:
--监控分级层面:
响应分级:
开发响应迅速;上线响应迅速;运维响应迅速;上线问题处理迅速。
设置合理超时:
超时时间应是平均响应延迟的2倍,避免过长时间等待。
响应延迟高,超时时间设置长些(比如3S);
响应延迟低,超时时间设置短些(比如1000ms);
下游请求超时后,业务层根据预设的调度策略;
重试次数:一般3次,多次无好处。
业务逻辑层服务降级设计:
降级原因:网络高峰期,并发量大,服务能力有限;性能下降甚至服务宕机,系统雪崩等;
怎么办:服务降级。
策略:保证核心服务可用;非核心服务弱可用,甚至不可用;
降级设计方案:拒绝部分请求、关闭请求。
拒绝部分请求:拒绝低优先级服务调用;减少服务调用并发数;
队列方式:入队、出队时间,超出一定时间就丢弃;
关闭部分服务:比如非核心服务直接关闭、业务逻辑层
服务器幂等设计:
请求失败后,会继续重试。