阿里数据库技术团队,多个挑战性岗位期待您的加盟!

五 18th, 2015

we need you

阿里数据库团队,放出多个具有挑战性的岗位,期待您的加盟!

都说不忘初心,方得始终。让区区不才在此揣摩一下,如果大家选择我们,可能的初心会是什么?

 

1. 加入我们团队,学到更多数据库方面的知识?

没问题。今年的数据库大会,@章颖强 同学曾经分享了 AliSQL 在 MySQL 上的改进,说真的,在极致的压力下,也需要对数据库进行极致的改造。AliSQL 只是九牛一毛,我们在数据库内核、规模化运维、高可用架构上的改进,值得学习的地方可不算少!

 

2. 加入我们团队,迎接更大的挑战?

没问题。异地双活?OceanBase?云服务?双11?国际化?规模化?架构?…… 挑战?你懂的O(∩_∩)O~

 

3. 加入我们团队,推动数据库产业变革?

没问题。我们已经主导过一次去IOE的风暴,云化和异地双活正在进行时,看似不可能的OceanBase也在阿里内部的核心应用上落地。不敢说未来我们还会整出哪些变更,但是我们一定不会按部就班,一滩死水,这与我们骨子里折腾的性格不符。

 

4. 加入我们团队,找寻一批好基友?

更没问题。团队最不缺的就是好基友,一起加班,一起打球,一起撸串,只要是不违法的好事,叫上好基友一起呗!

 

5. 您来补充,我来解答!

 

联系方式

 

以下,是阿里数据库团队的部分招聘岗位,有意向的同学,欢迎微博私信、邮件咨询:

微博联系:  @何_登成

邮件地址:  he.dengcheng@gmail.com 

 

 

岗位放送

 

————————————————————————————————————————————————————————————————————–

岗位名称:数据库专家

————————————————————————————————————————————————————————————————————–

岗位描述:

1. 独立承担重大业务项目负责人职责,深入理解数据业务,识别用户需求,从数据库专业角度协同研发完成数据架构及数据模型设计。

2. 开发完善公司数据库运维、研发应用、异常诊断等方面的工具产品,通过能力产品化降低数据库运维门槛和应用门槛,创造规模效益。

3. 为生产系统的稳定性和效能负责,通过技术创新持续提升系统连续性、降低系统运行TCO。

 

岗位要求:

1. 精通MySQL、Oracle等主流关系数据库,了解主流的NOSQL数据库,对各数据库的优劣和适用场景有深入的理解,能够根据具体场景合理进行数据库选型和模型设计。

2. 熟练掌握Java,Python,Perl,Shell等语言中的一种,可以通过编程解决工作中遇到的效率问题,具备良好的编程风格。

3. 具有5年以上项目需求分析、方案架构设计工作经验,具有大型行业应用架构经历,较强的客户需求调研和需求分析能力,金融、电商、云服务行业经历,有丰富的解决方案实施经验者优先。

4. 良好的团队协作能力,善为人师,渴望突破,喜欢有挑战的工作。

5. 良好的沟通表达能力,具备优秀的文档能力,使用文字、图示清楚地表达架构意图,能够熟练编写各类技术文档。

 

————————————————————————————————————————————————————————————————————–

岗位名称:云DBA(云数据库架构师)

————————————————————————————————————————————————————————————————————–

岗位描述:

1. 参与阿里云RDS(MySQL、SQLSERVER、PostgreSQL)的方案设计、实施以及保障RDS生产环境的稳定运行。

2. 负责大规模数据库集群场景下的自动化运维、诊断系统、云平台的建设。

3. 通过数据驱动提出产品改进建议,提升RDS产品的成熟度,为用户提供安全,稳定,易用,高效的数据库服务。

备注: 岗位BASE在杭州

 

岗位要求:

1. 熟悉数据库的运行机制和体系架构,精通MySQL/Oracle/PostgreSQL/SQlserver一种以上。

2. 有五年以上数据库及相关技术工作经验,有带团队经验,有运营海量在线基础设施经验为佳。

3. 具有良好Shell/Perl/Python编程能力,有大型运维平台建设经验为佳。

4. 有互联网/金融/电商等行业架构经验,参与过海量数据下高并发、高可用架构的设计、实施和维护。

5. 熟悉网络、操作系统等底层系统,具备清晰的系统疑难问题诊断思路。

6. 对业界主流云计算公司(aliyun/aws/azure)的产品熟悉者优先。

 

————————————————————————————————————————————————————————————————————–

岗位名称:数据库架构师(OceanBase)

————————————————————————————————————————————————————————————————————–

岗位描述:

1. 参与分布式数据库(Oceanbase)关键技术研究和实现。

2. 掌控规模化场景下OceanBase的架构设计、自动化运维、容灾方案、云平台建设等。

