02-点餐SaaS架构方案

一、背景

  1. 近年来,随着科技的迅速发展和互联网的普及,线上点餐成为了一个蓬勃发展的行业。然而,在目前的美国市场上,线上点餐业务相对较少。为了在这个市场上打开局面,我们决定推出一款全新的点餐软件—diancan。

  2. Java语言是一种广泛使用的编程语言,以其跨平台性、安全性和稳定性而闻名。通过使用Java语言,我们将能够更好地处理用户的请求、提升系统的并发访问能力,并且能够更方便地与其他系统对接。不仅如此,Java语言还拥有丰富的开发工具和强大的社区支持,可以为我们带来更多的开发便利和技术支持。

  3. 除了语言的选择,我们还选择微服务架构的应用。微服务架构将整个系统划分为多个小而自治的服务,每个服务都负责一个特定的功能模块。这种架构设计有助于提高系统的灵活性、可伸缩性和容错性,同时也方便团队协作和系统的迭代升级。

  4. 重新搭建点餐系统需要耗费大量的人力和资源,但我们坚信这是值得的。通过使用java语言微服务架构开发diancan,我们将能够为用户提供更流畅、更稳定、更智能的点餐体验。无论是在功能上还是在用户界面上,我们都将尽力做到极致,让用户感受到真正的便捷和舒适。

  5. 随着diancan的推出,我们相信线上点餐业务将在美国市场上迎来新的机遇和挑战。我们期待着与合作伙伴一同促进这个行业的发展,为用户带来更多的选择和便利。

二、目标

  1. 为餐饮行业提供一体化的点餐解决方案。

  2. 提升用户体验。

  3. 提高管理效率。

  4. 增强营销能力。

  5. 收集和分析订单和顾客数据,为餐厅提供有价值的业务洞察,帮助餐厅进行市场分析、客户行为分析和菜品销售分析等,从而为餐厅决策提供科学依据。

  6. 提高营收效益

三、架构梳理

  1. 产品形态

  2. 点餐多租户SaaS架构

    1. 多租户概念

      1. 多租户技术或称多重租赁技术,它是一种软件架构技术,目的是为了让多用户环境下使用同一套应用程序,且保证用户间数据隔离。

    2. 多租户数据隔离方案

      1. 独立服务,独立数据库

        1. 独立数据库即一个租户一个数据库,这种方案的用户数据隔离级别最高,安全性最好,但成本较高。

          1. 优点:

            1. 为不同租户提供独立数据库,有助于简化数据模型的扩展设计,满足个性化需求;

            2. 如果遇到故障时,数据恢复简单。

          2. 缺点:

            扩大了数据库的安装和运维数量,随之带来维护成本和购置成本的增加。

      2. 共享服务,共享数据库,独立表空间

        1. 多个租户或所有租户共享数据库,但每一个租户提供一个Schema的方式。

          1. 优点:

            1. 一定程度的逻辑数据隔离(并非完全),可满足较高程度的安全性保障;

            2. 每个数据库,可支持更多租户数量;

          2. 缺点:

            1. 跨租户统计数据实现难度大

      3. 共享服务,共享数据库,共享表

        1. 所有的租户共享同一个数据库、同一个Schema,但是租户之间的数据隔离通过在数据表中添加TenantID属性进行实现。

          1. 优点:

            1. 每个数据库可支持租户数量多,维护和购置成本低;

          2. 缺点:

            1. 隔离级别低,数据安全性低,在应用开发时需做大量安全开发工作,提高研发成本;

            2. 需要逐表逐条备份和还原数据,数据备份和恢复困难。

    3. 产品目标分析

      1. 餐饮商户分类

        1. 大型连锁品牌餐饮商:

          1. 有自研能力,有能力为自身餐饮体系提供一整套的餐饮解决方案

        2. 中型连锁餐饮:

          1. 使用Saas服务商餐饮系统+私有化定制

        3. 小型连锁餐饮

          1. 使用Saas服务商餐饮系统

        4. 单店餐饮店:

          1. 使用Saas服务商餐饮系统

          2. 线下人工点餐

      2. 自身系统目标是什么?

        1. 前期目标以单店餐饮、小型连锁餐饮为主

    4. 结论:结合自身定位发展和数据安全性和部署成本考虑

      1. 以商家客户中心,以品牌为租户颗粒度,使用共享数据库,独立表空间的多租户方案

      2. 跨租户统计数据解决方案

        1. 构建数据平台,实现各个租户的数据集中管理和统一查询,根据业务需求选择数据视图、数据接口、数据同步的方式进行

  3. 水平分层架构原则

    1. 基本原则

      1. 上层服务依赖下层服务,下层服务不应该依赖上层服务。

      2. 同一层次的服务可以相互调用,但要绝对避免一个调用链路上服务循环依赖。

      3. 领域层才会依赖DB,其他层次不应该依赖DB

      4. 随着业务的发展变化,服务也在演化,演化的方向是功能逐步下沉

      5. 服务层次从上到下,服务数量逐渐减少。服务变动频率由上到下逐渐变小。

    2. 应用层

      1. 应用层是系统的顶层,负责直接面向与用户交互的逻辑和业务。

    3. 网关层:网关层通常不涉及业务逻辑的处理,用于管理和路由来自客户端的请求,并将请求转发给底层的服务。

      1. Web API 

        1. 提供多端API(APP、PC、H5)。

        2. 多数据支持(JSON、XML、YAML、Form Data、...)。

        3. 数据校验:数据完整性。

        4. 权限检验:请求合法性。

      2. 交互逻辑

        1. 服务编排:服务路由和请求转发,根据业务需求将多个微服务按照特定的逻辑顺序进行调用,以满足用户的请求。

        2. 数据转换:将从系统内部获取的数据进行模型转换,将原有数据结构转换为更适合在Web API中传输的数据结构,以便于前端页面的展示和用户的交互

        3. 异常处理:发生的错误、异常流程的处理和错误信息的返回。

    4. 流程层

      1. 聚合服务:将底层的服务或功能进行组合,提供更高层次的功能服务。聚合层的设计关注于服务组合、功能整合和接口封装,以方便上层系统或应用的调用。

      2. 逻辑流程服务:将复杂的业务逻辑分解为多个步骤或子任务,并通过服务的方式进行封装,使得业务逻辑的实现更加清晰和可维护。

    5. 领域层

      1. 业务领域:包含业务逻辑和规则的核心部分,负责处理业务实体和业务规则,对数据进行验证、计算和持久化等操作。

      2. 数据领域:负责和持久化数据进行交互,包括与数据库、缓存、文件等数据源进行通信,封装数据操作的细节。

  4. 服务架构

