技术干货程序员

双 11 背后的技术(1) 多租房

2018-11-11  本文已影响7人  zidea

双 11 这一场购物的盛宴,也是一次技术的创新。我们一起了解一下这一天上亿的交易量是如何顺利完成。

双 11 购物的盛宴

在 2017年的双十一,统计数据表示每秒交易量达到 32.5万,每秒的支付次数在峰值达到 25.6万次。

2016 双 11 交易量统计

    在阿里,每个业务团队都比较独立,阿里这么多年做下来,一直强调业务的垂直化。目的在于团队可以只专注做好自己的产品,而不会受到其他团队的干扰,这样有利于快速发展。每个团队都会为明天发展,而有计划地预留些机器以便扩展,但随着市场不确定,可能会有这样情况,有的团队的机器会有空闲,而有的团队的机器使用可能会相对地紧张。

阿里业务架构图

阿里巴巴多半应用系统都采用 Java 开开发,下图中列出阿里巴巴中采用的一些开源项目。

阿里巴巴采用的开源项目

大家都知道在 tomcat 是可以跑多个应用,但是问题这些应用如何使用系统资源,如 cpu 和 内存是我们无法控制的,而且相互隔离的。如果我们在1同一个 JVM 跑不同应用就能更好地共享资源来。阿里就此修改 JVM 为多租户共享。多租户的概念也是linux 技术就出现过。每一个租户都是一个 tenacy。每一个应用都运行在一个 tenacy 上,然后通过配置来获得 cpu 和内存资源。那么 tenacy 是如何被分配到 cpu 资源和内存资源的呢?这里我们需要了解 JVM G1 和 cgroup 技术,也就是接触 G1 对 slab 分配阿里实现为每个 tenacy 分配固定资源。

多租户

Multi-tenant 有关多租户之前我们已经介绍过。那么多租户具体采用那种技术来实现的呢。在每个租户的线程也是如何分配和隔离的。

多租户结构图

多租户,可以为每个租户分配一定内存和CPU资源。G1 是才用分代算法,按年轻代和老年代来划分内存。G1 的特点是讲内存等分为若干小的区域 region , 包括 Eden survivor old。通过改造我们让每一个租户都被分配到一定内存。G1 会安租户来管理堆内存,进行垃圾回收。所以每一个租户是独立的GC。好了,我们看一下每个租户是如何获取自己的 CPU 资源。概述一下,每一个 java 线程都会对应到 native 线程。然后用 control group 管理 native 线程来控制如何分配资源给租户。

多租户是如何分配内存

阿里在淘宝个人平台和推荐都使用多租户技术来实现。最后请大家关注我的公众号获取更多更快的信息。

我的公众号
上一篇下一篇

猜你喜欢

热点阅读