分类 Paas 下的文章


SAAS ERP系统是一种基于云计算的企业资源计划(ERP)软件解决方案,可以提供包括财务管理、供应链管理、采购管理、生产管理、销售管理、客户关系管理、人力资源管理等在内的一系列业务功能。下面是一些常见的业务功能:



  1. 财务管理:包括会计核算、财务报表、资产管理、成本管理、预算管理等。

  2. 采购管理:包括采购订单、供应商管理、采购收货、采购付款等。

  3. 销售管理:包括销售订单、客户管理、销售出库、发票管理等。

  4. 库存管理:包括库存盘点、库存调拨、库存预警、批次管理等。

  5. 生产管理:包括生产计划、生产过程跟踪、生产成本控制等。

  6. 人力资源管理:包括员工档案、考勤管理、薪资管理、绩效管理等。

  7. 供应链管理:包括供应商管理、物流管理、库存管理等。

  8. 客户关系管理:包括客户档案、客户订单、客户服务等。



设计高可用的SaaS ERP系统需要考虑多个方面,包括架构、可扩展性、容错性、可恢复性等。以下是一个可能的架构设计方案:



1、应用层架构



在应用层,可以采用微服务架构,将系统拆分为多个服务,每个服务负责不同的功能。这种架构可以提高系统的可扩展性和灵活性。同时,可以采用负载均衡和容错技术,以确保服务的高可用性。



2、数据层架构



在数据层,可以采用多层次的数据架构,包括缓存层、数据库层和分布式文件系统。在缓存层,可以使用Redis等内存缓存技术,以提高系统的性能和可扩展性。在数据库层,可以采用MySQL等关系型数据库,或者MongoDBNoSQL数据库,以满足不同的数据存储需求。在分布式文件系统层,可以采用Hadoop等分布式存储技术,以存储大量的文件和数据。



3、网络层架构



在网络层,可以采用CDN技术和负载均衡技术,以提高系统的可用性和性能。同时,可以采用防火墙、入侵检测和数据加密等安全技术,以保护系统的安全性和隐私性。



4、可恢复性和容错性



在系统设计中,应考虑到系统的可恢复性和容错性。可以采用备份和恢复技术,以确保系统在故障或灾难发生时能够快速恢复。同时,可以采用冗余和容错技术,以避免单点故障,并提高系统的可用性。



总之,高可用的SaaS ERP系统需要采用多种技术和架构,以确保系统的稳定性、可扩展性和可恢复性。



SAAS ERP系统可以根据企业的需求进行定制,因此业务功能可以根据企业的行业特点和业务流程进行调整和扩展。



设计 ERP 系统时,安全性、可靠性和并发性是三个关键方面,以下是一些设计思路:



1、安全性设计思路:



  • 使用加密技术保护敏感数据,并采用多重身份验证来确保只有授权人员才能访问敏感信息。

  • 采用安全审计功能来记录所有用户的活动,以便在发生安全事件时进行调查。

  • 实现访问控制来限制用户访问权限,只有经过身份验证的用户才能访问数据。

  • 进行定期的安全检查和漏洞扫描,以确保系统安全。



2、可靠性设计思路:



  • 采用冗余技术,包括硬件冗余和数据冗余,以确保系统在出现故障时仍然能够正常运行。

  • 设计容错机制,使系统在出现故障时能够自动切换到备份系统,从而避免数据丢失和业务中断。

  • 进行定期的备份和恢复测试,以确保备份数据的完整性和可用性。

  • 实现事务管理功能,确保数据的一致性和可靠性。



3、并发性设计思路:



  • 采用分布式架构,将系统分为多个子系统,以实现负载均衡和并发处理。

  • 实现多线程和并发控制机制,以确保多个用户同时访问系统时的数据一致性。

  • 使用缓存技术来减少数据库的访问次数,提高系统的响应速度。

  • 进行性能测试和负载测试,以确定系统的性能瓶颈和容量限制,以便进行优化和扩展。



目录


一、 JNPF快速开发平台


二、J2PaaS低代码平台  


三、JeecgBoot 低代码平台  


四、需要进一步了解⍐头部联系方式私


        


        低代码/无代码开发平台使用图形向导构建软件,而不是像传统方法那样使用计算机编程语言来构建应用程序。在本文中,我们介绍面向个人和企业用户的10个开源的最佳低代码/无代码平台、


        低代码/无代码指的是提供可视化开发工具,支持拖放,内置组件浏览器和逻辑构建器。低代码/无代码的概念并不新鲜,这可以追溯到十多年前的无代码编程技术 (PWCT) 以及类似的系统。然而,这一概念在开发人员社区中并得到支持。


如今,数十个低代码 / 平台和服务正蜂拥而至,因为事实证明,这个概念不仅仅是可用于快速原型项目。


一、 JNPF快速开发平台

JNPF平台采用全新的前后端分离架构模式。前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat等方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。


解读前后端分离模式:前端项目与后端项目是两个项目,需要独立部署,两个不同的工程,两个不同的代码库,前端通过ajax来调用http请求调用后端的restful api。前端只需要关注页面的样式与动态数据的解析和渲染,而后端专注于具体业务逻辑。


核心框架: SpringBoot、SpringCloud

数据库框架:Mybatis-Plus

缓存框架:Redis

分布式事务管理:Atomikos

接口文档:Swagger2

项目构建:Maven

任务调度:Quartz

负载均衡:Ngnix

日志接口:Slf4j

即时通讯:WebSocket 



官网介绍:https://www.jnpfsoft.com/

二、J2PaaS低代码平台  

        J2PaaS是综合性低代码开发平台,覆盖了软件项目需求分析、设计、开发、测试、运行、维护与管理等全过程。平台为开发者提供开发引擎、运行引擎、项目管理, 打破传统开发用“代码编程”驱动产品的模式,升级为用“参数”驱动产品,打造可视化、组件化、低代码、拖拽式开发的在线敏捷开发平台。


        平台把常规需要程序员完成的功能集成在框架中,开发人员只需关注业务逻辑、页面的组装以及流程的设计等业务相关的功能,低层功能例如事务处理、 文件处理、 数据库操作等等开发平台已经内置自动完成。


源码下载: https://gitee.com/j2paas


官网介绍: https://jikaiyun.com


文档中心: http://zj-docs.51epedu.com/#/J2PaaSgaishu


三、JeecgBoot 低代码平台  

        JeecgBoot 是一款基于代码生成器的低代码平台!强大的代码生成器让前后端代码一键生成,实现低代码开发! JeecgBoot 引领新的低代码开发模式(OnlineCoding-> 代码生成器-> 手工MERGE), 帮助解决Java项目70%的重复工作,让开发更多关注业务。既能快速提高效率,节省研发成本,同时又不失灵活性!


源码下载:https://gitee.com/jeecg


四、需要进一步了解私信

————————————————

版权声明:本文为CSDN博主「+xls02345」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/xiaolait31/article/details/124998584



在微信这样庞大的用户量场景下,后台系统微服务架构是必不可少的。以下是一些实践建议:



1、拆分微服务:将后台系统拆分成不同的微服务,每个微服务都专注于解决一个特定的业务问题。这样做可以使系统更加可扩展、可靠,同时也有助于维护和部署。



2、设计API网关:通过API网关来管理微服务,可以将多个微服务的API整合到一个入口,简化客户端和服务端的交互,并提供更好的安全性和性能。



3、使用容器化技术:使用容器化技术(如Docker)来打包和部署微服务,可以使部署更加快速和可靠。同时,使用容器编排技术(如Kubernetes)可以自动化部署和管理微服务,提高效率和可靠性。



