免费虚拟化OVM与 OpenStack对比

虚拟化老兵 发表了文章 • 0 个评论 • 391 次浏览 • 2017-09-13 14:06 • 来自相关话题

OpenStack作为一款全球化的开源软件,其设计之初的定位就是对于大中型企业,因为这些企业可以派出丰富而强大的技术团队进行深度开发与维护,而对缺乏软件开发和运维能力的传统企业及中小企业来说,易思捷OVM是100%更好的选择。(技术服务qq
群22265939)[b]OVM是开箱即用的一站式解决方案[/b]OpenStack的开源软件安装部署对于很多运维人员来说都不陌生,企业大多只提供安装包和简单的安装文档,而这些安装过程大多会涉及到数据库、redis、rabbitmq、ruby等环境的配置,这些配置也要求运维人员学习以上软件的安装部署,否则一步配置错误就会导致整体的安装部署失败,从而造成整个安装部署少则2-3天多则1-2周才能完成的窘境,复杂的安装部署过程让运维人员疲惫不堪。Openstack作为开源产品也不例外,并且 OpenStack可下载的厂商定制版本就有20多个,客户根本不知道应选择哪个版本,更不要说在不同厂商版本之间组合、混搭、迁移了,对于IT投入较小且缺乏专业人才的中小企业而言只能望洋兴叹。
而OVM是面向数据中心的一款开箱即用的免费服务器虚拟化软件,有别于传统的开源软件,OVM安装部署全部(包括管理平台和计算节点)采用一键式的ISO方式,整个安装过程就像是在安装一个Centos操作系统一样的简单,只用花费10-20分钟的过程就可以完成。即使是运维小白,通过OVM提供的ISO镜像也可在1小时内完成整个产品的安装部署。

[b]OVM的稳定性经得起考验[/b]
OVM从架构设计之初就充分考虑到产品的稳定性,并把稳定性放在了第一位。因为作为一款Iaas级的虚拟化管理软件,它不仅仅是一个软件,更是连接用户数据中心的中枢(包括物理机、存储、网络、防火墙、灾备等)。在架构设计上,OVM同时具备了开源软件和商业软件的优点,首先保证产品无单点故障,即管理平台高可用;其次支持分布式部署,将不可预估因素造成的损失降到最小。OVM架构包括分布式和插件式,这两个特点既允许用户将不同的模块和服务部署在同一台Server上面,也可以将其分开部署在多台Server上,大大了提高了部署的灵活性,同时也可将单点故障的风险降到最小。另外OVM引入了Zookeeper、Pacemaker等软件来为OVM提供高可用性,避免单点故障的发生。OVM的每个版本均经过严格的内测,再正式对外发布,每一个环节我们都严把质量关,将稳定性自始至终贯穿到OVM产品的每个环节。
而OpenStack每半年升级一次,每次升级都需要花费大量时间修复bug。根据www.51cto.com做的一项关于OpenStack的用户调查, 33.33%的用户认为OpenStack还不够稳定而且修改难度大。

[b]OVM升级更轻松简单[/b]对于一个产品来说,迭代升级是必然的事情,未来产品研发规划中, OVM将考虑如何让用户不费吹灰之力就可以升级使用最新版本。最终做到与UI无缝结合,用户只需点击WEB管理平台中的一键升级按钮便可轻松实现版本的快速升级,并且不会影响到业务的正常运行。而OpenStack的Nova,Swift,Cinder和Neutron分别使用各自的数据库存储配置信息,
要升级就要修改多个数据库schema,做不到热升级。再如,HP作为OpenStack的白金会员在部署网络服务(Neutron)时,遇到了噩梦般的经历,不得不重写网络组件的代码才能达到大规模应用的要求。OpenStack还有一个问题就是半年快速迭代,发布新产品,速度太快,老版本跟不上,理论上,新版本向下兼容,但当一些版本改动较大,加入新功能时,如果企业已经深度应用了旧版本,可能面临技术无法升级,或者需要重度开发的问题。由此说明,OpenStack在集成性、扩展性和实用性上还不足,如果要选用,需要一支专家队伍帮助实施。

[b]OVM可以提供端到端的服务[/b]

易思捷OVM社区作为OVM产品唯一的服务商,提供统一的产品功能和技术服务,以用户需求为导向来提供产品功能,也可以为用户提供端到端的服务保障。
而OpenStack不能提供端到端的服务保障。云平台必备的自动化部署、自动化运维、状态监控、设备管理、可用性检测、安全性、可靠性和平台自修复功能在OpenStack中或者缺失,或者散落在单独产品中。客户拿到手的只是散落的“骨架“,必须通过专业技术人员手工将多厂商、多版本的逐个功能集成起来,这对于中小企业来说显然难度很大。

[b]OVM的架构和性能更优[/b]

与OpenStack笨重的架构对比,OVM更加的轻量级,对于产品初期的按照及后期的运维都要简单得多。众所周知,OpenStack大小模块和组件加起来会有好几十个,要想真正搞懂每个组件,一两个人是无法完成的,是必须要有一个强大的技术团队才能支撑起来的。而且直接使用开源的OpenStack会存在很多bug,无法规模化商用,所以很多企业只能选择商业公司封装的OpenStack版本。另外需要着重说明的是,OpenStack不是产品,只是架构,在开源社区开发的各类版本,只有在“封装”之后才可以使用。一般的企业不具备这种技术实力,需要IT公司帮助实施、运维、开发等工作,这样无疑又加重了企业的总体成本。
综上,与OpenStack相比,易思捷OVM产品架构的设计严格按照商业产品架构的高标准要求,始终把产品的稳定性、易用性、可扩展性,以及产品的高性能放在第一位,秉承“用户是上帝”的理念,为用户提供优质的服务和高品质的产品,让大家共同来使用和见证中国人自己的虚拟化产品!
(技术服务qq群22265939) 查看全部
    OpenStack作为一款全球化的开源软件,其设计之初的定位就是对于大中型企业,因为这些企业可以派出丰富而强大的技术团队进行深度开发与维护,而对缺乏软件开发和运维能力的传统企业及中小企业来说,易思捷OVM是100%更好的选择。(技术服务qq
群22265939)
[b]OVM是开箱即用的一站式解决方案[/b]
OpenStack的开源软件安装部署对于很多运维人员来说都不陌生,企业大多只提供安装包和简单的安装文档,而这些安装过程大多会涉及到数据库、redis、rabbitmq、ruby等环境的配置,这些配置也要求运维人员学习以上软件的安装部署,否则一步配置错误就会导致整体的安装部署失败,从而造成整个安装部署少则2-3天多则1-2周才能完成的窘境,复杂的安装部署过程让运维人员疲惫不堪。Openstack作为开源产品也不例外,并且 OpenStack可下载的厂商定制版本就有20多个,客户根本不知道应选择哪个版本,更不要说在不同厂商版本之间组合、混搭、迁移了,对于IT投入较小且缺乏专业人才的中小企业而言只能望洋兴叹。
而OVM是面向数据中心的一款开箱即用的免费服务器虚拟化软件,有别于传统的开源软件,OVM安装部署全部(包括管理平台和计算节点)采用一键式的ISO方式,整个安装过程就像是在安装一个Centos操作系统一样的简单,只用花费10-20分钟的过程就可以完成。即使是运维小白,通过OVM提供的ISO镜像也可在1小时内完成整个产品的安装部署。

[b]OVM的稳定性经得起考验[/b]
OVM从架构设计之初就充分考虑到产品的稳定性,并把稳定性放在了第一位。因为作为一款Iaas级的虚拟化管理软件,它不仅仅是一个软件,更是连接用户数据中心的中枢(包括物理机、存储、网络、防火墙、灾备等)。在架构设计上,OVM同时具备了开源软件和商业软件的优点,首先保证产品无单点故障,即管理平台高可用;其次支持分布式部署,将不可预估因素造成的损失降到最小。OVM架构包括分布式和插件式,这两个特点既允许用户将不同的模块和服务部署在同一台Server上面,也可以将其分开部署在多台Server上,大大了提高了部署的灵活性,同时也可将单点故障的风险降到最小。另外OVM引入了Zookeeper、Pacemaker等软件来为OVM提供高可用性,避免单点故障的发生。OVM的每个版本均经过严格的内测,再正式对外发布,每一个环节我们都严把质量关,将稳定性自始至终贯穿到OVM产品的每个环节。
而OpenStack每半年升级一次,每次升级都需要花费大量时间修复bug。根据www.51cto.com做的一项关于OpenStack的用户调查, 33.33%的用户认为OpenStack还不够稳定而且修改难度大。

[b]OVM升级更轻松简单[/b]
对于一个产品来说,迭代升级是必然的事情,未来产品研发规划中, OVM将考虑如何让用户不费吹灰之力就可以升级使用最新版本。最终做到与UI无缝结合,用户只需点击WEB管理平台中的一键升级按钮便可轻松实现版本的快速升级,并且不会影响到业务的正常运行。
而OpenStack的Nova,Swift,Cinder和Neutron分别使用各自的数据库存储配置信息,
要升级就要修改多个数据库schema,做不到热升级。再如,HP作为OpenStack的白金会员在部署网络服务(Neutron)时,遇到了噩梦般的经历,不得不重写网络组件的代码才能达到大规模应用的要求。OpenStack还有一个问题就是半年快速迭代,发布新产品,速度太快,老版本跟不上,理论上,新版本向下兼容,但当一些版本改动较大,加入新功能时,如果企业已经深度应用了旧版本,可能面临技术无法升级,或者需要重度开发的问题。由此说明,OpenStack在集成性、扩展性和实用性上还不足,如果要选用,需要一支专家队伍帮助实施。