根据不同的业务阶段和诉求不同,通过分层复用和动态边界的指导原则,可以根据不同的业务阶段和诉求,合理划分和组织这些层次的能力,实现灵活的业务需求支持。这样的架构设计可以提高代码的复用性和可维护性,同时也满足不同业务需求的变化和调整。

  • 用户应用层:是面向不同角色用户的前端系统,通过提供用户界面和交互方式,与用户进行交互和数据传递。

  • 服务层:是用户应用层的业务功能逻辑,将业务功能进行拆分和聚合,依赖底层能力和基础能力,实现具体的业务需求。

  • 领域层:是对业务的抽象,关注系统的业务逻辑和领域知识,负责处理核心业务规则和操作,通过领域模型和领域服务等方式来实现。

  • 基础设施:是应用中的基础设施,提供必要的功能和服务,为上层提供支持,例如操作系统能力、网络通信能力、数据存储与管理能力等。

四、技术架构

  1. 技术栈

    1. 前端

      1. Vue:是一款简单易用、高效灵活的前端框架,它通过响应式数据绑定、组件化开发和虚拟DOM等特性,使开发者能够快速构建交互式、可维护的Web应用。它的生态系统丰富,易于学习和使用,因此被广泛应用于各种规模的项目中

      2. UniApp:是一款基于Vue.js的跨平台开发框架,它可以帮助开发者使用一套代码同时创建Android、iOS以及Web应用。UniApp将原生开发中的核心逻辑和界面展示进行了解耦,开发者只需要编写一次代码,UniApp会根据不同平台进行编译和适配,实现真正的跨平台开发。

    2. 网关

      1. Nginx:是一款高性能、可靠且灵活的服务器软件,被广泛应用于Web服务器、反向代理、负载均衡等场景。其简单的配置文件和效率高的处理能力,使其成为许多网站和应用的首选服务器。

      2. SpringCloudGateway:Spring Gateway是一个基于Spring Cloud的API网关,提供了丰富的功能和灵活的配置方式。它可以用于实现统一的路由、负载均衡、安全认证、请求转发和限流等功能,将多个微服务整合在一个入口,简化了微服务架构的复杂性和提高了系统的可扩展性。

    3. 服务:

      1. SpringBoot:一款简化Spring应用开发的框架,通过约定优于配置的方式提供了开箱即用的特性和功能,大大简化了开发和部署的过程。它适用于各种类型的应用程序,包括传统的Web应用、RESTful服务、批处理作业、微服务等,在Java开发领域具有广泛的应用和影响力。

      2. SpringCloud:是一套构建分布式系统的开发工具集,通过集成和整合各种组件,为构建微服务架构提供了一系列解决方案和模块,简化了微服务环境下的开发和部署,提高了系统的可扩展性和稳定性。它是在Spring框架基础上的延伸,与Spring Boot相结合,为开发者提供了一套完整的微服务解决方案。

      3. SpringCloudAlibaba:基于Spring Cloud的拓展,提供了阿里巴巴开源组件的集成和支持,用于构建分布式微服务系统。提供了服务注册与发现、配置管理、负载均衡、熔断降级、消息中间件等功能,简化了微服务架构的开发和管理,提高了系统的可靠性和性能。

      4. OpenFeign:是一个声明式的HTTP客户端,开发者可以更方便地调用其他服务的接口,减少了重复的代码编写和配置工作,提高了开发效率。同时,配合Spring Cloud的其他组件,可以实现服务的负载均衡、断路器等功能,提高了系统的稳定性和可靠性。

      5. Ribbon:用于客户端负载均衡的组件,通过选择合适的负载均衡策略和容错机制,实现了请求的分发和容错处理。它与Spring Cloud无缝集成,是构建分布式微服务系统不可或缺的一部分。

      6. RabbitMq:是一个开源的消息队列中间件,实现了高效可靠的消息传递机制,可以实现应用程序之间的解耦和异步通信,提高系统的可维护性和可伸缩性。它被广泛应用于分布式架构、微服务架构、消息驱动的系统等领域。

      7. kafka:是一个分布式的流处理平台和消息队列系统,用于大数据处理、日志收集和分析、消息通信等场景。它具有高可靠性、高吞吐量和可伸缩性的特点,可以帮助构建高效可靠的事件驱动架构。

      8. SpringCloudAdmin:是一个用于管理和监控分布式系统的前端UI界面,可以实时监控和管理微服务,包括查看微服务的运行状态、收集监控数据、进行错误追踪等,帮助开发者快速定位和解决问题,提高系统的可靠性和可维护性。

      9. Sentinel:是阿里巴巴开源的一款流量控制和熔断降级的框架,用于保护分布式系统的稳定性和可靠性。它提供了实时的流量监控、规则配置和控制台展示等功能。

      10. SkWalking:是一个开源的分布式系统性能监控和追踪分析工具,可以深入了解分布式系统的性能状况,快速定位和解决性能问题,提高系统的可靠性和性能。它适用于微服务架构、云原生应用和分布式系统的监控和优化。

      11. ELK:指Elasticsearch、Logstash和Kibana三个开源工具的组合,应用于日志分析、系统监控、业务分析等场景。它能够帮助用户对大量的日志和数据进行实时分析和可视化展示,从而提升系统的可观测性、故障排查的效率,并从数据中发现问题和机会。

      12. Seata:是一个开源的分布式事务解决方案,致力于解决分布式事务的一致性和可靠性问题。它提供了高性能、易于使用的分布式事务管理能力,能够保证分布式系统中的各个业务操作的一致性。

      13. MybatisPlus:是一款基于MyBatis的增强工具,能够简化MyBatis的开发流程,提供更多的便利功能和增强特性。Mybatis-Plus的目标是提高开发效率,减少重复代码的编写,提供更加优雅和简洁的方式操作数据库。

      14. Knife4j:是一款开源的Java接口文档生成工具,它基于Swagger构建,提供了更加强大、美观和易用的接口文档展示和管理功能。

      15. Hutool:是一个Java工具包,它提供了一系列的工具类和方法,旨在简化Java开发中常见的任务,提高开发效率和代码质量。

      16. EasyExcel:用于快速读写Excel文件。它提供了高性能、低内存占用的Excel操作能力,简化了Java中对Excel文件的读写操作,提供了方便和高效的Excel数据处理能力,适用于各种Java项目中的Excel处理需求。

      17. Sa-Token:是一个个基于Java的轻量级权限认证和会话管理框架。它提供了一套简单易用、灵活且安全的认证和授权解决方案。

      18. Nacos:是一个功能强大的服务治理平台,支持云原生架构的服务注册、配置管理和服务发现等核心功能。它已经被广泛应用于微服务架构和云原生应用开发中,得到了许多开发者和企业的认可和使用。

      19. xxl-job:是国内一家知名的分布式任务调度平台,提供了可靠高效的定时任务调度和管理功能。被广泛应用于各种项目中,特别适合于需要大规模任务调度和管理的分布式系统和微服务架构。

    4. 数据

      1. Mysql:是一种开源的关系型数据库管理系统,广泛应用于各种Web应用和数据驱动的应用程序中。提供了强大的数据管理和处理能力,适用于各种规模的应用和项目。

      2. Redis:是一个高性能、多功能的内存数据存储系统,适用于各种场景下的数据缓存、高速读写、实时消息传递以及分布式系统的数据处理等需求。

      3. ElasticSearch:是一个强大而灵活的搜索和分析引擎,被广泛应用于各种领域,包括电子商务、日志分析、实时监控、搜索引擎等。它提供了高性能、易用性和可扩展性,为处理和分析大规模数据提供了强大的工具和平台。

      4. Minio:是一个灵活、可靠和易用的对象存储服务器,可以在分布式环境下提供高性能的存储服务。它适用于各种应用场景,包括数据备份和归档、云原生应用、多媒体存储和共享等。通过Minio,用户可以轻松地搭建和管理自己的对象存储平台,满足不同规模和需求的存储需求。

    5. 持续集成

      1. K8S:是一个强大、灵活和可靠的容器编排和管理平台,用于简化和自动化容器化应用程序的部署、扩展和管理。它提供了丰富的功能和灵活的配置选项,支持各种应用场景和规模。

      2. Docker:是一个开源且功能强大的容器化平台,它简化了应用程序的打包、部署和管理。

      3. Github:是一个面向开发者的网站和平台,提供了基于Git版本控制系统的代码托管服务。它为开发者提供了一个集中存储、协作和共享代码的平台,并且具备丰富的协作、管理和部署工具。

      4. Jenkins:是一个开源的自动化构建和持续集成工具,用于自动化构建、测试和部署软件项目。它能够集成各种代码管理和构建工具,提供了一种自动化的方式来进行软件开发和交付。

      5. Maven:是一个强大且灵活的项目管理和构建工具,可以帮助开发者管理项目依赖、自动化构建过程,并提供了一套标准化的项目构建生命周期。通过使用Maven,开发者可以提高开发效率、降低项目依赖管理的复杂性,并实现更可靠和高效的软件构建。

      6. Sonar:是一个开源的代码质量管理平台,用于进行静态代码分析和代码质量评估。它提供了一系列静态代码分析规则和指标,帮助开发者发现和修复代码中的潜在问题,并提高代码的可读性、可维护性和可靠性。

  2. 后端服务结构

    1. stackdin

      • stackdin-gateway //网关模块

      • stackdin-auth //认证中心

      • stackdin-common //通用模块

        • stackdin-common-core //核心模块

        • stackdin-common-security //安全模块

        • stackdin-common-redis //缓存模块

        • stackdin-common-datasource //数据源

        • stackdin-common-swagger //接口文档

        • stackdin-common-es //es日志收集

      • stackdin-modules //业务模块

        • ...

      • stackdin-monitor //监控中心

        • stackdin-monitor-admin //应用监控