4、实现服务发现和负载均衡:使用服务发现和负载均衡技术来管理微服务,可以提高可用性和性能。这样做可以自动化地发现和管理服务,并在多个实例之间分配负载。



5、引入监控和日志:在微服务架构中,监控和日志是非常重要的,可以帮助我们快速诊断和解决问题。我们可以使用监控工具(如Prometheus)和日志管理工具(如ELK Stack)来收集和分析微服务的监控数据和日志信息。



6、实现自动化部署:使用自动化部署技术可以使部署更加快速和可靠。我们可以使用自动化部署工具(如Jenkins)来实现CI/CD(持续集成/持续部署)流程,从而加快开发和发布的速度。



微信这样规模的应用需要采用微服务架构来保证可扩展性和可靠性。上述实践建议可以帮助我们更好地实现微服务架构。



以下是微信技术发展的主要里程碑:



1、2011121日,微信1.0版本发布,开启了微信的发展历程。



2、2012年,微信推出了朋友圈功能,用户可以在其中分享文字、图片、视频等内容。



3、2013年,微信推出了公众号平台,使得个人和企业可以在微信上发布文章、营销推广等信息。



4、2014年,微信推出了支付功能,用户可以在微信上进行转账和支付,成为微信生态系统的重要组成部分。



5、2015年,微信推出了小程序,为用户提供了轻量级的应用程序,可以在微信内部完成各种任务,极大地提升了用户体验。



6、2016年,微信推出了公众号广告,为企业提供了更加精准的广告投放方式。



7、2017年,微信推出了小程序广告,为小程序提供了更多的变现方式。



8、2018年,微信推出了小游戏功能,用户可以在微信内部玩游戏,增加了微信的娱乐性。



9、2019年,微信推出了微信支付的分账功能,为商家提供了更加灵活的收款方式。



10、2020年,微信加强了对短视频的支持,并在微信朋友圈中推出了短视频功能。



微信作为中国最流行的社交媒体应用程序之一,已经成为人们生活中不可或缺的一部分。随着技术的不断进步和用户需求的变化,微信生态将继续发展和完善,以下是未来微信生态的一些可能趋势:



1、社交电商:微信将进一步推动社交电商的发展,通过在微信上建立商城、直播销售和社交拼团等方式,为用户提供更多的购物体验。



2、智能客服:微信将继续推动智能客服技术的发展,为企业提供更加高效的客户服务。



3、人工智能:微信将加强对人工智能技术的应用,为用户提供更加智能化的服务,如语音识别、自然语言处理、人脸识别等。



4、云服务:微信将加强对云服务的支持,为企业提供更加完整的云端解决方案,如数据存储、计算和分析等。



5、区块链:微信也将加强对区块链技术的支持,为用户提供更加安全和可信的服务。



总之,微信生态将继续发展和创新,以满足用户和企业的需求,为用户提供更加智能化、便捷和全面的服务。



强烈推荐《分布式微服务架构:原理与实战 黄文毅 著 清华大学出版社》,是一本非常好的分布式微服务系统架构学习教程,内容全面详细,清晰易懂,很有实战意义,非常适合开发人员学习,希望对大家有所帮助!


企业私有云搭建方案: 在以AWS、Google、阿里等为代表的公有云发展的同时,很多大型企业出于数据安全性、系统稳定性、软硬件自主权、对自主可控以及TCO低的考虑,更加倾向于建设企业私有云来承载内部业务信息系统的运行。

、企业私有云建设需求分析

在建设企业私有云前,首先需要回答和解决的问题是企业是否真的需要私有云,需要什么样的私有云?企业私有云的建设是一个长期的系统工程,初始成本的投入也较为高昂.因此企业在建设私有云之前,应从以下几方面对需求和现状进行评估。

1、需求和资源使用特点

某大型企业的IT系统现状:

系统利用率低:烟囱式的系统建设部署方式,导致系统资源无法共享,系统负载不均衡整体资源利用率和能耗效率低。

建设扩容成本高:IT系统中原有的UNIX服务器、数据库和存储阵列占比较高,标准化程度低,通用性差,导致建设扩容成本难以控制,给系统统一维护带来困难。

扩展能力有限: 系统的Sale-Up能力和Scale-out能力不足,难以应对越来越大的系统处理和存储压力。

那么针对以上的现状,如何去通过云计算来改变呢?首先我们需要的是A、动态部署架构: 构建基于标准化硬件设备和虚拟化架构之上的云计算基础设施资源池可对上层应用按需提供弹性资源,实现多系统有效共享,有效提高IT系统资源利用率和能耗效率

B、标准硬件单元: 云计算采用标准的运算和存储处理单元,有效降低系统建设和扩容成本

C、高可扩展性: 云计算硬件集群技术和软件并行处理能力能够提供出色的Scale-out能力,几乎无限扩展IT系统的处理和存储能力。

通过引入云计算技术,去改变传统信息系统竖井式的建设模式,通过底层资源的共享与灵活调度提升资源利用率,降低整体信息系统建设成本,缩短信息 系统的建设周期.这些实现都是以资源使用特点为前提的,如果一个信息系统本身无资源调度需求(例如资源使用曲线较为平稳)或计划由云计算承载的信息系统 整体资源规模较小,资源共享和调度的空间有限;再或特定的应用系统不支持分布式部署,无法进行横向扩展甚至纵向扩展.对于类似的信息系统建设需求,则无法 充分利用云计算的优势,因此对本企业的需求和现状进行合理评估是非常必要的。

2、信息系统的标准化程度

在云计算环境中,信息系统所具有的标准化程度往往是决定私有云形态的重要因素.对信息系统的标准化评估存在多个维度,包括基础架构环境标准化(例如所需支撑的硬件是专用硬件还是通用硬件)、平台环境标准化(例如对于开发环境、中间件环境以及数据库环境的通用需求和租户限制)、以及应用系统的标准化(例如应用系统的运行环境、封闭系统亦或是开发系统商用套装软件或是自开发系统、是否支持分布式等).不同维度的标准化实现决定了企业私有云应该建 设为laaS云、PaaS云亦或是SaaS云。

3、云化建设/迁移的难度

将新的应用系统直接部署在云计算环境中或将原有系统迁移到云计算环境中是两种主要信息系统的云化改造路径,对其实现难度的评估是对应用系统进行 云化改造风险与收益评估的重要手段.整个业务系统的云化分析过程需要从包括硬件支撑环境改造、操作系统平台变更、平台软件绑定分析、IP地址依赖性消除、 API重构、模块化改造、标准化改造、外部依赖条件等在内的多个层面和维度进行,准确评估业务信息系统云化改造的相关难点与痛点,才能对信息系统云化改造有充分的认识和准备。

二、企业私有云技术路线选择

企业私有云搭建方案,在大型企业建设私有云时,一个重要的问题就是技术路线的选择和成本价值产出.一般在进行私有云技术路线选择时,大型企业往往会把稳定性、成熟度、服务满意达成度放在首位,那么成熟的稳定的商业解决方案就会被优先考虑,而开源的往往技术不够成熟和稳定,因此不被优先考虑。下面拿VMWARE和OPENSTACK来做比较。