[b]OVM可以提供端到端的服务[/b]

易思捷OVM社区作为OVM产品唯一的服务商,提供统一的产品功能和技术服务,以用户需求为导向来提供产品功能,也可以为用户提供端到端的服务保障。
而OpenStack不能提供端到端的服务保障。云平台必备的自动化部署、自动化运维、状态监控、设备管理、可用性检测、安全性、可靠性和平台自修复功能在OpenStack中或者缺失,或者散落在单独产品中。客户拿到手的只是散落的“骨架“,必须通过专业技术人员手工将多厂商、多版本的逐个功能集成起来,这对于中小企业来说显然难度很大。

[b]OVM的架构和性能更优[/b]

与OpenStack笨重的架构对比,OVM更加的轻量级,对于产品初期的按照及后期的运维都要简单得多。众所周知,OpenStack大小模块和组件加起来会有好几十个,要想真正搞懂每个组件,一两个人是无法完成的,是必须要有一个强大的技术团队才能支撑起来的。而且直接使用开源的OpenStack会存在很多bug,无法规模化商用,所以很多企业只能选择商业公司封装的OpenStack版本。另外需要着重说明的是,OpenStack不是产品,只是架构,在开源社区开发的各类版本,只有在“封装”之后才可以使用。一般的企业不具备这种技术实力,需要IT公司帮助实施、运维、开发等工作,这样无疑又加重了企业的总体成本。
综上,与OpenStack相比,易思捷OVM产品架构的设计严格按照商业产品架构的高标准要求,始终把产品的稳定性、易用性、可扩展性,以及产品的高性能放在第一位,秉承“用户是上帝”的理念,为用户提供优质的服务和高品质的产品,让大家共同来使用和见证中国人自己的虚拟化产品!
(技术服务qq群22265939)

【直播预告】Sophos云服务助力快速组网VPN网络

OT学习平台 发表了文章 • 0 个评论 • 229 次浏览 • 2017-09-11 15:56 • 来自相关话题

VPN一般指虚拟专用网络,是一种在公用网络上建立的专用网络,进行加密通讯,在企业网络中有广泛应用。

VPN网关通过对数据包的加密和数据包目标地址的转换实现远程访问。VPN有多种分类方式,主要是按协议进行分类。VPN可通过服务器、硬件、软件等多种方式实现。

随着应用市场的需求,多分支计算机应用已经越来越广泛,但对于多分支点的计算机管理还存在着诸多挑战。

传统分支点管理的痛点

1、网点非常多

2、地域广

3、网点增长快

4、计算机少

5、无法跟上高增长节奏的有限的IT资源

总部IT部门无法有效进行管理

1、无法统一安全策略

2、运维效率低下

3、持续投入的人员成本

分支点的计算机管理通常是总部 IT 的恶梦。然而以上这些恶梦,通过VPN组建即可轻松化解。

如果您的企业设有较多的小微型分支机构,利用Sophos公司独特的VPN设备——RED,快速组建一个免配置、免维护的星型VPN网络。便于您简单经济地实现分支机构与总部的连接,并确保安全的 Internet 访问。

敬请关注,9月14日14:00,“Sophos云服务助力快速组网VPN网络”直播活动,专家与您分享,VPN快速搭建的方法.

直播间地址:“Sophos云服务助力快速组网VPN网络​” 查看全部
VPN一般指虚拟专用网络,是一种在公用网络上建立的专用网络,进行加密通讯,在企业网络中有广泛应用。

VPN网关通过对数据包的加密和数据包目标地址的转换实现远程访问。VPN有多种分类方式,主要是按协议进行分类。VPN可通过服务器、硬件、软件等多种方式实现。

随着应用市场的需求,多分支计算机应用已经越来越广泛,但对于多分支点的计算机管理还存在着诸多挑战。

传统分支点管理的痛点

1、网点非常多

2、地域广

3、网点增长快

4、计算机少

5、无法跟上高增长节奏的有限的IT资源

总部IT部门无法有效进行管理

1、无法统一安全策略

2、运维效率低下

3、持续投入的人员成本

分支点的计算机管理通常是总部 IT 的恶梦。然而以上这些恶梦,通过VPN组建即可轻松化解。

如果您的企业设有较多的小微型分支机构,利用Sophos公司独特的VPN设备——RED,快速组建一个免配置、免维护的星型VPN网络。便于您简单经济地实现分支机构与总部的连接,并确保安全的 Internet 访问。

敬请关注,9月14日14:00,“Sophos云服务助力快速组网VPN网络”直播活动,专家与您分享,VPN快速搭建的方法.

直播间地址:“Sophos云服务助力快速组网VPN网络​”

MySQL主从同步那点事儿

Rock 发表了文章 • 0 个评论 • 281 次浏览 • 2017-09-10 22:06 • 来自相关话题

一、前言​
关于mysql主从同步,相信大家都不陌生,随着系统应用访问量逐渐增大,单台数据库读写访问压力也随之增大,当读写访问达到一定瓶颈时,将数据库的读写效率骤然下降,甚至不可用;为了解决此类问题,通常会采用mysql集群,当主库宕机后,集群会自动将一个从库升级为主库,继续对外提供服务;那么主库和从库之间的数据是如何同步的呢?本文针对MySQL 5.7版本进行下面的分析,下面随笔者一起探究一下mysql主从是如何同步的。
 
二、MySQL主从复制原理
为了减轻主库的压力,应该在系统应用层面做读写分离,写操作走主库,读操作走从库,下图为MySQL官网给出的主从复制的原理图,从图中可以简单的了解读写分离及主从同步的过程,分散了数据库的访问压力,提升整个系统的性能和可用性,降低了大访问量引发数据库宕机的故障率。




 
三、binlog简介
MySQL主从同步是基于binlog文件主从复制实现,为了更好的理解主从同步过程,这里简单介绍一下binlog日志文件。

binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改,它是以二进制的形式保存在磁盘中。我们可以通过mysql提供的查看工具mysqlbinlog查看文件中的内容,例如 mysqlbinlog mysql-bin.00001 | more,这里注意一下binlog文件的后缀名00001,binlog文件大小和个数会不断的增加,当MySQL停止或重启时,会产生一个新的binlog文件,后缀名会按序号递增,例如mysql-bin.00002、mysql-bin.00003,并且当binlog文件大小超过 max_binlog_size系统变量配置时也会产生新的binlog文件。
 
(一)binlog日志格式
(1) statement : 记录每一条更改数据的sql;
优点:binlog文件较小,节约I/O,性能较高。缺点:不是所有的数据更改都会写入binlog文件中,尤其是使用MySQL中的一些特殊函数(如LOAD_FILE()、UUID()等)和一些不确定的语句操作,从而导致主从数据无法复制的问题。
 
(2) row : 不记录sql,只记录每行数据的更改细节
优点:详细的记录了每一行数据的更改细节,这也意味着不会由于使用一些特殊函数或其他情况导致不能复制的问题。缺点:由于row格式记录了每一行数据的更改细节,会产生大量的binlog日志内容,性能不佳,并且会增大主从同步延迟出现的几率。
 
(3) mixed:一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种。
 
(二)binlog日志内容




 
(三)binlog事件类型
MySQL binlog记录的所有操作实际上都有对应的事件类型的,譬如STATEMENT格式中的DML操作对应的是QUERY_EVENT类型,ROW格式下的DML操作对应的是ROWS_EVENT类型,如果想了解更多请参考官方文档,有关binlog日志内容不在这里过多赘述,简单介绍一下是为了更好的理解主从复制的细节,下面我们进入正题。
 
 
四、MySQL主从复制原理
mysql主从复制需要三个线程,master(binlog dump thread)、slave(I/O thread 、SQL thread)。
 
 
Master
(1)binlog dump线程:当主库中有数据更新时,那么主库就会根据按照设置的binlog格式,将此次更新的事件类型写入到主库的binlog文件中,此时主库会创建log dump线程通知slave有数据更新,当I/O线程请求日志内容时,会将此时的binlog名称和当前更新的位置同时传给slave的I/O线程。
 
Slave
(2)I/O线程:该线程会连接到master,向log dump线程请求一份指定binlog文件位置的副本,并将请求回来的binlog存到本地的relay log中,relay log和binlog日志一样也是记录了数据更新的事件,它也是按照递增后缀名的方式,产生多个relay log( host_name-relay-bin.000001)文件,slave会使用一个index文件( host_name-relay-bin.index)来追踪当前正在使用的relay log文件。
 
(3)SQL线程:该线程检测到relay log有更新后,会读取并在本地做redo操作,将发生在主库的事件在本地重新执行一遍,来保证主从数据同步。此外,如果一个relay log文件中的全部事件都执行完毕,那么SQL线程会自动将该relay log 文件删除掉。
 
下面是整个复制过程的原理图:




 
四、主从同步延迟
mysql的主从复制都是单线程的操作,主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的I/O线程到主库取日志,效率也比较高,但是,slave的SQL线程将主库的DDL和DML操作在slave实施。DML和DDL的IO操作是随即的,不是顺序的,成本高很多,还可能存在slave上的其他查询产生lock争用的情况,由于SQL也是单线程的,所以一个DDL卡住了,需要执行很长一段事件,后续的DDL线程会等待这个DDL执行完毕之后才执行,这就导致了延时。当主库的TPS并发较高时,产生的DDL数量超过slave一个sql线程所能承受的范围,延时就产生了,除此之外,还有可能与slave的大型query语句产生了锁等待导致。
 
