1、什么是SAAS平台?它的特点是什么?
供应商将应用软件统一部署在自己的服务器上,客户可以根据工作实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得Saas平台供应商提供的服务。
saaa特点 | ||
---|---|---|
互联网特性 | saas产品都是基于网络的,优势在于不需要投入任何硬件费用,也不用请系统维护人员就上网,有浏览器就可以进行ERP、CRM系统的使用 | |
多重租赁特性 | saas基于一套标准软件系统为成百上千的不同客户提供服务。saas支持不同租户之间数据和配置的隔离,保证每个租户数据的安全与隐私 | |
服务特性 | 服务的使用必须通过权限来控制,来解决服务合约的签订、服务使用的计量、在线服务质量和服务费用的收取等问题 | |
可扩展特性 | 提高系统的并发性,优化资源锁、使用无状态线程和资源池等关键资源 | |
总结 | 服务共享、数据隔离 |
3、说出餐掌柜项目的通用服务,核心业务、系统架构作用是什么?分别使用到哪些技术?
请求接入 | H5 | 客户点餐接入 |
---|---|---|
运营商 | 运营管理接入 | |
商家 | 商家主业务接入 | |
阿里云 | OSS、ECS、部署平台接入 | |
网关 | nginx | 反向代理,路由承压,使用keepalived解决nginx高可用 |
gateway | 第二代网关服务,路由分发、权限鉴定,使用nginx解决网关的高可用 | |
核心业务 | 点餐平台 | 负责客户点餐,为Android、IOS、H5提供统一服务接口 |
商家平台 | 负责基础数据配置,同时提供店员及交易结算服务 | |
运营平台 | 负责商家管理及运营报表系统 |
系统架构的作用:敏捷、解耦、复用。
餐掌柜项目是基于spring-cloud-alibaba的架构体系,其核心组件如下:
系统架构的核心组件说明 | ||
---|---|---|
Sentinel | 把流量作为切入点从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性 | |
Nacos | 一个更易于构建云原生应用的动态服务发现,配置管理和服务管理平台 | |
RocketMQ | 高吞吐量的分布式消息和流计算平台 | |
Dubbo | 是一款高性能的java RPC框架 | |
Seata | 一个更易于使用的高性能微服务分布式事务解决方案 | |
Alibaba Cloud OSS | 是阿里提供的海量,安全,低成本,高可靠的云存储服务 | |
Alibaba Cloud Schedulerx | 一款分布式调度产品,支持周期性的任务与固定时间点触发任务 |
展现层 | 负载与用户的交互,通过统一访问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、项目模块及核心项目模块职责?
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层组装数据。
分库设计:
分为五大模块每一个模块都是一个数据库,分别是基础模块、权限模块、商家模块、交易模块、报表模块
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、能够描述运营平台服务的调用链路?
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的作用范围?
vo负责权限web对外接口,权限dubbo接口定义和权限dubbo接口实现
pojo负责权限dubbo接口实现和权限service接口定义及实现
11、能够理解异常枚举类的作用?
当客户端请求出现异常时,异常枚举类可以给客户端返回异常的原因和编码,让用户能看懂异常原因。
12、能够掌握业务开发模块间的调用链路(生产者、消费者的接口的定义)
业务模块调用链路:以restkeeper-model-shop为例:
注意:餐掌柜中为避免模块只能混乱,禁止服务提供方模块调用服务提供方模块,当产生跨服务接口调用,会放到web层进行服务调用然后业务组装,如果牵涉到分布式事务问题,会采用Seata方式来解决
服务提供方的职能:1.dubbo微服务提供方;2.本地调用service核心业务层实现dubbo服务接口的业务逻辑;3.对象转换,从pojo对象转换为vo对象
服务消费方的职能:
1)传入参数的接收及校验工作;
2)调用对应业务的dubbo服务,本身不负责业务逻辑的处理
3)返回参数的封装,以及当下层发生异常,则抛出指定的自定义异常
4)定义swagger2的接口暴露,方便测试
服务接口定义在每一个二级模块(restkeeper-model-*)的中的一个model--interface中去书写。
如果模块以model-*-service的格式出现,表示此模块为核心模块,其职能是:
1)pojo、mapper、service定义
2)使用mybatis-plus持久化框架完成CRUD操作
3)作为核心业务层**被dubbo服务接口实现所调用
4)提供代码生成器的支持