朋友圈分享公众号原文并关注“八戒技术团队”可进行抽奖
奖品:猪八戒抱枕一个
点击原文:【技术分享】历经16年猪八戒网如何成功实现双活流量架构

猪八戒网随着业务访问量的直线增长,用户增长达到一定规模后,同时面临着高并发业务和海量数据的挑战,传统单机房在服务器容量上存在瓶颈,而且在一些不可预知场景下,导致整个网站出现故障,例如机房断电、火灾等这些不可抗拒因素都会导致所有服务器出现宕机从而导致业务瘫痪,即使有备份,恢复业务花费的时间也比较长。所以公司根据实际业务情况选择了同城双活流量高可用架构,当然还有两地三中心、异地多活等方案。本文主要基于同城双活流量叙述猪八戒网这16年的双活流量架构演进之路。

初期
2014年前猪八戒网的服务器都是托管于传统IDC机房,虽然业务应用、基础组件、数据库等都设计了高可用模式,但是避免不了机房宕机导致整个网站出现故障的问题。如图1:

图1:单点机房

直到2015年初的时候,由于机房人员日常维护的时候,不小心把我们的核心交换机网线碰松了,然后导致整个猪八戒网打不开,我们通过各种排错才定位到这个问题,经过此事件后,上层领导高度重视网站的可用性问题,为了解决机房不可控的因素,所以2015年中旬开始建设备用机房,解决机房单点问题。(注:当时基础组件及业务应用不具备双活条件,只支持主备架构模式)如图2:

优点:
·主机房发生故障时,通过DNS解析到备用机房,解决机房单点故障问题;
·主备架构模式简单,持久化数据异步同步到备用机房,不用考虑脑裂问题。
缺点:
·由于备用机房平时处于空闲状态,造成大量资源浪费问题。


图2:同城主备

中期
经过1-2年的迭代,大概在2017年的时候,随着基础组件的升级改造,例如:数据库、缓存、队列、对象存储、配置中心等都支持了双活流量架构模式,然后业务应用纷纷改造适配双活流量架构模式。终于我们可以把网站域名同时解析到2个机房了。如图3:

图3:同城双活(基于DNS的双活)

基于DNS切换流量模式还是有瑕疵的,在猪八戒网运行了3年左右,在此期间多次出现某机房不稳定事件进行全局流量切换,主要问题体现在某些DNS服务器不跟着协议走,导致切换流量生效时间慢,流量切换不彻底的问题。

提示:一般情况我们遇到的单个机房故障,主要体现在基础组件、业务大面积瘫痪等问题上,不涉及到入网流量的问题,假如真的是入网流量异常了,也只有等DNS解析生效了。

鉴于以上遇到的问题,我们换个思路解决如何快速切换流量,最终方案是在HTTPS层的Nginx(ngx_lua)代理服务器实现快速动态分流的功能(项目为:Signpost),为什么采用ngx_lua?因为ngx_lua在猪八戒网稳定运行5年+,不管是开发效率及性能,Lua有着天然的优势,语言表达能力也更强,而且ngx_lua是同步非阻塞(100% non-blocking)的,再次感谢章亦春 (agentzh)大佬的开源作品lua-nginx-module。如图4:

图4:HTTPS代理层分流

如何基于ngx_lua设计动态分流功能呢?简单通俗一点就是如何快速动态切换nginx的upstream进行分流而不执行nginx reload。关于Upstream是如何动态生成的?请查阅上篇:【技术分享】猪八戒网Nginx的动态服务发现演进之路

首先管理人员配置分流策略到CMDB系统中,然后CMDB同步到Redis缓存,当用户请求时,Nginx接受到请求后,先从worker缓存获取分流策略,如果worker缓存没有,就到lua_shared_dict缓存获取,如果lua_shared_dict也没有,那就到Redis中读取,然后依次缓存,根据匹配的分流策略执行指令。假如没有获取到分流策略,那就按照默认策略分流。如图5:

图5:动态切换Upstream架构

为什么会有三级缓存?因为worker缓存支持数据结构缓存,而且没有锁竞争,lua_shared_dict缓存有锁竞争,不支持数据结构存储,Redis缓存需要TCP连接消耗,最终都是为了性能!

现在
经历了数月的开发及基础架构改造,终于在2020年9月初,基于HTTPS层的Nginx(ngx_lua)快速动态分流的功能成功上线了,主要支持了全局模式、单域名模式的流量切换,还额外支持了域名动态HTTP/HTTPS协议切换。如图6 - 9:

图6:同城双活(基于NGX_LUA的Signpost)

图7:双活流量控制台

图8:单域名切换功能

图9:单域名切换日志

最后,关于Signpost软件的主要特性,支持多活流量管理,根据不同维度进行分流,例如:IP段、地区、Cookie、浏览器、GET参数等,流量切换可以精确到秒级,而且全程用户零感知。

希望以上内容能对有需要的人有所帮助
欢迎大家一起探讨交流
请点击下方名片关注我们