由于主从同步延迟是客观存在的,我们只能从我们自己的架构上进行设计, 尽量让主库的DDL快速执行。下面列出几种常见的解决方案:
业务的持久化层的实现采用分库架构,mysql服务可平行扩展,分散压力。服务的基础架构在业务和mysql之间加入memcache或者Redis的cache层。降低mysql的读压力;使用比主库更好的硬件设备作为slave;sync_binlog在slave端设置为0;–logs-slave-updates 从服务器从主服务器接收到的更新不记入它的二进制日志。禁用slave的binlog
 
五、参考资料
https://dev.mysql.com/doc/refman/5.7/en/replication.html  
http://www.linuxidc.com/Linux/2014-05/101450.htm  
http://blog.csdn.net/xiongping_/article/details/49907095  
http://www.cnblogs.com/martinzhang/p/3454358.html  
“本文转载自 linkedkeeper.com (文/张松然)”地址:http://www.linkedkeeper.com/detail/blog.action?bid=1028   查看全部
一、前言​
关于mysql主从同步,相信大家都不陌生,随着系统应用访问量逐渐增大,单台数据库读写访问压力也随之增大,当读写访问达到一定瓶颈时,将数据库的读写效率骤然下降,甚至不可用;为了解决此类问题,通常会采用mysql集群,当主库宕机后,集群会自动将一个从库升级为主库,继续对外提供服务;那么主库和从库之间的数据是如何同步的呢?本文针对MySQL 5.7版本进行下面的分析,下面随笔者一起探究一下mysql主从是如何同步的。
 
二、MySQL主从复制原理
为了减轻主库的压力,应该在系统应用层面做读写分离,写操作走主库,读操作走从库,下图为MySQL官网给出的主从复制的原理图,从图中可以简单的了解读写分离及主从同步的过程,分散了数据库的访问压力,提升整个系统的性能和可用性,降低了大访问量引发数据库宕机的故障率。
mysqlrep.png

 
三、binlog简介
MySQL主从同步是基于binlog文件主从复制实现,为了更好的理解主从同步过程,这里简单介绍一下binlog日志文件。

binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改,它是以二进制的形式保存在磁盘中。我们可以通过mysql提供的查看工具mysqlbinlog查看文件中的内容,例如 mysqlbinlog mysql-bin.00001 | more,这里注意一下binlog文件的后缀名00001,binlog文件大小和个数会不断的增加,当MySQL停止或重启时,会产生一个新的binlog文件,后缀名会按序号递增,例如mysql-bin.00002、mysql-bin.00003,并且当binlog文件大小超过 max_binlog_size系统变量配置时也会产生新的binlog文件。
 
(一)binlog日志格式
(1) statement : 记录每一条更改数据的sql;
  • 优点:binlog文件较小,节约I/O,性能较高。
  • 缺点:不是所有的数据更改都会写入binlog文件中,尤其是使用MySQL中的一些特殊函数(如LOAD_FILE()、UUID()等)和一些不确定的语句操作,从而导致主从数据无法复制的问题。

 
(2) row : 不记录sql,只记录每行数据的更改细节
  • 优点:详细的记录了每一行数据的更改细节,这也意味着不会由于使用一些特殊函数或其他情况导致不能复制的问题。
  • 缺点:由于row格式记录了每一行数据的更改细节,会产生大量的binlog日志内容,性能不佳,并且会增大主从同步延迟出现的几率。

 
(3) mixed:一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种。
 
(二)binlog日志内容
binlog.png

 
(三)binlog事件类型
MySQL binlog记录的所有操作实际上都有对应的事件类型的,譬如STATEMENT格式中的DML操作对应的是QUERY_EVENT类型,ROW格式下的DML操作对应的是ROWS_EVENT类型,如果想了解更多请参考官方文档,有关binlog日志内容不在这里过多赘述,简单介绍一下是为了更好的理解主从复制的细节,下面我们进入正题。
 
 
四、MySQL主从复制原理
mysql主从复制需要三个线程,master(binlog dump thread)、slave(I/O thread 、SQL thread)。
 
 
Master
(1)binlog dump线程:当主库中有数据更新时,那么主库就会根据按照设置的binlog格式,将此次更新的事件类型写入到主库的binlog文件中,此时主库会创建log dump线程通知slave有数据更新,当I/O线程请求日志内容时,会将此时的binlog名称和当前更新的位置同时传给slave的I/O线程。
 
Slave
(2)I/O线程:该线程会连接到master,向log dump线程请求一份指定binlog文件位置的副本,并将请求回来的binlog存到本地的relay log中,relay log和binlog日志一样也是记录了数据更新的事件,它也是按照递增后缀名的方式,产生多个relay log( host_name-relay-bin.000001)文件,slave会使用一个index文件( host_name-relay-bin.index)来追踪当前正在使用的relay log文件。
 
(3)SQL线程:该线程检测到relay log有更新后,会读取并在本地做redo操作,将发生在主库的事件在本地重新执行一遍,来保证主从数据同步。此外,如果一个relay log文件中的全部事件都执行完毕,那么SQL线程会自动将该relay log 文件删除掉。
 
下面是整个复制过程的原理图:
mysqlab.png

 
四、主从同步延迟
mysql的主从复制都是单线程的操作,主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的I/O线程到主库取日志,效率也比较高,但是,slave的SQL线程将主库的DDL和DML操作在slave实施。DML和DDL的IO操作是随即的,不是顺序的,成本高很多,还可能存在slave上的其他查询产生lock争用的情况,由于SQL也是单线程的,所以一个DDL卡住了,需要执行很长一段事件,后续的DDL线程会等待这个DDL执行完毕之后才执行,这就导致了延时。当主库的TPS并发较高时,产生的DDL数量超过slave一个sql线程所能承受的范围,延时就产生了,除此之外,还有可能与slave的大型query语句产生了锁等待导致。
 
由于主从同步延迟是客观存在的,我们只能从我们自己的架构上进行设计, 尽量让主库的DDL快速执行。下面列出几种常见的解决方案:
  1. 业务的持久化层的实现采用分库架构,mysql服务可平行扩展,分散压力。
  2. 服务的基础架构在业务和mysql之间加入memcache或者Redis的cache层。降低mysql的读压力;
  3. 使用比主库更好的硬件设备作为slave;
  4. sync_binlog在slave端设置为0;
  5. –logs-slave-updates 从服务器从主服务器接收到的更新不记入它的二进制日志。
  6. 禁用slave的binlog

 
五、参考资料
https://dev.mysql.com/doc/refman/5.7/en/replication.html  
http://www.linuxidc.com/Linux/2014-05/101450.htm  
http://blog.csdn.net/xiongping_/article/details/49907095  
http://www.cnblogs.com/martinzhang/p/3454358.html  
“本文转载自 linkedkeeper.com (文/张松然)”地址:http://www.linkedkeeper.com/detail/blog.action?bid=1028  

Go Web框架gin vs echo

koyo 发表了文章 • 0 个评论 • 410 次浏览 • 2017-09-10 20:36 • 来自相关话题

Web框架类型

web框架的主流,是采用轻量级的中间件式框架,把网站变成只有api的一个个小服务,其他都扔到cdn之类的地方处理。

这种方式,开发快速、拼装能力强,要什么就加什么,不要的就不加,就像是乐高玩具,大受欢迎。

问题在于,这种框架有一堆,到底该选哪个。

Gin vs Echo

在golang中,这种杰出代表,有2个:gin 和 echo。

这两个框架,在同类中,路由性能最高,超出其他框架一大截。google了一大堆英文站,也没有找到这两个框架的比较。于是,在我们实际使用后,提供个比较。

先说结论:
如果你代表企业,最好选择gin,无痛开发。如果是个人,开发个轻量服务,哪怕echo有点小问题,你也觉得没啥,那么,就用echo。
 
下面是开始进行比较。

框架成熟度

gin完胜
gin拥有详尽的出错信息,极为方便调试。这非常关键。团队项目,这个更加重要。echo在这方面,就略微逊色。使用框架的第一天,就遇到了明明路由语法写错了,却不报错、不给结果,也没有任何提示的情况。
 

路由性能

gin微弱小胜
gin的卖点,是所有web框架中,路由性能最好。echo的卖点,是它的路由性能,比gin还好10%。
 
国外实际测试结果是:echo只在空路由时,性能比gin好10%。而常用的各种带参数路由,echo其实要输给gin约5-10%。

echo给出和其他框架的对比




最新详尽对比:https://github.com/gin-gonic/gin/issues/329  
 

路由便利、灵活性

一回事,都有点小不便:
两个路由采用同一种算法,这种算法性能很高,但有个缺点: 不支持路由排序,会认为是路由冲突。比如: 路由Get("/name")和 Get("/:id") ,一般来说,只要把Get("/name")放在Get("/:id")前面,就是不冲突的。路由模块,会先尝试匹配前面那个,没匹配上,再去匹配后面的。而 gin和echo用的路由模块,会认为这两个路由是冲突的。gin会给出提醒,不让编译通过;echo完全不提醒,冲突就冲突了。。。
这给路由起名、设计,带来了一些麻烦。

框架的可持续发展