1、从产品设计上看。VMware软件套件是自底向上的架构,下端边界为虚拟机管理器。VMware的vSphere和vCloud director产品都是依赖于ESX( 虚拟机管理器。VMware的产品由于其架构的健壮性,很多高规格用户在多数据中心规模的环境中都有使用。但是VMware的软件系统是封闭的,并且软件 的发展路线是完全遵循VMware自己的发展目标,用户或消费者在此方面没有任何控制权。而OpenStack作为一个开源系统,没有任何一家单独的公司 在控制OpenStack的发展路线。另外很多大公司都在支持OpenStack发展,有了如此多公司的资源投入,OpenStack的发展是多元化的。然而这也带来了问题,就是OpenStack部署和架构的实施和维护成本较比VMware有了陡然提高,与此同时,由于相对快速的版本更新速度,技术支持文档不能跟上产品的脚步

2、从高可用和容错、资源平衡功能上看。在vSphere中,虚拟机级别的高可用性是允许在虚拟机或者ESX(0主机出错时,在不同宿主机部署相同的虚拟 机。高可用是在硬件出问题的时候保证虚拟机的正常工作,当然如果真的出错了,那么只能在不同的ESX(主机上启动虚拟机,这也可能造成服务的中断。 FT的容错其主要功能就是保证出现故障时用户的应用不会出现中断。其原理就是在两台主机上创建一模一样两台虚拟机vm(主)与vm(辅助),vm(辅助)完全同步vm(主)的操作,当vm(主)故障时,vm(辅助)自动切换变为vm(主)。FT可使应用程序实现零停机、零数据丢失,同时消除了传统硬件或软件集群解决方案的成本和复杂性。另外还有VMware vSphere 的分布式资源调度(DRS)可以聚合群集中ESXi主机资源,通过监控利用率自动分配这些资源给虚拟机,并能够跨ESXi主机不断进行虚拟机资源优化和 平衡我们再看一下OpenStack 的高可用。目前并没有官方声明OpenStack支持虚拟机级别的高可用性,这个特性在Folsom版本被提出,但是后续又被放弃了。目前 OpenStack有一个孵化项目Evacuate, 其作用是为OpenStack提供虚拟机级别高可用支持。再看OpenStack 的容错,在OpenStack中没有针对于容错的功能,并且截至目前也没有计划去完成这些功能.OPENSTACK也还没有良好的资源自动平衡机制,截止 到目前openstack并未提供DRS、的功能,这属于openstack功能缺失的一部分。我们可以看到,在功能的支持方面和功能细节,OpenStack与VMware还是有差距的,仍然需要不断进步才能做的更好.

3、从成本和价值来看。VMWARE是商业软件,其成熟度和定性经受了大量实际环境的考验,但使用成本高,体现在其授权费用和服务费用上。相对VMware 的昂贵价格OpenStack免费、开放的优势还是很明显的。VMware高投入带来的功能,OpenStack大部分可以免费提供给客户。那么是 OpenStack还是VMware更有价值,这个问题并没有很清晰的答案,并且答案也取决于企业实际部署的规模。虽然OpenStack是免费使用的,但是它需要有专业的开发人员和此领域的专家才行,并且需要很多架构和搭建方面的工作,因为它支持很多部署场景,并且安装过程都不尽相同。VMware则需 要花费一些经费购买授权和服务,并且相对来说更加容易安装和运行,另外Vmware的学习成本更低一些。

总得来说,基于以上的分析,大型企业使用VMWARE则更稳定和可靠。而OpenStack则入门门槛较高,如果企业没有足够的技术能力储备则无法解决大面积部署OPENSTACK所遇到的问题和坑。

三、企业私有云建设要点分析构建私有云始于企业对自身信息系统建设需求的解析与明确,企业之所以选择私有云的初衷大多基于自身信息化建设的考虑,主要驱动力包括降低软硬件 成本、实现应用系统快速部署、应对业务负载突发性增长需求、构建安全可靠自主可控的基础架构环境等.而私有云对以上需求的支持并非是天然的,在架构设计需 要明确设计要点和建设思路,一般说来,在设计企业私有云过程中需要对以下重点关注

1、资源池

云计算要进行软硬件资源的统一管控和灵活调度,首先需要做到的就是对资源的纳管,即构建资源池而需要注意的是资源池的意义并非仅仅是通过平台使软硬件资源的可知可控成为可能,更为重要的是明确与之相匹配的管控手段和策略,使其涵盖资源的全生命周期管理.资源池建设重点可以归纳为资源可达、规模可控与能力可知:

1)资源可达

资源池是在技术层面打破旧有的竖井式信息系统建设模式的关键,是软硬件资源实现统管控、灵活调度的基础.在资源池中,需要利用服务器虚拟化、存储虚拟化和网络虚拟化技术使任意资源在技术上都可以通过网络IP网络或存储网络)以服务的形式被无障碍、无区别的供给,应用可以以多种方式访问和使 用既定规则允许范围内的任意资源.因此,在资源池设计中,对各类型资源的打通和连接是其实现重点

2)规模可控

我们在谈及云计算时,往往会说云计算提供了几乎无限的可能性,这主要是在指云计算的弹性.云计算由于在架构设计上避免了底层硬件资源孤岛,对资源的共享访问方式将放大资源池

的弹性效果,规模可控的实现最为重要的是制定资源池扩展和收缩的规则,通过使用时间、使用量、持续时间、优先级等一系列量化闻值触发规则在资源池体量不足时可以灵活的向资源池中添加各种资源,在资源池空闲时,也可以释放部分资源给其他资源池使用.

3)能力可知

在资源池投入使用后,应实时/准实时的对资源池的承载能力进行分析.以监控数据为基础,通过具备科学完备的统计方法和计算规则,评估可供给的服务能力,对应用需求的满足度进行分析.要实现资源池的能力可知,必须具备完善的资源监控手段、实时/准实时更新CMDB,采用合理的感知方式并制定合理的 资源能力计算规则,同时,由于应用需求各不相同,要准确评估对应用的满足度,还需要梳理出典型业务模型,据此评估不同应用模型对资源的需求与消耗。

2、云管理平台

云服务设计、发布和管理是云计算的核心,体现了云计算的运营形态,而云管理平台是实现云服务全生命周期管理的基础,是实现云计算运营模式的载 体,按照ISO/IEC最新发布的云计算参考架构,其中功能层中的用户功能层、访问功能层和服务功能层都应该在云管理平台中进行实现.对于云管理平台而 言,其建设重点可以归纳为状态可视、分配可控和服务可用:

1)状态可视

对于云平台而言,可视并不仅仅代表图形化的访问和管控,企业建设私有云更为重要的是从云服务供应商的视角通过云管理平台实现对资源的集中管控。 因此在云计算环境中,监控的重要性将上升到前所未有的高度,同时相比于传统信息系统架构,监控的含义和涵盖的范围也有了很大的变化,一般说来,在企业私有云平台中,必须具备对包括基础架构资源、服务安全审计在内的监控能力:

0对包括物理和虚拟化计算资源、存储资源、网络资源等基础架构资源的资产管理、使用情况和设备状态的监控,并及时发现、处理和上报问题。

2面向服务的监控主要集中在两个方面.一方面监控上线服务的运行状态,确保其运转正常,及时发现事件与问题:另一方面是对SLA服务等级的达成度监控。

0安全和审计的监控包括根据在云计算环境中依照业务需求制定的安全规范,面向用户访问、租户数据/资源隔离、日志采集和分析等进行安全和合规性检查和监控.做到风险可识别、问题可发现、访问可控制、操作可追溯,达成SLA对安全的要求与约定。2)分配可控

基础架构资源的管控是云计算运营最重要的基础和最核心的资源.对基础架构资源的合理管控是企业建设自己的私有云的重要出发点,而对资源管控的实现需要通过云管理平台完成,对于

