saas领域什么意思 saas是什么意思


你为什么需要SaaS?软件即服务(Software-as-a-Service,SaaS)是一种灵活的软件分发模式,可以由少至一人、多至数千人的组织来运营 。云服务的出现让任何人都可以独立运行自己的SaaS,并在此基础上建立免费的增值业务 。
与其他类型的软件服务相比,其系统设计相对简单 。但是,由于没有合适的基准架构,如果我们在设计SaaS时没有认真思考,结果可能会变得一团糟 。在我看到的一些例子中,SaaS平台最终变成了一个庞大但脆弱的单一Web应用,其中充满了各种各样的功能 。
本文的目的是为您提供一个参考架构,以实现SaaS的可伸缩性和可维护性 。
SaaS平台的要求产品需求用户和用户组的访问控制 。向用户和组织提供订阅层,其中每种订阅类型都可以访问一组产品 。托管内部管理工具的能力 。可扩展的功能 。我们应该能轻松添加新的产品和功能集 。
设计目标隔离的服务带来清晰的责任归属与点分离 。减小任何更改的影响半径,比如说分析仪表板中的错误不应该影响管理仪表板 。隔离运行 Web 应用程序 。每个 Web 应用程序都提供一组相关的功能来服务我们的客户 。在大型公司中,每个 Web 应用程序都可以有自己的专门团队来构建和运行 。
解决方案:隔离和重用将服务隔离成逻辑组件的设计可以使我们的SaaS更具可伸缩性 。我们应该改进我们的架构,并在扩大规模时打破常规:规模越大,架构就越容易管理 。即使只有一个孤独的workshop开发人员,他也可以轻松运行和管理多个服务 。尤其是现在我们有了各种可以编排微服务的云服务,这种事情就更容易做了 。
因为我们计划在SaaS平台上运行这些功能Web应用程序,所以我们应该首先考虑“我们可以重用什么?”这个问题 。
隔离;隔离孤立的Web应用程序是通过将相关功能组合在一起而形成的Web应用程序,或者是代表一个产品的一组Web应用程序 。具体我称之为“产品Web应用”,后面会进一步介绍 。
Web应用程序中相关功能的分组例如,所有的“分析报告功能”可以合并到一个独立的Web应用程序中,该应用程序将由一个在构建分析报告产品方面具有相关领域知识的专门团队来构建和维护 。在大公司中,每个产品Web应用程序都有自己专门的团队来构建和运行 。
内部和公共(可选)您的产品Web应用程序也可以分为两个部分:内部部分和公共部分 。在与内部公共部分明确区分后,可以在自己的私有网络中路由一套专用的安全管理工具 。
这些服务在内部和公共区域的代理由“路由服务”处理,这将在下面的章节中描述 。
把某人 。身居要职这些是由不同功能的Web应用程序及其相应的服务共享的通用功能 。每个功能Web应用程序都需要使用下面列出的这些功能 。
包裹这些是构成我们SaaS的逻辑组成部分 。
路由服务每个请求都需要被路由到正确的页面 。当用户访问yourWebsite.com/your-path,时,您的路径需要将用户转到相关的请求页面或功能Web应用程序 。路由确保用户获得他们请求的内容 。
在本文的示例中,我们将需要路由服务调用另一个服务来获取路径和Web应用程序URL映射,以及所需的权限 。
这些映射应该在运行时更新 。例如,在需要引入新页面或需要更改用户权限时更新,而不发布 。
路由还负责内部或公共产品Web应用程序 。它可以部署到两个独立的运行实例中 。
以及公共和私有路由服务设置的高级设计 。
【saas领域什么意思 saas是什么意思】实现技巧:Node.js的http-proxy-middleware或者Nginx的Reverseproxy是两个可行的选择 。如果您不需要在运行时以编程方式从其他服务检索路径、URL和权限,后者是理想的 。更多信息请参考下面的“Web应用程序仓库”一章 。
产品Web应用程序每一个产品Web应用都是通过一个内部可访问的URL公开的,比如https://my-product-app-1 . my domain . local,有些是路由服务路由的,供订阅者访问,有些还是内部访问 。
由路由服务路由的产品Web应用程序
在后台,这可以是单个或一组具有Web前端的微服务 。这些Web应用彼此独立,有自己独立的代码库、支持服务和部署管道,理想情况下,它们归不同的团队所有 。在SaaS平台,他们的分组模式与他们所有团队的结构一致 。
这样,我们可以将大型Web项目分解成许多可管理的单元 。把这个模式想象成把一块大牛排切成许多小块 。产品Web应用程序包含一组相关的功能,这些功能不应与其他Web应用程序重叠 。
实现提示:产品Web应用可以是任何Web应用,比如common Express、Node.js和React stack 。使用具有可重用微前端(如马赛克或开放组件)的设计系统可以使您的产品具有一致的外观和体验 。
Web应用程序存储库该服务负责保存多个团队拥有的Web应用程序的记录 。该服务调用Web应用程序存储库来获取与所请求的路径相对应的Web应用程序的URL(匹配一个条目) 。
路由服务检索Web应用程序URL及其关联路径 。
下面是一个Web应用程序存储库的例子来说明它的功能 。
基于角色的访问控制(RBAC)服务将提供权限信息,帮助我们检查登录用户是否有权访问产品Web应用程序 。
如果要维护的产品Web应用程序条目数量很少,这里可以使用简单的路由和硬编码的散列映射代理 。
实现技巧:这可以是一个具有自己的Web管理UI的RESTful服务,也可以是一个简单的基础设施,比如位于路由服务中或来自对象存储的代码配置文件(比如AWSS3) 。具体实施将取决于所需的规模和可配置性 。如果想继续考虑服务实现,可以使用Java、Go或C#搭配RDBMS或NoSQL数据存储 。
对于这项服务,验证过程非常重要 。如果路径或Web应用程序URL的配置不正确,可能会影响服务的可用性 。如果您不能确定要支持的产品数量,请使用进化原型法 。您不必在开发周期的早期构建这个服务,因为一开始一个简单的配置文件就足够了 。
证明应该有一个跨服务共享的专用认证服务 。JSON Web令牌在这里可以派上用场,因为我们可以通过头轻松地跨多个服务传递令牌和其他有用的用户信息 。
可以从路由服务或产品Web应用程序调用认证服务 。如果从产品Web应用程序调用身份验证服务,产品Web应用程序的所有者可以灵活地对他们想要保护的任何页面进行身份验证 。这种灵活性允许服务所有者管理公共页面,例如用户注册页面 。该方法还减少了在路由服务中执行的逻辑 。
产品应用程序调用的认证 。
或者认证过程可以在路由服务中处理 。从安全性的角度来看,这使得认证过程更容易审计,因为我们不需要检查每个产品Web应用程序页面 。这也意味着,如果一个网页需要向公众开放,就应该采用某种形式的白名单 。这是可配置性的另一个折衷 。
路由呼叫认证 。
实现技巧:AWSCognito、Auth0或任何JSON Web token (JWT)认证服务 。
基于角色的访问控制(RBAC)验证用户身份后,我们需要能够回答以下问题:
是否允许登录用户访问此页面或他们试图访问的信息?可能的答案是:
是的,用户 Alice 属于组织 A,该组织有权访问内容 A 。否,用户 Bob 属于组织 B,该组织无权访问内容 B 。
您想允许登录用户执行此操作吗?可能的答案是:
是的,用户 Alice 具有管理员角色,该角色具有删除已注册用户的权限 。否,用户 Bob 只有成员角色,该角色对所有内容只有只读权限 。
RBAC帮助我们回答上述问题,以便我们的Web应用程序可以允许或撤销用户执行的特定操作 。
Web应用程序从RBAC服务中检索权限信息 。
下图显示了使用RBAC对用户进行身份验证并检查其权限时发生的事件流 。
以下伪代码说明了如何在特定用例中使用RBAC服务 。
检查用户是否有权查看该页面 。
if (userHasPermissionToViewPage(userId)) { showPage();}else { showNoPermissionError();}
检查用户是否有权执行某项操作 。
复制代码
if (userHasPermissionToPerformAction(userId)) { showButton();} else { doNothing();}
实现提示:与其他服务相比,该服务的流量预计会更高,这取决于您的权限粒度 。您可以考虑使用类似的Web应用程序存储库:Java、Go或C#,带有RDBMS数据存储和缓存系统 。用户权限管理需要一个Web管理ui 。
高阶设计下图显示了组件在运行时如何交互 。
这个解决方案的好处包括明确的所有权、公共功能的重用和点分离 。
高阶序列下图显示了路由服务将用户路由到请求页面的顺序 。当从Web应用程序存储库中检索产品Web应用程序详细信息时,会出现这些序列 。
选项1在产品Web应用程序中调用身份验证 。
在产品Web应用程序中调用身份验证 。
选项2在路由服务中调用身份验证 。
在路由服务中调用身份验证
将Web应用程序资料档案库、RBAC和身份验证页用作Web应用程序 。Web存储库、RBAC和身份验证服务需要自己的Web UI来管理数据或接收用户输入 。Web应用程序存储库、RBAC和认证服务都有自己的Web应用程序 。使用另一个具有管理UI的Web应用程序来管理对Web应用程序的访问权限 。
一些Web应用程序被用作其他组件的UI 。
Web应用程序存储库UI允许我们管理具有所需权限的路径和Web应用程序URL 。
RBAC用户界面用于管理用户、组织、角色和权限 。
身份验证服务的前端UI(登录页面)也部署为Web应用程序 。
技术描述服务通过 HTTPS 调用进行通信 。服务是内部的,但某些 Web 应用由路由服务公开提供 。这里没有详细介绍冗余的信息 。你可以简单地在构成 SaaS 平台的服务之前添加一个负载均衡器,并在多个区域中运行它们 。
长期改善这里有一些指导方针,应该记住,以帮助您成功地操作SaaS平台 。
1.将技术文件视为产品的一部分 。关键是让团队能够通过好的文档来管理产品Web应用,并充分利用可用的工具 。良好的文档可以最大限度地减少团队反复询问与SaaS平台相关的问题的需要 。
2.为工程师和同事提供便利您可以在RBAC和Web应用程序存储库的Web UI管理工具之上开发一个NodeJS/React模板,其中包括现成的RBAC和身份验证客户端,从而最大限度地减少向SaaS平台添加Web应用程序所需的工作 。
通过这种方式,您的工程师或您自己可以轻松地从该模板创建新的Web应用程序,而无需花费大量精力将其集成到平台中 。
3.工程设计审查糟糕的代码可能会浪费几天甚至几周的开发时间,但是相比之下,糟糕的架构决策可能会浪费几个月到几年的时间 。对于大公司来说,工程设计审核可能更容易推进;但是如果你自己是一个开发者,你也可以从社区里你认识的其他工程师那里得到反馈 。
花合理的时间提前准备工程设计文件,并在工程设计评审时得到反馈,可以节省你很多时间 。您应该验证软件设计假设,并要求其他工程师为您设计的软件架构找到尽可能多的漏洞 。
而我转发这篇文章,私信我“获取信息”,就可以免费获得价值4999元的InfoQ迷你本!

    推荐阅读