两个都不够好。
gin的主创是2个大学生。每年寒暑假就频繁更新,快到期末考试了,就完全不更新了。两人不在的时候,有网友在帮忙热情的维护,但主要是修bug、整理中间件。框架本身的发展,还是靠主创寒暑假爆发。就是这样的框架,连csico都在用。。。好在,gin的代码注释量大,易读性高,便于其他人参与。而且包装中间件,也超级容易。作者本人的态度是,对于一个在github上,start达到5000+的项目,他怎么可能会不去维护。请大家放心使用,到寒暑假了,他自然会去更新。。。echo则是主创当前处于活跃状态,并且乐呵呵的想要开发2.0版。由于主创活跃,它自带了一些流行功能,比如websocket, http2, jwt授权。用gin的话,这些功能要自己包装个中间件,虽然也很容易就是了。但echo的问题在于,它的代码毫无注释。作者现在是在劲头上,等3-6个月,在路上看到个穿超短的妹子,热情转移了,很快就会忘记当时代码是怎么写的。没有注释,不但别人不方便接手,自己也懒得再去看,于是慢慢就永不再更新。缺少注释的开源包,大部分都有这个问题。echo最终会不会变成这个结局,我们无从得知。
 

总结

综上
echo的状态是当下主创本人活跃,框架还不太成熟,适合最轻量级服务;gin则是整体成熟、易于调试,但可以预期,框架本身发展不会太快,除非主创大学毕业,从事和golang相关的工作。echo的使用方式、命名,都参考了gin,两者很接近,切换框架很容易,所以不用担心选错。
 
更新
由于echo的路由冲突频繁且没有调试信息,目前不是合理选择。等作者补上了路由冲突检测,那么就还不错。
 
如果想要回避这种框架的路由冲突,又想享受类似的优秀,neo框架目前最接近.
 
原文地址:https://www.golangtc.com/t/56a38761b09ecc083100010c  查看全部


Web框架类型


web框架的主流,是采用轻量级的中间件式框架,把网站变成只有api的一个个小服务,其他都扔到cdn之类的地方处理。

这种方式,开发快速、拼装能力强,要什么就加什么,不要的就不加,就像是乐高玩具,大受欢迎。

问题在于,这种框架有一堆,到底该选哪个。


Gin vs Echo


在golang中,这种杰出代表,有2个:gin 和 echo。

这两个框架,在同类中,路由性能最高,超出其他框架一大截。google了一大堆英文站,也没有找到这两个框架的比较。于是,在我们实际使用后,提供个比较。

先说结论:
  • 如果你代表企业,最好选择gin,无痛开发。
  • 如果是个人,开发个轻量服务,哪怕echo有点小问题,你也觉得没啥,那么,就用echo。

 
下面是开始进行比较。


框架成熟度


gin完胜
  • gin拥有详尽的出错信息,极为方便调试。
  • 这非常关键。团队项目,这个更加重要。
  • echo在这方面,就略微逊色。使用框架的第一天,就遇到了明明路由语法写错了,却不报错、不给结果,也没有任何提示的情况。

 


路由性能


gin微弱小胜
  • gin的卖点,是所有web框架中,路由性能最好。
  • echo的卖点,是它的路由性能,比gin还好10%。

 
国外实际测试结果是:echo只在空路由时,性能比gin好10%。而常用的各种带参数路由,echo其实要输给gin约5-10%。

echo给出和其他框架的对比
GoAPI.png

最新详尽对比:https://github.com/gin-gonic/gin/issues/329  
 


路由便利、灵活性


一回事,都有点小不便:
  • 两个路由采用同一种算法,这种算法性能很高,但有个缺点: 不支持路由排序,会认为是路由冲突。
  • 比如: 路由Get("/name")和 Get("/:id") ,一般来说,只要把Get("/name")放在Get("/:id")前面,就是不冲突的。路由模块,会先尝试匹配前面那个,没匹配上,再去匹配后面的。
  • 而 gin和echo用的路由模块,会认为这两个路由是冲突的。gin会给出提醒,不让编译通过;echo完全不提醒,冲突就冲突了。。。

这给路由起名、设计,带来了一些麻烦。


框架的可持续发展


两个都不够好。
  • gin的主创是2个大学生。每年寒暑假就频繁更新,快到期末考试了,就完全不更新了。两人不在的时候,有网友在帮忙热情的维护,但主要是修bug、整理中间件。框架本身的发展,还是靠主创寒暑假爆发。就是这样的框架,连csico都在用。。。
  • 好在,gin的代码注释量大,易读性高,便于其他人参与。而且包装中间件,也超级容易。
  • 作者本人的态度是,对于一个在github上,start达到5000+的项目,他怎么可能会不去维护。请大家放心使用,到寒暑假了,他自然会去更新。。。
  • echo则是主创当前处于活跃状态,并且乐呵呵的想要开发2.0版。由于主创活跃,它自带了一些流行功能,比如websocket, http2, jwt授权。用gin的话,这些功能要自己包装个中间件,虽然也很容易就是了。
  • 但echo的问题在于,它的代码毫无注释。作者现在是在劲头上,等3-6个月,在路上看到个穿超短的妹子,热情转移了,很快就会忘记当时代码是怎么写的。没有注释,不但别人不方便接手,自己也懒得再去看,于是慢慢就永不再更新。
  • 缺少注释的开源包,大部分都有这个问题。echo最终会不会变成这个结局,我们无从得知。

 


总结


综上
  • echo的状态是当下主创本人活跃,框架还不太成熟,适合最轻量级服务;
  • gin则是整体成熟、易于调试,但可以预期,框架本身发展不会太快,除非主创大学毕业,从事和golang相关的工作。
  • echo的使用方式、命名,都参考了gin,两者很接近,切换框架很容易,所以不用担心选错。

 
更新
由于echo的路由冲突频繁且没有调试信息,目前不是合理选择。等作者补上了路由冲突检测,那么就还不错。
 
如果想要回避这种框架的路由冲突,又想享受类似的优秀,neo框架目前最接近.
 
原文地址:https://www.golangtc.com/t/56a38761b09ecc083100010c 

Postfix小技巧和故障诊断命令

Ansible 发表了文章 • 0 个评论 • 267 次浏览 • 2017-09-03 23:27 • 来自相关话题

下面列举出来的一些小技巧在邮件管理员的日常中会经常用到,如果有什么错误,请留言交流。
 
打印邮件队列:# postqueue –p# mailq
如果队列数较大可以配合tail查看:# mailq | tail
刷新队列:# postqueue -f
立即为队列中domain.com的域名的邮件发送:# postqueue -s domain.com
删除队列中所有邮件:# postsuper -d ALL
删除一个特定的信息:# postsuper -d messageid
重新发送特定的邮件:# postfix -r msgid
查看postfix邮件版本:# postconf -d mail_version
mail_version = 2.6.6

英文原文: https://techarena51.com/blog/postfix-configuration-and-explanation-of-parameters/  查看全部
下面列举出来的一些小技巧在邮件管理员的日常中会经常用到,如果有什么错误,请留言交流。
 
打印邮件队列:
# postqueue –p
# mailq

如果队列数较大可以配合tail查看:
# mailq | tail

刷新队列:
# postqueue -f

立即为队列中domain.com的域名的邮件发送:
# postqueue -s domain.com

删除队列中所有邮件:
# postsuper -d ALL

删除一个特定的信息:
# postsuper -d messageid

重新发送特定的邮件:
# postfix -r msgid

查看postfix邮件版本:
# postconf -d mail_version
mail_version = 2.6.6


英文原文: https://techarena51.com/blog/postfix-configuration-and-explanation-of-parameters/ 


大话超融合:全融合云IT帮您轻松上云

OT学习平台 发表了文章 • 0 个评论 • 227 次浏览 • 2017-08-24 14:34 • 来自相关话题

超融合基础架构,是一种将计算、网络、存储和安全等资源作为基本组成元素,根据系统需求进行选择和预定义的一种技术架构。
深信服紧密围绕客户价值需求,提出了超融合构建的企业级云方案,其在逻辑上分为两个层面:一层是云基础架构层面,通过超融合来实现,只用通用的x86服务器和二三层交换机,通过完全软件定义的方式实现云基础架构;另一层是云管平台,实现底层云基础架构和上层应用的紧密融合。
深信服致力于企业级云解决方案,并一直秉承着“利用创新云化技术,帮助客户打造极简、随需应变、平滑演进的IT新架构”的理念。深信服企业云方案兼具超融合和云管理的独特价值,是数据中心云化的最佳路径。
深信服企业级云,基础架构只有X86服务器和交换机两种设备,使得云数据中心的初始建设成本大幅下降,基于分布式架构,三台一体机就能构建资源池,系统可靠性得到有效保障,而基于模块化标准化的资源池,使建设过程变得非常简单。
云时代,超融合已成为当前云计算基础架构领域最大的热点,如何构建企业级云?最先进的超融合架构什么样?8月29日14:00“大话超融合——全融合云IT帮您轻松上云”直播活动即将开启,听听超融合领域资深专家为您指点迷津。