云计算环境中的基础架构资源,从初始建设、分配使用在到回收等一系列动作都应该根据服务设计和相关SLA规定制定详细、规 范的流程以及科学合理的处理手段,使云管理平台对资源的管控涵盖资源的全生命周期,做到初始建设合理、管控过程合规、资源分配合适、管控操作可回溯、已分配资源可回收。企业私有云搭建方案

3)服务可用服务是云计算环境的核心.在构建私有云时企业往往会从自身的应用特点和需求出发进行服务的设计和实现,因此很难针对私有云制定通用的服务模板,依据云计算建设的通用方法,对于云服务的建设,一般说来会关注以下四个方面:

0云服务的识别: 云服务的识别是云服务实现的第一步,决定了在云计算环境中将供给的服务内容.云服务的识别是以需求调研为基础的,从必要性、可复用性、实现成本等多个角度出发,分析服务实现的难点和收益,制定服务分阶段实现的计划与路线图。

@云服务的设计: 在云计算环境中对云服务的使用模式决定了云服务的设计要点,一般说来,对于云服务的设计内容包括服务的底层架构、服务的运行流程、服务安全与监控、服务的审计与合规性检查、评价服务能力的关键指标(KPI)、服务的高可用、服务的SLA等几个方面。0云服务的实现: 云服务的实现一般说来有四种方式:一是从业务需求分析出发进行云服务的定制开发;二是利用第三方软硬件产品进行服务封装;三是从其他云计算运营商购买,合作实现;四是基于已有服务进行服务组合,形成新的服务

4)云服务的维护:在云服务上线后,对云服务的运维是企业私有云成败的关键.对于云服务的维护包括两个方面.一是针对云服务自身的维护,包括对服 务能力和状态的监控、对服务性能和规模的趋势分析、服务的修正与升级、服务底层架构的维护等;二是服务的SLA达成度保障,包括实时监控服务的KPI并与 SLA所规定的服务目标进行比较,在不符合SLA时及时干预使其符合要求,同时,确保满足SLA所规定的安全、隔离等相关条款。

3、自动化与标准化

在云计算环境中,自动化对象往往是哪些经常使用、手工发起的复杂操作,这就要求自动化的对象应符合通用设计,遵循相同的技术规范,具备一致的处理流程,动作行为可参数化,即自动化的目标应该是标准化的。美国海外云服务器

标准化实现的层次决定了可以实现自动化操作的对象,而这往往决定了云计算的建设模式例如,在基础架构资源在资源分配方式、资源分配粒度、资源分配方法等符合标准化时,可以考虑构建基于基础架构资源的laaS云,在包括开发环境、数据库、中间件在内的平台软件在符合标准架构和流程、具备标准化运行环境等条件时,可以考虑构建基于平台的PaaS云,而在应用部署模式相类、服务模式统一、支持分布式、基于SOA架构等的应用系统等,可以考虑构

建基于 软件SaaS云需要注意的是并非所有的基础架构、平台软件和应用软件都具备标准化的条件,而标准化的代价同样高昂,包括硬件重构、SOA改造等标准化过 程需要投入大量的资金和人力成本,一般说来,封闭的系统环境和商用套装软件的标准化改造难度较大。

另外一点在自动化过程中特别需要考虑的是,自动化在带来便捷、高效的同时,不合理的自动化流程设计将可能会导致错误的莫延和环境的失控,因此,在进行自动化设计过程中,尤其需要注意规则的设定和异常处理。

4、云安全

企业不使用公有云而选择自建私有云最大的考虑就在于安全.数据表明,安全已经成为阻碍云计算发展的最主要原因之一.根据CDA数据分析师协会统计,32%已经使用云计算的组织和45%尚未使用云计算的组织将云安全作为进一步部署云的最大障碍。在云计算体系中,安全涉及到很多层面,一般说来,在云计算环境中应主要考虑网络安全、存储安全、物理机安全、虚拟化安全、虚拟化管理安全、交付层安全、数据安全、安全服务和运维安全等9个层面和领域。

同样需要注意的是,并非所有的应用安全问题都应该依赖云计算环境的安全架构来解决.云计算基础架构环境支持的系统种类众多、业务要求和安全基线各有不同,在对用户进行服务供给时应根据服务种类以及SLA对安全服务内容进行严格的规范,划分清晰的分工和责任界面。

四、企业私有云建设的思考企业私有云的建设并非只是新技术的变革与引入,而是颠覆传统信息系统建设模式的系统工程.结合企业的特定需求,企业私有云的建设思路大可不尽相同,建设方法也不会千篇一律。是选择商用云平台还是选择开源云平台来创建企业的私有云,这需要企业综合考虑,权衡利弊,依据企业自身技术能力,资金投入总量,实现业务效果等 等各个方面去考虑云平台技术选型。所以没有好与不好,只是能否适用和用的好。建设企业私有云不是一蹴而就的,而且这将是持续不断的投入过程,需要在实践中不断摸索前进。

企业私有云搭建方案详解

企业私有云搭建方案中有以下五个步骤:

1.根据业务目标设置云计算目标

构建专为企业设计的私有云必须从业务讨论开始。如果企业的基础结构团队正在启动一个没有开发人员的云项目,请中止它们。这需要与开发人员和用户沟通,更重要的是面向产品营销和销售经理的对外团队。让所有利益相关者参与讨论云计算如何加速业务流程或转变业务提供方式。并在业务方面制定明确的目标和成功标准。

2.采用企业基础设施的投资组合视图

并非所有工作负载都适合虚拟化环境。同样,并非所有工作负载都适合私有云。当企业采取云策略时,很可能会采用管理物理,虚拟和云计算资源的组合方案。因此,企业将数据中心部分作为共享,虚拟化和可扩展资源池。许多IT主管计划在其私有云环境中提供30%至50%

或更多的工作负载。但是,私有云资源将在具有物理服务器和大型机以及静态虚拟化资源的环境中进行管理。以不动产方面来说,构建以云计算为中心的未来数据中心将是一次改造,而不是一次拆解。这样做需要了解当前工作负载的关键属性,定义当前环境的异质性组合,以及检查在从开发到测试/质量保证到生产的过程中需求如何变化。

3.定位私有云环境的工作负载

评估刺激当前的工作负载,以确定哪些适用于私有云的此快照将用于设置针对私有云的总工作负载百分比的长期目标。在短期内,它还将用于识别初始云部署的工作负载

4.实施计划

企业需要实施两个关键活动: 一是在企业的目标的内容中评估不同的模型。二是务必考虑敏捷性,服务质量,成本和安全性以及合规性。考虑使用内部和外部云资源的混合计算模型。而要注意的是,私有云资源可以包括由外部服务提供商托管的资源池。混合模型可以包括允许工作负载从私有云移动到外部公共云服务提供商的特征。

5.基于标准架构部署概念验证

在内部部署供应商解决方案,并确定现有的基础架构实现更高级别的自动化和标准化,以及流程和技能集成如何集成。概念验证的总体目标是通过基于业务需求的工作参考实现来证明成功。要实现这一点,企业必须测试其在评估期间做出的假设。

企业私有云搭建方案 (举例详解其搭建方法)

塔建智慧企业体系,实现以人为本的个性化创新服务,构建新的运行模型,解决信息孤

岛、数据碎片、业务扩展困难等问题,以适应企业智能化建设长期、可迭代发展。新开普以“联动”为核心,建设合作应用,以”数据”为基础搭建底层数据应用,以“快捷”为目标联动多个平台终端,以“共享”为目的实现数据资源共享、统一管理的设计原则,来将分散的、孤立的各个部门的系统和数据集成起来,突破业务隔阂(部门壁垒),建设服务型智慧企业,实现整个组织的协同办公。

