双11背后的技术(上)最后冲刺

zidea · · 554 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

 阿里巴巴的主要业务包括在线交易,支付和其他业务,下图中列出阿里巴巴中采用的一些开源项目。

阿里巴巴基于服务进行开发系统,服务间通过 RPC 进行通讯。要应对高并发,对于阿里的挑战。

多租户的看起来是不是有点像微服务,在淘宝的个人推荐上应该多租户

每一个 java 的线程对应一个native 线程。我们通过control group 来分配线程。

我们汇总一下阿里对

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

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

2.GCIH :通过 GCIH 划分出来部分内存,自主管理,这些这部分内存对于 GC 是不可见的。管理堆内存,让一些内存自主管理对 GC 是不可见的。这样来实现缓存数据机制。

3.Wisp :专注于异步编程。每一次用户请求都是,都是一次等待,都是一次线程阻塞。

异步编程是通过线程间切换来实现的,其实线程间交互数据,在底层是一种很费资源的解决方案,因为线程间的通讯是需要切换上下文,早在 Linux 中就不提倡使用线程池来实现异步编程。阿里采用协程代替线程来进行异步编程。通过协程来做一些阻塞的操作。有关于协程的概念。

如果你有 Python js es6的背景,尤其是你要是有 golang 的经验就跟不难理解,go 语言是处理高并发的高手,Go语言从语言层面上就支持了并发,这与其他语言大不一样,不像以前我们要用Thread库 来新建线程,还要用线程安全的队列库来共享数据。强大武器就是  goroutine和channel

。在新贵的 kotlin 中也对协程有良好的支持,协程相对于线程开销要小的多。java 也是也有自己的并发解决的方案。但是通过线程来解决高并发的问题,不仅是开销的问题,而且是有瓶颈的,当分配线程达到一定数量,即是再分配更多的线程也不会有明显的效果。

本文来自:简书

感谢作者:zidea

查看原文:双11背后的技术(上)最后冲刺

入群交流(和以上内容无关):Go中文网 QQ 交流群:729884609 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

554 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传