1、什么是SaaS平台,他有什么的特点?
SaaS平台:供应商将应用软件统一部署在自己的服务器上,客户可以根据工作实际需求,通过互联网向厂商订购所需的应用软件服务,按订购的服务多少和时间长短向供应商支付费用,并通过互联网获得SaaS平台供应商提供的服务
SaaS的特性:
互联网特性
SaaS软件行业知名产品的NetSuite所提供的的在线ERP、在线CRM等模块产品都是基于网络的,这样的优势在于不必投入任何硬件费用,也不用请专业的系统维护人员就能上网,有浏览器就可以进行ERP、CRM系统的使用,快速的实施、便捷的使用、低廉的价格都有赖于SaaA产品的互联网特性
多重租赁特性
SaaS服务通常基于一套标准的软件系统为成百上千的不同客户提供服务。这要求SaaS服务能够支持不同租户之间的数据和配置的隔离,从而保证每个租户数据的安全与隐私,以及用户对诸如界面、业务逻辑、数据结构等的个性化需求,优于SaaS同时支持多个和租户,每个租户有很多用户,对支撑软件的基础设施平台的性能、稳定性和扩展性提出很大的挑战,SaaS作为一种基于互联网的软件支付模式,优化软件大规模应用后的性能和运营成本是架构师的核心任务
服务特性
SaaS是软件以互联网为载体的服务形式被客户使用,所以很多服务合约的签订、服务使用的计量、在线服务质量的保证和服务费用的收取等问题都必须加以考虑。而这些问题通常是传统软件没有考虑到的
可扩展特性
可扩展性意味着最大限度的提高系统的并发性,更有效地使用系统资源比如应用:优化资源锁的持久性,使用无状态的进程,使用资源池来共享线和数据库链接等关键资源,缓存参考数据,为大型数据库分区
2、餐掌柜业务有哪些,业务流程是什么样的?
餐饮SaaS管理系统就是运营商将参与管理系统部署到云端,商家只需要进行付费申请使用,而无需对技术、硬件、运维等各个方面再次投入,平台一般具有下列模块:
运营平台:运营上管理基础数据模块【统一权限、日志、图片、数据字典、短信服务】以及商家管理的平台
商家平台:点餐后核心业务,提供员工,店铺,桌台,菜品、订单、结算等功能
点餐平台:H5点餐平台,客户实现开桌、点餐、追加菜品等功能
相对于传统的餐饮行业来说:连锁店还不能共享,老板管理店铺不方便,而SaaS餐饮管理软件具有O2O应用场景所有功能,如自助点餐、线上外卖、自动收银等,既节约了顾客的用餐时间又节省了成本,还方便了店铺之间的管理,更提高了店铺与线上线下的数据实时更新
3、餐掌柜的核心架构【通用服务、核心业务、系统架构】、数据库的结构
通用服务:
对于一个公司的架构设计来说,必须思考的问题是,这个功能在现在或者将来将满足多少业务出现,是不是能够复用?或者说,需要多大的调整才可以复用?甚至于,这个功能有没有可能对外输出,提供SaaS话的服务建立通用服务业务为了业务的敏捷,创新!有下面三个特征:
敏捷: 业务需求变化快,变更以天甚至更短的频率计算,一个单体大型应用,庞大的开发团队对单一应用的变更变得越来越困难。将大应用变为多个小的应用组合,才能适应外部的快速变化,实现业务的便捷
解耦:随着业务的发展,业务系统之间的交互通常会变得越来越复杂。一个功能的修改可能会影响很多方面,只有将需要的大量交互的功能独立:从应用中拆解出来,这样可以使得应用之间的耦合度大幅下降。
复用 一些公共的能力通过复用,大大提高了开发效率,避免了重复建设,同时式的数据和流程可以集中的以管理和优化
核心业务:
请求接入:
H5:客户点餐接入
运营商:运营管理接入
商家:商家主业务接入
阿里云:OSS、ECS、部署平台接入
网关:
Nginx:反向代理,路由承压力
Gateway:第二代网关服务,路由分发、权限鉴定
核心业务:
点餐平台:负责客户点餐业务,为Android、IOS、H5提供统一服务接口
商家平台:负责基础数据配置,同时提供店员及交易结算服务
运营平台:负责商家管理及运营报表系统
通用业务:
通用非业务系统的中台系统:权限、支付、图片、数字自动、日志中心、邮件服务等
系统架构:
餐掌柜项目是基于spring-cloud-alibaba的架构体系,关于spring-cloud-alibaba,其核心组件如下:
-
Sentinel
阿里巴巴开源产品,把流量作为切入点,从流量控制,熔断降级,系统负载保护等多个维度保护服务的稳定性.
-
Nacos
阿里巴巴开源产品,一个更易于构建云原生应用的动态服务发现,配置管理和服务管理平台.
-
RocketMQ
Apache RocketMQ基于Java的高性能,高吞吐量的分布式消息和流计算平台.
-
Dubbo
Apache Dubbo是一款高性能的Java RPC框架.
-
Seata
阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案.
-
Alibaba Cloud OSS
阿里云对象存储服务器(Object Storage Service,简称OSS),是阿里云提供的海量,安全,低成本,高可靠的云存储服务.
-
Alibaba Cloud Schedulerx
阿里中间件团队开发的一款分布式调度产品,支持周期性的任务与固定时间点触发任务.
展现层:负载与用户的交互,分为Android、IOS、web应用,他们都是通过访问统一的gateway网关来实现业务数据的访问
代理层:选用高性能的nginx服务,通过域名与不同servrce的绑定,通过gateway路由到不同的服务器组
权限控制层:使用无状态的JWT认证,结合Spring Security实现统一的权限控制
服务治疗:使用nacos注册中心,配置中心实现服务的治理
服务调用:使用Spring Cloud alibaba 的核心组件dubbo进行服务之间的调用
流量控制:使用 Sentinel把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性
缓冲层:spring cache 配合redis轻松无侵入的实现业务数据的缓冲
基础业务支撑:基于spring boot脚手架,轻松集成OSS图片存储、sharding-jdbc分库分表、mybatis-plush 、docker、接口文档swagger2、分布式事务seate、MySQL、RocketMQ等组件
在餐掌柜项目中采用maven的分层构架,来维护整体的项目架构,各个模块相对独立,达到功能及组件的复用,从而减少开发成本的投入,避免反复造轮子的现象,整体的分层构建如下图所示
主项目结构说明
|——restkeeper-super 负责整个项目的模块定义,pom.xml文件定义
|
|———— restkeeper-framework 核心组件模块,主要是对各个框架集成:mybatis-push、seata、jwt、redis等等
|
|———— restkeeper-gateway 前后端分离的边界,对外的统一接口,集成对日志client、鉴权client、knife4j组件
|
|———— restkeeper-model-basic 基础服务模块,与业务无关的组件都在这里集成
|
|———— restkeeper-model-report 报表模块,提供统一的日志报表,对各个子系统报表提供接口支撑
|
|———— restkeeper-model-security 统一鉴权模块,依赖spring-security各个gateway只需要引入简单鉴权client则实现权限控制
|
|———— restkeeper-model-shop 商家中心模块:各个主业务功能的实现,并且提供H5点餐端的dubbo接口服务
|
|———— restkeeper-model-trading 交易平台,提供商家平台支付业务的结算功能
5、数据库结构
遵循领域模型设计【DDD】,我们按照功能模块领域垂直把数据库分为5个库,具体库的职能以及内部所含有的表详细情况如下图所示:
带来的提升:
-
解决业务层面的耦合,业务清晰
-
能对不同业务的数据进行分级管理、维护、监控、扩展等
-
高并发场景下,垂直分库一定程度的提升IO、数据库连接数、降低单机硬件资源的瓶颈
关于==【垂直分库、水平分库、垂直分表、水平分表】==在后续的项目中我们会使用sharding-jdbc来实现
4、实际开发过程中你们是怎样进行工作协调的?
微服务,顾名思义,微服务得从两个方面去理解,什么是"微"、什么是"服务", 微 狭义来讲就是体积小、著名的"2 pizza 团队"很好的诠释了这一解释【2 pizza 团队最早是亚马逊 CEO Bezos提出来的,意思是说单个服务的设计,所有参与人从设计、开发、测试、运维所有人加起来 只需要2个披萨就够了 】,而做为微服务,具备有下列四个要素:
- 小:微服务体积小,2 pizza 团队。
- 独:能够独立的部署和运行。
- 轻:使用轻量级的通信机制和架构。
- 松:为服务之间是松耦合的。
【了解】微服务的特点:
- 单一职责:微服务中每一个服务都对应唯一的业务能力,做到单一职责
- 微:微服务的服务拆分粒度很小,例如一个用户管理就可以作为一个服务。每个服务虽小,但“五脏俱全”。
- 面向服务:面向服务是说每个服务都要对外暴露Rest风格服务接口API。并不关心服务的技术实现,做到与平台和语言无关,也不限定用什么技术实现,只要提供Rest的接口即可。
- 自治:自治是说服务间互相独立,互不干扰
- 团队独立:每个服务都是一个独立的开发团队,人数不能过多。
- 技术独立:因为是面向服务,提供Rest接口,使用什么技术没有别人干涉
- 前后端分离:采用前后端分离开发,提供统一Rest接口,后端不用再为PC、移动段开发不同接口
- 数据库分离:每个服务都使用自己的数据源
- 部署独立,服务间虽然有调用,但要做到服务重启不影响其它服务。有利于持续集成和持续交付。每个服务都是独立的组件,可复用,可替换,降低耦合,易维护