统一身份识别: 建立统一认证的立体安防体系

人过留影,车过留牌。通过建立统一认证平台,定义统一的接入规范,实现访客、闸机、门禁、门锁等各类安防设备的充分集成、联动授权,可视化地对各基地的安防事件实时管控、对企业一卡通各种场景数据建模展示、对生产经营及信息化流程和数据实时展示,将立体安防以高效、便捷的形象呈现在众人眼前,保障园区的安全。

、统一金融服务:建立无现金支付环境的聚合支付体系

通过打通线上、线下支付渠道,构建无现金支付的聚合支付体系,为公司提供统一支付、结算中心,实现后勤财务的统一监管。所有员工消费在统一结算平台上进行体现,做到消费过程透明化,多方位监控,提高账务流转处理速度,规范财务管理安全。

三、统一办理: 建立线上+线下的自助服务平台

建立线上移动端的自助服务平台,员工的各类生活服务转为线上,并由人工改为自助办理,大幅提高员工满意度和后勤部门的业务办理效率。建立线下一站式服务大厅,例如在人员流量较大的区域配备圈存机与自助现金充值机,便于员工自助充值等服务,一站式统一办理减少员工跑腿时间,提升企业的运行效率与员工满意度。

四、统一管理: 建立互联互通的集中管理平台

建立公司私有云一卡通集中管理平台,规划统一的卡片、数据、财务等标准,作为互联写通的基础支撑,实现员工跨单位消费出入等业务,形成一个紧密联系的公司,获得高效、协同、互动、整体的效益


关注留言点赞,带你了解最流行的软件开发知识与最新科技行业趋势。



在本文中,读者将了解 SaaS、多租户和单租户架构、多租户 SaaS 最佳实践、微服务等!



SaaS 应用程序是当今的新常态,软件提供商正在寻求将其应用程序转换为软件即服务应用程序。为此,唯一的解决方案是构建一个多租户架构的 SaaS 应用程序。您是否想过 Slack、Salesforce、AWS(亚马逊网络服务)和 Zendesk 如何为多个组织提供服务?每个客户是否都有其独特的定制云软件?例如,您是否注意到,在 Slack 上,您有自己的 URL“yourcompanyname.slack.com”?



大多数人认为,在后台,他们为每个组织创建了一个特定的环境——应用程序或代码库——并相信 Slack 客户拥有自己的服务器/应用程序环境。如果是您,您可能会假设他们有一个可重复的流程来为所有客户运行数以千计的应用程序。好吧,不。真正的解决方案是AWS 上用于 SaaS 应用程序的多租户架构



让我们从这个令人印象深刻的事实开始:根据 IDC 研究,70% 的 Web 应用程序被视为 SaaS 应用程序。因此,如果您了解 SaaS 架构和多租户,那么您可能已经涵盖了 70% 的未来可用的 Web 应用程序架构。



“ 70% 的 Web 应用程序都是 SaaS,但只有少数是多租户的。



本研究旨在概述 DevOps 和软件开发人员在构建 SaaS 多租户应用程序时可能面临的策略、挑战和限制。

在开始之前,有两个概念对我们来说很重要:



接下来的几点是我们将在 SaaS 应用程序的多租户架构中探索的内容,我的贡献将是:



什么是多租户架构?



首先,你需要了解什么是单租户和多租户架构



  • 单租户架构(孤岛模型):是每个组织的单一架构,其中应用程序拥有自己的基础架构、硬件和软件生态系统。假设您有十个组织;在这种情况下,您需要创建十个独立的环境,并且您的 SaaS 应用程序或公司将作为单个租户架构运行。此外,它意味着更多的成本、维护和跨环境更新的难度。

  • 多租户架构:是一种生态系统或模型,其中单个环境可以利用可扩展、可用且有弹性的架构为多个租户提供服务。底层基础设施完全共享,逻辑隔离,服务完全集中。多租户架构根据登录到 SaaS 应用程序的组织或子域 (organization.saas.com) 发展;并且对最终用户是完全透明的。



请记住,在本文中,我们将讨论两种多租户架构模型,一种用于应用程序层,一种用于数据库层。



多租户的好处



采用多租户架构方法将为您的 SaaS 应用程序带来广泛的宝贵好处。



让我们来看看下一个贡献:



  • 利用多租户架构策略降低服务器基础设施成本:

    • 您不必为每个客户创建一个 SaaS 环境,而是为所有客户包含一个应用程序环境。这使您的 AWS 托管成本可以从数百台服务器显着降低到一台。

  • 单一信任来源:

    • 让我们再说一遍,您有一个客户在使用您的 SaaS。想象一下每个客户将拥有多少个代码存储库。每个客户至少 3-4 个分支,这会产生大量开销和未对齐的代码发布。更糟糕的是,可视化将代码部署到整个租户农场的过程;它非常复杂。这是不可行且耗时的。 使用多租户 SaaS 架构,您可以避免这种类型的冲突, 您将拥有一个代码库 (信任源) 和一个 具有几个分支(开发/测试/生产)的代码存储库。通过遵循以下实践 - 使用单个命令(一键部署) - 您将在几秒钟内快速执行部署过程。

  • 降低开发成本和上市时间:

    • 降低成本考虑一系列决策,例如拥有单一代码库、SaaS 平台环境、多租户数据库架构、集中存储、API 以及遵循十二要素方法论。所有这些都将使您能够减少开发劳动力成本、上市时间和运营效率。



AWS 架构的 SaaS 技术堆栈



要构建多租户架构,您需要将正确的 AWS Web 堆栈(包括操作系统、语言、库和服务)集成到 AWS 技术中。这只是创建下一代多租户架构的第一步。



尽管我们将介绍一些其他多租户架构最佳实践,但本文将主要针对此 AWS SaaS Web 堆栈。



让我们深入了解 AWS 上的 SaaS 技术栈:



编程语言



选择哪种语言平台并不重要。重要的是您的应用程序可以扩展,利用多租户架构最佳实践、云原生原则和开源社区的知名语言。构建 SaaS 应用程序的最新趋势是 Python + React + AWS 。另一个“变体”是 Node.js + React + AWS,但最终,共同点始终是 AWS 和 React。如果你是一家金融公司,ML 或 AI,有复杂的算法或后端工作,我会说你应该选择 Python。



另一方面,如果您正在使用实时聊天、迷你提要、流媒体等现代技术,那么请选择 Node.js。银行业有一个利用 Java 的市场,但那是针对成熟企业的。任何新的 SaaS 应用程序都可以更好地与提到的 Web 堆栈一起使用。同样,这正是我所注意到的趋势,也是社区的要求。



注意:此数据来自我们几个月前对金融服务和 SaaS 公司进行的一项调查。



理想的语言



云供应商



作为 DevOps 专家团队,我注意到过去两年中云的变化,这与这些百分比相对应:我们 70% 的 DevOps 实施基于 AWS,25% 使用 Azure,5% 使用 GCP 和数字海洋。每年的趋势都是相似的,除了 Azure 随着时间的推移逐渐增长。这些不仅是我的话,也是多个 DevOps 合作伙伴支持的想法。因此,我强烈建议在 AWS 下部署您的 SaaS 应用程序。它有很多好处;每天都有一项新服务可供您使用,以及一项有助于您开发和部署的新功能。完全推荐在 AWS 上部署您的 SaaS。