【技术分享】历经16年猪八戒网如何成功实现双活流量架构相关推荐

  1. SDNLAB技术分享(二):从Toaster示例初探ODL MD-SAL架构

    为什么80%的码农都做不了架构师?>>>    本文系OpenDayLight SDNLAB研究群(群号:194240432)分享整理而成,分享者魏静波通过对ODL wiki上的to ...

  2. 猪八戒网Nginx的动态服务发现演进之路

    随着业务访问量的直线增长,业务项目数量也越来越多,期间各个业务项目的频繁上线.回滚.动态扩容与缩容等,促使了微服务架构的流行,又新引入了容器化部署发布方式,当容器发布及重建的时候,实例IP将会发生变化 ...

  3. UWA 技术分享连载 转载

    技术分享连载1 Q1:Texture占用内存总是双倍,这个是我们自己的问题,还是Unity引擎的机制? Q2:我现在发现两个因素直接影响Overhead,一个是Shader的复杂度,一个是空Updat ...

  4. 阿里IM技术分享(八):深度解密钉钉即时消息服务DTIM的技术设计

    本文引用自InfoQ社区"5亿用户如何高效沟通?钉钉首次对外揭秘即时消息服务DTIM"一文,作者陈万红等.策划褚杏娟,有修订和改动. 一.引言 本文是国内企业IM的事实王者钉钉首次 ...

  5. 十二年10次IT大考!猪八戒网的系统架构和开发流程经历了什么?

    刚刚发布的"腾云 10 号",不是一个产品,而是 13 个研发项目的组合,更是近 200 人研发团队投入 3 个月精力的一次"行动",在迄今为止猪八戒网创立的 ...

  6. 【技术分享】猪八戒网DevOps之Java组件安全检测

    查看原文:[技术分享]猪八戒网DevOps之Java组件安全检测 关注微信"八戒技术团队",技术干货 一.文章摘要 应用安全一直是一个非常重要的课题,2021年12月7日Log4j ...

  7. 【技术分享】猪八戒十年DevOps演进之路

    前言 时间先回退到2011年,那时候我刚加入猪八戒,加入公司之前我还不知道svn.git是什么东西,连发布代码也是用的最传统的FTP上传方式.而早在2009年,来自Flickr员工在一场会议中所揭露了 ...

  8. 猪八戒网的DevOps进化论

    猪八戒网的系统架构演变史 2015年前,猪八戒网80%的项目都是PHP语言开发的,剩余少部分系统使用Node.js和Java.2015年一个关键的里程碑,开启了猪八戒网SOA服务转变,这就是腾云7号行 ...

  9. 阿里钉钉技术分享:企业级IM王者——钉钉在后端架构上的过人之处

    本文引用了唐小智发表于InfoQ公众号上的"钉钉企业级IM存储架构创新之道"一文的部分内容,收录时有改动,感谢原作者的无私分享. 1.引言 业界的 IM 产品在功能上同质化较高,而 ...

最新文章

  1. mysql的复合类型_PLSQL 复合类型数据
  2. React中Context API的应用
  3. 学习《apache源代码全景分析》之过滤器部分摘录
  4. 修改SQL server数据库中的逻辑文件名
  5. php置顶文章,zblogphp调用置顶文章的教程
  6. java(18) - 枚举类型和静态导入
  7. 前端逼死强迫症系列之javascript
  8. vb6.0动态加载odbc驱动(mysql数据源)_vb教程之在VB中动态加载ODBC数据源
  9. 极坐标潮流计算matlab,基于Matlab矩阵运算的潮流计算导纳矩阵计算方法与流程
  10. 2009年03月《安全天下事之希望与忧伤》
  11. 三维温度场 matlab,matlab绘制温度场
  12. 2021-01-12
  13. 计算机网络安全学校,网络空间安全学院
  14. oracle driver class not found,错误 JDBC Driver class not found: oracle.jdbc.dirver.OracleDriver
  15. 超级电容怎么才能把内阻做小_如何测试超级电容内阻?
  16. 第十七届D2大会(II)
  17. 私有化部署VideoTogether一起看视频
  18. Linux命令之在终端显示「一头牛」
  19. linux mysql 邮件_linux 下 搭建邮件邮件服务器(Postfix+Dovecot)(二)-基于mysql的虚拟账户登陆收发邮件...
  20. 软考信息系统项目管理师论文真题及答案

热门文章

  1. 为什么需要黑苹果(hackintosh)
  2. iphone获取imei_如何为您的iPhone或iPad查找序列号或IMEI
  3. 微信小程序日历签到功能
  4. 三年级计算机帮助我们学本领,三年级学本领的作文
  5. 寻仙手游服务器无响应,寻仙手游游戏中常见问题解决方法介绍
  6. 金蝶旗舰版打不开账套,提示所选账套无效,无法建立数据库连接
  7. Photoshop脚本 给选区添加描边效果
  8. win10设置过的锁屏壁纸桌面壁纸
  9. MySQL查看所有用户及权限
  10. 未来如何与计算机和谐相处,计算机人工智能技术的应用及未来发展初探