直播间地址:http://www.otpub.com/home/live/live/liveid/10038.html 查看全部
超融合基础架构,是一种将计算、网络、存储和安全等资源作为基本组成元素,根据系统需求进行选择和预定义的一种技术架构。
深信服紧密围绕客户价值需求,提出了超融合构建的企业级云方案,其在逻辑上分为两个层面:一层是云基础架构层面,通过超融合来实现,只用通用的x86服务器和二三层交换机,通过完全软件定义的方式实现云基础架构;另一层是云管平台,实现底层云基础架构和上层应用的紧密融合。
深信服致力于企业级云解决方案,并一直秉承着“利用创新云化技术,帮助客户打造极简、随需应变、平滑演进的IT新架构”的理念。深信服企业云方案兼具超融合和云管理的独特价值,是数据中心云化的最佳路径。
深信服企业级云,基础架构只有X86服务器和交换机两种设备,使得云数据中心的初始建设成本大幅下降,基于分布式架构,三台一体机就能构建资源池,系统可靠性得到有效保障,而基于模块化标准化的资源池,使建设过程变得非常简单。
云时代,超融合已成为当前云计算基础架构领域最大的热点,如何构建企业级云?最先进的超融合架构什么样?8月29日14:00“大话超融合——全融合云IT帮您轻松上云”直播活动即将开启,听听超融合领域资深专家为您指点迷津。

直播间地址:http://www.otpub.com/home/live/live/liveid/10038.html

解析云计算和网格计算的区别之处

OT学习平台 发表了文章 • 0 个评论 • 245 次浏览 • 2017-08-23 15:40 • 来自相关话题

目前,云计算,大数据等概念已经深入人心。不过时至今日,云计算到底是什么,恐怕还是有很多人不知如何回答?那么,云计算又和网格计算、自主计算等有什么差异呢?本文将着重为您解析,云计算和网格计算的区别之处。
所谓云计算,在国际上的定义多达数百种,其中比较权威的应该是美国国家标准与技术研究员(NIST)的解释:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器、存储、应用软件、服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。
简单的来说,所谓云计算就是利用在Internet中可用的计算系统,能够支持互联网各类应用的系统。云计算是以第三方拥有的机制提供服务,为了完成功能,用户只关心需要的服务。
网格计算,即分布式计算,是一门计算机科学,他主要的目的是如何把一个需要非常巨大的计算能力才能解决的问题拆分成若干部分,然后把这些部分分配给多台计算机进行处理,最后汇总所有的计算结果而得出最终结果。
云计算可以说是网格计算的衍生品,能够根据需要提供资源,一般情况下,云计算采用计算机集群构成数据中心,并以服务的形势提供给客户,让客户可以像使用水、电一样按需购买资源,从这个角度来看,云计算和网格计算的目标是非常相似的。

云计算和网格计算的不同点

云计算和网格计算都是可伸缩的。可伸缩性是通过独立运行在通过Web服务连接的各种操作系统上的应用程序实例的负载平衡实现的。CPU和网络带宽根据需要分配和回收。系统存储能力根据特定时间的用户数量、实例的数量和传输的数据量进行调整。
相对于强调异构资源共享的网格计算,云计算更强调大规模资源池的分享,通过分享提高资源复用率,并利用规模经济降低运行成本;而网格计算常用于集中大量资源来执行一些大型任务。
通常,网格计算关注的是计算量非常大的操作。网格计算要求软件的使用可以分为多个部分,将程序的片段作为大的系统映像传递给几千个计算机中。这其中系统软硬件成本以及运营的成本都非常高。而相比之下,云计算需要考虑经济成本,因此硬件设备、软件平台的设计不再一味追求高性能,而要综合考虑成本、可用性、可靠性等因素。
简言之,云计算是以相对集中的资源,运行分散的应用;而网格计算则是聚合分散的资源,支持大型集中式应用。

了解更多云计算知识请登录OTPUB领先IT学习直播平台:www.otpub.com 查看全部
目前,云计算,大数据等概念已经深入人心。不过时至今日,云计算到底是什么,恐怕还是有很多人不知如何回答?那么,云计算又和网格计算、自主计算等有什么差异呢?本文将着重为您解析,云计算和网格计算的区别之处。
所谓云计算,在国际上的定义多达数百种,其中比较权威的应该是美国国家标准与技术研究员(NIST)的解释:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器、存储、应用软件、服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。
简单的来说,所谓云计算就是利用在Internet中可用的计算系统,能够支持互联网各类应用的系统。云计算是以第三方拥有的机制提供服务,为了完成功能,用户只关心需要的服务。
网格计算,即分布式计算,是一门计算机科学,他主要的目的是如何把一个需要非常巨大的计算能力才能解决的问题拆分成若干部分,然后把这些部分分配给多台计算机进行处理,最后汇总所有的计算结果而得出最终结果。
云计算可以说是网格计算的衍生品,能够根据需要提供资源,一般情况下,云计算采用计算机集群构成数据中心,并以服务的形势提供给客户,让客户可以像使用水、电一样按需购买资源,从这个角度来看,云计算和网格计算的目标是非常相似的。

云计算和网格计算的不同点

云计算和网格计算都是可伸缩的。可伸缩性是通过独立运行在通过Web服务连接的各种操作系统上的应用程序实例的负载平衡实现的。CPU和网络带宽根据需要分配和回收。系统存储能力根据特定时间的用户数量、实例的数量和传输的数据量进行调整。
相对于强调异构资源共享的网格计算,云计算更强调大规模资源池的分享,通过分享提高资源复用率,并利用规模经济降低运行成本;而网格计算常用于集中大量资源来执行一些大型任务。
通常,网格计算关注的是计算量非常大的操作。网格计算要求软件的使用可以分为多个部分,将程序的片段作为大的系统映像传递给几千个计算机中。这其中系统软硬件成本以及运营的成本都非常高。而相比之下,云计算需要考虑经济成本,因此硬件设备、软件平台的设计不再一味追求高性能,而要综合考虑成本、可用性、可靠性等因素。
简言之,云计算是以相对集中的资源,运行分散的应用;而网格计算则是聚合分散的资源,支持大型集中式应用。

了解更多云计算知识请登录OTPUB领先IT学习直播平台:www.otpub.com

MYSQL开发实践8问8答

chris 发表了文章 • 1 个评论 • 230 次浏览 • 2017-08-20 13:59 • 来自相关话题

最近研发的项目对 DB 依赖比较重,梳理了这段时间使用MySQL遇到的8个比较具有代表性的问题,答案也比较偏自己的开发实践,没有 DBA专业和深入,有出入的请使劲拍砖!
 

一、MySQL读写性能是多少,有哪些性能相关的重要参数?​

这里做了几个简单压测实验,结果如下:
机器:8核CPU,8G内存
表结构(尽量模拟业务):12个字段(1个bigint(20)为自增primary key,5个int(11),5个varchar(512),1个timestamp),InnoDB存储引擎。
实验1(写):insert => 6000/s
前提:连接数100,每次insert单条记录
分析:CPU跑了50%,这时磁盘为顺序写,故性能较高实验2(写):update(where条件命中索引) => 200/s
前提:连接数100,10w条记录,每次update单条记录的4个字段(2个int(11),2个varchar(512))
分析:CPU跑2%,瓶颈明显在IO的随机写实验3(读):select(where条件命中索引) => 5000/s
前提:连接数100,10w条记录,每次select单条记录的4个字段(2个int(11),2个varchar(512))
分析:CPU跑6%,瓶颈在IO,和db的cache大小相关实验4(读):select(where条件没命中索引) => 60/s
前提:连接数100,10w条记录,每次select单条记录的4个字段(2个int(11),2个varchar(512))
分析:CPU跑到80%,每次select都需遍历所有记录,看来索引的效果非常明显!几个重要的配置参数,可根据实际的机器和业务特点调整
max_connecttions:最大连接数

table_cache:缓存打开表的数量

key_buffer_size:索引缓存大小

query_cache_size:查询缓存大小

sort_buffer_size:排序缓存大小(会将排序完的数据缓存起来)

read_buffer_size:顺序读缓存大小

read_rnd_buffer_size:某种特定顺序读缓存大小(如order by子句的查询)PS:查看配置方法:show variables like '%max_connecttions%';
 

二、MySQL负载高时,如何找到是由哪些SQL引起的?

方法:慢查询日志分析(MySQLdumpslow)
 
慢查询日志例子,可看到每个慢查询SQL的耗时:
# User@Host: edu_online[edu_online] @ [10.139.10.167]
# Query_time: 1.958000 Lock_time: 0.000021 Rows_sent: 254786 Rows_examined: 254786
SET timestamp=1410883292;
select * from t_online_group_records;日志显示该查询用了1.958秒,返回254786行记录,一共遍历了254786行记录。及具体的时间戳和SQL语句。

使用MySQLdumpslow进行慢查询日志分析:

MySQLdumpslow -s t -t 5 slow_log_20140819.txt输出查询耗时最多的Top5条SQL语句
 
-s:排序方法,t表示按时间 (此外,c为按次数,r为按返回记录数等)
-t:去Top多少条,-t 5表示取前5条
 
执行完分析结果如下:
Count: 1076100 Time=0.09s (99065s) Lock=0.00s (76s) Rows=408.9 (440058825), edu_online[edu_online]@28hosts
select * from t_online_group_records where UNIX_TIMESTAMP(gre_updatetime) > N
Count: 1076099 Time=0.05s (52340s) Lock=0.00s (91s) Rows=62.6 (67324907), edu_online[edu_online]@28hosts
select * from t_online_course where UNIX_TIMESTAMP(c_updatetime) > N
Count: 63889 Time=0.78s (49607s) Lock=0.00s (3s) Rows=0.0 (18), edu_online[edu_online]@[10x.213.1xx.1xx]
select f_uin from t_online_student_contact where f_modify_time > N
Count: 1076097 Time=0.02s (16903s) Lock=0.00s (72s) Rows=52.2 (56187090), edu_online[edu_online]@28hosts
select * from t_online_video_info where UNIX_TIMESTAMP(v_update_time) > N
Count: 330046 Time=0.02s (6822s) Lock=0.00s (45s) Rows=0.0 (2302), edu_online[edu_online]@4hosts
select uin,cid,is_canceled,unix_timestamp(end_time) as endtime,unix_timestamp(update_time) as updatetime
from t_kick_log where unix_timestamp(update_time) > N以第1条为例,表示这类SQL(N可以取很多值,这里MySQLdumpslow会归并起来)在8月19号的慢查询日志内出现了1076100次,总耗时99065秒,总返回440058825行记录,有28个客户端IP用到。

