阿里手持50万奖金等你,是时候展示真正的技术了!

对于程序员来说,什么才最为重要

∙一笔高达50万的巨额奖金?

∙一个和千万程序员一同赛跑的游戏?

∙一次挑战双11万亿级服务调用的机会?

场主认为,敲码路上,我们所追求的是不断进阶的自我提升!

4月26号,2018云栖大会南京峰会上,阿里巴巴研究员林昊正式发布了第四届阿里中间件性能挑战赛。

这是首次把赛题设置在开源背景上,旨在让更多技术开发者参与其中。

挑战赛以开源项目为背景,核心技术为Dubbo和RocketMQ,目的是通过大赛向技术爱好者们传达开源精神。

林昊在发布中表示,“对于开发人员来讲,很多工作都使用了开源的东西,开源对整个世界也产生了非常大的影响。对阿里来讲也同样,阿里巴巴也同样使用了开源的软件,在这个过程中,我们结合阿里的场景,对整个开源的产品进行了很多的改进,也不断开始回馈到社区。”

而且!此次大赛还收到了JimJagielski (Apache基金会联合创始人)的祝福哦!!!

感兴趣的同学可以直接长按以上二维码或戳中以下链接进行报名了!

https://tianchi.aliyun.com/markets/tianchi/aliware2018contest?spm=5176.100065.5490641.1.31fe67b7UN1OQ0(若未能跳转,烦请复制链接至浏览器打开)


从2017年起,阿里巴巴开源的步伐正在加速。

2017年9月,RocketMQ在Apache毕业,成立了Apache顶级项目(TLP)。

10月份,OpenMessaging发布,分布式消息中间件、流处理领域的应用开发标准,目前已正式入驻Linux基金会,这也是国内首个在全球范围内发起的分布式消息领域国际标准。

11月,社区突然热闹起来,Dubbo快速更新,引发了非常广泛的关注。

今年,Dubbo进入了Apache,目前正在孵化期。

Apache基金会联合创始人 Jim Jagielski 表示:“ Apache顶级项目RocketMQ是一个极其强大且具有变革性的软件项目,众多公司都是它的深度用户。Dubbo目前正在Apache软件基金会内孵化,具有巨大的潜力。”

赛题深度解析

赛题解析

了解 Dubbo 的朋友们都知道,Dubbo不仅仅是一款高性能的 RPC 通讯框架,更是一套完整的微服务解决方案——服务注册与发现、负载均衡、服务治理等,这些都是我们耳熟能详的能力。但是 Dubbo 也有着天然的不足,初赛的题目便由此而来。

初衷

Dubbo 一直致力于为 Java 应用提供高效、稳定和可用于生产环境的RPC通讯能力。在不使用 RESTful 接口的情况下,用户很难将 Dubbo 与其它语言实现的系统对接起来。

因此本次比赛将打破语言的藩篱,参赛团队可以尽情选取你最中意的技术,主流的也好,非主流的也罢——We don't care——让 Dubbo 在多语言的方向上迈出第一步。

“ 提到 Dubbo 就不能不说微服务,而言及微服务就一定有 Service Mesh 的一席之地。”

传统的微服务向我们展现了服务化的未来蓝图,也提供了诸多方法论和最佳实践指导我们完成架构的变革。但是显然实施过微服务的朋友们都一定清楚,这是一个异常复杂且充满了不确定性的改造过程。

将单体系统剥离、引入服务化组件(如果 Dubbo 不是你的第一选择,你更有理由关注本次比赛了)、将内部调用转化为远程调用、解决因为调用远程化和分布化而带来的各种次生问题(网络问题、安全问题、状态管理问题、一致性问题等等)。

在拥有复杂系统的组织内部,这样的改造不亚于梦魇。想想看要把各种不标准的 Java 应用、PHP 应用、Python 应用等全部打通且服务化,不是你在做梦,就是客户在做梦。

可这样的梦境就是我们要面对的现实,而Service Mesh 无疑是梦境架构师递给你的一根救命稻草。简言之,Service Mesh 另辟蹊径,在不深入服务内部的情况下,以 Agent 的形式与服务共生,并由 Agent 提供一切微服务所需要的能力。

正如其名称所揭示的那样,Service Mesh 就如同一张网格,将各种服务网罗在其下。这次初赛的题目就是希望参赛选手编写一个高性能的 Agent 实现,让 Dubbo 融入 Service Mesh 这张大网。

场景

在本次比赛中,并不需要实现一套完整的Service Mesh 框架,因此我们对场景进行了限定。

得益于 Docker 提供的容器化能力,让我们可以很方便的模拟出想要的场景。如图所示,整个场景由 5 个 Docker 实例组成(蓝色的方框),分别运行了 etcd、Consumer、Provider 服务(绿色的方框)和 Agent 代理(红色的圆圈)。

Provider 是服务提供者,Consumer是服务消费者,Consumer 消费 Provider 提供的服务。Agent 是 Consumer 和 Provider 服务的代理,每个 Consumer 或 Provider 都会伴随一个共生的 Agent。etcd 是注册表服务,用来记录服务注册信息。

从图中可以看出,Consumer 与 Provider 之间的通讯并不是直接进行的,而是经过了 Agent 的中转。这看似多余的一环,却在 Service Mesh 的架构中扮演着举足轻重的角色。

