百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

2015年Postgres全球开发者大会参会总结

moboyou 2025-03-03 11:10 22 浏览

一年一度的Postgres全球开发者盛会6月16-20日在加拿大渥太华举行,我也是第四年参加这个会,会上收获良多,所以决定写篇文章给国内的Postgres的爱好者分享一下大会的情况。

Postgres相关会议主要包含两类,一类是面向内核开发者(全球开发者大会),一类是面向用户(如Postgres Open、欧洲大会、日本大会、中国大会等)。其中面向内核开发者的最重要的会议是全球开发者大会Postgres Global Developer Conference,基本社区最主要的成员都会参加。

广州飞温哥华转机到渥太华,整整17个小时,晚上12点才到酒店安顿下来,在倒时差中参加了四天的大会。大会每年都在渥太华大学的校园举行,BSD的会完了就到Postgres的会,两个会都是同一个人在组织。

大会概要

大会包含几个主要环节,前两天是unconferences, 主要是自发的组织议题讨论,一般是下一个版本要开发的一些大特性,后面两天是大会的演讲环节,包括培训还有相关的话题,最后一天下午还有一个闪电演讲环节(lightning talk)主要是一些快速演讲的小题目。

大会大约有240人左右参加,与往年大约相当,主要是来自世界的Postgres开发的主要公司(EnterpriseDB、NTT、2ndQuadrant、富士通、Teradata、华为等),还有关键的用户企业(Amazon AWS、Saleforce)。主要的赞助商为EnterpriseDB及富士通。从参会的情况来看,目前社区的参与力量趋向多元化,美国、欧洲(英、德、瑞典、俄罗斯)、亚洲(日本、中国、印度)这三极力量成为社区的主要力量。日本今年发表的主题多达10个以上,是历届最多的一次,富士通也第二年成为主要赞助商,反映日本在社区的影响力逐渐上升。来自中国的华为也正式第一次作为赞助商出现在会上,是国内首家。

华为今年在会上作了两个演讲,主要是涉及提高单机性能的多核扩展(Scalable MVCC Solution for Many Core Machines)及动态编译(Go Faster with Native Compilation)。由于相关技术都是相对前沿的关键技术,整个社区对演讲非常感兴趣,社区所有核心成员及关键开发人员都到场听了两场演讲。社区领袖Josh Berkus在其博客里面用一节篇幅专门详细介绍华为的动态编译的议题。

多核扩展性成为最新版本9.5的主要驱动力

7月份Postgres的最新版9.5已经发布公测版,主要的特性包括块索引(BRIN Index)、行级别的安全控制(Row level security)、插入合并(UPSERT,类似Oracle的Merge Into)、多核的扩展性等。

多核并行执行:目前EnterpriseDB的Robert Haas在社区做的最主要的工作是多核并行执行(Parallel execution),即把一个复杂计算分解由多个进程执行,这个特性可以使得Postgres能够充分利用高性能服务器的多核计算能力,尤其对于全表扫描、排序、索引重建的性能有大大的提高。9.3及9.4主要集中在构建并行执行的基础部件,并行执行还是基于多进程来实现,其基础部件包括能够动态启动一个自定义的进程(dynamic background workers)同时还要能够支持动态分配及回收内存(dynamic shared memory),还有信息能够在多进程互相传递(shared memory message queues),这些工作在去年及前年已经完成。9.5增加了另外一些基础设施,包括错误信息在多进程间传递(error propagation)还有并行执行的上下文环境管理(parallel contexts),但原计划在9.5实现的第一个最重要的并行扫描特性(Parallel sequential scan),虽然代码已经写好,但还有一些没有解决的问题,所以需要推迟到下一个版本明年的9.6才能够完成。并行扫描特性(Parallel sequential scan)主要是在执行器里面把原来的全表扫描seqscan拆分成并行执行的算子,新增加了两个算子Funnel及Partial Seq Scan算子,funnel算子主要负责结果汇聚及协调,多个Partial Seq Scan算子进行并行扫描。