通过慢查询日志分析,就可以找到最耗时的SQL,然后进行具体的SQL分析

慢查询相关的配置参数:
log_slow_queries:是否打开慢查询日志,得先确保=ON后面才有得分析

long_query_time:查询时间大于多少秒的SQL被当做是慢查询,一般设为1S

log_queries_not_using_indexes:是否将没有使用索引的记录写入慢查询日志

slow_query_log_file:慢查询日志存放路径

三、如何针对具体的SQL做优化?

使用Explain分析SQL语句执行计划
MySQL> explain select * from t_online_group_records where UNIX_TIMESTAMP(gre_updatetime) > 123456789;
+----+-------------+------------------------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------------------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | t_online_group_records | ALL | NULL | NULL | NULL | NULL | 47 | Using where |
+----+-------------+------------------------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)如上面例子所示,重点关注下type,rows和Extra:

type:使用类别,有无使用到索引。结果值从好到坏:... > range(使用到索引) > index > ALL(全表扫描),一般查询应达到range级别

rows:SQL执行检查的记录数

Extra:SQL执行的附加信息,如"Using index"表示查询只用到索引列,不需要去读表等

使用Profiles分析SQL语句执行时间和消耗资源:
MySQL> set profiling=1; (启动profiles,默认是没开启的)
MySQL> select count(1) from t_online_group_records where UNIX_TIMESTAMP(gre_updatetime) > 123456789; (执行要分析的SQL语句)
MySQL> show profiles;
+----------+------------+----------------------------------------------------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+----------------------------------------------------------------------------------------------+
| 1 | 0.00043250 | select count(1) from t_online_group_records where UNIX_TIMESTAMP(gre_updatetime) > 123456789 |
+----------+------------+----------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
MySQL> show profile cpu,block io for query 1; (可看出SQL在各个环节的耗时和资源消耗)
+----------------------+----------+----------+------------+--------------+---------------+
| Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+----------------------+----------+----------+------------+--------------+---------------+
...
| optimizing | 0.000016 | 0.000000 | 0.000000 | 0 | 0 |
| statistics | 0.000020 | 0.000000 | 0.000000 | 0 | 0 |
| preparing | 0.000017 | 0.000000 | 0.000000 | 0 | 0 |
| executing | 0.000011 | 0.000000 | 0.000000 | 0 | 0 |
| Sending data | 0.000076 | 0.000000 | 0.000000 | 0 | 0 |
...
SQL优化的技巧 (只提一些业务常遇到的问题)
 
1、最关键:索引,避免全表扫描
对接触的项目进行慢查询分析,发现TOP10的基本都是忘了加索引或者索引使用不当,如索引字段上加函数导致索引失效等(如where UNIX_TIMESTAMP(gre_updatetime)>123456789)
+----------+------------+---------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+---------------------------------------+
| 1 | 0.00024700 | select * from mytable where id=100 |
| 2 | 0.27912900 | select * from mytable where id+1=101 |
+----------+------------+---------------------------------------+另外很多同学在拉取全表数据时,喜欢用select xx from xx limit 5000,1000这种形式批量拉取,其实这个SQL每次都是全表扫描,建议添加1个自增id做索引,将SQL改为 select xx from xx where id>5000 and id<6000;
+----------+------------+-----------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+-----------------------------------------------------+
| 1 | 0.00415400 | select * from mytable where id>=90000 and id<=91000 |
| 2 | 0.10078100 | select * from mytable limit 90000,1000 |
+----------+------------+-----------------------------------------------------+合理用好索引,应该可解决大部分SQL问题。当然索引也非越多越好,过多的索引会影响写操作性能。
 
1.1 只select出需要的字段,避免select
+----------+------------+-----------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+-----------------------------------------------------+
| 1 | 0.02948800 | select count(1) from ( select id from mytable ) a |
| 2 | 1.34369100 | select count(1) from ( select * from mytable ) a |
+----------+------------+-----------------------------------------------------+1.2 尽量早做过滤,使Join或者Union等后续操作的数据量尽量小
 
1.3 把能在逻辑层算的提到逻辑层来处理,如一些数据排序、时间函数计算等
 
PS:关于SQL优化,已经有足够多文章了,所以就不讲太全面了,只重点说自己1个感受:索引!基本都是因为索引!
 

四、SQL层面已难以优化,请求量继续增大时的应对策略?

下面是我能想到的几个方法,每个方法又都是一篇大文章了,这里就不展开。
分库分表使用集群(master-slave),读写分离增加业务的cache层使用连接池

五、MySQL如何做主从数据同步?

复制机制(Replication)
master通过复制机制,将master的写操作通过binlog传到slave生成中继日志(relaylog),slave再将中继日志redo,使得主库和从库的数据保持同步。
 
复制相关的3个MySQL线程:
slave上的I/O线程:向master请求数据master上的Binlog Dump线程:读取binlog事件并把数据发送给slave的I/O线程slave上的SQL线程:读取中继日志并执行,更新数据库
属于slave主动请求拉取的模式
 
实际使用可能遇到的问题
数据非强一致:CDB默认为异步复制,master和slave的数据会有一定延迟(称为主从同步距离,一般 < 1s)
主从同步距离变大:可能是DB写入压力大,也可能是slave机器负载高,网络波动等原因,具体问题具体分析
 
相关监控命令
show processlist:查看MySQL进程信息,包括3个同步线程的当前状态

show master status :查看master配置及当前复制信息

show slave status:查看slave配置及当前复制信息

六、如何防止DB误操作和做好容灾?

业务侧应做到的几点:
重要DB数据的手工修改操作,操作前需做到2点:1 先在测试环境操作 2 备份数据根据业务重要性做定时备份,考虑系统可承受的恢复时间进行容灾演练,感觉很必要
 
MySQL备份和恢复操作
 
1、备份:使用MySQLdump导出数据
MySQLdump -u 用户名 -p 数据库名 [表名] > 导出的文件名
MySQLdump -uxxx -p xxx mytable > mytable.20140921.bak.sql2、恢复:导入备份数据
MySQL -uxxx -p xxxx < mytable.20140921.bak.sql3、恢复:导入备份数据之后发送的写操作。先使用MySQLbinlog导出这部分写操作SQL(基于时间点或位置)
如导出2014-09-21 09:59:59之后的binlog:
MySQLbinlog --database="test" --start-date="2014-09-21 09:59:59" /var/lib/MySQL/mybinlog.000001 > binlog.data.sql如导出起始id为123456之后的binlog:
MySQLbinlog --database="test" --start-position="123456" /var/lib/MySQL/mybinlog.000001 > binlog.data.sql最后把要恢复的binlog导入db
MySQL -uxxxx -p xxxx < binlog.data.sql

七、该选择MySQL哪种存储引擎,Innodb具有什么特性?

存储引擎简介:
插件式存储引擎是MySQL的重要特性,MySQL支持多种存储引擎以满足用户的多种应用场景
存储引擎解决的问题:如何组织MySQL数据在介质中高效地读取,需考虑存储机制、索引设计、并发读写的锁机制等
MySQL5.0支持的存储引擎有MyISAM、InnoDB、Memory、Merge等
 
MyISAM和InnoDB的区别(只说重点了)
 
1. InnoDB,MySQL5.5之后及CDB的默认引擎
支持行锁:并发性能好支持事务:故InnoDB称为事务性存储引擎,支持ACID,提供了具有提交、回滚和崩溃恢复能力的事务安全支持外键:当前唯一支持外键的引擎
 
2. MyISAM,MySQL5.5之前默认引擎
支持表锁:插入+查询速度快,更新+删除速度慢不支持事务
 
使用show engines可查看当前MySQL支持的存储引擎详情:




 

八、MySQL内部结构有哪些层次?

 
非专业DBA,这里只简单贴个结构图说明下。MySQL是开源系统,其设计思路和源代码都出自大牛之手,有空可以学习下。




Connectors:连接器。接收不同语言的Client交互Management Serveices & Utilities:系统管理和控制工具Connection Pool: 连接池。管理用户连接SQL Interface: SQL接口。接受用户的SQL命令,并且返回用户需要查询的结果Parser: 解析器。验证和解析SQL语句成内部数据结构Optimizer: 查询优化器。为查询语句选择合适的执行路径Cache和Buffer:查询缓存。缓存查询的结果,有命中即可直接返回Engine:存储引擎。MySQL数据最后组织并存储成具体文件
 
作者:王昂 
原文地址:https://www.qcloud.com/community/article/233  查看全部
最近研发的项目对 DB 依赖比较重,梳理了这段时间使用MySQL遇到的8个比较具有代表性的问题,答案也比较偏自己的开发实践,没有 DBA专业和深入,有出入的请使劲拍砖!
 


一、MySQL读写性能是多少,有哪些性能相关的重要参数?​


