逻辑层职责:

    负责整个系统 中业务逻辑的处理。

逻辑层架构特点:

    逻辑层业务复杂;

    设计方式:

    1、All In ONE方式:所有业务一个整体、一个文件、一个类里。

        特点:简单,适合业务量小;

        问题:耦合性严重;文件内容复杂、开发维护代价高、牵一发动全身;

        适合场景:创业期、业务不复杂;

    2、业务垂直方式:按业务拆分

        特点:业务独立、耦合性降低、业务间开发互不影响、开发效率高、运维相对简单;

        缺点:业务上仍是一个模块;编译成本高;一个业务修改需重新上线;重启影响所有业务;

        适合场景:业务需求变化较大的互联网公司。

    3、业务(物理)垂直划分方式:

        特点:每个业务 形成一个独立的业务模块(或进程);

        优点:业务间完全解耦,互不影响;模块独立;单独开发、上线、运维;效率高;

    

    无状态业务逻辑层:

        什么是无状态:

            系统不存储业务的上下文信息;

            多模块(子系统)之间完全对称;

        关键特点:

            不保存请求状态;不保存数据;

            所有业务逻辑层服务器完全对称;

            高可用:请求提交到任意可用逻辑层服务器,部分宕机仍可用;负载均衡。

        负载均衡:

            可用状态实时监测机制;

            自动转移失败任务的机制;

            流量和数据分摊机制;

            心跳检测机制;

            服务器恢复可用后自动重连机制。

    业务逻辑层的纯异步调用:

        什么是同步:发出一请求调用时,在无结果返回前不进行一步处理,形成线程阻塞;

        什么是异步:调用发出,调用者立即返回。结果完成后,通过状态\通知和回调来通知调用者。这是非阻塞模式。

        异步调用特点:非阻塞不需等待,CPU利用率高,性能高;吞吐量高;  缺点:实现成本稍高;

        异步调用方案:

  1. 消息队列方案一:通过消息队列实现异步调用; 消息队列:具备缓冲、持久化、解决异步;

        异步调用场景:

        阻塞I/O模型:

        

业务系统逻辑架构 业务逻辑层的主要职责_业务逻辑

        轮询非阻塞I/O模型:

        

业务系统逻辑架构 业务逻辑层的主要职责_业务系统逻辑架构_02

        I/O复用模型:

        

业务系统逻辑架构 业务逻辑层的主要职责_服务器_03

         复用模型适用于多连接

    

    逻辑层分级管理

        硬件分级:

            核心系统—使用好的机器

            边缘系统--使用差的机器

        部署层面:

            服务部署隔离;

            避免故障带来的连锁反应;

            核心系统部署在物理机上、不同的机房;

            边缘系统部署虚拟机或公用机器;

        管理分级:

            --监控分级层面:

                

        响应分级:

            开发响应迅速;上线响应迅速;运维响应迅速;上线问题处理迅速。

        设置合理超时:

            超时时间应是平均响应延迟的2倍,避免过长时间等待。

            响应延迟高,超时时间设置长些(比如3S);

            响应延迟低,超时时间设置短些(比如1000ms);

        下游请求超时后,业务层根据预设的调度策略;

        重试次数:一般3次,多次无好处。

    业务逻辑层服务降级设计:

        降级原因:网络高峰期,并发量大,服务能力有限;性能下降甚至服务宕机,系统雪崩等;

        怎么办:服务降级。

        策略:保证核心服务可用;非核心服务弱可用,甚至不可用;

        降级设计方案:拒绝部分请求、关闭请求。

            拒绝部分请求:拒绝低优先级服务调用;减少服务调用并发数;

                     队列方式:入队、出队时间,超出一定时间就丢弃;

                     关闭部分服务:比如非核心服务直接关闭、业务逻辑层

    服务器幂等设计:

        请求失败后,会继续重试。