4. 协调资源,带领团队完成数据库重要项目的技术实现,支持业务的快速发展。

5. 推动OB在阿里巴巴集团内外部落地,帮助OB数据库的成熟。

 

岗位要求:

1. 有五年以上数据库及相关技术工作经验;有运营海量在线基础设施经验为佳。

2. 熟悉不同类型数据库(Oracle/MySQL/Cassandra/Spanner…)的底层运行原理、体系架构和优缺点。

3. 对分布式系统原理(CAP/Paxos/最终一致…)有较为深入的理解。

4. 有大型互联网/金融等行业架构经验,参与过海量数据下高并发、高可用架构的设计、实施和维护。

5. 精通数据库产品性能分析和测试,对数据库的优化、存储性能有较深的研究和操作经验。

6. 有技术团队管理经验,具备良好的沟通和协同能力,能够承受较大的工作压力。

7. 有较好的英文阅读能力,善于学习,乐于分享。

8. 有开拓进取的创新精神。

 

————————————————————————————————————————————————————————————————————–

岗位名称:OB云平台研发

————————————————————————————————————————————————————————————————————–

岗位描述:

1. 负责OceanBase云平台的开发工作。

2. 挖掘用户需求,提供具有价值的云产品。

 

岗位需求:

1. 熟练使用Linux系统,熟悉Shell脚本。

2. 熟悉Java/Python,深入理解成熟的java开发框架,具备前端开发能力更佳。

3. 熟悉云计算与数据库,有云平台(AWS、Azure等)研发与使用经验者优先。

4. 对分布式系统有深入的理解,有分布式系统研发经验和使用经验更佳。

5. 喜欢钻研,对技术有激情,主动学习能力强。

6. 有良好的编码风格,具有独立发现并解决问题的能力。

7. 注重团队协作,有良好的沟通能力。

8. 有高质量个人技术博客,或者github作品者优先。

 

联系方式

 

以上,是阿里数据库团队的部分招聘岗位,有意向的同学,欢迎微博私信、邮件咨询:

微博联系:  @何_登成

邮件地址:  he.dengcheng@gmail.com 

标签:

数据一致性-分区可用性-性能——多副本强同步数据库系统实现之我见

三 27th, 2015

新浪微博:@何_登成

1    背景    1

2    问题一:数据一致性    3

3    问题二:分区可用性    6

4    问题三:性能    8

5    总结    10

6    问题四:一个极端场景的分析    10

 

  1. 背景

 

00

最近,@阿里正祥(阳老师)发了上面的一条微博,谁知一石激起千层浪,国内各路数据库领域的朋友在此条微博上发散出无数新的话题,争吵有之,激辩有之,抨击有之,不一而足。总体来说,大家重点关注其中的一点:

在不使用共享存储的情况下,传统RDBMS(例如:Oracle/MySQL/PostgreSQL等),能否做到在主库出问题时的数据零丢失。

这个话题被引爆之后,我们团队内部也经过了激烈的辩论,多方各执一词。辩论的过程中,差点就重现了乌克兰议会时场景…

02

庆幸的是,在我的铁腕统治之下,同学们还是保持着只关注技术,就事论事的撕逼氛围,没有上升到相互人身攻击的层次。激辩的结果,确实是收获满满,当时我就立即发了一条微博,宣泄一下自己愉悦的心情J

01

微博发出之后,也有一些朋友回复是否可以将激辩的内容写出来,独乐乐不如众乐乐。我一想也对,强数据同步,数据一致性,性能,分区可用性,Paxos,Raft,CAP等一系列知识,我也是第一次能够较好的组织起来,写下来,一来可以加深自己的印象,二来也可以再多混一点虚名,何乐而不为J

这篇博客文章接下来的部分,将跳出任何一种数据库,从原理的角度上来分析下面的几个问题:

  • 问题一:数据一致性。在不使用共享存储的情况下,传统RDBMS(例如:Oracle/MySQL/PostgreSQL等),能否做到在主库出问题时的数据零丢失。
  • 问题二:分区可用性。有多个副本的数据库,怎么在出现各种问题时保证系统的持续可用?
  • 问题三:性能。不使用共享存储的RDBMS,为了保证多个副本间的数据一致性,是否会损失性能?如何将性能的损失降到最低?
  • 问题四:一个极端场景的分析

阅读全文…

一个最不可思议的MySQL死锁分析

一 24th, 2014

 

1    死锁问题背景    1

1.1    一个不可思议的死锁    1

1.1.1    初步分析    3

1.2    如何阅读死锁日志    3

2    死锁原因深入剖析    4

2.1    Delete操作的加锁逻辑    4

2.2    死锁预防策略    5

2.3    剖析死锁的成因    6

3    总结    7

 

 

  1. 死锁问题背景

 