多核扩展:在9.5里面,Enterprisedb对于多核扩展性还作了优化,读的扩展性由原来的32核扩展到64核,主要是由于对于锁进行了相关优化。另外9.5引入了一个新的索引(BRIN),就是对每个块里面包含的数据的最大及最小值做一个索引,这样能够大大提高大数据量查找的效率,同时能够保持索引的代价比较小。

FPGA加速:日本NEC的员工KaiGai Kohei在9.5引入了FPGA/GPU加速相关的基础设施。硬件加速可以分担一些比较复杂的计算提高性能,例如把全表扫描或者是表结合这些比较重度的任务交给加速器,加速器执行完以后把结果返回给数据库。NEC的解决方案是引入一个调度模块PG-STORM,这个模块负责把任务发送给外部加速硬件,同时通过DMA把数据传输到加速器。同时把在Postgres 9.5里数据库的执行器的扫描算子变成可定义(custom scan),在自定义的扫描算子与PG-STORM进行交互。目前可以支持把表扫描、表结合、聚集函数、排序操作卸载到FPGA板卡上,据称在某些场景下最快的性能可以提升十倍。

插入合并(UPSERT)是9.5版本的最重要特性之一,这个特性的主要功能是在批量导入的时候,当insert记录入库,如果没有记录就直接插入,如果记录已经存在就更新,就是混合了update及insert的操作。由于Oracle本身已经有这个功能Merge INTO,在系统中大量使用,是Oracle迁移到Postgres里面缺失的最重要的功能之一。这个特性历时三年今年终于进入主版本。

开发流程反思:另外还有一个大会热议的焦点就是一个致命缺陷引发了对整个社区开发流程的反思。Postgres一直以来是代码质量最高的开源产品之一,但是在9.3的时候一个committer修正了一个bug(multixact相关),虽然修改简单,但是所涉及的代码的逻辑极为复杂,在当时检视没有发现任何问题,结果到了9.4在实际生产系统中引发一系列数据丢失的严重事故,整个社区才意识到问题的严重性,并提供了多个修复的紧急版本,但是修复的代码又引入了新的问题,由于问题过于复杂,需要大修改才能解决问题,目前仍然没有完全解决问题。在本次大会,不仅讨论了相关解决的技术细节,而且引发了缺陷如何管理等一系列组织流程上的反思,并有核心组员提出需要增加相关故障恢复的测试,是社区的一个里程碑式的事件。

Core team member Bruce Momjian wanted to know whether this was a special case, or if it shows a failure in the PostgreSQL development process, saying: "We're super-reliable, but we're so used to it that we haven't tried to focus on reliability."

性能及集群成为后续发展的主要方向

9.6预计分五个迭代开发,从7月1日到明年的3月底,大约在6月中发布Beta,10月份左右GA。

在9.6以及最新的版本里面,性能仍是最关注的焦点。

多核扩展性是一个主要方向,目前的主要工作有几个。一个是EnterpriseDB继续延续目前在并行执行Parallel execution的工作,在9.6里面完成并行表扫描的特性(Parallel sequential scan),同时优化目前锁相关的冲突提高多核的读写扩展性,另外的一个是华为在社区提出的MVCC机制的优化方案(利用CSN进行可见性判断)。

新硬件的支持是另外的一个重要方向。前面已经提到,NEC目前已经把很多基础的操作卸载到FPGA上,后续会有更多的复杂操作会在FPGA上面来去做。另外Teradata的Aster data的人员提出,未来的磁盘会向SSD及大容量廉价的叠瓦式磁盘SMR(Shingled magnetic recording) disk演进,叠瓦式磁盘的空间容量更大,后续后可能会放量发货。这种磁盘的主要特点是空间大,但重写(更新)的代价会更加高,所以Postgres目前需要在架构上避免重写(Hint Bits、Page Freeze等)。

列存储引擎:另外一个性能方面的增强是内置的列存储引擎(Native Columnar Storage),富士通提到他们研发的列存储引擎应用到富士通Postgres数据库一体机上,对于分析的性能最快的提高了13倍,社区也在讨论在Postgres内核里面如何引入内置的存储引擎。

动态编译:华为提到的利用LLVM动态编译提高数据库的性能,这个也会成为后续发展的一个重要方向。