这里做了几个简单压测实验,结果如下:
机器:8核CPU,8G内存
表结构(尽量模拟业务):12个字段(1个bigint(20)为自增primary key,5个int(11),5个varchar(512),1个timestamp),InnoDB存储引擎。
实验1(写):insert => 6000/s
前提:连接数100,每次insert单条记录
分析:CPU跑了50%,这时磁盘为顺序写,故性能较高
实验2(写):update(where条件命中索引) => 200/s
前提:连接数100,10w条记录,每次update单条记录的4个字段(2个int(11),2个varchar(512))
分析:CPU跑2%,瓶颈明显在IO的随机写
实验3(读):select(where条件命中索引) => 5000/s
前提:连接数100,10w条记录,每次select单条记录的4个字段(2个int(11),2个varchar(512))
分析:CPU跑6%,瓶颈在IO,和db的cache大小相关
实验4(读):select(where条件没命中索引) => 60/s
前提:连接数100,10w条记录,每次select单条记录的4个字段(2个int(11),2个varchar(512))
分析:CPU跑到80%,每次select都需遍历所有记录,看来索引的效果非常明显!
几个重要的配置参数,可根据实际的机器和业务特点调整
max_connecttions:最大连接数

table_cache:缓存打开表的数量

key_buffer_size:索引缓存大小

query_cache_size:查询缓存大小

sort_buffer_size:排序缓存大小(会将排序完的数据缓存起来)

read_buffer_size:顺序读缓存大小

read_rnd_buffer_size:某种特定顺序读缓存大小(如order by子句的查询)
PS:查看配置方法:show variables like '%max_connecttions%';
 


二、MySQL负载高时,如何找到是由哪些SQL引起的?


方法:慢查询日志分析(MySQLdumpslow)
 
慢查询日志例子,可看到每个慢查询SQL的耗时:
# User@Host: edu_online[edu_online] @  [10.139.10.167]
# Query_time: 1.958000 Lock_time: 0.000021 Rows_sent: 254786 Rows_examined: 254786
SET timestamp=1410883292;
select * from t_online_group_records;
日志显示该查询用了1.958秒,返回254786行记录,一共遍历了254786行记录。及具体的时间戳和SQL语句。

使用MySQLdumpslow进行慢查询日志分析:

MySQLdumpslow -s t -t 5 slow_log_20140819.txt
输出查询耗时最多的Top5条SQL语句
 
-s:排序方法,t表示按时间 (此外,c为按次数,r为按返回记录数等)
-t:去Top多少条,-t 5表示取前5条
 
执行完分析结果如下:
Count: 1076100  Time=0.09s (99065s)  Lock=0.00s (76s)  Rows=408.9 (440058825), edu_online[edu_online]@28hosts
select * from t_online_group_records where UNIX_TIMESTAMP(gre_updatetime) > N
Count: 1076099 Time=0.05s (52340s) Lock=0.00s (91s) Rows=62.6 (67324907), edu_online[edu_online]@28hosts
select * from t_online_course where UNIX_TIMESTAMP(c_updatetime) > N
Count: 63889 Time=0.78s (49607s) Lock=0.00s (3s) Rows=0.0 (18), edu_online[edu_online]@[10x.213.1xx.1xx]
select f_uin from t_online_student_contact where f_modify_time > N
Count: 1076097 Time=0.02s (16903s) Lock=0.00s (72s) Rows=52.2 (56187090), edu_online[edu_online]@28hosts
select * from t_online_video_info where UNIX_TIMESTAMP(v_update_time) > N
Count: 330046 Time=0.02s (6822s) Lock=0.00s (45s) Rows=0.0 (2302), edu_online[edu_online]@4hosts
select uin,cid,is_canceled,unix_timestamp(end_time) as endtime,unix_timestamp(update_time) as updatetime
from t_kick_log where unix_timestamp(update_time) > N
以第1条为例,表示这类SQL(N可以取很多值,这里MySQLdumpslow会归并起来)在8月19号的慢查询日志内出现了1076100次,总耗时99065秒,总返回440058825行记录,有28个客户端IP用到。

通过慢查询日志分析,就可以找到最耗时的SQL,然后进行具体的SQL分析

慢查询相关的配置参数:
log_slow_queries:是否打开慢查询日志,得先确保=ON后面才有得分析

long_query_time:查询时间大于多少秒的SQL被当做是慢查询,一般设为1S

log_queries_not_using_indexes:是否将没有使用索引的记录写入慢查询日志

slow_query_log_file:慢查询日志存放路径


三、如何针对具体的SQL做优化?


使用Explain分析SQL语句执行计划
MySQL> explain select * from t_online_group_records where UNIX_TIMESTAMP(gre_updatetime) > 123456789;
+----+-------------+------------------------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------------------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | t_online_group_records | ALL | NULL | NULL | NULL | NULL | 47 | Using where |
+----+-------------+------------------------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)
如上面例子所示,重点关注下type,rows和Extra:

type:使用类别,有无使用到索引。结果值从好到坏:... > range(使用到索引) > index > ALL(全表扫描),一般查询应达到range级别

rows:SQL执行检查的记录数

Extra:SQL执行的附加信息,如"Using index"表示查询只用到索引列,不需要去读表等

使用Profiles分析SQL语句执行时间和消耗资源:
MySQL> set profiling=1; (启动profiles,默认是没开启的)
MySQL> select count(1) from t_online_group_records where UNIX_TIMESTAMP(gre_updatetime) > 123456789; (执行要分析的SQL语句)
MySQL> show profiles;
+----------+------------+----------------------------------------------------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+----------------------------------------------------------------------------------------------+
| 1 | 0.00043250 | select count(1) from t_online_group_records where UNIX_TIMESTAMP(gre_updatetime) > 123456789 |
+----------+------------+----------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
MySQL> show profile cpu,block io for query 1; (可看出SQL在各个环节的耗时和资源消耗)
+----------------------+----------+----------+------------+--------------+---------------+
| Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+----------------------+----------+----------+------------+--------------+---------------+
...
| optimizing | 0.000016 | 0.000000 | 0.000000 | 0 | 0 |
| statistics | 0.000020 | 0.000000 | 0.000000 | 0 | 0 |
| preparing | 0.000017 | 0.000000 | 0.000000 | 0 | 0 |
| executing | 0.000011 | 0.000000 | 0.000000 | 0 | 0 |
| Sending data | 0.000076 | 0.000000 | 0.000000 | 0 | 0 |
...

SQL优化的技巧 (只提一些业务常遇到的问题)
 
1、最关键:索引,避免全表扫描
对接触的项目进行慢查询分析,发现TOP10的基本都是忘了加索引或者索引使用不当,如索引字段上加函数导致索引失效等(如where UNIX_TIMESTAMP(gre_updatetime)>123456789)
+----------+------------+---------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+---------------------------------------+
| 1 | 0.00024700 | select * from mytable where id=100 |
| 2 | 0.27912900 | select * from mytable where id+1=101 |
+----------+------------+---------------------------------------+
另外很多同学在拉取全表数据时,喜欢用select xx from xx limit 5000,1000这种形式批量拉取,其实这个SQL每次都是全表扫描,建议添加1个自增id做索引,将SQL改为 select xx from xx where id>5000 and id<6000;
+----------+------------+-----------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+-----------------------------------------------------+
| 1 | 0.00415400 | select * from mytable where id>=90000 and id<=91000 |
| 2 | 0.10078100 | select * from mytable limit 90000,1000 |
+----------+------------+-----------------------------------------------------+
合理用好索引,应该可解决大部分SQL问题。当然索引也非越多越好,过多的索引会影响写操作性能。
 
1.1 只select出需要的字段,避免select
+----------+------------+-----------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+-----------------------------------------------------+
| 1 | 0.02948800 | select count(1) from ( select id from mytable ) a |
| 2 | 1.34369100 | select count(1) from ( select * from mytable ) a |
+----------+------------+-----------------------------------------------------+
1.2 尽量早做过滤,使Join或者Union等后续操作的数据量尽量小
 
1.3 把能在逻辑层算的提到逻辑层来处理,如一些数据排序、时间函数计算等
 
PS:关于SQL优化,已经有足够多文章了,所以就不讲太全面了,只重点说自己1个感受:索引!基本都是因为索引!
 


四、SQL层面已难以优化,请求量继续增大时的应对策略?


下面是我能想到的几个方法,每个方法又都是一篇大文章了,这里就不展开。
  • 分库分表
  • 使用集群(master-slave),读写分离
  • 增加业务的cache层
  • 使用连接池


五、MySQL如何做主从数据同步?


复制机制(Replication)
master通过复制机制,将master的写操作通过binlog传到slave生成中继日志(relaylog),slave再将中继日志redo,使得主库和从库的数据保持同步。
 
复制相关的3个MySQL线程
  1. slave上的I/O线程:向master请求数据
  2. master上的Binlog Dump线程:读取binlog事件并把数据发送给slave的I/O线程
  3. slave上的SQL线程:读取中继日志并执行,更新数据库

属于slave主动请求拉取的模式
 
实际使用可能遇到的问题
数据非强一致:CDB默认为异步复制,master和slave的数据会有一定延迟(称为主从同步距离,一般 < 1s)
主从同步距离变大:可能是DB写入压力大,也可能是slave机器负载高,网络波动等原因,具体问题具体分析
 
相关监控命令
show processlist:查看MySQL进程信息,包括3个同步线程的当前状态

show master status :查看master配置及当前复制信息

show slave status:查看slave配置及当前复制信息


