小型网站到大型网站-Mysql优化

news/2024/5/9 17:01:14/文章来源:https://blog.csdn.net/weixin_33901926/article/details/91936639

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

背景

好的大型网站都是从小型网站慢慢演变来的,都不是一步就设计好的。现在的淘宝,03年创建的时候它也是只有一台服务器,使用的是我们目前还经常使用的lamp架构(Linux+Apache+MySQL+PHP),他们当时为了提高速度,买的现成PHPAuction网站系统(名字一看就是php做的),随后淘宝的快速发展,他们从Php走进Java时代,数据库也换成了oracal,自己去创造技术,进入到分布式时代,研发出适合自己的一套框架。

2015-16年国家的经济增速在下滑,很多工厂、公司倒闭。最近刚得到消息,自己的上家公司也破产了(做互联网盒子的,由于行业没落,转型不成功,曾经可有200多的研发人员!),有时候总感觉到一个互联公司的成功是靠他们的技术团队,公司的落败也是因他们的技术团队。所以做为码农的我们~还是好好学习技术吧!

Mysql优化

网站的性能主要依赖于它的数据库及存储设计。小型到中型时的瓶颈一般都会在数据库上,我们目前由于访问量比较少,webserver和mysql都是在一台服务器上,随着后续业务的增多,会慢慢的做分离,所以先学习了些这方面的知识。架构方面学习和实践的经验比较少,所以只从mysql单个知识点上做简单介绍(缓冲,mysql同步及读写分离,分库、分表)。

缓冲