微服务



如果您打算利用云,则必须利用云原生原则。这些原则之一是将微服务与 Docker 相结合。确保您的 SaaS 应用程序处于微服务之下,这会带来多种好处,包括灵活性和标准化、更易于故障排除、问题隔离和可移植性。就像云一样,Docker 和微服务已经改变了 IT 生态系统,并将持续很长时间。



容器编排平台



这是一个复杂而抽象的决定;AWS 中提供了三个选项来管理、编排和创建微服务集群环境:



  1. Amazon ECS 是AWS生态中天然的Amazon容器编排系统。(强烈推荐给初创公司、小型 SaaS 和中型 SaaS)。

  2. Amazon Fargate:几乎无服务器,价格和管理按任务计算。与 ECS 相比,操作工作量最少。我们的 DevOps 团队进行了一些研究;在性能方面。Fargate 可能比 ECS 慢,因此对于这种特殊情况,我建议使用 Amazon ECS,而不是 Fargate。另一个想法是,如果您的团队是纯粹的开发人员并且不打算聘请 DevOps 工程师,那么 Fargate 可能是最佳选择。

  3. Amazon EKS:这是一项托管服务,使 AWS 上的 Kubernetes 易于管理。使用 Amazon EKS 而不是在 EC2 实例上部署 Kubernetes 集群,设置 Kubernetes 网络和工作节点。(推荐用于大型 SaaS 应用程序和成熟的 DevOps 和 Web 开发团队)。



数据库



固有数据库将是带有 Amazon RDS 的 PostgreSQL。但是,我强烈建议,如果您有一个高级开发团队,并且计划为您的 SaaS 应用程序(甚至数百个租户)提供高流量,那么您最好使用 MongoDB 构建您的数据库。除此之外,利用下面将提到的关于多租户数据库的最佳实践。在这种情况下,我会选择带有 PostgreSQL 或 DynamoDB (MongoDB) 的 Amazon RDS。



“如果您计划为您的 SaaS 应用程序提供高流量,您最好使用 MongoDB 构建您的数据库。”



GraphQL 或 Amazon AppSync



GraphQL 是一种查询语言,是数据库服务的 RESTful API 的替代品。这个新的现代生态系统被用作客户端和数据库服务器之间的中间人。它允许您更快地检索数据库数据,减轻数据库中的过度获取,从 GraphQL 模式中检索所需的准确数据,并通过比 RESTful 服务更快的迭代速度来保持开发速度。在多租户微服务架构中采用单体后端应用程序是利用 GraphQL 或 AppSync 的最佳时机。因此,在转换 SaaS 应用程序时,不要忘记包含 GraphQL!



注意: 我没有在 AWS SaaS 架构图中包含此服务,因为它以多种方式实现,并且需要对此主题进行深入解释。



自动化



您需要一种机制来触发或启动新的租户/组织并将其附加到您的多租户 SaaS 架构。假设您有一个新客户刚刚订阅了您的 SaaS 应用程序,您如何将这个新组织包含在您的环境、数据库和业务逻辑中?



您需要一个自动化流程来启动新租户;这称为基础架构即代码 (IaC)。这个脚本/过程应该存在于 git/bitbucket 存储库中,这是 DevOps 的基本原则之一。利用自动化和 IaC 的一个有力论据是,您需要一种机制来自动化 SaaS 应用程序以进行代码部署。同样,为您的开发/测试环境自动配置新的基础设施。



基础架构即代码和自动化工具



使用哪种基础设施即代码工具并不重要,它们都很有用(Terraform 和 CloudFormation);他们做同样的工作,并且在 DevOps 社区中广为人知。我没有赢家,他们都很好。



  • Terraform(来自 Hashicorp):一种流行的与云无关的工具。广泛用于所有 DevOps 社区。有了这个技能就更容易找到 DevOps。

  • Amazon CloudFormation:更容易与 AWS 内置的自动化工具 Amazon Web Services 集成。每当有新的亚马逊技术发布时,与 AWS 和 CloudFormation 的兼容性比 Terraform 发布得更快。相信 AWS CloudFormation 专家会以安全的方式实现自动化和发布。



消息队列系统 (MQS)



常见的 MQS 是 Amazon SQS、RabbitMQ 或 Celery。我在这里建议的是使用需要您较少操作的服务,在这种情况下,是 Amazon SQS。有很多次你需要异步通信。从延迟或安排任务,到提高关键 Web 事务的可靠性和持久性,解耦您的整体或微服务应用程序,以及最重要的:使用队列系统与事件驱动的无服务器应用程序(Amazon Lambda 函数)进行通信。



缓存系统



AWS ElastiCache 是一个缓存和数据存储系统,可完全扩展、可用和托管。它旨在提高分布式缓存数据和内存数据结构存储的应用性能。它是 Memcached 和 Redis 引擎的内存中键值存储。只需单击几下,您就可以运行这个完全自我管理的 AWS 组件。必须为您的 SaaS 应用程序包含一个缓存系统。



云存储系统



用于静态内容的 Amazon S3 和 Amazon CloudFront CDN。所有静态内容,包括图像、媒体和 HTML,都将托管在 Amazon S3——具有无限存储和弹性的云系统上。在 Amazon S3 之前,我们将包括 AWS CloudFront,集成这对元素至关重要,以便缓存整个静态内容并降低带宽成本。



SaaS Web 堆栈:AWS 上的多租户 SaaS 架构示例



多租户 SaaS 架构的类型



多租户采用中最重要的问题之一是哪种多租户架构更适合您在 AWS 上的 SaaS 应用程序。我们将探讨使您的应用程序能够充当真正的 SaaS 平台所需的两个层,因为最重要的是决定您将在 SaaS 平台、应用程序和数据库层中合并哪种多租户架构。这两种类型的多租户架构是:



  1. 应用层多租户。

  2. 数据库层多租户。



应用层多租户



应用程序层是一种架构设计,可为租户提供托管服务,主要用于软件即服务应用程序(SaaS 应用程序)。在第一个模型中,应用层通常由多个客户共享。



SaaS 的单体架构



如果您以前没有看过这篇文章——或者如果您已经开发和构建了自己的 SaaS 应用程序——我相信您已经采用了这种方法。单体组件包括 Web 层中的 EC2 实例、应用程序层以及用于数据库的带有 MySQL 的 Amazon RDS。单体架构不是一个坏方法,除了您在上述层中大量浪费资源。由于单体(云)架构的性质,至少有大约 50% 和 70% 的 CPU/RAM 使用被浪费了。



单体架构图



使用容器和 Amazon ECS 的 SaaS 微服务架构



微服务是一种推荐的架构类型,因为它们在现代化和最大限度地利用可用云资源(EC2 实例和计算单元)之间提供了平衡。它还引入了具有更细粒度服务(微服务)的分解系统。我们不会过多地谈论微服务的好处,因为它在社区中得到了广泛的表达。但是,我会建议您使用多租户架构 + AWS 服务 + 微服务 + Amazon ECS 的公式作为容器编排器;他们可以是绝配。主要考虑 Amazon ECS 为您的 DevOps 团队提供更少的集群配置工作和更多的 NoOps。



“到 2022 年,90% 的新应用程序将采用微服务架构,提高设计、调试、更新和利用第三方代码的能力;35% 的生产应用程序将是云原生的。” —资料来源: 福布斯,2019 年



对于一个才华横溢的团队,最好的多租户 SaaS 架构方法就是这个用例场景。同样,它涵盖了 SaaS 软件和架构的主要属性,包括敏捷性、创新性、可重复性、缩短的周期时间、成本效率和可管理性。



