- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
下一代数据库的研发情况简介-乌鲁木齐云山云海信息技术有限责任公司.doc
乌鲁木齐云山云海信息技术有限责任公司
下一代数据库的研发情况简介
目前的通用数据库领域是以Oracle, Microsoft SQL, IBM DB2, SyBase, Infomax等美国公司开发的数据库, 这些数据库的主体架构开始于1980’s, 架构体系在这个日新月异的软件世界里, 本身已经陈腐不堪, 因此, 新的NoSQL体系架构开始出现了很多新产品, 在很多性能方面远远超过了现有数据库, 这几年大数据概念的兴起, 本身就是现有数据库相关产品已经不能适应现代数据量和发展, 而出现一些临时性的解决办法, 根本的解决办法还是要开发全新的高性能的分布式的数据库. 目前已经出现了数据库架构全新革命的萌芽.其中, MongoDB, LevelDB,TenTimes等为代表的一些产品, 为全新数据库体系的开发提供了很好的思路.
目前的数据处理软件存在四大瓶颈:
传统网络接口层的瓶颈:
目前网络接口TCP/IP处理层已经成为主要的瓶颈之一. 高性能的网络层编程都是多线程代码来完成的,早期众多公司采用线程池+每个连接开一个线程的处理方式来实现对大并发的处理,这种处理方式相对比较简单,主要的缺点是:开的线程数量比较多,CPU的线程切换比较频繁,每个包处理可能都涉及一次线程的切入和切出,造成系统资源的无效调度浪费。
目前最新的技术方案是EPOLL+CPU数量的线程 来解决高并发下的高性能网络层接口, 每家公司的技术方案各有不同,但是总体架构基本都已经在往这个方向上过渡。这个技术方案的核心思路是:一个是利用多组EPOLL实现网络包收发的内部消息通知,二是每个CPU只绑定一个线程, 每个线程处理多个连接的TCP/IP数据包,形成一个N个CPU:M个连接的方案,这样就完全避免了线程的切换,极大的提高了网络层的并发量。
乌鲁木齐云山云海信息技术有限公司对网络层接口的进行了大量的开发测试工作,目前公司开发的网络层Echo Server已经实现在普通4核心3.4G主频CPU上每秒87万QPS,进入到了国际一流性能的前列。主要的代码在Boost Asio库的基础上进行优化,优化了CPU的调度机制,将每两个一组IP包的收和发,总消耗时长压缩到了5微秒的级别,并且随CPU数量的增加,处理能力也会线性增长。
传统CPU线程调度层的瓶颈:
目前主流的多线程程序是采用线程池来实现的, 优点是简单方便,缺点是:如果有大量短小任务的情况下,每次处理都涉及一次线程切换,在极端情况下,每次线程切换所花费的时间会大于处理数据的时间。
为了解决这一问题,目前最新的技术方案是采用微线程(fiber-thread)或者协程或者用户态线程等,核心就是:每CPU分配一个标准线程,每个标准线程分配大量的用户态微线程。另外一个就是10G以上接口专用网卡的基于RDMA技术的网络层,是采用用户态轮训技术实现的,公司计划在前期主要是做通用网络层,后期会针对高性能网卡开发另外的网络层。
乌鲁木齐云山云海信息技术有限公司对于多线程的任务调度方向主要的思路是实现stackless 用户态微线程,通过C++函数对象, 使得一些状态可以保存到成员变量中. C++的函数对象, 既可以像普通函数那样调用, 又可以像通常的对象那样携带成员变量. 因此通过将变量置于对象而不是栈上, 并且通过用户态的任务队列,C++就可以实现无栈用户态微线程. 微线程的开销不过就是一个函数对象, 通常大小不过几个字节到几KB字节. 因此无栈用户态微线程无需当心内存开销,也没有CPU线程切换的开销,性能非常好,实测微线程调度能力是每队列每秒1400万次以上双向调度能力(等效2800万此单向调度能力),是目前国际前列的。
传统内存管理层的瓶颈:
目前最快的多线程的内存管理层接口是Jemalloc和TCMalloc,这一接口层通过建立TLS线程局部内存池的方式,减少了系统调用和用锁的概率,比传统的内存库性能提高了数倍。
乌鲁木齐云山云海信息技术有限公司对于这个方向主要的思路是在原有库的基础上进行优化,另外封装了一层专门针对线程间共享内存shared_ptr的内存池,主要的目的是解决A线程申请内存,B线程释放内存,此种情况下TCMalloc内部处理需要锁来协调线程释放内存,时延比较大的问题。
乌鲁木齐云山云海信息技术有限公司主要的技术方案是实现了类似Java一样的shared_ptr垃圾内存收集的机制,定期回收无用内存,将任务处理过程中的Delete开销后移到空闲的时间进行,减少了处理时延,减少了锁冲突,也提高了处理能力。
传统IO磁盘接口层的瓶颈:
目前磁盘IO层是数据库类产品最大的瓶颈,各公司的产品差异化和单机性能的主要瓶颈都是磁盘IO层。磁盘IO接口层目前两个性能上
文档评论(0)