表分区:还有日本Postgres用户企业联盟在大会上提到,他们去年针对5000家企业做了调查,目前企业认为Postgres导入到关键业务领域的时候,主要有两个特性诉求比较大,一个是表分区的特性,另外一个是目前Postgres的错误代码难以快速定位问题。表分区虽然目前社区已经有,但是在分区表数量比较大时候性能比较差,不能满足关键业务的要求。NTT Data的人员表示其9.6要做的一个工作就是重新设计高性能的表分区特性。

另外一个发展焦点是水平扩展性。

Sharding解决方案:pg_shard是目前比较活跃的分库解决方案,这个会上讨论比较多的是对于目前架构的优化,原来是使用一个主节点存储元数据信息,开发人员提到希望把元数据放到所有节点,这样就不需要主节点,但是元数据的同步需要引入Pasox协议进行同步。EnterpriseDB及NTT在会上意外的抛出了利用外部表FDW构建Postgres内置的分库(sharding)的解决方案。NTT以前是Postgres集群Postgres-XC的最主要的支持者及开发力量,NTT希望PG-XC里面的功能能够回合到社区的内核,这样才可能长远发展,而目前看来最现实的方法就是基于外部表FDW来实现分库的解决方案。这个方案包括几个技术点,一个是在外部表实现表继承(这样才能建立协调节点与分库节点的关系)这个特性在9.5已经实现,另外一个是要把下推的功能(push down)的功能在外部表实现,而这个方案的最大难点是在外部表实现分布式事务,EnterpriseDB在社区上提出其外部表其解决的方案和思路。他们提到争取在2-3年内实现这个方案。但与会的很多关键人员多这个方案持保留意见,pg_shard方的人员认为其之前已经采用过FDW的方案,但是最终放弃了,而且这个方案没有考虑可用性。

Postgres-XC/XL集群:但是,很多人表示,用外部表实现分库的方案只能解决一部分的问题,如果要实现全功能的集群仍然免不了继续在Postgres-XC或者XL上发展。目前有欧洲的2ndQuadrant、俄罗斯的团队、还有中国和日本的团队在进行开发。比较值的关注的是国内现在在这方面的开发比较活跃,日本NTT的铃木市一和我发起的旨在融合Postgres-XC/XL的github上的新项目Postgres-X2里面,铃木市一和我是项目的发起人和Owner,目前这个项目汇聚了很多中国公司,并在国内已经有几个商用的应用点,计划在7月底在杭州举行开发者大会。基于目前开发力量比较分散,俄罗斯人员呼吁所有力量团结起来,共同开发成熟的集群产品。大家建议今年在欧洲的Postgres大会一起共同商议后续的发展。

逻辑复制:集群的另外一个方向是,欧洲公司2ndQuadrant所主推的多主逻辑复制(bi-direction replication),该项目最初是受McAfee资助开发。传统的Postgres的复制只能够对整个数据库进行复制,不能对单表或者单库进行复制,同时复制是单向的,而这个项目可以对复制进行控制只复制某些特定的表或者信息,同时多个节点可以进行双向复制(需要定义冲突解决机制)。从9.3起已经有多个特性陆陆续续合入内核,计划在9.6完全融入内核,目前还在活跃开发。

自治事务:Postgres缺失的Oracle功能除了Merge INTO以外,另外一个最大的功能就是自治事务,包括2ndQuadrant的Simon Riggs及华为都提到会在社区开发这个功能。

感悟

今年是第一次给大家用文字简单分享了大会的收获,希望对大家有帮助。

每年一次去参加这个会,每次与来自世界各地的社区的老朋友相聚外,都能够感受到开源社区不仅仅是技术的纽带,还是联系朋友与友谊的纽带,每年大家聚一起除了分享各自的技术想法,还分享各自一年来的生活。这个就是开源社区的魅力吧。

国内的Postgres社区也期待大家的参与和加入。

相关推荐

黄道十二宫杀手密码51年后被破解,来自两位程序员和数学家合作

杨净边策发自凹非寺量子位报道|公众号QbitAI黄道十二宫杀手(ZodiacKiller)可能是世界上最知名的高智商连环杀手,52年来从未被抓获。他的事迹已被改编成了多部好莱坞电影。△...