做MySQL代码的深入分析也有些年头了,再加上自己10年左右的数据库内核研发经验,自认为对于MySQL/InnoDB的加锁实现了如指掌,正因如此,前段时间,还专门写了一篇洋洋洒洒的文章,专门分析MySQL的加锁实现细节:《MySQL加锁处理分析》。

 

但是,昨天”润洁”同学在《MySQL加锁处理分析》这篇博文下咨询的一个MySQL的死锁场景,还是彻底把我给难住了。此死锁,完全违背了本人原有的锁知识体系,让我百思不得其解。本着机器不会骗人,既然报出死锁,那么就一定存在死锁的原则,我又重新深入分析了InnoDB对应的源码实现,进行多次实验,配合恰到好处的灵光一现,还真让我分析出了这个死锁产生的原因。这篇博文的余下部分的内容安排,首先是给出”润洁”同学描述的死锁场景,然后再给出我的剖析。对个人来说,这是一篇十分有必要的总结,对此博文的读者来说,希望以后碰到类似的死锁问题时,能够明确死锁的原因所在。

 

阅读全文…

2013年个人微博推荐技术资料汇总

十二 25th, 2013

2013年,过的很充实,生活上如此,技术上亦是。这一年,看了很多的技术资料,技术上也有了很大的提高。而且,本着分享的精神,很多好的技术资料,也都在个人微博@何_登成 上做了推荐。今天,下定决心将整个2013年在微博上推荐的技术资料整理了一下,说真的,写的不少,看的更多。

 

下面的这些资料,都是精品资料,个人已经看了其中的95%左右,余下未看的,需要找时间看完,已经看过的,也准备找时间多温习几遍,好东西,不怕多看。对于个人来说,这算是一个总结与收藏;对于阅读此博文的朋友来说,也可以各取所需,一起追求技术的进步。

 

注:资料的组织,先按照领域划分,包括:(Concurrent) Programming、Data Structure & Algorithm、Database (综合、MySQL、Oracle)、Performance、Distributed、OS & Hardware、(New) System、其他 等8个大类。然后针对每一个大类,再按照书籍、博客文章、PPT & PDF的形式归类组织。

 

阅读全文…

标签:

并发编程系列之一:锁的意义

十二 23rd, 2013

 

背景

 

C/C++语言的并发程序(Concurrent Programming)设计,一直是一个比较困难的话题。很多朋友都会尝试使用多线程编程,但是却很难保证自己所写的多线程程序的正确性。多线程程序,如果涉及到对共享资源的并发读写,就会产生资源争用(Data Race)。解决资源争用,最直接的想法是引入锁,对并发读写的数据进行保护(更高级的则包括无锁编程—— Lock Free Programming)。但是,锁又有很多种类,例如:自旋锁(Spinlock)、互斥锁(Mutex)、读写锁(Read-Write-Lock)等等。这么多的锁,每种锁有什么特点?对应哪些不同的使用场景?使用过程中需要注意哪些事项?各自分别有哪些不足之处?都是困扰程序员的一个个问题。

 

甚至,一个最基本的问题:为什么锁就能够用来保护共享资源?锁真正蕴含的意义有哪些?我相信很多使用过各种锁的程序员,都不一定能够完全正确的回答出来。

 

有鉴于此,本人希望将自己近10年数据库内核研发,所积累下的并发编程的经验记录下来,形成一个系列的文章,分享给大家。这个系列,个人打算对其命名为 #并发编程系列# ,作为此系列开篇的文章,本文将从一个简单的并发编程的例子出发,引出锁真正蕴含的意义

 

阅读全文…

MySQL 加锁处理分析

十二 13th, 2013

 

1    背景    1

1.1    MVCC:Snapshot Read vs Current Read    2

1.2    Cluster Index:聚簇索引    3

1.3    2PL:Two-Phase Locking    3

1.4    Isolation Level    4

2    一条简单SQL的加锁实现分析    5

2.1    组合一:id主键+RC    6

2.2    组合二:id唯一索引+RC    6

2.3    组合三:id非唯一索引+RC    7

2.4    组合四:id无索引+RC    8

2.5    组合五:id主键+RR    9

2.6    组合六:id唯一索引+RR    9

2.7    组合七:id非唯一索引+RR    9

2.8    组合八:id无索引+RR    11

2.9    组合九:Serializable    12

3    一条复杂的SQL    12

4    死锁原理与分析    14

5    总结    16

 

  1. 背景

 

MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路,拿到任何一条SQL语句,都能完整的分析出这条语句会加什么锁?会有什么样的使用风险?甚至是分析线上的一个死锁场景,了解死锁产生的原因。

 

注:MySQL是一个支持插件式存储引擎的数据库系统。本文下面的所有介绍,都是基于InnoDB存储引擎,其他引擎的表现,会有较大的区别。

阅读全文…

