高负荷杯#2。 后端开发人员重新投入使用的冠军



您准备好迎接新挑战了吗? 我们邀请所有业余爱好者和专业人士参加冠军赛,以设计和管理高负荷服务#2高负载

比赛开始于去年。 然后我们知道,HighLoad杯正好是许多Mail.Ru Group项目中缺少的冠军。 首届试点比赛共有449人参加。 组织者和参与者都有很多代码和很多汗水(8789种不同的解决方案)。 在技​​术实施方面存在细微差别,但最重要的是,每个人都喜欢它! 组织者在数据中心住了很多晚,在办公室休息了几天。 准备好了! 在本文的结尾,您将找到我们和参与者的有用材料,这些材料将帮助您了解机械原理并找到一些最佳实践解决方案。

这次,他们试图为您准备更困难的业务。 此外,我们扩大了受众范围,现在说英语的用户可以参加比赛。 加入Telegram中的俄语社区。 在那里,您将获得有关比赛的很多见解:)



欢迎上车!

机械师


与去年相比,竞争中的概念没有改变。

参与者的任务是创建一个小型Web服务,该Web服务可使用某种结构的数据并为该数据实现API。 带有已实现服务的容器(Docker)被上载到我们的服务器,我们在其中启动它并开始使用HTTP请求对其进行外壳处理。

解决方案是使用本地存储的Docker客户端在一个特殊的存储库中发送给我们的(每个存储库都有自己的存储库)。 然后,由Mail.Ru Group Technopark Laboratory人员开发的CodeHub-CodeRunner系统会自动检查发送给我们的服务。

然后,我们开始在装有Intel Core i7处理器的测试计算机上“锤击”容器。 该解决方案将分配4个2.4 GHz内核,2 GB RAM和10 GB硬盘空间。 简而言之,幻影引擎启动了一个“油箱”,该幻灯引擎以线性增长的负载曲线向多个流点火。 在脱壳开始之前,用户的解决方案需要几分钟(确切的时间取决于任务),以便处理接收到的JSON文件中的数据。 正确使用这些数据是取得胜利的必要条件。 炮击只有两种,短而长。

根据此类攻击的结果,我们计算正确和错误答案的数量,RPS和响应速度,并形成某个指标的评分表。 最快,最容错的服务的作者将成为赢家。



使用您可以找到或提出的任何Web技术。 选择您自己的编程语言和框架。 您可以自行决定使用C ++,Java + Tomcat,Python + Django,Ruby + RoR,GoLang,JavaScript + NodeJs,Haskell,至少是Assembler或其他工具。 对于数据存储:MySQL,PostgreSQL,Redis,MongoDB,缓存。 完全自由!

脱壳的结果是,获得了日志和度量,然后将其以决策页面上的图形形式显示给参与者。 分别跟踪:

  • 基本指标;
  • 正确答案;
  • 对请求的响应速度;
  • 每秒的响应数。



解决方案的等级计算如下:我们使用API​​在脱壳期间设法提供的所有正确答案的时间,为每个我们无法收到响应的错误答案或请求添加惩罚时间(惩罚时间始终等于总请求超时)。 总时间少于其他人的参与者在排行榜中排名较高,并且有机会成为冠军。

挑战赛


我们的团队很长一段时间都在考虑今年要完成什么任务。 他们想要一种能够与大多数人平等的机会(这样一来,一些C / C ++的自制自行车将不会获胜)。

措辞如下:

在另一个现实中,人类决定为“下半年”创建并启动一个全球搜索系统。 它旨在减少世界上的单身人士数量并帮助建立牢固的家庭。

在各种炮击的测试数据和“战斗”数据中,都有关于一个实体的条目:帐户。 它描述了有关用户的所有已知信息-他的姓名,联系人,兴趣,对其他用户的同情。 根据下面指出的类型和限制,可以保证所提供数据的准确性。 所有数据都是我们根据某些法律生成和发明的。

以下个人数据包含在一个帐户记录中:

  • id-用户的唯一外部标识符。 它由测试系统安装,然后用于检查服务器响应。 类型是一个32位整数。
  • email-用户的电子邮件地址。 类型-Unicode字符串,最长100个字符。 保证唯一性。
  • fnamesname-分别为名字和姓氏。 类型-最多50个字符的unicode字符串。 字段是可选的,在特定记录中可能不存在。
  • 电话 -手机号码。 Type是一个unicode字符串,最长16个字符。 该字段是可选的,但可以保证指定值的唯一性。 它很少被填充。
  • sex是一个unicode字符串,“ m”表示男性,“ f”表示女性。
  • 出生 - 出生日期,以UTC记录从UNIX时代开始的秒数(换句话说,这是一个时间戳)。 从2005年1月1日至1950年1月1日以下限定。
  • 国家 -居住国家。 Type是一个unicode字符串,最多50个字符。 该字段是可选的。
  • 城市 -居住城市。 Type是一个unicode字符串,最多50个字符。 该字段是可选的,很少指定。 每个城市都位于特定的国家/地区。