深入剖析MediaCodec解码器的基本原理及使用「建议新手收藏」

一,MediaCodec工作原理MediaCodec类Android提供的用于访问低层多媒体编/解码器接口,它是Android低层多媒体架构的一部分,通常与MediaExtractor、MediaMu...

Retrofit WebService 实践

前言作为Android开发,平时和后端聊得最多的除了喝酒就是接口。常用语:Restful和WebService,前者现在聊得多,后者以前聊得多。默认含义分别为:Restful:HTTP协议...

建议收藏!175部4K UHD版本经典高分电影洗版参考目录(2015之前)

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:1L789近两年很多经典高分老电影陆续开始重制成4KUHD版本,虽然我早已将这些电影的BD蓝光版收入,但纠结一番后还是花了不少时间将其全部...

2 个月的面试亲身经历告诉大家,如何进入 BAT 等大厂?

这篇文章主要是从项目来讲的,所以,从以下几个方面展开。怎么介绍项目?怎么介绍项目难点与亮点?你负责的模块?怎么让面试官满意?怎么介绍项目?我在刚刚开始面试的时候,也遇到了这个问题,也是我第一个思考的问...

详解Android官推Kotlin-First的图片加载库

前言Coil是一个非常年轻的图片加载库,在2020年10月22日才发布了1.0.0版本,但却受到了Android官方的推广,在AndroidDevelopersBackst...

webview 渲染机制:硬件加速方式渲染的Android Web

webview渲染是什么?webview渲染是用于展现web页面的控件;webview可以内嵌在移动端,实现前端的混合式开发,大多数混合式开发框架都是基于webview模式进行二次开发的w...

因为我对Handler的了解,居然直接给我加了5K

1Handler是什么?android提供的线程切换工具类。主要的作用是通过handler实现从子线程切换回主线程进行ui刷新操作。1.1为什么Handler能实现线程切换?在创建Handler的...

「经典总结」一个View,从无到有会走的三个流程,你知道吗?

前言一个View,从无到有会走三个流程,也就是老生常谈的measure,layout,draw三流程我们都知道Android视图是由一层一层构成的层级结构,直白点说,就是父View包含子View而子V...

这些垃圾代码是谁写的?哦,原来小丑竟是我自己

程序员是最喜欢自嘲、自黑的群体之一,比如他们常常称自己是“码农”、“程序猿”,再比如他们的工作明明是写代码、修Bug,也有人调侃说:“明明我们是修代码、写Bug!”本文整理了一些程序员“修代码、写...

手把手教你爬取天堂网1920*1080大图片(批量下载)——理论篇

/1前言/平时我们要下载图片,要要一个一个点击下载是不是觉得很麻烦?那有没有更加简便的方法呢?答案是肯定的,这里我们以天堂网为例,批量下载天堂网的图片。/2项目准备工作/首先我们第一步我们要安装...

音视频开发需要你懂得 ffmpeg 开源库的编码原理

引言音视频开发需要你懂得音视频中一些基本概念,针对编解码而言,我们必须提前懂得编解码器的一些特性,码流的结构,码流中一些重要信息如sps,pps,vps,startcode以及基本的工作原理,...

「8年老 Android 开发」最全最新 Android 面试题系列全家桶(带答案)

下面跟大家分享的这些面试题都是互联网大厂真实流出的面试内容,每个问题都附带完整详细的答案,不像网上的那些资料三教九流有的甚至还没答案,这些面试题我也是经过日积月累才整理出来的精品资料。这些面试题主要是...

手把手教你爬取天堂网1920*1080大图片(批量下载)——实战篇

/1前言/上篇文章手把手教你爬取天堂网1920*1080大图片(批量下载)——理论篇我们谈及了天堂网站图片抓取的理论,这篇文章将针对上篇文章的未尽事宜进行完善,完成图片的批量抓取。/2图片网址解...

PHP 8.1.9 更新发布

CLI:修复了内置服务器通过PHP_CLI_server_WORKERS环境变量的潜在溢出。修正了GH-8952(不再可能有意关闭std句柄)。Core:修复了GH-8923的错误(Windows上的...