目前我们项目里使用的memcache做缓冲,起先使用最简单的FileCache,该缓冲不支持多个应用之间缓冲共享,后来看了多方面的文章,引入了memcache做缓冲,yii2对memcache缓冲配置很简单,下载源码编译出memcache.so配置在php环境中,在yii应用的components中添加

        'cache' => ['class' => 'yii\caching\MemCache','keyPrefix' => 'color-f',       // a unique cache key prefix],

 

即可,keyPrefix可以为不同yii应用配置不同的前缀做分离。

选取memcache是因为它是一套支持分布式的高速缓冲系统,对以后网站做分布式服务会很有用。

  • 1 协议简单
    它是基于文本行的协议,直接通过telnet在memcached服务器上可进行存取数据操作。

  • 2 基于libevent事件处理
    Libevent是一套利用C开发的程序库,它将BSD系统的kqueue,Linux系统的epoll等事件处理功能封装成一个接口,与传统的select相比,提高了性能。

  • 3 内置的内存管理方式
    所有数据都保存在内存中,存取数据比硬盘快,当内存满后,通过LRU算法自动删除不使用的缓存,但没有考虑数据的容灾问题,重启服务,所有数据会丢失。

  • 4 分布式
    各个memcached服务器之间互不通信,各自独立存取数据,不共享任何信息。服务器并不具有分布式功能,分布式部署取决于memcache客户端。

具体yii2缓冲的使用可以点击这里。

Mysql同步和读写分离

当网站访问量大时(根据Oracle发布的mysql参考架构,一般小型网站是在query/s<500,中型网站query/s<5000,大型网站>10k+),就需要考虑做数据库的读写分离了。数据库的select操作从slave服务器获取,数据库的写操作从master服务器更新,yii2对数据库的读写分离配置也很简单。

   'db' => ['class' => 'yii\db\Connection','dsn' => 'mysql:host=192.168.1.1;dbname=table_name_1','username' => 'username','password' => 'pwd','charset' => 'utf8','enableSchemaCache' => false ,'enableQueryCache' => true,'slaveConfig' => ['username' => 'username','password' => 'pwd','charset' => 'utf8','enableSchemaCache' => false ,'enableQueryCache' => true,'attributes' => [PDO::ATTR_TIMEOUT => 10,],],'slaves' => [['dsn' => 'mysql:host=192.168.1.2;dbname=table_name_1'],]],

以上是配置一主多从,也可以配置多主多从,yii支持对slave服务器负载均衡,查询时会选取最优的一台服务器去做快速查询操作。

配置完读写分离后,剩下的就是对主从服务器做数据库同步操作,原理就是将主服务器上的数据库二进制文件,根据每条更改数据在文件中的位置信息及记录,不断的将数据同步到从服务器上。

  • 配置master服务器
mysql> create user username;
mysql> GRANT REPLICATION SLAVE ON *.* TO 'username'@'192.168.1.2' IDENTIFIED BY 'pwd';
//配置username用户拥有REPLICATION SLAVE权限

 

查找my.cnf文件,配置主服务器server-id,

log-bin=mysql-bin
server-id=1
binlog-do-db = table_name_1

 

重启mysql,进入命令行查看master运行状态如下

mysql> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysql-bin.000001 | 37652 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

 

  • 配置slave服务器
    找到从服务器的my.cnf文件,添加如下:

server_id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin

重启mysql,进入mysql执行如下命令链接master

mysql> CHANGE MASTER TO->     MASTER_HOST='192.168.1.1',->     MASTER_USER='username',->     MASTER_PASSWORD='pwd',->     MASTER_LOG_FILE='mysql-bin.000001',->     MASTER_LOG_POS=37652;
//log_pos从哪个位置开始同步

 

然后通过start_slave启动从服务器,如果启动失败会报错,通过日志查看自己错误原因,一般错误都是因为master服务器没有配置slave的replication slave权限。
然后就可以自己测试同步、读写分离功能了。

分库、分表

分库、分表就是数据切分(Sharding)。数据切分有两种,一种是垂直切分(分库),就是按照不同的表来切分到不同的数据库(主机)之上。另一种时水平切分(分表),根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面。

数据切分是很有必要的,当数据达到千万或者上亿级别时,数据库的Replication机制缺陷就会很明显,Master往往会成为瓶颈所在,写操作需要顺序排队来执行,过载的话Master扛不住,Slaves的数据同步的延迟比较大,而且会大大耗费CPU的计算能力,因为write操作在Master上执行以后还是需要在每台slave机器上都跑一次。Replication搞不定,那么为什么Sharding可以工作呢?道理很简单,因为它可以很好的扩展。我们知道每台机器无论配置多么好它都有自身的物理上限,所以当我们应用已经能触及或远远超出单台机器的某个上限的时候,我们惟有寻找别的机器的帮助或者继续升级的我们的硬件,但常见的方案还是横向扩展, 通过添加更多的机器来共同承担压力。我们还得考虑当我们的业务逻辑不断增长,我们的机器能不能通过线性增长就能满足需求?Sharding可以轻松的将计 算,存储,I/O并行分发到多台机器上,这样可以充分利用多台机器各种处理能力,同时可以避免单点失败,提供系统的可用性,进行很好的错误隔离。

  • 垂直切分
    简单点就是将几个相关的表合并在一起,放在同一数据库(主机)上,比如用户表,用户爱好表,用户职业表等,这样的好处是在做一些关联操作时会很方便,如果跨主机去做表关联时,实现起来就会很麻烦,必须得用程序去实现。

    垂直切分比较好理解,它的优点也很明显,拆分规则很明确,模块清晰,整合起来会容易,数据维护也方便。缺点就是部分表关联无法在数据库级别完成,对于访问极其频繁且数据量超大的表仍然存在性能瓶颈,切分达到一定程度之后,扩展性会遇到限制,过多的切分可能会带来系统过渡复杂而难以维护。

  • 水平切分
    水平切分就是按照某一切分规则,将数据分布到一个数据库的不同表中。例如将user_id中1-10000的放在oc_user1中,10000-20000的放在oc_user2中以此类推。还有中常用的hash取模分,将user_id分在两个表中,取模为1的放在表1中,取模为2的放在表2中。

    水平切分的优点也很明显,表关联基本能够在数据库端全部完成,不会存在某些超大型数据量和高负载的表遇到瓶颈的问题,只要切分规则能够定义好,基本上较难遇到扩展性限制。缺点是后期数据的维护难度有所增加,人为手工定位数据会很困难,应用系统各模块耦合度较高,可能会对后面数据的迁移拆分造成一定的困难。

所以分库可以降低我们单点机器的负载;而分表提高了数据操作的效率,尤其是Write操作的效率。

总结

以上主要从mysql在大数据量时常用手法做介绍,像一般小数据量的网站,优化自己的sql语句即可,通过相应的工具,查找出自己网站访问速度慢的瓶颈在哪里,是sql语句慢、还是代码复杂度导致的等等,究其根本,才能解决问题~

转载于:https://my.oschina.net/botkenni/blog/915923

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_700745.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

那些进入 Alexa 排名前 250 的 WordPress 网站

目前在全球的所有网站中&#xff0c;WordPress占据了接近25%的市场份额&#xff0c;几乎每四个网站中就有一个是使用WordPress搭建的。那么&#xff0c;在全球访问量前250个网站中&#xff0c;又有多少个是使用WordPress搭建的呢&#xff1f;最近&#xff0c;WPMU DEV网站对此进…

不上全站https的网站你们就等着被恶心死吧

2019独角兽企业重金招聘Python工程师标准>>> 测试脚本 #!/bin/sh wget \ --user-agent"Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19" \-r \-P a…

首次成功实施 XSS 攻击,盗取目标网站大量 VIP 帐号

前言 之前做网站时有做代码防御 XSS(Cross Site Script) 攻击&#xff0c;但是却只处于了解的阶段&#xff0c;并不知道其中具体的原理&#xff0c;更别说使用了。最近有朋友要求我帮助他 Hack 一个网站&#xff0c;达到一定的目的。思考来思考去&#xff0c;最后想了一套方案&…

一步一步SharePoint 2007之十六:注册并配置一个网站用户

在前面的文章中&#xff0c;我已经介绍了如何创建管理帐户。创建其它帐户的方法是一样的。大家可以把这个注册系统放到自己的网站中&#xff0c;就可以成为网站的一部分了。本文将只讲解如何在管理工具中将用户手动加入到网站用户组中&#xff0c;至于如何将注册完后的用户自动…

网站锁定php文件命令,PHP文件锁定读写的一点注意_php

都说文本方式容易出现文件锁定失效等乱七八糟的问题.其实并不是失效, 而是写法有些不对.被 lock_ex 后的文件 再以read模式 fopen 的话将读到空内容!!!如果没有判断就把它作操作后再写入就出错啦....很多问题出在这里.再来补充一下如果一个文件被以write的模式fopen后并 flock(…

《社交网站界面设计(原书第2版)》——2.13 不要中断电子邮件

2.13 不要中断电子邮件 如果你将电子邮件作为广播媒介&#xff08;例如&#xff0c;发送提醒或通知&#xff09;却不让用户回复他们收到的消息&#xff0c;就比较差劲了。你也没理由不处理这些回复&#xff0c;你可以把这些回复当作通知转发给正确的收件人。这需要你在方便沟通…

在线设计网站,有了这几个网站,设计再也不用求人了

不知道从什么时候开始设计已经不是一个很高深的专业&#xff0c;如果你是专门学习PS专门做平面设计的那么未来靠什么吃饭&#xff0c;不由不觉中陷入了冥想中... 想想那些年自己上学省吃俭用去学习&#xff0c;到现在能用到的时候几乎没有&#xff0c;最多就是公司改改发票&…

Docker完整建站详介

2019独角兽企业重金招聘Python工程师标准>>> 一&#xff0c;在主服务器上操作&#xff1a;安装完成docker;略 二&#xff0c;查看镜像 [rootlocalhost ~]#docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos/shop2.web.top latest 8fc9b211671a 14…

Phpcms V9手机门户设置教程:怎么用PC V9做手机网站

一、在PHPcms V9管理后台设置手机门户 1.1、开启手机网站。位置&#xff1a;模块 》手机门户 》 添加手机站点&#xff0c;具体设置可参照截图&#xff1a; 填写站点名和LOGO文件相对位置&#xff0c;绑定用于手机网站的二级域名m.cmsyou.com&#xff0c;域名以http://开头。 1…

通过cookies跳过验证码登陆页面,直接访问网站的其它URL

我每次手动访问去NN网的一家酒店&#xff0c;就不需要登陆&#xff0c;一旦我用脚本打开就会让我登陆&#xff0c;而登陆页面又有验证码&#xff0c;不想识别验证码&#xff0c;所以就想&#xff1a;“通过cookies跳过验证码登陆页面&#xff0c;直接访问网站的其它URL”转载虫…

四个超好用的优质资源搜索网站,海量优质资源等你发现!

在网上找资源的时候总找不到满意的优质资源&#xff1f;今天小编把办公室大佬珍藏多年的四个超好用优质资源搜索网站分享给你&#xff0c;只要你想找&#xff0c;没有找不到的资源&#xff01;一、学习资料库学习资料库中有大量的免费学习资料&#xff0c;学习资料涵盖多种学科…

PrestaShop 网站漏洞修复如何修复

2019独角兽企业重金招聘Python工程师标准>>> PrestaShop网站的漏洞越来越多&#xff0c;该网站系统是很多外贸网站在使用的一个开源系统&#xff0c;从之前的1.0初始版本到现在的1.7版本&#xff0c;经历了多次的升级&#xff0c;系统使用的人也越来越多&#xff0c…

RubyGems 库发现了后门版本的网站开发工具 bootstrap-sass

安全研究人员在官方的 RubyGems 库发现了后门版本的网站开发工具 bootstrap-sass。该工具的下载量高达 2800 万次&#xff0c;但这并不意味着下载的所有版本都存在后门&#xff0c;受影响的版本是 v3.2.0.3&#xff0c;研究人员呼吁用户尽可能快的更新&#xff0c;认为可能有数…

一:搭建一套免费的serverless网站

因为公司需求&#xff0c;需要快速搭建一个公司内部能够访问的资源查看管理的 PC网站&#xff0c;因为没有服务器&#xff0c;没有后端开发&#xff0c;又要快速上线使用&#xff0c;那么 serverless 就成了我的首选方案&#xff0c;下面从零开始搭建。 步骤一. 准备工作 1. …

二:serverless网站数据库操作

操作数据库API文档 第一篇&#xff0c;搭建一套免费的serverless网站 一&#xff0c;创建集合&#xff0c;进入控制台 登录腾讯云后台 打开云开发控制台 可以新建集合&#xff0c;新建集合后点击集合名称即可批量导入导出数据库集合的数据&#xff0c;还可以设置数据库访问的…

前端开发学习常用网站网址及介绍(都是免费的)

在开发的时候&#xff0c;想记住所有的单词基本是不可能的&#xff0c;所以就需要进入文档&#xff0c;只要理清需求能做出来&#xff0c;就很不差了&#xff01;&#xff01; 扫码加博主微信 1.百度&#xff0c;俗称度娘&#xff0c;有不懂的就问百度&#xff0c;有问必答&am…

arial unicode ms字体_5个检测商用字体和免费字体合集的网站

对于做新媒体和设计的小伙伴来说&#xff0c;最恐慌的就是加班、改稿、脱发、没钱...侵权问题了。一个不注意就是律师函警告。正所谓律师函不是不到&#xff0c;只是晚到。所以&#xff0c;皮皮特意为小伙伴们搜集了这5个远离字体侵权的网站&#xff0c;有检测字体版权的&#…

大型网站采用什么系统架构保证性能稳定性

from http://www.bobd.cn/design/web/Theory/200904/31145.html 千万级的注册用户&#xff0c;千万级的帖子&#xff0c;nTB级的附件&#xff0c;还有巨大的日访问量&#xff0c;大型网站采用什么系统架构保证性能和稳定性&#xff1f; 首先讨论一下大型网站需要注意和考虑的问…

『网站升级』PHPWind8.0至8.3升级过程及问题种种回顾录

上星期的PHPWind杭州峰会之后&#xff0c;PHPWind发布了8.3版。紧接着淘连接&#xff0c;淘满意&#xff0c;团购PHPWind的一系统ARP应用开始进入我们公司技术苦力的耳朵里&#xff08;也就是偶&#xff09;&#xff0c;偶知道有大事要发生了。于是乎。领导悠然降至&#xff0c…

vs中将网站aspx.cs文件打包成一个dll

vs中将网站aspx.cs文件打包成一个dll 23小时前 vs中将网站asp.net cs文件打包成一个dll。 在vs2008以上的版本中可以建立web应用来开发网站&#xff0c;这样网站aspx.cs文件【生成网站】的时候就会自动生产单个dll&#xff0c;如果使用的是网站的话那就不能。那介绍一种微软提…