TPP多租户隔离之资源清理

本文涉及的产品
推荐全链路深度定制开发平台,高级版 1个月
简介: 利用ajdk实现jvm虚拟化,实现容器业务方案的热部署和资源隔离

  双11的时候TPP引入了ajdk多租户,对场景的cpu进行隔离,参考文章 《TPP稳定性之场景隔离和多租户》。文章中对tpp提供给算法方案的二方服务客户端进行改造,这些共享的二方服务注入root租户的threadfactory,将共享服务与方案进行隔离,共享服务运行在root租户中。 这样算法方案里不会有线程,这样不用担心资源泄漏,因为tpp方案是热部署的,新的方案instance构建并预热,然后替换旧的方案instance,旧的方案classloader没有被引用,系统会自动回收。

  随着场景的增多,除了算法团队,业务工程团队也开始接入,他们都有自己业务相关的二方服务或二方包的需求,tpp维护几千个场景和几百个二方服务是有点力不从心了。任何一个场景提出的二方服务接入或着二方服务jar包升级都需要tpp走发布流程发布glaucus容器,业务迭代速度明显要快于容器的更新速度,这种开发体验是很差的。因此tpp要开放二方服务的开发和接入能力,让场景owner自助完成,这样场景onwer就可以像开发aone独立应用一样去迭代,只是不用关心机器资源,接入层,服务provider等。在tpp容器上实现这种开发模式就需要解决这些问题:
  1.私有的二方服务的热部署,并且与方案有相同的生命周期:为什么不新起容器呢,还是上篇文章讲的,tpp方案本身是热部署的,一般机器运行最多几百个场景,本来一个docker就能满足要变成几百个docker肯定是很浪费资源的。
  2.二方服务有自由的行为,可以开启线程,热部署就要能够清理线程:否则老方案的资源无法卸载,多发布几次方案和二方服务就会出现oom。

  我们的方案是将原来的一层租户架构改成两层租户架构。回顾下原来的一层租户架构:
多租户隔离.png
  这里每个场景是一个租户,它们有自己有界的线程池,设置了cpu shares和cpu quota,mem limit,场景下的所有方案都受所属场景租户限制。ajdk的租户容器可以结束租户创建的所有线程,但是热部署的最小粒度是方案,因此不能直接destroy场景租户,需要把单层租户结构改成两层租户结构,即嵌套cgroup,如下图所示:

场景方案隔离.png
  第一层还是场景租户,用来控制场景的总cpu和mem。在场景租户下为每个方案创建一个方案子租户,目前不限制cpu和mem,因为对于cgroup来说子控制组总资源还是受父控制组的限制,还是匹配原来的场景资源隔离需求。方案租户用来清理方案的资源,方案租户容器生命周期和方案instance同步,方案下线/替换时,系统创建新的方案租户,切流到新方案租户,老方案租户destroy,ajdk会结束老方案的线程,老方案没有被引用会自动回收。容器新的classloader体系如下图所示:

tpp类加载体系.png
  私有插件和方案instance由同一个方案classloader加载,这里不会export,可以放心清理方案资源。对于广泛使用的插件可以升级为系统共享插件,由glaucus classloader加载,export给方案,避免大家都加载一份插件浪费metaspace。

  有了多租户的资源隔离和资源清理,我们将在tpp上构建新的开发模式,开发同学可以以接近独立应用的自由度去开发自己的业务逻辑,随时接自己需要的二方服务,随时变更自己的业务逻辑,不用关心代码跑在哪台机器,不用担心流量上涨需要扩容,不需要自己去接监控。后面我们会逐步改进,做得更完善

  参考文章:
  《TPP稳定性之场景隔离和多租户》
  《JVM虚拟化 重新定义Java容器热部署的资源管理机制》

目录
相关文章
|
5天前
|
机器学习/深度学习 人工智能 安全
SentinelOne监测中隔离的文件,人工如何取消隔离
SentinelOne 的 Agent 在终端设备上实时监测系统的活动,包括文件操作、网络通信、内存访问等, SentinelOne 使用人工智能和机器学习技术对监测到的活动进行行为分析,识别潜在的威胁,包括已知的恶意软件和未知的零日攻击。 基于行为分析和实时监测,SentinelOne 快速识别出可能的威胁,并进行准确的威胁分类,包括病毒、勒索软件、恶意脚本等。 SentinelOne 可以自动采取响应措施,如隔离受感染的设备、终止恶意进程、删除恶意文件等,以尽快减轻威胁带来的影响。当技术人员发现隔离的文件没有危害时,可以手动隔离。文章阐述了怎么手动撤销的过程。
118 0
SentinelOne监测中隔离的文件,人工如何取消隔离
|
10月前
|
SQL 存储 SpringCloudAlibaba
浅析SaaS多租户系统数据隔离实现方案
多租户问题,其是一种架构设计方式,就是在一台或者一组服务器上运行的SaaS系统,可以为多个租户(客户)提供服务,目的是为了让多个租户在互联网环境下使用同一套程序,且保证租户间的数据隔离。从这种架构设计的模式上,不难看出来,多租户架构的重点就是同一套程序下多个租户数据的隔离。由于租户数据是集中存储的,所以要实现数据的安全性,就是看能否实现对租户数据的隔离,防止租户数据不经意或被他人恶意地获取和篡改
1090 0
|
10月前
|
NoSQL Redis 容器
kubelet如何避免节点频繁切换“资源不足”和“资源充足”状态?
kubelet如何避免节点频繁切换“资源不足”和“资源充足”状态?
68 0
|
9月前
|
安全 芯片
隔离那些事
隔离那些事
|
资源调度 安全 Linux
如何通过 Cgroups 机制实现资源限制
如何通过 Cgroups 机制实现资源限制
374 0
如何通过 Cgroups 机制实现资源限制
|
存储 Kubernetes 网络协议
k8s 【策略】【资源管理】ResourceQuota(1)
k8s 【策略】【资源管理】ResourceQuota(1)
k8s 【策略】【资源管理】ResourceQuota(1)
|
Kubernetes 调度 Perl
k8s 【策略】【资源管理】ResourceQuota(2)
k8s 【策略】【资源管理】ResourceQuota(2)
|
存储 安全 API
2.4.1 资源管控层 资源管控软件|学习笔记
快速学习2.4.1 资源管控层 资源管控软件
298 0
2.4.1 资源管控层 资源管控软件|学习笔记
|
Kubernetes Cloud Native 安全
Koordinator 0.6:企业级容器调度系统解决方案,引入 CPU 精细编排、资源预留与全新的重调度框架
经过社区多位成员的贡献,Koordinator 0.6 版本正式发布。相较于上一个版本 0.5,新版本进一步完善了 CPU 精细化编排能力,更好的兼容原生用法;支持了资源预留的能力(Reservation),补齐了调度原子语意缺失;发布了全新的重调度框架,支持用户灵活的扩展自定义插件。这些特性源自于阿里巴巴内部的生产实践,并结合上游社区规划思考,为用户带来标准、强大、灵活的调度解决方案。
953 0
Koordinator 0.6:企业级容器调度系统解决方案,引入 CPU 精细编排、资源预留与全新的重调度框架
|
缓存 监控 Linux
CPU 隔离:管理和权衡
SUSE Labs 团队探索了 Kernel CPU 隔离及其核心组件之一:Full Dynticks(或 Nohz Full),并撰写了本系列文章..
276 0
CPU 隔离:管理和权衡