绝配



多租户架构 + AWS 服务 + 微服务 + Amazon ECS(作为容器编排器)。



微服务架构图



使用 Amazon EKS 的 SaaS 的 Kubernetes 架构



您可能想知道:Kubernetes 或 Amazon EKS 怎么样?好吧,Kubernetes 是微服务架构的另一种选择,它在 SaaS 等式中增加了一层额外的复杂性。但是,您可以通过利用 Amazon EKS、Amazon Elastic Container Service for Kubernetes 来克服这种复杂性;来自 Amazon 的托管 Kubernetes 服务,这是 Kubernetes 社区事实上的服务。



该组件与其余架构相比的亮点在于它提供了名称空间的使用。此属性有助于在相应的 Kubernetes 集群中隔离每个租户及其自己的环境。从这个意义上说,您不必为每个租户创建不同的集群(您可以,但是,以满足不同的方法)。通过使用 ResourceQuota,您可以限制每个命名空间使用的资源并避免对其他租户造成干扰。另一点需要考虑的是,如果你想隔离你的命名空间,你需要包括 Kubernetes 网络策略,因为默认情况下,网络是开放的并且可以跨命名空间和容器进行通信。



这是 Amazon ECS 与 Kubernetes 的比较。如果您有一家 SaaS 企业,我建议您通过 Amazon EKS 或 Kubernetes 更好地控制您的微服务,因为它允许您进行更精细的更改。



那么,Kubernetes 多租户架构会是什么样子呢?这是一个简单的 Kubernetes 多租户架构,由其各自的命名空间孤立。



Kubernetes 架构图



一个简单的多租户架构,带有 Kubernetes 并由 Kubernetes 命名空间孤立。



AWS 上 SaaS 的无服务器架构



任何 AWS 架构师的梦想都是使用无服务器方法创建多租户 SaaS 架构。作为 DevOps 或 SaaS 架构师,这是一个可以实现的梦想,但作为权衡,它特别增加了相当多的复杂性。此外,它需要与您的开发团队进行合理的协作时间、大量更改代码应用程序以及变革性的无服务器思维方式。鉴于此,在几年内,这将是最终的解决方案,这完全取决于人才、能力和用例。



无服务器 SaaS 架构使应用程序能够获得更多的敏捷性、弹性和更少的开发工作,一个真正的 NoOps 生态系统。



概括地说,下一代无服务器 SaaS 架构的新部分是什么?每个调用都变成一个独立的租户调用,要么转到逻辑服务(Lambda 函数),要么转到来自 Amazon API Gateway 的数据库数据,作为无服务器 SaaS 应用程序的入口点。



现在您已经解耦了每个逻辑服务,身份验证和授权模块需要由第三方服务处理,例如 Amazon Cognito,它将负责识别租户、用户、层级、IAM 租户角色,并带来从这些方面支持 STS 代币。特别是,API 网关会将所有租户函数路由到与 STS 令牌匹配的正确 Lambda 函数。



下面是使用无服务器的 AWS SaaS 应用程序的多租户架构示例图。



无服务器架构图



数据库层多租户



多租户概念带有不同的架构层。我们已经提倡多租户应用层及其变体。现在,是时候探索数据库层的多租户了,这是另一个需要发现的方面。矛盾的是,最简单且具有成本效益的多租户数据库架构是纯粹且真实的数据库多租户。



数据库层正好与之前的模型应用层相反。在这里,DB层在租户之间保持公共,而应用层是隔离的。下一步,您需要评估采用何种多租户数据库架构来处理表、模式或孤立数据库。



选择数据库架构时,有多个评估标准:



  • 可扩展性:租户数量、每个租户的存储、工作负载。

  • 租户隔离

  • 数据库成本:每个租户的成本。

  • 开发复杂性:模式、查询等方面的变化。

  • 操作复杂性:数据库集群、更新租户数据、数据库管理和维护。



单一数据库:每个租户一张表



每个租户单数据库一个表是指纯数据库多租户和池化模型。这种数据库架构是 DevOps 或软件架构师常用的默认解决方案。当拥有小型初创公司或几十个组织时,这是非常划算的。它包括在数据库模式中为每个组织利用一个表。这种架构有一些特定的权衡,包括牺牲数据隔离、租户之间的噪音和性能下降——这意味着一个租户可能会过度使用另一个租户的计算和 ram 资源。最后,每个表名都有自己的 tenantID,这对设计和架构师来说非常简单。



关于数据隔离和合规性,假设您的一位开发人员犯了一个错误,将错误的租户信息带给了您的客户。想象一下数据泄露——请确保永远不要公开来自多个租户的信息。这就是为什么兼容的 SaaS 应用程序不推荐这种架构模型,但是由于其成本效益而被广泛使用。



替代单租户数据库架构



单个数据库中单个模式中的单个模式中的共享表。非常适合 DynamoDB。(我们没有介绍这种方法——仅供参考)。



单一数据库:每个租户一个模式



A schema per tenant single database,也称为桥接模型,是一种多租户数据库方式,它仍然比纯租户(DB pooled model)更划算和更安全,因为你是用一个单一的数据库,每个租户的数据库模式隔离除外。如果您担心数据分区,此解决方案比之前的解决方案(每个租户一张表)稍微好一些。同样,在应用程序代码配置中跨多个模式进行管理也很简单。



需要注意的一个重要区别是,如果一个数据库中有超过 100 个模式或租户,它可能会导致数据库性能滞后。因此,建议将数据库一分为二(将第二个数据库添加为副本)。但是,这种方法的最佳数据库工具是 PostgreSQL,它支持多种模式,而且不太复杂。最后,这种每个租户一个模式的策略在所有租户之间共享资源、计算和存储。结果,它激起了吵闹的租户,他们使用了比预期更多的资源。



每个租户的数据库服务器



也称为孤立模型,其中每个客户需要一个数据库实例。昂贵,但最适合隔离和安全合规性。这种技术比其他多租户数据库架构的成本要高得多,但它符合安全法规;性能、可伸缩性和数据隔离的最佳选择。此模式为每个租户使用一个数据库服务器,这意味着如果 SaaS 应用程序有 100 个租户,则将有 100 个数据库服务器,这非常昂贵。



当需要 PCI、HIPAA 或 SOC2 时,使用数据库孤立模型至关重要,或者至少找到具有正确 IAM 角色和最佳容器编排的解决方法——Kubernetes 或 Amazon ECS 命名空间——每个租户一个 VPC 和加密到处。



多租户数据库架构工具



  • 带有 PostgreSQL 的 Amazon RDS(最佳选择)。

  • DynamoDB(具有单个共享表的单租户数据库的绝佳选择)。

  • 带有 MySQL 的亚马逊 RDS。

  • 如前所述,GraphQL 在这些数据库中的任何一个前面使用它来提高数据检索速度、开发速度以及 RESTful API 的替代品,这有助于减轻从后备服务器到客户端的请求。



应用程序代码更改



一旦您在每一层都选择了多租户策略,让我们开始考虑代码级别需要更改的内容,即代码更改。如果您已决定为您的 SaaS 应用程序采用 Django(来自 Python),则需要进行一些调整以使您当前的应用程序与数据库和应用程序层的多租户架构保持一致。



幸运的是,Web 应用程序语言和框架能够捕获来自请求的 URL 或子域。在运行时获取此信息(子域)的能力对于处理多租户架构的动态子域至关重要。我们不会深入介绍我们需要在您的 Django 应用程序或任何其他框架中包含哪些代码行,但至少,我会让您知道本节中应考虑哪些项目。