首先,Agent 需要实现负载均衡的能力。在图中,蓝色方框的大小代表了容器的性能。我们可以发现,一个Consumer 实例的性能是三个Provider 实例性能的总和,而且三个 Provider 的性能又是以1:2:3的比例分配的。假如整个系统性能是60,则 Consumer 占30,Provider(small) 占 5,Provider(medium) 占10,Provider(large) 占15。因此任何一个 Provider 服务的性能都比 Consumer 要小,Agent 必须做到负载均衡才能保证任意一个 Provider 服务不会被压垮。

第二,Agent 需要实现服务注册与发现的能力。服务注册与发现是微服务的核心能力,Consumer Agent 具体要访问哪一个 Provider Agent 不是在配置文件中写死的,而是动态发现的。简单来说,当Agent 启动的时候,需要将自己的信息写入 etcd 注册表,在服务调用发生的时候,再从 etcd 中读取相关的注册信息,这个过程就是最简单的服务注册与发现。

第三,Agent 需要实现协议转换的能力。Service Mesh 的一大特色就是可以实现不同语言、不同框架、不同协议间服务的互联互通,靠的就是其协议转换的能力。在比赛设定的场景中,Consumer 使用 HTTP 协议,而 Provider 使用 Dubbo 协议,在没有 Agent 帮助的情况下,他们之间是无法通信的。

作为 Service Mesh Agent, 其实还有很多可以实现的功能,如流量控制、服务降级或熔断、安全认证等等,但以上三点是本次比赛必须做到的能力,其他能力不做要求。

另外我们还要考虑 Agent 的通用性,一个不具有通用性的 Agent 是没有商业价值的。除此之外, Agent 占用的系统资源应该尽量小,而且不和共生的服务争抢资源,否则“皮之不存,毛将焉附”。如果服务失去了响应,那么 Agent 的性能再好也没有存在的意义了。

跑分

跑分环境是由一台 4 核 8G 的施压机和一台 8 核 16G 的被压机组成。所有 5 个 Docker 实例均运行在被压机上。每个项目的每一次跑分会独占一台被压机。流程大致如下:

1.准备跑分环境,创建并锁定工作区

2.根据提交的地址,从镜像仓库中拉取镜像

3.验证 Provider、Consumer 及启动脚本文件的签名,以妨被篡改

4.启动 etcd 实例,并验证服务可用性

5.启动三个 Provider 实例,并验证服务可用性

6.启动 Consumer 实例,并验证服务可用性

7.以最高并发数对系统进行预热

8.分若干次不同的压力水平,对系统进行压力测试,并记录 QPS 值

9.取最优的 QPS 作为最终的跑分结果,并上报给天池系统

10.按顺序依次停止 Consumer 实例、三个 Provider 实例和 etcd 实例

11.清理 Docker 实例及镜像

12.收集日志并上传到 OSS

13.解锁工作区,清理环境

因为本届比赛不限语言、不限技术,因此需要一种手段对选手的运行环境进行隔离。借助 Docker 镜像,参赛选手可以随意安装运行时环境、添加组件库、并定制 Agent 的启动脚本。

但需要注意的是:

“ 因为 Provider 和 Consumer 服务与 Agent 是共生的,因此他们都是被打到同一个 Docker 镜像中的。”

我们在赛题设计的时候已经对代码进行了充分的隔离,以保证选手只需要关注赛题允许修改的部分——与 Agent 有关的内容。

但不管怎样,由于构建 Docker 镜像的主动权在大家手里,就势必会有篡改 Provider 和 Consumer 及其启动脚本的可能性存在。

所以,本着公平的原则,在跑分流程中增加了对相关文件验证签名的过程,如果签名不通过,将失去本次评测机会。

优化

因为优化过程是本次比赛关注的重点,因此不能做过多的展开,仅仅提供几个参考的方向

1.使用协程。协程可以理解为轻量级的线程,可以节约因为线程切换而造成的性能损失。

2.使用异步通讯。Agent 与 Agent 之间的通讯机制完全由选手自行控制,采用非阻塞的异步通讯机制可以有效提高系统性能。

3.使用缓存。合理缓存响应结果,当相同的请求再次到来的时候,调用链可以不必经过系统中的每一个节点,从而尽快返回。

以上分别从赛题初衷、应用场景、跑分环境与过程以及少许优化方向的角度,对本届比赛的题目进行了简单的剖析,希望对即将参加比赛的亲们能有所帮助。在此预祝各位参赛选手能取得优异的成绩,进军复赛和总决赛。

注:阿里中间件性能挑战赛是由阿里巴巴集团发起,阿里巴巴中间件、阿里云天池联合承办的工程视角品牌赛事。自2015年开始已经成功举办了三届。

赛事的初衷是为热爱技术的年轻人提供一个挑战世界级技术问题的舞台,希望选手在追求性能极致的同时,能深刻体会技术人的匠心精神,用技术为全社会创造更大价值。

大赛报名通道,点击即可进入,是时候展现真正的技术了!

https://tianchi.aliyun.com/markets/tianchi/aliware2018contest?spm=5176.100065.5490641.1.31fe67b7UN1OQ0(若未能跳转,烦请复制链接至浏览器打开)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 De...
    Java架构阅读 8,638评论 2 144
  • 世界是一 个图书馆,每个人都是一本书。我喜欢读那些好书。一本好书是一个朋友,一个朋友更是一本好书。书有多少种,朋友...
    奥巴龙阅读 207评论 0 3
  • 风雪交加的冬天 思绪在茫茫宇宙间跳跃 回忆过去 挫折的不期而至 泥泞道路的层层叠叠 好似能击碎人生的所有 但青春的...
    白丰阁阅读 168评论 5 7
  • 一. JQueryMobile jQuery Mobile is a HTML5-based user inter...
    我不叫奇奇阅读 538评论 0 2