重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。
成都创新互联公司于2013年开始,先为栖霞等服务建站,栖霞等地企业,进行企业商务咨询服务。为栖霞企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
1. check table 和 repair table
登陆mysql 终端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:
repair table tabTest;
进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:
myisamchk tablename.MYI
进行检测,如果需要修复的话,可以使用:
myisamchk -of tablename.MYI
关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。
-----------------------------
另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:
[ -x /tmp/mysql.sock ] /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。
需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!检测修复所有数据库(表)
随着全球各大 科技 巨头的竞相加入,开源软件技术已经活跃在各个信息技术领域当中。其中,大数据生态成为开源技术的直接受益者。开源技术适用于庞杂的数据管理系统,带来敏捷、高效、可扩展以及可自控的管理能力,并帮助企业降低IT建设及维护成本。2018年双11当天,阿里云原生数据库PolarDB轻松应对了0点0分0秒瞬时提升122倍的数据洪峰。Netflix也采用自研开源架构Metacat将海量数据集合成一个“单一”的数据仓库,大幅提升管理能效。
当前,我国有越来越多的企业、人才加入到开源社区,贡献力也“后来居上”,共同推进开源项目、开源生态的繁荣和可持续发展。
大数据生态成为开源技术重大“受益者”
近年来,在互联网服务、多媒体以及科学研究等多个领域,都可见到大数据的身影。在大数据时代,不断增长的数据量、快速处理数据的需求以及数据类型、结构和来源的多样性给数据库敏捷、高效、可扩展性以及个性化管理带来了全新挑战。
开源技术赋能了大数据生态的高质量发展。赛迪智库信息化和软件服务业所博士蒲松涛表示,经过了数十年的发展,开源软件和开源工具已经应用到了大数据产业发展的各个环节,基于开源软件,企业可以快速构建大数据应用平台,提供丰富的大数据开发和应用工具。
当前,几乎各种规模的企业都在使用开源软件和工具做大数据处理和基于数据的预测分析。开源界也涌现出了Hadoop、OpenStack、OpenShift、Mapreduce、docker等引领行业技术创新方向的重量级开源项目。
华泰人寿基于OpenShift架构打造易于管理的新IT系统,以提升企业竞争力,实现业务数字化转型。在基础设施上,引入红帽OpenShift容器云解决方案和红帽Ceph分布式存储。通过将保险业务上docker云,实现华泰人寿业务的弹性伸缩和快速上线,加速其互联网保险项目快速落地。
美国知名在线影片租赁提供商Netflix也采用了大数据发现服务的开源框架Metacat。由于Netflix的数据仓库由许多大型的数据集组成,为了确保数据平台能够横跨这些数据集成为一个“单一”的数据仓库,Netflix开发的元数据服务Metacat,能让数据的发生、发现、处理和管理变得更加快捷高效、处理精度大幅提升;同时还可兼容Spark、Presto、Pig和Hive架构。Netflix软件架构师Ajoy Majumdar指出,开放开源是身为技术公司的竞争战略,既能够将自己的解决方案建立为行业标准和最佳实践,又能建立Netflix的技术品牌,还能从共享生态中获得反馈输入并受益。
事实上,推动大数据应用高质量发展的主流开源平台还有很多,例如Spark、Shark、Bagel等。蒲松涛表示,这些开源平台大幅降低应用门槛,有效帮助企业实现工业级应用,进而带动各行业大规模部署。此外,大数据还涌现出了一批开源支线平台。其中,Storm完全摆脱了经典的MapReduce架构,重新设计了一个适用于流式计算的架构,以数据流为驱动触发计算,计算时效性高,适应有向无环图计算拓扑的设计,计算方式较为灵活,在业界得到了一定的部署应用。
开源社区供需“双赢”中国力量已崛起
开源社区的建立为推动开源软件发展、构建行业竞争优势做出突出贡献,队伍的壮大需要每一位使用者持续不断的贡献智慧,以实现真正的“共赢”。开源的发展历程中,极客、大公司、商业颠覆者轮番登场,开源技术的诉求也从商业驱动向生态驱动发展。中国工程院院士廖湘科指出,开源是软件创新技术的主要来源,是生态抓手,而非赢利的切入点。
开源软件的“共享和贡献”机制吸引了众多开发者的参与,给了每一位开发者“颠覆 游戏 规则”的权利。有了这种生态的加持,信息技术将被快速推进,各个参与者将持续获利。对此,李飞飞表示,开源生态的受益者是开源技术的需求侧和供给侧双方。从供给侧角度来看,参与的人越多,思维碰撞而引发的迭代演进就会越快;从需求侧角度来看,各个企业不仅可以免除被闭源系统“技术绑定”,还可以在开源社区实现数据库技术迁移,企业还可针对企业技术特征进行数据库的个性定制化,实现大量的应用和代码的改造且系统间互相兼容。
中国开源软件推进联盟副 主席 兼秘书长刘澎在PostgreSQL .CN 2019上表示,当前国内越来越多的企业为开源做出重要贡献,我国的开源实力已经崛起。以华为、阿里等为代表的开源软件开发者已经逐渐与亚马逊、微软站到了同一高度,实现了从“使用者”到“引领者”的身份转变。
目前,中国企业在Linux基金会中有1个白金会员(华为),1个金牌会员(阿里云)和数十家银牌会员(包括腾讯、中国移动、联想等)。华为在多个开源社区贡献排名前列。中国工程院院士倪光南认为,华为是开源软件的优秀开发代表,通过引进、消化,实现创新发展,进而贡献给整个开源社区。
阿里云也成为 游戏 规则的重要改变者和全球云数据库领跑者之一。2018年,阿里云数据库成功进入Gartner数据库魔力象限,这是该榜单首次出现中国公司。近日,Gartner发布的全球云数据库市场份额榜单中,阿里云位居第三,超越了Oracle、IBM和谷歌。5月21日,阿里云提供传统数据库一键迁移上云能力,可以帮助企业将线下的MySQL、PostgreSQL和Oracle等数据库轻松上云,最快数小时内迁移完成。李飞飞表示,阿里云自研的PolarDB云原生数据库的分布式存储架构具有一写多度、计算与存储分离等优势,帮助淘宝交易平台应对了双11当天瞬时提升122倍的数据洪峰。
此外,国内还有包括百度、浪潮、瀚高等在内的众多企业积极参与并贡献到开源社区当中。人工智能、自动驾驶等新兴信息技术也成为开源项目的重要应用领域。
阿里云数据库团队比较熟,随手梳理了以下
丁奇:MySQL社区核心成员。专注于数据存储系统、MySQL 源码研究和改进、MySQL 性能优化和功能改进。
子嘉:Redis中国用户会发起人,Redis技术大学校长
叶翔:MongoDB江浙地区用户会主席
在此之前也是淘宝Tair分布式KV系统的技术负责人,负责过阿里云Memcache,Redis服务等,在阿里集团工作8年,一直在做NoSQL相关的技术。
德歌:阿里云 PostgreSQL技术负责人,PostgreSQL中国技术大学校长、GreenPlum源码深度研究者
彭立勋:参与了ACMUG(MySQL中国用户组)的发起和组建,担任副主席和杭州地区的组织者。MariaDB基金会唯一的中国成员
萧少聪:PostgreSQL 中国社区主席
1、常规数据仓库
数据仓库的重点,是对数据进行整合,同时也是对业务逻辑的一个梳理。数据仓库虽然也可以打包成SAAS那种Cube一类的东西来提升数据的读取性能,但是数据仓库的作用,更多的是为了解决公司的业务问题。
2、敏捷型数据集市
数据集市也是常见的一种方案,底层的数据产品与分析层绑定,使得应用层可以直接对底层数据产品中的数据进行拖拽式分析。数据集市,主要的优势在于对业务数据进行简单的、快速的整合,实现敏捷建模,并且大幅提升数据的处理速度。
3、MPP(大规模并行处理)架构
进入大数据时代以来,传统的主机计算模式已经不能满足需求了,分布式存储和分布式计算才是王道。大家所熟悉的Hadoop MapReduce框架以及MPP计算框架,都是基于这一背景产生。
MPP架构的代表产品,就是Greenplum。Greenplum的数据库引擎是基于Postgresql的,并且通过Interconnnect神器实现了对同一个集群中多个Postgresql实例的高效协同和并行计算。
4、Hadoop分布式系统架构
当然,大规模分布式系统架构,Hadoop依然站在不可代替的关键位置上。雅虎、Facebook、百度、淘宝等国内外大企,最初都是基于Hadoop来展开的。
Hadoop生态体系庞大,企业基于Hadoop所能实现的需求,也不仅限于数据分析,也包括机器学习、数据挖掘、实时系统等。企业搭建大数据系统平台,Hadoop的大数据处理能力、高可靠性、高容错性、开源性以及低成本,都使得它成为首选。
关于数据平台建设的方案有哪几种,环球青藤小编就和您分享到这里了。如果您对大数据工程有浓厚的兴趣,希望这篇文章可以为您提供帮助。如果您还想了解更多关于数据分析师、大数据工程师的技巧及素材等内容,可以点击本站的其他文章进行学习。
本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。
在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍:
3.1 单机架构
以淘宝作为例子。在网站最初时,应用数量与用户数都较少,可以把Tomcat和数据库部署在同一台服务器上。浏览器往发起请求时,首先经过DNS服务器(域名系统)把域名转换为实际IP地址10.102.4.1,浏览器转而访问该IP对应的Tomcat。
3.2 第一次演进:Tomcat与数据库分开部署
Tomcat和数据库分别独占服务器资源,显著提高两者各自性能。
3.3 第二次演进:引入本地缓存和分布式缓存
在Tomcat同服务器上或同JVM中增加本地缓存,并在外部增加分布式缓存,缓存热门商品信息或热门商品的html页面等。通过缓存能把绝大多数请求在读写数据库前拦截掉,大大降低数据库压力。其中涉及的技术包括:使用memcached作为本地缓存,使用Redis作为分布式缓存,还会涉及缓存一致性、缓存穿透/击穿、缓存雪崩、热点数据集中失效等问题。
3.4 第三次演进:引入反向代理实现负载均衡
在多台服务器上分别部署Tomcat,使用反向代理软件(Nginx)把请求均匀分发到每个Tomcat中。此处假设Tomcat最多支持100个并发,Nginx最多支持50000个并发,那么理论上Nginx把请求分发到500个Tomcat上,就能抗住50000个并发。其中涉及的技术包括:Nginx、HAProxy,两者都是工作在网络第七层的反向代理软件,主要支持http协议,还会涉及session共享、文件上传下载的问题。
3.5 第四次演进:数据库读写分离
把数据库划分为读库和写库,读库可以有多个,通过同步机制把写库的数据同步到读库,对于需要查询最新写入数据场景,可通过在缓存中多写一份,通过缓存获得最新数据。其中涉及的技术包括:Mycat,它是数据库中间件,可通过它来组织数据库的分离读写和分库分表,客户端通过它来访问下层数据库,还会涉及数据同步,数据一致性的问题。
3.6 第五次演进:数据库按业务分库
把不同业务的数据保存到不同的数据库中,使业务之间的资源竞争降低,对于访问量大的业务,可以部署更多的服务器来支撑。这样同时导致跨业务的表无法直接做关联分析,需要通过其他途径来解决,但这不是本文讨论的重点,有兴趣的可以自行搜索解决方案。
3.7 第六次演进:把大表拆分为小表
比如针对评论数据,可按照商品ID进行hash,路由到对应的表中存储;针对支付记录,可按照小时创建表,每个小时表继续拆分为小表,使用用户ID或记录编号来路由数据。只要实时操作的表数据量足够小,请求能够足够均匀的分发到多台服务器上的小表,那数据库就能通过水平扩展的方式来提高性能。其中前面提到的Mycat也支持在大表拆分为小表情况下的访问控制。
这种做法显著的增加了数据库运维的难度,对DBA的要求较高。数据库设计到这种结构时,已经可以称为分布式数据库,但是这只是一个逻辑的数据库整体,数据库里不同的组成部分是由不同的组件单独来实现的,如分库分表的管理和请求分发,由Mycat实现,SQL的解析由单机的数据库实现,读写分离可能由网关和消息队列来实现,查询结果的汇总可能由数据库接口层来实现等等,这种架构其实是MPP(大规模并行处理)架构的一类实现。
目前开源和商用都已经有不少MPP数据库,开源中比较流行的有Greenplum、TiDB、Postgresql XC、HAWQ等,商用的如南大通用的GBase、睿帆 科技 的雪球DB、华为的LibrA等等,不同的MPP数据库的侧重点也不一样,如TiDB更侧重于分布式OLTP场景,Greenplum更侧重于分布式OLAP场景,这些MPP数据库基本都提供了类似Postgresql、Oracle、MySQL那样的SQL标准支持能力,能把一个查询解析为分布式的执行计划分发到每台机器上并行执行,最终由数据库本身汇总数据进行返回,也提供了诸如权限管理、分库分表、事务、数据副本等能力,并且大多能够支持100个节点以上的集群,大大降低了数据库运维的成本,并且使数据库也能够实现水平扩展。
3.8 第七次演进:使用LVS或F5来使多个Nginx负载均衡
由于瓶颈在Nginx,因此无法通过两层的Nginx来实现多个Nginx的负载均衡。图中的LVS和F5是工作在网络第四层的负载均衡解决方案,其中LVS是软件,运行在操作系统内核态,可对TCP请求或更高层级的网络协议进行转发,因此支持的协议更丰富,并且性能也远高于Nginx,可假设单机的LVS可支持几十万个并发的请求转发;F5是一种负载均衡硬件,与LVS提供的能力类似,性能比LVS更高,但价格昂贵。由于LVS是单机版的软件,若LVS所在服务器宕机则会导致整个后端系统都无法访问,因此需要有备用节点。可使用keepalived软件模拟出虚拟IP,然后把虚拟IP绑定到多台LVS服务器上,浏览器访问虚拟IP时,会被路由器重定向到真实的LVS服务器,当主LVS服务器宕机时,keepalived软件会自动更新路由器中的路由表,把虚拟IP重定向到另外一台正常的LVS服务器,从而达到LVS服务器高可用的效果。
此处需要注意的是,上图中从Nginx层到Tomcat层这样画并不代表全部Nginx都转发请求到全部的Tomcat,在实际使用时,可能会是几个Nginx下面接一部分的Tomcat,这些Nginx之间通过keepalived实现高可用,其他的Nginx接另外的Tomcat,这样可接入的Tomcat数量就能成倍的增加。
3.9 第八次演进:通过DNS轮询实现机房间的负载均衡
在DNS服务器中可配置一个域名对应多个IP地址,每个IP地址对应到不同的机房里的虚拟IP。当用户访问时,DNS服务器会使用轮询策略或其他策略,来选择某个IP供用户访问。此方式能实现机房间的负载均衡,至此,系统可做到机房级别的水平扩展,千万级到亿级的并发量都可通过增加机房来解决,系统入口处的请求并发量不再是问题。
3.10 第九次演进:引入NoSQL数据库和搜索引擎等技术
当数据库中的数据多到一定规模时,数据库就不适用于复杂的查询了,往往只能满足普通查询的场景。对于统计报表场景,在数据量大时不一定能跑出结果,而且在跑复杂查询时会导致其他查询变慢,对于全文检索、可变数据结构等场景,数据库天生不适用。因此需要针对特定的场景,引入合适的解决方案。如对于海量文件存储,可通过分布式文件系统HDFS解决,对于key value类型的数据,可通过HBase和Redis等方案解决,对于全文检索场景,可通过搜索引擎如ElasticSearch解决,对于多维分析场景,可通过Kylin或Druid等方案解决。
当然,引入更多组件同时会提高系统的复杂度,不同的组件保存的数据需要同步,需要考虑一致性的问题,需要有更多的运维手段来管理这些组件等。
3.11 第十次演进:大应用拆分为小应用
按照业务板块来划分应用代码,使单个应用的职责更清晰,相互之间可以做到独立升级迭代。这时候应用之间可能会涉及到一些公共配置,可以通过分布式配置中心Zookeeper来解决。
3.12 第十一次演进:复用的功能抽离成微服务
如用户管理、订单、支付、鉴权等功能在多个应用中都存在,那么可以把这些功能的代码单独抽取出来形成一个单独的服务来管理,这样的服务就是所谓的微服务,应用和服务之间通过HTTP、TCP或RPC请求等多种方式来访问公共服务,每个单独的服务都可以由单独的团队来管理。此外,可以通过Dubbo、SpringCloud等框架实现服务治理、限流、熔断、降级等功能,提高服务的稳定性和可用性。
3.13 第十二次演进:引入企业服务总线ESB屏蔽服务接口的访问差异
通过ESB统一进行访问协议转换,应用统一通过ESB来访问后端服务,服务与服务之间也通过ESB来相互调用,以此降低系统的耦合程度。这种单个应用拆分为多个应用,公共服务单独抽取出来来管理,并使用企业消息总线来解除服务之间耦合问题的架构,就是所谓的SOA(面向服务)架构,这种架构与微服务架构容易混淆,因为表现形式十分相似。个人理解,微服务架构更多是指把系统里的公共服务抽取出来单独运维管理的思想,而SOA架构则是指一种拆分服务并使服务接口访问变得统一的架构思想,SOA架构中包含了微服务的思想。
3.14 第十三次演进:引入容器化技术实现运行环境隔离与动态服务管理
目前最流行的容器化技术是Docker,最流行的容器管理服务是Kubernetes(K8S),应用/服务可以打包为Docker镜像,通过K8S来动态分发和部署镜像。Docker镜像可理解为一个能运行你的应用/服务的最小的操作系统,里面放着应用/服务的运行代码,运行环境根据实际的需要设置好。把整个“操作系统”打包为一个镜像后,就可以分发到需要部署相关服务的机器上,直接启动Docker镜像就可以把服务起起来,使服务的部署和运维变得简单。
在大促的之前,可以在现有的机器集群上划分出服务器来启动Docker镜像,增强服务的性能,大促过后就可以关闭镜像,对机器上的其他服务不造成影响(在3.14节之前,服务运行在新增机器上需要修改系统配置来适配服务,这会导致机器上其他服务需要的运行环境被破坏)。
3.15 第十四次演进:以云平台承载系统
系统可部署到公有云上,利用公有云的海量机器资源,解决动态硬件资源的问题,在大促的时间段里,在云平台中临时申请更多的资源,结合Docker和K8S来快速部署服务,在大促结束后释放资源,真正做到按需付费,资源利用率大大提高,同时大大降低了运维成本。
所谓的云平台,就是把海量机器资源,通过统一的资源管理,抽象为一个资源整体,在之上可按需动态申请硬件资源(如CPU、内存、网络等),并且之上提供通用的操作系统,提供常用的技术组件(如Hadoop技术栈,MPP数据库等)供用户使用,甚至提供开发好的应用,用户不需要关系应用内部使用了什么技术,就能够解决需求(如音视频转码服务、邮件服务、个人博客等)。在云平台中会涉及如下几个概念: