1、什么是SAAS平台?它的特点是什么?

saas概念.png
供应商将应用软件统一部署在自己的服务器上,客户可以根据工作实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得Saas平台供应商提供的服务。

saaa特点
互联网特性 saas产品都是基于网络的,优势在于不需要投入任何硬件费用,也不用请系统维护人员就上网,有浏览器就可以进行ERP、CRM系统的使用
多重租赁特性 saas基于一套标准软件系统为成百上千的不同客户提供服务。saas支持不同租户之间数据和配置的隔离,保证每个租户数据的安全与隐私
服务特性 服务的使用必须通过权限来控制,来解决服务合约的签订、服务使用的计量、在线服务质量和服务费用的收取等问题
可扩展特性 提高系统的并发性,优化资源锁、使用无状态线程和资源池等关键资源
总结 服务共享、数据隔离

3、说出餐掌柜项目的通用服务,核心业务、系统架构作用是什么?分别使用到哪些技术?

餐掌柜业务架构.png

请求接入 H5 客户点餐接入
运营商 运营管理接入
商家 商家主业务接入
阿里云 OSS、ECS、部署平台接入
网关 nginx 反向代理,路由承压,使用keepalived解决nginx高可用
gateway 第二代网关服务,路由分发、权限鉴定,使用nginx解决网关的高可用
核心业务 点餐平台 负责客户点餐,为Android、IOS、H5提供统一服务接口
商家平台 负责基础数据配置,同时提供店员及交易结算服务
运营平台 负责商家管理及运营报表系统

系统架构的作用:敏捷、解耦、复用。

餐掌柜项目是基于spring-cloud-alibaba的架构体系,其核心组件如下:
餐掌柜系统的核心组件.png

系统架构的核心组件说明
Sentinel 把流量作为切入点从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性
Nacos 一个更易于构建云原生应用的动态服务发现,配置管理和服务管理平台
RocketMQ 高吞吐量的分布式消息和流计算平台
Dubbo 是一款高性能的java RPC框架
Seata 一个更易于使用的高性能微服务分布式事务解决方案
Alibaba Cloud OSS 是阿里提供的海量,安全,低成本,高可靠的云存储服务
Alibaba Cloud Schedulerx 一款分布式调度产品,支持周期性的任务与固定时间点触发任务

餐掌柜技术点.png

展现层 负载与用户的交互,通过统一访问gateway网关来实现业务数据的访问
代理层 选用高性能的nginx服务,通过域名与不同servrce的绑定,通过gateway路由到不同的服务组
权限控制层 使用无状态的JWT认证,结合Spring Security实现统一的权限控制
服务治理 使用nacos注册中心,配置中心实现服务的治理
服务调用 使用Spring Clould Alibaba的核心组件Dubbo进行服务之间的调用
流量控制 使用sentinel把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性
缓冲层 Spring Cache配合redis轻松无侵入的实现业务数据的缓冲
基础业务支撑 基于Spring Boot脚手架,轻松集成OSS图片存储、ShardingJDBC分库分表、mybatis-plus、docker、接口文档swagger2、分布式事务seata、Mysql、Redis、RocketMQ/RabbitMQ等组件

4、项目模块及核心项目模块职责?

餐掌柜项目模块.png

restkeeper-super 负责整个项目的模块定义,依赖和插件管理
restkeeper-framework 核心组件模块,是对各个框架集成:MQ、seata、jwt、redis等
restkeeper-gateway 网关对外统一接口,集成对日志client、鉴权client、knife4j等组件
restkeeper-model-basic 基础服务模块,与业务无关的组件都在这里集成
restkeeper-model-report 报表模块提供统一的日志报表,对各个子系统报表提供接口支撑
restkeeper-model-security 统一鉴权模块,依赖spring-security
restkeeper-model-shop 商家中心模块:各个主业务功能的实现,并且提供H5点餐端
restkeeper-model-trading 交易平台,提供商家平台支付业务的结算功能

5、能够说出项目数据库表结构设计及分库设计?

