2017上海QCon之旅总结(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 本来这个公众号的交流消息中间件相关的技术的。这周去上海参加了QCon,第一次参加这样的技术会议,感受挺多的,所以整理一下自己的一些想法接公众号和大家交流一下。 下面进入正题,从自己参加了的一些分享中挑一些有趣的议题来和大家讨论。

本来这个公众号的交流消息中间件相关的技术的。这周去上海参加了QCon,第一次参加这样的技术会议,感受挺多的,所以整理一下自己的一些想法接公众号和大家交流一下。

下面进入正题,从自己参加了的一些分享中挑一些有趣的议题来和大家讨论。


《“深蓝”20年之后的人工智能》

2017年可以说是人工智能的元年了,AlphaGo战胜李世石然人工智能一下进入了大众的视野。之后以Master的身份60连胜,接着战胜长期世界排名第一的柯洁,QCon期间AlphaGo Zero通过3天自学的方式就以100:0的方式战胜了AlphaGo,可以说在棋类领域人类对人工智能已经没有任何胜算了。

这次QCon,复旦大学的危辉教授从人工智能的历史说起,之后从人工智能的问题域、解题步骤步步深入,清晰的描述了目前人工智能领域的进展。

危辉教授的《“深蓝”20年之后的人工智能》分享可能从听众的感受上有点“反”人工智能热潮,但是我认为这场分享是给人工智能的门外的我们一个很好的入门介绍,让我们明白目前人工智能领域的发展状况,让我们对遍地的人工智能现象有一个清晰的任务。

另外危辉教授演讲的逻辑性、严谨性和现场把控能力,真的是单从一场分享能感受到功底的深厚。

这场分享的PPT没能从QCon网站上下载到,并不能回忆起很多具体的分享内容,以上是个人现场感受的一些体验。


《免费的性能午餐——Alibaba JDK协程》

这一场是阿里巴巴技术专家郁磊带来关于Alibaba JDK协程的介绍。

在参加这次分享之前,我对协程并没有什么概念(没写过C++程序)。这场分享下来只能说有个简单的认识,另外就是感叹于阿里的同学在这块技术领域的深入。

不过就目前的状况,对我们这样一些小公司而言,可能并没有技术能力去修改JVM,短期内的编程方式并不会有太大的改变。可能当协程成为一种标准,一种官方提倡的编程方式之后才会慢慢进入大众程序员的领域(那为什么不提前学习一些呢?)。


《基于内存的分布式计算》

这是这次QCon去听的第一个具体问题领域的解决方案。

包含内容如下:

  1. 背景介绍及问题阐述
  2. 候选解决方案分析
  3. 分布式内存计算框架介绍
  4. 客户实践

这里我简要的说一下第1点和第3点。

问题背景

Talking Data技术团队使用bitmap索引技术移动运营各项指标(如日活、留存)的实时计算,因为bitmap索引高效且能节省存储空间,它能很方便地做指标的实时排重。

上面是日活的一个例子,其实就是用一个二进制位来保存用户的状态。比如第一位表示用户设备1,该位为0表示用户未登录过,为1表示用户登录过。那么用户重复的登录自然就被忽略了。

Talking Data使用MySQL的blob类型存储bitmap数据,那么每次需要更新数据时,如需要更新某一个用户的状态,那么需要将bitmap读取出来,修改其中一位,之后将数据写回到MySQL中。那么就带来了一个问题,当某个APP的日活数据量特别大时,bitmap数据特别大,频繁的update导致了产生大量的MySQL binlog。

解决方案

大概思路就是在MySQL之前加上一层缓存,前端的更新操作都在Blade内存中操作,之后定时同步写到MySQL中,这样就解决了频繁更新bitmap导致的大量binlog问题。

几个组件如上图:

  • APP中使用的Client
  • 内存计算服务Blade Server(分为Master和Slave)
  • Blade Data Sync负责从Server定时同步数据到MySQL
  • Blade Admin提供管控功能

上图中Blade Server有主备关系,且主备间有交互。

现场提问环节,我提了以下几个问题:

  1. 主从复制是怎么做的、支持一主多从吗?
  2. Blade Server是基于内存的,没有做持久化,那么可么保证系统的可靠性,比如如果主从两个节点宕机了,未同步到MySQL的数据是否就丢失了?

得到的答复是目前他们并没有做主从复制,当前其实是双写的模式,即Client会将数据写到Master和Slave。这样也就没有第二个问题的处理了。

对于分布式系统,认为首先要考虑的就是系统的可靠性和可用性。

我们常常说的一点就是为了保证数据的可靠性,我们需要一式三份,而且是尽量让三分数据分不到不同机器中,比如同机柜的机器存一份,跨机柜的存一份,像HDFS那样存储数据。

所以我觉得上面的方案并不是一个很可靠的方案。

比如使用消息中间件的方式是否能代替上面的方案呢?

客户端将消息发送到消息中间件中,类似于RocketMQ和Kafka这样的组件中,之后通过Consumer定时从中取消费数据来解决频繁更新的问题(数据的可靠性通过消息中间件得到了保证)。

也可启动实时消费的Consumer来消费数据更新到某个内存服务中,这样可以提供实时的查询服务。

以上是自己的一些疑问和拍脑袋的一个替代方案,欢迎交流不同的想法。

 


《饿了么异地多活的基础设施建设》

之前我们团队考虑过一些异地多活的实现方案,所以特地去听了这场分享。

之前在自己考虑异地多活方案时,遇到的最大的问题是数据同步和数据一致性。

下面看饿了么是如何实现基地多活的。

首先是饿了么的业务特点:

其中最重要的一点就是地域性。

饿了么的业务特点,可以将所有数据按照商户所在的位置信息来进行划分。

比如所有南方商户的数据走上海机房,所有北方商户的数据走北京机房。对于用户和订单信息,都可以关联到对应的商家,然后访问商家对应所在的机房的服务。

上面是饿了么异地多活的数据复制实现。思路就是在两个机房之间进行双向的数据复制。

回想一下,因为饿了么的业务特点,双向复制的数据中不会有重叠的部分。

  • 从北京机房往上海机房复制的是北方商户的数据
  • 从上海机房到北京机房复制的是南方商户的数据
  • 在复制中过滤掉不必要的数据,比如从上海复制到北京的数据,这部分数据应用到MySQL之后也会产生binlog,这部分binlog需要从北京复制到上海的数据中剔除(这个通过改造SQL或者增加标识是可以做到的)

这样就避免掉了一个数据在两个机房同时被修改的问题。

扩展

考虑一个问题,比如在电商场景中做异地多活。

对于一个商品,在北京机房和上海机房都会被访问,这个时候就产生了一个问题:

  • 商品的库存为1,北京机房下了一单,将商品库存变更为0;同时上海机房也下了一单,也将库存变更为0。这样就产生了超卖的问题。
  • 另外,如何在双向数据同步中将上线的数据修复,即使其中一个订单失效,将库存修复也会一个问题。

Otter

阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,同时为了提升用户体验,整个机房的架构为双A,两边均可写,由此诞生了otter这样一个产品。

Otter在解决数据一致性问题时(同一行记录多地修改),有两种方案:

  1. 事前控制:比如paoxs协议,在多地数据写入各自数据存储之前,就已经决定好最后保留哪条记录
  2. 事后补救:指A/B两地修改的数据,已经保存到数据库之后,通过数据同步后保证两数据的一致性

两种方式都是数据最终一致性的保证,具体内容可以参考:Otter数据一致性解决方案

未完待续...

QCon3天,还有挺多想和大家分享的,所以还有下篇,包含《PhxQueue——微信开源高可用强一致分布式队列的设计与实现》、《Heron的Exactly-Once实现》几个议题的分享感受。

欢迎关注公众号交流。

2017QCon上海站PPT下载:PPT

 

如果本文对您有帮助,点一下右下角的“推荐”
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
运维 前端开发 架构师
2016 SFDC 杭州开发者大会,一场属于开发者的技术盛宴
2016 SFDC 杭州开发者大会,一场属于开发者的技术盛宴
188 0
2016 SFDC 杭州开发者大会,一场属于开发者的技术盛宴
|
人工智能 前端开发 JavaScript
阿里云开发者DevUP沙龙·成都前端技术沙龙 圆满结束
2020年8月15日下午,在武侯区天府五街菁蓉汇2栋5楼举办了阿里云开发者DevUP沙⻰。 本次活动邀请了阿里巴巴高级前端工程师常艳芳、Web/javaSCript全栈开发者水歌,阿里云高级前端技 术专家杜欢,来和大家分享~~~
1482 0
阿里云开发者DevUP沙龙·成都前端技术沙龙 圆满结束
|
人工智能 大数据 关系型数据库
2017杭州云栖大会100位大咖视频+讲义全分享
“如果我看得更远一点的话,是因为我站在巨人的肩膀上。”2017杭州云栖大会资料全部整理完毕,首批100位大咖视频+讲义分享给大家。
69482 0
|
人工智能 AliSQL 云栖大会
2016杭州云栖大会看点、技术系列合集
2016杭州云栖大会有价值的新闻、观点和产品在此汇聚。
21645 0
|
大数据 云栖大会
云栖大会上海峰会精彩回顾直通车
1月20日云栖大会・上海峰会圆满结束,60+场高浓度演讲令到场的开发者朋友们深觉不虚此行。云栖社区精选涵盖大会全景、王坚博士分享、最具人气的演讲、一线实战经验总结、重磅产品发布、数项合作发布等在内的17篇文章,组成回顾系列,与希望一探大会究竟的朋友们共享。
2538 0
|
芯片 云栖大会 人工智能
杭州云栖大会技术见闻
非常有幸参加今年在杭州云栖小镇举办的云栖大会。在为期三天的展会中,主要就感兴趣的平头哥和飞天智能两类产品,参观了相关的展台和聆听了相关的分论坛。 在平头哥的展台上,主要看了下今年推出的玄铁内核展示,下面是使用武功秘籍的形式,展示出音频,视频,电力和人工智能等10个领域使用玄铁内核开发出的芯片;还是感
1492 0
|
开发者 云栖大会 Android开发
一年一度的硬核科技盛会——杭州云栖大会就要来了! | 开发者必读(059期)
最炫的技术新知、最热门的大咖公开课、最有趣的开发者活动、最实用的工具干货,就在《开发者必读》!
817 0