所在的位置: java >> 学习资料 >> 使用HAProxyPHPRedis和

使用HAProxyPHPRedis和

在公司的发展中,保证服务器的可扩展性对于扩大企业的市场需要具有重要作用,因此,这对架构师提出了一定的要求。Octivi联合创始人兼软件架构师AntoniOrfin将向你介绍一个非常简单的架构,使用HAProxy、PHP、Redis和MySQL就能支撑每周10亿请求。同时,你还能了解项目未来的横向扩展途径及常见的模式。

以下为译文:

在这篇文章中,我将展示一个非常简单的架构,使用HAProxy、PHP、Redis和MySQL支撑每周10亿请求。除此之外,我还将展示项目未来的横向扩展途径及常见的模式,下面我们一起看细节。

状态:

服务器

3个应用程序节点

2个MySQL+1个备份

2个Redis

应用程序

应用程序每周处理10亿请求

峰值请求每秒的单Symfony2实例(平均工作日约请求每秒)

平均响应时间30毫秒

Varnish,每秒请求超过1.2万次(压力测试过程中获得)

数据存储

Redis储存了1.6亿记录,数据体积大约GB,同时它是我们的主要数据存储

MySQL储存了3亿记录,数据体积大约GB,通常情况下它作为三级缓存层

平台:

监视:

Icinga

Collectd

应用程序

HAProxy+Keepalived

Varnish

PHP(PHP-FPM)+Symfony2Framework

数据存储

MySQL(主从配置),使用HAProxy做负载均衡

Redis(主从配置)

背景

大约1年前,一个朋友找到我并提出了一个苛刻的要求:它们是一个飞速发展的电子商务初创公司,而当时已经准备向国际发展。介于那个时候他们仍然是一个创业公司,初始解决方案必须符合所谓的成本效益,因此也就无法在服务器上投入更多的资金。遗留系统使用了标准的LAMP堆栈,因此他们拥有一个强力的PHP开发团队。如果必须引入新技术的话,那么这些技术必须足够简单,不会存在太多架构上的复杂性;那么,他们当下的技术团队就可以对应用进行长期的维护。

为了满足他们扩展到下一个市场的需求,架构师必须使用可扩展理念进行设计。首先,我们审视了他们的基础设施:

老系统使用了单模块化设计思路,底层是一些基于PHP的Web应用程序。这个初创公司有许多所谓的前端网站,它们大多都使用了独立的数据库,并共享了一些支撑业务逻辑的通用代码。毫不客气的说,长期维护这种应用程序绝对是一个噩梦:因为随着业务的发展,有些代码必须被重写,这样的话,修改某个网站将不可避免导致业务逻辑上的不一致,这样一来,他们不得不在所有Web应用程序上做相同的修改。

通常情况下,这该归结于项目管理问题,管理员必须对横跨多个代码库的那些代码负责。基于这个观点,整改第一步就是提取核心的业务关键功能,并将之拆分为独立的服务(这也是本文的一个重点部分),也就是所谓的面向服务架构,在整个系统内遵循“separationofconcern”原则。每个服务只负责一个业务逻辑,同时也要明确更高等级的业务功能。举个形象的例子也就是,这个系统可能是个搜索引擎、一个销售系统等。

前端网站通过RESTAPI与服务交互,响应则基于JSON格式。为了简单起见,我们选择了SOAP,一个开发者比较无爱的协议,因为谁都不愿意解析一堆的XML。

提取一些不会经常处理的服务,比如身份验证和会话管理。这是非常必要的一个环节,因为它们的处理等级比较高。前端网站负责这个部分,只有它们可以识别用户。这样一来我们可以保持服务的足够简单,在处理扩展和代码相关问题时都具有巨大的优势,可谓各司其职,完美无缺。

带来的好处:

独立子系统(服务)可以便捷的在不同团队中开发,开发者互不干涉,效率理所当然提升。

身份验证和会话不会通过它们来管理,因此它们造成的扩展问题不翼而飞。

业务逻辑被区分,不同的前端网站不会再存在功能冗余。

显著地提高了服务的可用性。

共生的缺点:

为系统管理员带来更大的工作量。鉴于服务都使用了独立的基础设施,这将给管理员带来更多需要







































盖百霖在哪些药店出售
移动app后台开发



转载请注明:http://www.jiaju1314.com/xxzl/8649.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了