• 路特软件戚俊:云原生助力SaaS类业务租户高效隔离


    42c5d91ffd484aba377c2f3ba2502443.gif

    嘉宾 | 戚俊   整理 | 吴林锋

    出品 | CSDN云原生

    2022年6月21日,在CSDN云原生系列在线峰会第10期“华为云HCDE专场暨分布式技术峰会”上,南京路特软件CTO戚俊针对云原生如何帮助SaaS类业务租户高效隔离进行了分享。

    85527b348f39d1ab1828aa390e8e4372.png

    租户隔离的层级

    不论是SaaS类或是PaaS、IaaS类的厂商,租户隔离都是一个恒久的命题。从早期机房IDC时代到云计算时代、云原生时代,租户隔离一直扮演着商业模式命题人的角色。不同的隔离方式、隔离层次都会使商业模式发生改变。

    IaaS层是最早的云厂商的初始阶段,它主要隔离所有用户的存储、算力、带宽、流量等,中后期的PaaS层隔离专用的服务池、服务的数量等。如今的SaaS层隔离的则是对展现量、数据量、用户量等进行隔离。我们会发现,从下向上距离数据越来越远,距用户越来越近。

    为什么要做租户隔离呢?

    在数据智能化改造的过程中,如果业务太过离散,公司的运营成本难以降低。当客户的服务成本变高后,公司也不能保证长期地为客户生产价值。所以在这样的背景下,服务厂商想尽一切办法节约成本、压缩预算,同时又要保证给客户带来更好的服务、更优秀的技术以及更好的用户体验。所以业务的集中化和规模化就显得尤为必要,与之而来就产生了租户隔离的需求。

    e5150dc39efa4c566331a925325c802a.png

    业务集中化和规模化优势

    我们因为“业务集中化和规模化”而产生租户隔离的需求,那么“业务集中化和规模化”会带来哪些优势呢?主要有以下四点。

    • 降低运维成本。所有的业务在同一个系统环境下、网络环境下,从而降低了业务部署和运维的复杂程度、运维人员数量和成本。

    • 加强数据汇聚能力。集中化天然带来数据的强汇聚属性,可以直接在业务层完成数据的汇入,也可以在底层进行统一收集,更好的建设自己的数据仓库。

    • 强化敏捷开发效能。因为不存在环境差异性,所以在开发过程中没有历史包袱,能够更好地规划迭代和提高开发效率。

    • 削峰填谷减低业务成本。通过集中资源配置,形成具有一定规模的资源池。单个业务很难触摸到资源/性能天花板,从而可以用更少的成本支撑更多的业务。

    通过租户隔离改变原本的商业模式,也带来以下三个收益点。

    • 收费分级。租户隔离后进行精准计费,从而实现相同业务、不同体量的租户支付不同的费用。

    • 服务分级。针对不同体量的租户开通不同的功能清单、服务清单,实现相同业务、不同租户所用功能的差异化。

    • 个性化增值。围绕不同租户的留存数据进行个性化的增值服务,比如:个性化分析、智能推荐、 BI服务等。

    ff2c994ca5866c2ad31eb621fe308fe0.png

    租户隔离的难点

    难点1:业务波动难以控制 

    在构建租户隔离模式时,最常见的一个问题是业务波动难以控制。举个例子:我们将客户的业务部署上云,使用同一套服务器集群部署。由于每个用户业务的用量都较为均匀、容易估算,所以其平时用量和持续用量均具有记录的临界点。

    一旦遇到突然的实时热点爆发,内容生产及传播操作会变多。这种情况会使业务用量的峰值瞬间提升,产生业务波动,并且无法提前预测。

    针对此种情况,我们提炼了一个公式:每个租户(P)的基准用量(A)为1,资源(R)提供量为10,支持10个租户的业务。

    R = A * P

    但“按比例超售(U≤1)”是几乎所有平台厂商的利润来源之一,所以我们实际支撑了15家客户,因为不可能所有用户的用量同时“打满”,从而产生了差价,也就是利润。

    R = A * P * U

    在这个模式下,最显著的问题是:当U的值越接近A,风险越小,当U的值负偏离A越多,风险越大。所以如何评估U的值,是平衡风险与收益的要点,也是我们在构建租户隔离模式上遇到的第一个难点。

    难点2:无法实现精准计费

    在构建租户隔离模式上,我们碰到的第二个难点是无法实现精准计费。

    举个例子:假设我们的系统是一个SaaS化的电商平台,承载了成千上万家店铺,每家店铺都会在平台上存图片、视频、商品信息,产生数据存储的同时也会因为用户来访问而产生带宽跟流量成本。同时,每一家店铺每天会产生不同的用户访问量、不同的业务压力。

    那么在这种情况下,我们应该如何获取每一家店铺的数据存储成本?业务压力成本?每天、每月、每年的流量带宽成本呢?

    若能精确获取以上数据,不但可以帮助我们分析用户在店铺中是否做了正向产出,还可以分析每一家店铺所消耗的公司的成本,以此帮助公司完成更详尽的商业决策,这是我们遇到的第二个难点。

    806454bd30529eead9a60d900e6cfa52.png

    云原生时代给我们带来了什么

    云原生时代,我们通过容器技术来改造业务。因为容器技术的广泛运用,我们拥有了:

    • 更细的资源颗粒——可以在原本的VM级之下再细分一层资源;

    • 更标准的交付产物——容器镜像的出现,树立了新的交付标准;

    • 更简单的部署模式——容器部署脱离了环境制约,简化了部署流程。

    随着容器编排及管理技术的提升,我们拥有了:

    • 分布式业务架构——通过容器集群模式实现业务分布于多机,真正做到业务的均匀;

    • 弹性缩扩容策略——无状态的业务可以动态响应缩扩容策略,快速适应业务节奏;

    • 业务模板式创建——通过容器编排模板,可以快速部署一整套业务。

    c5a49148e7d42d68737716e176eda646.png

    通过云原生架构改造隔离逻辑

    业务承载方面:从单一业务系统承载改造为按租户区分,部署不同的无状态容器服务组。

    数据层面:从单一对象存储存放改造成按租户去区分,不同的Bucket或在Bucket中开辟不同租户的前缀去进行存储。

    流量分析方面:原本是集中入口,无论是单机部署还是多机部署,其流量入口都是统一的,集中入口没有办法分析不同租户的流量情况。通过K8s集群负载区分不同的域名来路,并汇聚访问日志到大数据平台进行分析。

    操作方案——平抑业务波动

    之前的难点中,我们分析了大多数SaaS业务出现业务波动的原因在于“超售”导致的资源无法及时响应的问题,并得到以下公式:

    R = A * P * U

    上面公式中的“P(租户数量)”、“ U(超售比例)”是无法改变的。那么我们的思路就是:

    • 使用容器集群承载我们的业务,比如使用华为云的CCE服务构建或管理Kubernetes(K8s)集群;

    • 通过部署容器监控服务,监控“A(租户基 准用量)” ;

    • 当一定比例的租户用量大于阈值时,触发容器集群扩容;

    • 通过容器调度策略,自动均匀排布容器到各节点,实现波动平抑。

    有两种方式在华为云上进行业务资源弹性缩扩容,实现平抑业务波动。

    第一种是使用华为云CCE自带的“节点弹性缩扩容”功能,第二种是结合华为云的AOM+AOS服务,实现对自建K8s集群进行缩扩容。

    方式一: 针对华为云上的CCE容器集群,可以直接使用CCE自带的“节点弹性缩扩容”功能进行CPU及内存分配量指标监控进行节点缩扩容。

    缺点:只能按CPU/内存的分配量进行缩扩容,不对业务实时资源消耗进行缩扩容,应变能力差。

    方式二:针对业务过程中的突发性能问题导致的扩容,需要使用华为云AOM服务实时监控集群资源的占用情况,在到达阈值后触发AOS服务进行集群节点按模板扩容。

    缺点:需要自己编写AOM+AOS+CCE弹性脚本。

    操作方案——实现精准计费

    在之前的难点中,我们想要清楚地知道每一家店铺的数据存储成本,业务压力成本,每天、每月、每年的流量带宽成本,从而帮助公司去实现商业决策,具体的操作思路如下。

    • 使用容器集群承载我们的业务,比如Kubernetes(K8s)。

    • 按租户区分,部署不同的无状态容器服务组,不同的租户级使用不同的资源量级。容器架构可以很好地进行限制。

    • 按租户区分,不同的Bucket或在Bucket中开辟不同租户的前缀进行存储,收集对象存储的用量日志到大数据平台。

    • 在K8s的Ingress层开启全量日志,区分不同的域名来路并汇聚访问日志到大数据平台。

    • 最终在大数据平台进行离线分析,实现T+1级别的用量统计。

    根据上述思路,我们使用华为云相关服务构建我们的精准计费能力,主要涉及到的服务有:OBS、ELB、LTS、DGC这4个服务,需要通过流程将这几个服务的数据串联起来,并进行计算。

  • 相关阅读:
    【封装--限定符private--包】
    数据结构与算法_二叉树(BST树)_面试题总结
    【车载开发系列】S19/HEX/BIN文件解析
    端到端自动驾驶:终局还是误区?
    231022|推荐系统1-推荐框架注释
    京东面试官:在Mybatis中 Dao接口和XML文件的SQL如何建立关联?
    LVS 调度器 nat和DR模式
    reactnative使用七牛云上传图片
    3.旅行家-完全背包
    13.罗马数字转整数
  • 原文地址:https://blog.csdn.net/m0_46700908/article/details/125760817