专栏首页民工哥技术之路高性能、高可用平台架构的演变过程

高性能、高可用平台架构的演变过程

开篇概述

在如今移动互联网、互联网+、大数据的时代,各类的互联网网站、平台异常突起,如同雨后春笋,有种“忽如一夜春风来,千树万树梨花开”感觉。

对于移动互联网时代的平台来说,用户的体验感是否良好?平台的稳定性是否良好?估计是对所有互联网平台来说两大头等要素吧,的确,移动互联网时代,流量就是市场价值,说白了就是收益,就是RMB,失去了流量,那么你也就失去了赚取收益的机会与机遇。

因此,对于互联平台或网站来说,网站的高可用、不间断服务也是平台运营过程中的一个重大决定因素,比如说某平台,三天两头的故障,打不开,又或者说,经常性的出现错误、访问超时等等问题,那么用户的流失机率就会随之增加。

那么今天我们就来聊一聊各类高可用架构的一个演变过程到底是如何的?此文民工哥用时三小时总结写作完成,希望对大家有所帮助,欢迎大家拍砖、留言、点赞、转发分享以支持。

什么是高可用?

“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。简而言之,就是不间断对外提供服务

架构之初

架构图

架构简述

这类架构比较适用于初创企业或流量较小的平台

此种架构一般都是在平台运行之初所用到的架构,日均PV不大,简单的架构足以能够应对用户的流量请求,比如前端网站使用Apache/nginx都可以,APP服务器直接使用JAVA环境如tomcat应用,互联网平台的数据库大部分使用Mysql,备份服务器一般都备份一些常用的配置、代码、数据库数据的备份文件等。因此,民工哥称它为架构之初。

架构中期

随着用户数量的增长、访问量的增加,随之而来的问题就是单台服务器已无法承受用户的访问流量,因此前期的基础架构就需要面临一定的调整,大概调整如下

架构图

架构简述

这类架构就此引入了负载均衡的概念,关于应用的负载均衡,前面也有相关的文章介绍,具体文章链接如下

Nginx反向代理负载均衡配置

Nginx+Tomcat多实例及负载均衡配置

Apache服务的反向代理及负载均衡配置

负载均衡的开源软件较多,通常会有以下两种方式

硬件负载——F5 7层或者4层网络代理 软件负载——nginx、haproxy开源负载均衡软件

负载均衡的算法通常有:

轮询法 随机法 源地址哈希法 加权轮询法 加权随机法 最小连接数法

具体使用何种方式,一切以企业实际需求、投入与产出比(成本考虑)为主,但是此类架构也有一定的缺点存在,暂时不考虑前端负载设备的高可用,比如用户的上传与查看文件问题(通过A服务访问上传,然后负载查看时是通B服务器的,就会造成用户无法查看的问题),APP服务器同理;数据库服务器存在主、从库单点问题,一旦故障,可以手工进行故障切换,但是可能会造成数据丢失或不统一,并且会在一定程度上给用户造成不好的体验;因此仍需演变。

架构图

架构简述

此架构在上面的架构基础,以应对各类问题做出的修改,增加了数据存储服务器(NFS共享存储Linux系统NFS网络文件系统),对于存储架构及源件,其实挺多的,具体有以下几种开源软件服务

1、NFS网络共享存储文件系统 2、FastDFS 轻量级网络文件系统(参考文章:分布式文件系统FastDFS详解) 3、分布式文件系统MooseFS 4、GlusterFS文件系统

并配置负载均衡、并且还解决了单点故障的问题,对于数据库服务器做出了一定的架构调整,为双主多从的架构,对于数据库的各种高可用架构,前面也有文章做过分析,具体如:

浅谈MySQL集群高可用架构

MySQL集群高可用架构之MHA

但是所有架构都是要以实际需求(如对数据完整性、一致性的要求为主),从而解决主库单点问题、从库读取量大的性能问题,保证在一定量用访问时的平台性能与高可用

架构终期

架构图

架构简述

架构演变到一定程度,仅通过平行的扩展或增加服务器数量可能已无法解决相关的性能问题,因此