六、如何防止DB误操作和做好容灾?


业务侧应做到的几点:
  • 重要DB数据的手工修改操作,操作前需做到2点:1 先在测试环境操作 2 备份数据
  • 根据业务重要性做定时备份,考虑系统可承受的恢复时间
  • 进行容灾演练,感觉很必要

 
MySQL备份和恢复操作
 
1、备份:使用MySQLdump导出数据
MySQLdump -u 用户名 -p 数据库名 [表名] > 导出的文件名
MySQLdump -uxxx -p xxx mytable > mytable.20140921.bak.sql
2、恢复:导入备份数据
MySQL -uxxx -p xxxx < mytable.20140921.bak.sql
3、恢复:导入备份数据之后发送的写操作。先使用MySQLbinlog导出这部分写操作SQL(基于时间点或位置)
如导出2014-09-21 09:59:59之后的binlog:
MySQLbinlog --database="test" --start-date="2014-09-21 09:59:59" /var/lib/MySQL/mybinlog.000001 > binlog.data.sql
如导出起始id为123456之后的binlog:
MySQLbinlog --database="test" --start-position="123456" /var/lib/MySQL/mybinlog.000001 > binlog.data.sql
最后把要恢复的binlog导入db
MySQL -uxxxx -p xxxx < binlog.data.sql


七、该选择MySQL哪种存储引擎,Innodb具有什么特性?


存储引擎简介:
插件式存储引擎是MySQL的重要特性,MySQL支持多种存储引擎以满足用户的多种应用场景
存储引擎解决的问题:如何组织MySQL数据在介质中高效地读取,需考虑存储机制、索引设计、并发读写的锁机制等
MySQL5.0支持的存储引擎有MyISAM、InnoDB、Memory、Merge等
 
MyISAM和InnoDB的区别(只说重点了)
 
1. InnoDB,MySQL5.5之后及CDB的默认引擎
  • 支持行锁:并发性能好
  • 支持事务:故InnoDB称为事务性存储引擎,支持ACID,提供了具有提交、回滚和崩溃恢复能力的事务安全
  • 支持外键:当前唯一支持外键的引擎

 
2. MyISAM,MySQL5.5之前默认引擎
  • 支持表锁:插入+查询速度快,更新+删除速度慢
  • 不支持事务

 
使用show engines可查看当前MySQL支持的存储引擎详情:
engine.png

 


八、MySQL内部结构有哪些层次?


 
非专业DBA,这里只简单贴个结构图说明下。MySQL是开源系统,其设计思路和源代码都出自大牛之手,有空可以学习下。
connect.png

  1. Connectors:连接器。接收不同语言的Client交互
  2. Management Serveices & Utilities:系统管理和控制工具
  3. Connection Pool: 连接池。管理用户连接
  4. SQL Interface: SQL接口。接受用户的SQL命令,并且返回用户需要查询的结果
  5. Parser: 解析器。验证和解析SQL语句成内部数据结构
  6. Optimizer: 查询优化器。为查询语句选择合适的执行路径
  7. Cache和Buffer:查询缓存。缓存查询的结果,有命中即可直接返回
  8. Engine:存储引擎。MySQL数据最后组织并存储成具体文件

 
作者:王昂 
原文地址:https://www.qcloud.com/community/article/233 

如何管理大数据

OT学习平台 发表了文章 • 0 个评论 • 219 次浏览 • 2017-08-18 18:15 • 来自相关话题

随着应用BI系统的广泛应用,数据治理的话题也越来越受到企业的关注和讨论,有专家表示,如果想让用户进入真正的商业智能时代,就必须建立一定的数据治理体系;而大数据治理能够在短期内成为业内的焦点,这和企业对大数据质量的理解和密切关注有很大关系。

大数据治理面临的挑战:规模庞大,标准不一

过去几年,企业的IT系统经历了数据量高速膨胀的一个时期,这些海量的,分散在不同服务器的数据提高了数据资源利用的复杂性和管理难度;另外,各个企业内部的业务区分和行政区分也对企业数据的交互造成了一定的断层,而企业与外部业务交互所产生的“体外循环”数据与企业的核心数据体系并不能自然地融合。当这种数据的异构化所导致的应用冲突达到一定临界点时,数据治理便成为了规范企业数据的必要步骤。

大数据治理技术:主题众多,元数据管理先行

数据治理涉及的IT技术主题众多,包括元数据管理、主数据管理、数据质量、数据集成、监控与报告等。在很多国际企业中,元数据管理的重要性在全部技术主题中位列第一。

元数据管理是语义工具,其重要性在于,它能够为数据治理建立一套数据资料库,存储治理范围内的数据定义,负责人,来源,转换关系,目标,质量等级,依赖关系,安全权限等。这些信息对于商业整合,数据质量,可审计性等数据治理目标的实现至关重要。

元数据管理是实施数据治理的核心IT技术,有效的元数据管理将为数据质量、数据集成等技术的实施,以及数据治理目标的最终实现奠定坚实的基础。

大数据治理的意义:发掘数据资产的商业价值

大数据治理是为了将数据作为企业商业资产进行应用和管理的一套数据管理机制,能够通过建立规范的数据应用标准,消除数据的不一致性,来提高数据的质量,并能合理的将数据应用于企业的业务管理和战略决策中,充分的发挥数据的商业价值,良好的数据治理必将为信息化时代的企业带来不可替代的竞争优势。
 
了解更多大数据相关知识请进入OTPUB官网:www.otpub.com 查看全部
随着应用BI系统的广泛应用,数据治理的话题也越来越受到企业的关注和讨论,有专家表示,如果想让用户进入真正的商业智能时代,就必须建立一定的数据治理体系;而大数据治理能够在短期内成为业内的焦点,这和企业对大数据质量的理解和密切关注有很大关系。

大数据治理面临的挑战:规模庞大,标准不一

过去几年,企业的IT系统经历了数据量高速膨胀的一个时期,这些海量的,分散在不同服务器的数据提高了数据资源利用的复杂性和管理难度;另外,各个企业内部的业务区分和行政区分也对企业数据的交互造成了一定的断层,而企业与外部业务交互所产生的“体外循环”数据与企业的核心数据体系并不能自然地融合。当这种数据的异构化所导致的应用冲突达到一定临界点时,数据治理便成为了规范企业数据的必要步骤。

大数据治理技术:主题众多,元数据管理先行

数据治理涉及的IT技术主题众多,包括元数据管理、主数据管理、数据质量、数据集成、监控与报告等。在很多国际企业中,元数据管理的重要性在全部技术主题中位列第一。

元数据管理是语义工具,其重要性在于,它能够为数据治理建立一套数据资料库,存储治理范围内的数据定义,负责人,来源,转换关系,目标,质量等级,依赖关系,安全权限等。这些信息对于商业整合,数据质量,可审计性等数据治理目标的实现至关重要。

元数据管理是实施数据治理的核心IT技术,有效的元数据管理将为数据质量、数据集成等技术的实施,以及数据治理目标的最终实现奠定坚实的基础。

大数据治理的意义:发掘数据资产的商业价值

大数据治理是为了将数据作为企业商业资产进行应用和管理的一套数据管理机制,能够通过建立规范的数据应用标准,消除数据的不一致性,来提高数据的质量,并能合理的将数据应用于企业的业务管理和战略决策中,充分的发挥数据的商业价值,良好的数据治理必将为信息化时代的企业带来不可替代的竞争优势。
 
了解更多大数据相关知识请进入OTPUB官网:www.otpub.com

SDN开发工程师招聘

savage_yang 发表了文章 • 0 个评论 • 232 次浏览 • 2017-08-17 18:09 • 来自相关话题

公司名:深圳某智能计算科技有限公司
职位:SDN开发工程师
薪资:20K-30K/月
岗位职责:
1、承担SDN交换机软件开发(基于DPDK和OVS开发),性能优化。
2、负责软件代码编写,能够独立完成软件模块的编码、测试等工作。参与技术攻关,协助解决各种编程难题。
3、负责软件开发文档编写,配合测试人员完成系统测试及改进工作。
4、参与市场开局的技术支持。
任职要求:
1、具有全日制本科及以上学历。
2、计算机、通信、信息系统等相关专业。
3、三年以上前后端软件开发经验,熟练掌握C/C++,Java等前后端编程语言。
4、熟悉或者了解二、三层路由交换原理,TCP/IP协议,有数通产品开发经验优先。
5、精通 SDN相关技术:Openflow协议,Openvswitch的原理和实现,DPDK技术原理。
 
有意思者可以加我微信:
18502322670 查看全部
公司名:深圳某智能计算科技有限公司
职位:SDN开发工程师
薪资:20K-30K/月
岗位职责:
1、承担SDN交换机软件开发(基于DPDK和OVS开发),性能优化。
2、负责软件代码编写,能够独立完成软件模块的编码、测试等工作。参与技术攻关,协助解决各种编程难题。
3、负责软件开发文档编写,配合测试人员完成系统测试及改进工作。
4、参与市场开局的技术支持。
任职要求:
1、具有全日制本科及以上学历。
2、计算机、通信、信息系统等相关专业。
3、三年以上前后端软件开发经验,熟练掌握C/C++,Java等前后端编程语言。
4、熟悉或者了解二、三层路由交换原理,TCP/IP协议,有数通产品开发经验优先。
5、精通 SDN相关技术:Openflow协议,Openvswitch的原理和实现,DPDK技术原理。
 
有意思者可以加我微信:
18502322670