根据数据库设计的第三范式:在数据库设计过程中,应该尽量消除冗余,即某一个字段属于一张表,但是它同时出现在另一个或多个表,且完全等同于它在其本来所属表的意义,这个字段就是冗余字段。
针对冗余字段问题,分为两个场景;快照场景(比如:订单表),就不需要冗余字段,避免纠纷;冗余场景,数据改动的概率低,且查询多的场景使用冗余字段,减少j表与表之间的关联查询,让数据库执行性能更高更快。
在餐掌柜项目中数据表设计原则是:
1)项目全部采用逻辑关联,没有采用外检约束;
2)尽可能少使用多表关联查询。冗余字段是为了查询效率,减少join;
3)尽可能服务独立化,查询单表化。如:查询用户信息又需要用户的头像,处理的原则是调用用户服务和附件服务在dubbo层组装数据。
分库设计:
分为五大模块每一个模块都是一个数据库,分别是基础模块、权限模块、商家模块、交易模块、报表模块
餐掌柜数据库的设计.png

6、什么是微服务? 微服务的特点是什么?

小:微服务体积小,2pizza团队;
独:能够独立的部署和运行;
轻:使用轻量级的通信机制和架构;
松:各个服务之间是松耦合的。
微服务的特点:

单一职责 微服务中每一个服务都对应唯一的业务能力
面向服务 每个服务都要对外暴露RPC协议Dubbo服务接口API
自治 服务间相互独立,互不干扰,团队独立、技术独立、前后端分离、数据库分离、部署独立。
微服务的服务拆分粒度很小,虽然每个服务很小,但“五脏俱全”

7、能够描述docker-compose文件创建的容器及容器启动的依赖关系?

docker-compose创建的容器有:
mysql、nacos、seata、rabbitMQ、xxl-job、redis、nginx
nacos依赖mysql,seata依赖nacos和mysql,xxl-job依赖mysql

8、能够描述运营平台服务的调用链路?

餐掌柜各个平台调用链路.png
1)用户发起访问请求restkeeper-vue-operator,在vue中有网关设置;
2)vue中会调用restkepper-gateway-operator网关,然后由网关路由对应业务系统web项目;
3)model-basic-job-listen模块主要负责日志的收集
4)运营平台中有2个核心web模块:model-security-web<统一权限>、model-basic-web的服务消费方模块
5)运营平台中有2个核心producer模块:model-security-producer<统一权限>、model-basic-producer<基础服务>的服务提供方模块

9、能够说出basicXXX 的基础类的作用?

所有实体类公共字段的定义,其他实体类用到这些字段可以继承基础父类。

10、能够说出 Vo和POJO的作用范围?

i餐掌柜vo和pojo的作用范围.png
vo负责权限web对外接口,权限dubbo接口定义和权限dubbo接口实现
pojo负责权限dubbo接口实现和权限service接口定义及实现

11、能够理解异常枚举类的作用?

当客户端请求出现异常时,异常枚举类可以给客户端返回异常的原因和编码,让用户能看懂异常原因。

12、能够掌握业务开发模块间的调用链路(生产者、消费者的接口的定义)

业务模块调用链路:以restkeeper-model-shop为例:
业务模块调用链路,以restkeeper-model-shop为例.png
服务提供方的模块依赖关系.png
注意:餐掌柜中为避免模块只能混乱,禁止服务提供方模块调用服务提供方模块,当产生跨服务接口调用,会放到web层进行服务调用然后业务组装,如果牵涉到分布式事务问题,会采用Seata方式来解决
服务提供方的职能:1.dubbo微服务提供方;2.本地调用service核心业务层实现dubbo服务接口的业务逻辑;3.对象转换,从pojo对象转换为vo对象
服务消费方的模块依赖关系.png
服务消费方的职能:
1)传入参数的接收及校验工作;
2)调用对应业务的dubbo服务,本身不负责业务逻辑的处理
3)返回参数的封装,以及当下层发生异常,则抛出指定的自定义异常
4)定义swagger2的接口暴露,方便测试

服务接口定义在每一个二级模块(restkeeper-model-*)的中的一个model--interface中去书写。

如果模块以model-*-service的格式出现,表示此模块为核心模块,其职能是:
1)pojo、mapper、service定义
2)使用mybatis-plus持久化框架完成CRUD操作
3)作为
核心业务层**被dubbo服务接口实现所调用
4)提供代码生成器的支持