第一在用户访问初始阶段就会使用CDN加速技术,来提高用户的访问体验度; 第二按照业务来拆分成不同的服务,通过拆分服务、相同服务布署多个实例的架构来达到扩展的目的,来提高一定的性能,也能保证平台的高可用性;服务拆分后,也能一定限度的解决发布问题,因为服务之间彼此独立,服务之间耦合性不强,也比较方便平时的维护; 第三,对于用户与数据库之间的瓶颈问题,考虑加上缓存技术来提高一定的访问性能与高可用性,让用户的访问流量在到达数据库之前直接过滤掉一部分,甚至一大半,从而减轻数据库访问压力,在查多写少的场景,非常适用使用缓存来提升查询服务的性能,减轻对数据库的压力。通常使用redis作为缓存服务器,redis的一些集群机制能很大程度上保证缓存服务的高可用性(Redis集群生产环境高可用方案实战过程),缓存服务故障时,还能从数据库获取信息。然后对于备份服务器也简单的做调整保证数据的完整性,一方面也能及时保障应用的高可用性;其实一些大型分布式的系统在缓存这块还是比较倾向于memcached服务(Linux系统Memcached服务介绍),比如像一些用户的登录信息同步到其它系统此种场景,一般布署在前台应用层与数据存储层中间,应对前端应用大量请求与快速响应,从而减少数据库的访问压力,也能提高用户的访问体验度。

也有一部分平台架构是采用分层的方式

前端应用层: 给用户提供页面展示、查找、搜索的界面及相关的最终结果显示页面 后端服务层: 一般包括像常用的后台服务、用户管理、接口管理、支付管理等,都是给前端应用提提供服务的 数据存储层: 这个就很容易理解,像数据库、文件系统、缓存等一系列提供数据访问与存储的

所以因此也有下面的这类架构产生

最终总结

高可用、高性能只能说是一个阶段、一个时期的,没有完美的架构,只有不断演变、不断完善的架构,因此,今天所说的高性能、高可用架构,可能不尽完美,但归根结底总结成一句话:“让用户的访问流量尽量靠前,一步步分层去过滤用户流量,快速响应用户的请求,从而达到比较好的用户体验”。

本文分享自微信公众号 - 民工哥技术之路(jishuroad),作者:民工哥

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SSH 只能用于远程 Linux 主机?那说明你见识太小了!

    今天为大家分享一篇关于SSH 的介绍和使用方法的文章。本文从SSH是什么出发,讲述了SSH的基本用法,之后在远程登录、端口转发等多种场景下进行独立的讲述,希望能...

    民工哥
  • 浅谈DDOS(Distributed Denial Of Service)攻击

    攻击者发送大量的数据包占满被攻击的网络带宽,造成正常的请求得不处理,常见的有ICMP洪水攻击、UDP洪水攻击、使用伪造源IP

    民工哥
  • MySQL 主从同步架构中你不知道的“坑”

    结论:此种模式下此配置对默认的库进行不同步数据库,需要增加相关表的参数,最后测试得出不加replicate-ignore-db = mysql参数,同样对默认的...

    民工哥
  • 「企业架构」企业架构框架图

    企业架构框架图是架构的分类方案(治理架构,业务架构,信息架构,技术架构,人力资本架构,安全架构,系统架构,软件架构,基础架构架构等)及其重要工件。企业架构框架可...

    首席架构师智库
  • 微服务即演进式架构 | TW洞见

    今日洞见 文章作者来自ThoughtWorks:Neal Ford& Rebecca,译者来自ThoughtWorks:禚娴静。 本文所有内容,包括文字、图片和...

    ThoughtWorks
  • 怎样成为一个优秀的架构师?

    架构师是一个既能掌控整体又能洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物。看似完美的“人格模型”背后,是艰辛的探索。

    一个会写诗的程序员
  • 《一线架构师实践指南》—— 读后总结

    之前总觉得架构是一件很高大上的工作,跟普通的编码设计不太一样。前一段实践,自己也尝试做过架构的工作,可惜经验不足导致架构非常混乱。这里读完这本书,大体上对架构...

    用户1154259
  • 张升:农业银行的分布式架构应用实践与展望

    近年来,以阿里为代表的互联网企业提出的“去IOE”,在业界引起了广泛的讨论。“去IOE”直接含义是不使用传统IT巨头的产品,这些厂商产品虽然好,但基本处于市场垄...

    CSDN技术头条
  • 架构如何为业务和技术“服务”(1)

    前言 为提升架构对于项目,产品的贡献度,更好的服务于业务和技术,本文将探讨架构的现状和规划未来架构的目标。 在讨论架构、业务、技术的问题前,请耐心的阅读完本文有...

    用户1177503
  • 模块架构不是软件成功的“决定因素”

    【本文是09年的一篇旧文,出于某些原因,对原文内容有删减,在这里整理后重新发表】 前言 感谢XXX对我们技术,对我们公司产品提出这些意见,我们公司卖的是软件...

    用户1177503

扫码关注云+社区

领取腾讯云代金券