此外,在一个“帐户”记录中,下半部分包含特定于搜索引擎的字段:

  • 加入 -系统中的注册日期。 类型-有限制的时间戳记:从01.01.2011以下,从01.01.2018以上。
  • status-系统中用户的当前状态。 类型-下列选项中的一行:“空闲”,“忙”,“一切都很复杂”。 不要注意奇怪的结局:)
  • 兴趣 -用户在日常生活中的兴趣。 类型-Unicode字符串数组,可能为空。 行的长度不能超过100个字符。
  • 保费 -系统中保费期的开始和结束(当用户确实想找到“灵魂伴侣”并为该服务付费时)。 在JSON中,此字段由带有开始和完成字段的嵌套对象表示,其中具有较低边界的时间戳记录在01/01/2018上。
  • 喜欢 -用户已知喜欢的数组,可能为空。 所有的同情都不同,每个同情代表以下字段中的一个对象:
    • id-用户喜欢的另一个帐户的标识符。 始终可以通过ID在源数据中找到该帐户。 请注意,数据中可能有多个具有相同ID的赞。
    • ts-时间,即时间戳记,当系统中记录了同情时。

您需要实现API。

  1. 获取用户列表: /帐户/过滤器/

    该API方法计划用于在先前已知或期望的字段中搜索用户。 例如,某人想看到居住在特定城市中的所有年龄和性别的人。
  2. 分组用户: /帐户/组/

    该API方法计划用于创建有关系统操作的报告。 用于分组的字段在以逗号分隔的GET参数键中传递。 它们不如用户过滤请求中的那么多。 分组只有五个字段-性别,身份,兴趣,国家/地区,城市。
  3. 兼容性建议: /帐户/ id /推荐/

    此查询用于在指定的用户数据中搜索“下半部分”。 该请求传递用户的ID,该用户的ID会搜索到最适合其状态,年龄和兴趣的用户。 该决定应仅检查与异性的兼容性(我们不反对性少数群体,并谴责歧视,这只是发生了:))。 如果在GET请求中分别传送了具有国家和城市密钥的国家或城市,那么您只需要在居住在指定位置的那些人中进行搜索。
  4. 匹配类似的赞:/ 帐户/ id /建议/

    这种查询与上一个查询类似,因为它也是关于“灵魂伴侣”的搜索。 我们正在为其寻找知心伴侣的用户的ID也被发送,并使用limit GET参数。 实施上的差异:我们正在寻找具有相似“喜好”的相同性别的人,并提供他们最近喜欢自己的人。 如果请求接收到国家或城市的GET参数,那么您仅需要在特定位置搜索“相似的同情”。

不可能在一篇文章中讲述所有内容。 详细的规则将在比赛当天(今天)在冠军网站和GitHub存储库中发布,但是现在您知道了等待的内容。

日程安排


是的,我们知道假期(即将来临),所以冠军将很长:)

  1. Beta测试(不考虑结果):12月13日19:00开始,12月21日19:00结束。
  2. 资格赛:从12月21日19:00到1月31日19:00。
  3. 最后一轮:直到2月5日。

在Beta测试期间,任务的规则和条件可能会更改(存在错误或其他原因)。

排位赛-规则不变。

最后一轮是全自动的,但是在决赛之前(入围者(已通过资格赛的结果的N位用户,至少有50人))选择了将在几波中被淘汰的解决方案。 结果是所有波的最佳结果形成的。

礼物


第一名是全新的MacBook Air。
第二和第三名-苹果iPad。
第四,第五和第六位-三星Gear S3。

参加者有权要求其他同等价值的礼物作为回报。 所有有资格进入决赛的参赛者都将获得我们锦标赛的品牌T恤。

社区活动


如果您进入我们的电报聊天室,则不太可能已经离开了。 我们正在等待您,祝您好运!

致谢


本文不解决系统更新问题。 我们做了很多工作来消除基础设施错误,在GitHub上审查了参与者的所有问题 ,已经实施了一些措施并将其放入明年的TODO列表中。 我要对Maxim @ xammi- Kislenko,Ilya @liofz Lebedev,Eugene @gunicorn Ivanov,Irina @aithelle Lukyanova ,Vasily @vasidmi Dmitriev和参加比赛的整个团队(包括整个冠军社区)表示由衷的感谢 。 谢谢你

Source: https://habr.com/ru/post/zh-CN433066/


All Articles