简而言之,Python Django 多租户



  • 添加一个名为 tenant.py 的应用程序:一个tenantAwareModel具有多个池类的类。

  • 如何识别租户:你需要给每个租户一个子域名;为此,您需要修改一些 DNS 更改、Nginx/Apache 调整,并添加实用程序方法 (utils.py)。现在,只要您有请求,就可以使用此方法来获取租户。

  • 确定如何使用主机标头提取租户:(子域)。

  • 管理员隔离



注意: 以前的代码建议可能会根据体系结构而改变。



通配符 DNS 子域:基于 URL 的 SaaS 平台



基本上,每个组织都必须有自己的子域,它们对于识别组织非常有用。对于每个租户,它是一个独特的专用空间、环境和自定义应用程序(至少在逻辑上);例如,“org1.saas.com”、“org2.saas.com”等。此 URL 结构将动态提供您的 SaaS 多租户应用程序,此 DNS 更改将有助于每个租户的识别、身份验证和授权。但是,另一种解决方法称为基于路径的每个租户,不推荐使用,例如“app.saas.com/org1/…”、“app.saas.com/org2\…”等。



因此,此特定部分需要以下内容:



  • 通配符记录应该在您的 DNS 管理记录中。

  • 此通配符子域将所有路由重定向到您的多租户架构(负载均衡器、应用程序服务器或集群端点)。

  • 同样,标有 (*) 的 CNAME 记录指向您的“app.saas.com”或“saas.com/login”。星号 (*) 表示您的应用域的通配符。

  • 作为最后一步,另一个 (A) 记录将您的“app.saas.com”域指向您的 Amazon ECS 集群、ALB 或 IP。



DNS 记录条目



  • “ *.saas.com ” CNAME “ app.saas.com ”

  • “ app.saas.com ” A 1.2.3.4 或 “ app.saas.com ” A(别名)balancer.us-east-1.elb.amazonaws.co



注意:(A) 别名记录是当您使用 AWS 的 ALB/ELB(负载均衡器)时。



使用 NGINX 配置的 Web 服务器设置



让我们转到您的 Web 服务器,特别是 Nginx。在此阶段,您需要配置您的Nginx.conf和服务器块(虚拟主机)。为您的 Nginx Web 服务器设置通配符虚拟主机。确保它是一个别名 (ServerAlias) 和一个包罗万象的通配符站点。您不必为每个租户在 Nginx 中创建子域 VirtualHost;相反,您需要为所有租户设置一个通配符 VirtualHost。自然地,通配符模式将匹配您的子域并相应地路由到您的 SaaS 应用程序文档根目录的正确且唯一的补丁。



证书



只是不要忘记处理租户子域下的证书。您需要将它们添加到 Cloudfront CDN、负载均衡器或您的 Web 服务器中。



注意:此解决方案可以使用 Apache 网络服务器来完成。



遵循 12 因素方法框架



遵循 12 要素方法代表了纯粹的 DevOps 和云原生原则,包括不可变的基础设施、与 Docker 的开发/测试和生产对等、CI/CD 原则、无状态 SaaS 应用程序等。



多租户 SaaS 架构最佳实践



您的 SaaS 平台将如何扩展?



多租户 SaaS 架构最佳实践是:



  • Amazon AutoScaling,带有 EC2 实例或微服务。

  • 使用 Amazon RDS、Amazon Aurora 或 DynamoDB 进行数据库复制。

  • 应用程序负载均衡器。

  • 包括用于静态内容的 CloudFront CDN。

  • 用于所有静态/媒体内容的 Amazon S3。

  • 缓存系统,包括 Redis/Memcached 或 AWS 云中的等效项——Amazon ElastiCache。

  • 为冗余和可用性设置的多可用区。



使用 CI/CD 进行代码部署



另一个需要考虑的关键方面是如何跨租户和多个环境(开发、测试和生产)部署代码发布。您将需要一个持续集成和持续交付 (CI/CD) 流程来简化您在所有环境和租户中的代码发布。如果您按照我之前的最佳实践进行跟进,那将不会很困难。



拥抱 CI/CD 的工具



CI/CD 工具: Jenkins、CircleCi 或 AWS Code 管道(以及 Codebuild 和 CodeDeploy)。



我的建议:如果你想要一个成熟的 DevOps 团队和一个广为人知的工具,那就选择 Jenkins;否则,请使用 CircleCI。如果您想继续专门利用 AWS 技术,请选择 AWS 代码管道。但是,如果您正在寻找合规性、银行或受监管的环境,请选择 Gitlab。



DevOps 自动化:自动化您的新租户创建流程



您如何为每个订阅创建新租户?确定将新租户引入您的 SaaS 环境的过程。您需要触发脚本来启动新的多租户环境或将其附加到现有的多租户架构,这意味着自动设置新租户。考虑可能是在您的客户在您的入职页面上注册之后,或者您需要手动触发脚本。



自动化工具



  • Terraform(推荐)

  • Amazon CloudFormation(信任 AWS CloudFormation 认证团队)Ansible。



注意:确保您在这方面使用基础架构即代码原则。



孤立的计算和孤立的存储



您的架构将如何与其他租户隔离?您只需要确定下一个:SaaS 应用程序的每一层都需要隔离。客户工作流程涉及多个层、页面、后端、网络、前端、存储等等,所以……您的隔离策略如何?



请记住下一个方面:



  • 每个功能或微服务的 IAM 角色。

  • 亚马逊 S3 安全政策。

  • VPC隔离。

  • Amazon ECS/Kubernetes 命名空间隔离。

  • 数据库隔离(每个表/模式/筒仓数据库的租户)。



租户计算容量



您是否考虑过每个环境可以支持多少 SaaS 租户?试想一下,您有 99 个租户,计算/数据库负载几乎达到极限,您是否有支持新租户的现成环境?数据库呢?您有一个特定的客户,希望为其 SaaS 应用程序提供一个隔离的租户环境。您将如何支持与多租户架构的其余部分分离的额外租户环境?你会做吗?有什么影响?只需考虑这方面的一个场景。



租户清理



您如何处理闲置或不再使用的租户?也许是针对任何长时间不活动的租户的清理流程,或者手动删除未使用的资源和租户,但您需要流程或自动化脚本。



最后的想法



AWS 下的多租户架构和 SaaS 应用程序。我们刚刚发现了一个多么好的话题!现在,您了解了从端到端的整个多租户 SaaS 架构周期,包括服务器配置、代码以及每个 IT 层所追求的架构。正如您所注意到的,这个生态系统没有全球解决方案。每个 IT 层都有多个变体,要么完全是多租户,要么是部分租户,要么只是孤岛租户。它更多地取决于您的需求、预算、复杂性和 DevOps 团队的专业知识。



我强烈建议使用微服务 (ECS/EKS)、应用程序中的部分多租户 SaaS 和数据库层。同样,包括云原生原则,最后,采用本文中描述的多租户架构最佳实践和注意事项。话虽如此,首先通过思考如何获得敏捷性、成本效益、IT 劳动力成本以及利用近岸协作模型来集思广益您的 AWS SaaS 架构,这增加了另一层成本节约。



在这方面,Terraform 和 CloudFormation 的自动化是我们最好的选择。更好的是,我们的大多数 AWS/DevOps 项目都遵循 PCI、HIPAA 和 SOC2 法规。如果您是一家金融科技、医疗保健或 SaaS 公司,那么,您知道这种类型的要求应该包含在您的流程中。