五、部署架构

  1. 服务架构的高可用性和扩展性解决方案

    1. 冗余无单点

      1. 保证系统的各个节点在部署时是冗余的,没有单点。

    2. 水平扩展

      1. 通过容器化技术和容器编排工具,Kubernetes和Docker,实现自动化的水平扩展。根据业务需求和监控数据,动态地添加或移除服务实例,以满足不同负载和并发需求。

    3. 柔性事务

      1. 根据服务需求,基于CAP理论,我们保证服务的可用性、分区容错性和最终数据一致性

        1. 采用异步通信方式,使用消息队列进行服务间的解耦,减少服务间的依赖和影响。

    4. 系统降级

      1. 当系统问题无法在短时间内解决时,考虑尽快止损,为故障支付尽可能小的代价

        1. 使用Sentinel进行限流、降级、熔断

        2. 针对具体的功能,我们设置功能开关,根据配置文件开关设置,灵活决定是否执行这部分逻辑。

    5. 分布式数据管理

      1. 采用数据库主从复制、缓存集群策略,提高数据的访问性能,实现高可用和容错。

      2. 定期进行数据备份,确保数据的安全性和可用性。

    6. 实施自动化运维

      1. 通过容器化技术和容器编排工具,Kubernetes和Docker,实现自动化的构建、测试和部署。减少人工干预,提高系统的稳定性和可靠性。

    7. 监控与告警

      1. 通过ELK,收集、存储和分析监控数据,监测微服务架构中的关键指标及时发现异常情况,并采取相应的措施。

  • 24
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值