学做网站需要多久,wordpress 删除小工具,网页升级访问紧急通知最新网页升级访问升级,什么是网站内容建设一、缘起(1)并发量大#xff0c;流量大的互联网架构#xff0c;一般来说#xff0c;数据库上层都有一个服务层#xff0c;服务层记录了“业务库名”与“数据库实例”的映射关系#xff0c;通过数据库连接池向数据库路由sql语句以执行#xff1a;如上图#xff1a;服务层…一、缘起(1)并发量大流量大的互联网架构一般来说数据库上层都有一个服务层服务层记录了“业务库名”与“数据库实例”的映射关系通过数据库连接池向数据库路由sql语句以执行如上图服务层配置用户库user对应的数据库实例物理位置为ip(其实是一个内网域名)。(2)随着数据量的增大数据要进行水平切分分库后将数据分布到不同的数据库实例(甚至物理机器)上以达到降低数据量增强性能的扩容目的如上图用户库user分布在两个实例上ip0和ip1服务层通过用户标识uid取模的方式进行寻库路由模2余0的访问ip0上的user库模2余1的访问ip1上的user库。关于数据库水平切分垂直切分的更多细节详见《一分钟掌握数据库垂直拆分》 。(3)互联网架构需要保证数据库高可用常见的一种方式使用双主同步keepalived虚ip的方式保证数据库的可用性如上图两个相互同步的主库使用相同的虚ip。如上图当主库挂掉的时候虚ip自动漂移到另一个主库整个过程对调用方透明通过这种方式保证数据库的高可用。关于高可用的更多细节详见《究竟啥才是互联网架构“高可用”》。(4)综合上文的(2)和(3)线上实际的架构既有水平切分又有高可用保证所以实际的数据库架构是这样的提问如果数据量持续增大分2个库性能扛不住了该怎么办呢回答继续水平拆分拆成更多的库降低单库数据量增加库主库实例(机器)数量提高性能。最终问题抛出分成x个库后随着数据量的增加要增加到y个库数据库扩容的过程中能否平滑持续对外提供服务保证服务的可用性是本文要讨论的问题。二、停服务方案在讨论平滑方案之前先简要说明下“x库拆y库”停服务的方案(1)站点挂一个公告“为了为广大用户提供更好的服务本站点/游戏将在今晚00:00-2:00之间升级届时将不能登录用户周知”(2)停服务(3)新建y个库做好高可用(4)数据迁移重新分布写一个数据迁移程序从x个库里导入到y个库里路由规则由%x升级为%y(5)修改服务配置原来x行配置升级为y行(6)重启服务连接新库重新对外提供服务整个过程中最耗时的是第四步数据迁移。回滚方案如果数据迁移失败或者迁移后测试失败则将配置改回x库恢复服务改天再挂公告。方案优点简单方案缺点(1)停服务不高可用(2)技术同学压力大所有工作要在规定时间内做完根据经验压力越大约容易出错(这一点很致命)(3)如果有问题第一时间没检查出来启动了服务运行一段时间后再发现有问题难以回滚需要回档可能会丢失一部分数据有没有更平滑的方案呢三、秒级、平滑、帅气方案再次看一眼扩容前的架构分两个库假设每个库1亿数据量如何平滑扩容增加实例数降低单库数据量呢三个简单步骤搞定。(1)修改配置主要修改两处a)数据库实例所在的机器做双虚ip原来%20的库是虚ip0现在增加一个虚ip00%21的另一个库同理b)修改服务的配置(不管是在配置文件里还是在配置中心)将2个库的数据库配置改为4个库的数据库配置修改的时候要注意旧库与辛苦的映射关系%20的库会变为%40与%42%21的部分会变为%41与%43这样修改是为了保证拆分后依然能够路由到正确的数据。(2)reload配置实例扩容服务层reload配置reload可能是这么几种方式a)比较原始的重启服务读新的配置文件b)高级一点的配置中心给服务发信号重读配置文件重新初始化数据库连接池不管哪种方式reload之后数据库的实例扩容就完成了原来是2个数据库实例提供服务现在变为4个数据库实例提供服务这个过程一般可以在秒级完成。整个过程可以逐步重启对服务的正确性和可用性完全没有影响a)即使%2寻库和%4寻库同时存在也不影响数据的正确性因为此时仍然是双主数据同步的b)服务reload之前是不对外提供服务的冗余的服务能够保证高可用完成了实例的扩展会发现每个数据库的数据量依然没有下降所以第三个步骤还要做一些收尾工作。(3)收尾工作数据收缩有这些一些收尾工作a)把双虚ip修改回单虚ipb)解除旧的双主同步让成对库的数据不再同步增加c)增加新的双主同步保证高可用d)删除掉冗余数据例如ip0里%42的数据全部干掉只为%40的数据提供服务啦这样下来每个库的数据量就降为原来的一半数据收缩完成。四、总结该帅气方案能够实现n库扩2n库的秒级、平滑扩容增加数据库服务能力降低单库一半的数据量其核心原理是成倍扩容避免数据迁移。迁移步骤(1)修改配置(2)reload配置实例扩容完成(3)删除冗余数据等收尾工作数据量收缩完成以上内容均来自微信公众号“架构师之路”胡剑老师的文章欢迎关注。