C/C++ Volatile关键词深度剖析

十二 2nd, 2013

1    背景    1

2    Volatile:易变的    1

2.1    小结    2

3    Volatile:不可优化的    3

3.1    小结    4

4    Volatile:顺序性    4

4.1    happens-before    6

4.2    小结    7

5    Volatile:Java增强    8

6    Volatile的起源    9

7    参考资料    9

 

  1. 背景

前几天,发了一条如下的微博 (关于C/C++ Volatile关键词的使用建议):


 

此微博,引发了朋友们的大量讨论:赞同者有之;批评者有之;当然,更多的朋友,是希望我能更详细的解读C/C++ Volatile关键词,来佐证我的微博观点。而这,正是我写这篇博文的初衷:本文,将详细分析C/C++ Volatile关键词的功能 (有多种功能)、Volatile关键词在多线程编程中存在的问题、Volatile关键词与编译器/CPU的关系、C/C++ Volatile与Java Volatile的区别,以及Volatile关键词的起源,希望对大家更好的理解、使用C/C++ Volatile,有所帮助。

 

Volatile,词典上的解释为:易失的;易变的;易挥发的。那么用这个关键词修饰的C/C++变量,应该也能够体现出”易变”的特征。大部分人认识Volatile,也是从这个特征出发,而这也是本文揭秘的C/C++ Volatile的第一个特征。

 

阅读全文…

标签: , ,

排队论及其应用浅析

十一 6th, 2013

导读

 

说起【排队论】(Queueing Theory),我的朋友 童家旺 (新浪微博:@jametong)应该是我的启蒙者,在去年的一些交流中,他就多次提到过【排队论】,但是,那时我也是听听就过,也没有深入去了解过究竟什么是【排队论】。

 

今年,在参加数据库大会时,他向我推荐了一篇文章,Cary Millsap写的《Thinking Clearly About Performance》,读过之后,惊为神文。作者原为Oracle Performance组的VP,负责Oracle数据库的性能优化工作。在文中,作者清晰的描述的什么是Performance,以及【排队论】在Performance中的作用,恰好当时我们组正在做自主研发的TNT存储引擎的性能优化工作,因此我就对【排队论】上了心。之后,陆陆续续看了几十篇排队论相关的文章/书籍,对于排队论终于有了基本的认识,个人感觉其非常有用,因此就产生了这篇PPT:《排队论及其应用浅析》。

 

《排队论及其应用浅析》,从【排队论】开始,介绍了【排队论】的起源,解决的问题,经典的排队论系统,排队论中经典的Law(如:Little’s Law)。然后,再进一步展开,介绍了【排队论】在系统设计、性能优化、容量规划等方面的应用。

 

阅读全文…

个人订阅的10佳博客与相关介绍

十一 4th, 2013

前段时间,我在微博上分享了自己订阅的博客Feeds,一共有200个左右,内容覆盖多个领域,包括有:Database(MySQL、Oracle、PostgreSQL),Programming,Distributed Systems,Systems 等。俗话说,过犹不及,太多的选择,往往意味着没有选择。在过去的几年,对于自己订阅的所有博客,我基本上做到每天都看,因此对每个博客的内容有了一定的了解。本文,就准备根据个人的经验,从订阅的这200个博客中,挑选出10个出来,并且为每个挑选出的博客,附上个人对其的简单介绍。一来算是对过去的一个归纳与总结,二来也可以帮助大家更好的挑选。

 

声明:这次的挑选,完全是根据自己的经验与喜好,并不算是什么排名。挑选的标准:

  1. 博客更新的频率;
  2. 博客中好文章的比率;
  3. 博客文章,对我的帮助;
  4. 以下挑选出来的博客,首先按照国际/国内划分,然后按照字母排序介绍;

阅读全文…

标签: ,

CPU Cache and Memory Ordering——并发程序设计入门

七 13th, 2013

CPU Cache and Memory Ordering

内容简介

本PPT,为本人学习CPU架构以及并发程序设计的一些心得与收获。主要内容包括:

 

  •   简单介绍CPU的架构,部分主要模块及其功能(Cache Structure, Cache Line , Set-Way);
  •   Cache Coherence算法 (MESI, MOESI);
  •  CPU Memory Ordering模型 (Atomic,Reorder,Memory Barrier (Compiler, CPU),Lock Instruction,Load Acquire/Store Release);
  •  并发程序设计 (实现一个Spinlock,纠正一个Lock-Free Algorithm,Data Race (False-Sharing, Per-Processor Data));

 

分享地址

新浪微盘

  • PPT格式下载地址:点我
  • PDF格式下载地址:点我

 

说明:推荐下载PPT格式,每页PPT的备注中,都有对应的参考资料,可进行深入的学习。而PDF格式,所有的参考资料,均在最后给出。

 

SlideShare