使用haproxy、php、redis和mysql支撑10亿请求每周架构细节

使用haproxy、php、redis和mysql支撑10亿请求每周架构细节

ID:8984894

大小:353.83 KB

页数:11页

时间:2018-04-14

使用haproxy、php、redis和mysql支撑10亿请求每周架构细节_第1页
使用haproxy、php、redis和mysql支撑10亿请求每周架构细节_第2页
使用haproxy、php、redis和mysql支撑10亿请求每周架构细节_第3页
使用haproxy、php、redis和mysql支撑10亿请求每周架构细节_第4页
使用haproxy、php、redis和mysql支撑10亿请求每周架构细节_第5页
资源描述:

《使用haproxy、php、redis和mysql支撑10亿请求每周架构细节》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、在这篇文章中,我将展示一个非常简单的架构,使用HAProxy、PHP、Redis和MySQL支撑每周10亿请求。除此之外,我还将展示项目未来的横向扩展途径及常见的模式,下面我们一起看细节。状态:·服务器1.3个应用程序节点2.2个MySQL+1个备份3.2个Redis·应用程序1.应用程序每周处理10亿请求2.峰值700请求每秒的单Symfony2实例(平均工作日约550请求每秒)3.平均响应时间30毫秒4.Varnish,每秒请求超过1.2万次(压力测试过程中获得)·数据存储1.Redis储存了1.6亿记录,数据体积大

2、约100GB,同时它是我们的主要数据存储2.MySQL储存了3亿记录,数据体积大约300GB,通常情况下它作为三级缓存层平台: ·监视:1.Icinga2.Collectd·应用程序1.HAProxy+Keepalived2.Varnish3.PHP(PHP-FPM)+Symfony2Framework·数据存储1.MySQL(主从配置),使用HAProxy做负载均衡2.Redis(主从配置)背景大约1年前,一个朋友找到我并提出了一个苛刻的要求:它们是一个飞速发展的电子商务初创公司,而当时已经准备向国际发展。介于那个时候

3、他们仍然是一个创业公司,初始解决方案必须符合所谓的成本效益,因此也就无法在服务器上投入更多的资金。遗留系统使用了标准的LAMP堆栈,因此他们拥有一个强力的PHP开发团队。如果必须引入新技术的话,那么这些技术必须足够简单,不会存在太多架构上的复杂性;那么,他们当下的技术团队就可以对应用进行长期的维护。为了满足他们扩展到下一个市场的需求,架构师必须使用可扩展理念进行设计。首先,我们审视了他们的基础设施:  老系统使用了单模块化设计思路,底层是一些基于PHP的Web应用程序。这个初创公司有许多所谓的前端网站,它们大多都使用了独

4、立的数据库,并共享了一些支撑业务逻辑的通用代码。毫不客气的说,长期维护这种应用程序绝对是一个噩梦:因为随着业务的发展,有些代码必须被重写,这样的话,修改某个网站将不可避免导致业务逻辑上的不一致,这样一来,他们不得不在所有Web应用程序上做相同的修改。通常情况下,这该归结于项目管理问题,管理员必须对横跨多个代码库的那些代码负责。基于这个观点,整改第一步就是提取核心的业务关键功能,并将之拆分为独立的服务(这也是本文的一个重点部分),也就是所谓的面向服务架构,在整个系统内遵循“separationofconcern”原则。每个

5、服务只负责一个业务逻辑,同时也要明确更高等级的业务功能。举个形象的例子也就是,这个系统可能是个搜索引擎、一个销售系统等。前端网站通过RESTAPI与服务交互,响应则基于JSON格式。为了简单起见,我们没有选择SOAP,一个开发者比较无爱的协议,因为谁都不愿意解析一堆的XML。提取一些不会经常处理的服务,比如身份验证和会话管理。这是非常必要的一个环节,因为它们的处理等级比较高。前端网站负责这个部分,只有它们可以识别用户。这样一来我们可以保持服务的足够简单,在处理扩展和代码相关问题时都具有巨大的优势,可谓各司其职,完美无缺。

6、带来的好处:·独立子系统(服务)可以便捷的在不同团队中开发,开发者互不干涉,效率理所当然提升。·身份验证和会话不会通过它们来管理,因此它们造成的扩展问题不翼而飞。·业务逻辑被区分,不同的前端网站不会再存在功能冗余。·显著地提高了服务的可用性。共生的缺点:为系统管理员带来更大的工作量。鉴于服务都使用了独立的基础设施,这将给管理员带来更多需要关注的地方。很难保持向后兼容。在一年的维护之后,API方法中发生了数不尽的变化。因此问题发生了,它们必将破坏向后兼容,因为每个网站的代码都可能发生变化,还可能存在许多技术人员同时修改一个

7、网站的情况……然而,一年后,所有方法匹配的仍然是项目开始时建立的文档。应用程序层着眼请求工作流,第一层是应用程序。HAProxy负载均衡器、Varnish和Symfony2应用程序都在这一层。来自前端网站的请求首先会传递给HAProxy,随后负载均衡器将把他分给不同的节点。应用程序节点配置·XeonE5-1620@3.60GHz,64GBRAM,SATA·Varnish·Apache2·PHP5.4.X(PHP-FPM),使用APC字节码缓存我们购买了3个这样的服务器,N+1冗余配置的active-active模式,备份

8、服务器同样处理请求。因为性能不是首要因素,我们为每个节点配置独立的Varnish以降低缓存hit,同时也避免了单点故障(SPOF)。在这个项目中,我们更重视可用性。因为一个前端网站服务器中使用了Apache2,我们保留了这个堆栈。这样一来,管理员不会困扰于太多新加入的技术。Symfony2应用程序应用程序本身基于Sy

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。