高性能可靠服务集群架构

1、 需求分析

庞大的业务访问量需要高性能、可靠的服务器框架支撑。高性能要求服务器在巨大压力下仍然高速运行,读写返回正确的业务信息,前端用户体验良好。可靠性要求服务器出现宕机、罢工等情况,可以及时恢复服务器正常工作状态,支持业务系统24小时健康运行。使用缓存、读写分离技术提高服务器访问资源速度,解决大访问量资源拥堵问题;使用负载均衡与高可用技术提高服务器响应速度以及服务器稳定性,解决服务器处理大用户量请求问题以及服务器宕机的及时恢复能力。

同时,需要部署运维监控平台,监控服务器上服务程序与资源使用情况,出现问题及时报警通知运维人员。服务器系统的安全加固问题也不能忽视,防范于未然。

2、 基础架构

按照上述需求,基础架构划分下面几个模块:负载均衡与代理、Web主站服务、APP接口服务、图片服务器、数据库与缓存服务。

客户端通过域名解析直接访问到负载代理服务器,后端全部访问与响应操作对用户透明。图片也可以单独开来,不经过负载均衡代理服务器,使用单独的域名进行图片读写。当图片服务数量上来了,也要配置单独的负载均衡代理服务器,组合服务器集群。而这里图片服务器与其他服务共用相同负载,这样负载压力大,容易出现问题,追溯问题源头工作也会变得复杂。所以说,不同的服务集群,最好使用不同域名、不同负载均衡进行代理。客户端直接通过负载访问相关服务,负载直接代理到服务子群,不再对服务进行判断划分。分工更加明确,出现问题也容易解决。

图片服务器也可以不需要存在与其他服务直接访问关系,他们只需要保存好访问图片对应关系,包括图片所属ID、路径、标识等。

3、 负载代理

负载均衡代理主要是两个作用:实现多台机器按照算法轮流工作,分担服务压力,当一台机器宕机或者罢工,其他机器也可以继续运行;代理隐藏服务内部真实结构,多台对外提供统一地址,运行相同业务系统。

负载代理服务器本身也需要支持高可用性能,主从备份机器,主服务器发生故障时,从服务器及时顶替继续运行负载代理服务。Keepalived可以支持高可用性能,更加可以配置Keepalived自动执行自定义检测脚本,检测服务器的心跳,自动递减服务器的优先级,实现服务自动偏移功能。

下面几个组合可以完成上述功能,各个组合侧重点有所不同,所处的网络层次也有不同。网络四层主要针对IP地址负载均衡,而网络七次针对URL,更有支持四层与七层的,侧重于TCP/IP协议栈。

LVS+Keepalived:LVS工作于网络四层结构,针对IP地址进行网络数据报转发,实现负载均衡代理功能,器配置相对复杂。性能稳定,支持超大访问量的集群负载。对外提供统一的虚拟IP,有三种工作模式,十种左右的轮询算法。

Nginx+Keepalived:Nginx工作与网络七层结构,配置相对简单,支持URL、目录等正则处理更加贴近实际生产需求,可以支持较大访问量的集群负载。

Haproxy+Keepalived:Haproxy工作网络四层与网络七层都可以,配置相对简单,负载均衡速度不亚于Nginx,值得一提的是Haproxy可以进行DDOS攻击防御,以后应该深入研究Haproxy。

4、 主站服务

主站框架是一个Web服务器(apache、tomcat、nginx等)集群,集群中全部机器运行相同业务系统。通过负载均衡代理与客户端通讯,每一次通讯只有一台机器为当前客户端服务。需要解决session共享问题,否则将会丢失用户的登录状态,在用户体验方面有逻辑错误。常见的共享session方法有数据库共享、cookie共享、内存共享。使用最多的是memcache共享方式,memcache把多个服务器的共享内存拼接成一块大的内存使用,保存用户的session信息。Tomcat服务集群可以简单配置memcache共享内存,PHP中也可以直接配置设置memcache共享内存。

Nginx负载解决session的方式:ip_hash、sticky。ip_hash根据IP保存响应服务器,在一张存储表单中,IP对应上次访问的服务器,以后来自于该IP的访问都使用这个这台服务器,解决session问题,存在局限性影响负载均衡的功能。Sticky使用cookie的方式解决session共享问题,其实是避开session共享。Sticky把cookie与服务器绑定,存储于客户端缓存当中,客户端再次访问时直接进入到cookie绑定的服务器,关闭客户端session也随之消失。

5、 接口服务

接口服务与主站服务功能大同小异,也是Web服务集群。在负载代理时候,通过七层代理转发正则匹配域名与目录,指向接口服务地址端口。对于划分更加细节的系统架构,接口服务也是单独的域名,启用四层负载代理连接集群,服务功能更加简单明了。

6、 图片服务

图片服务建立在分布式文件系统基础上,搭建Web服务主要支持图片访问上次下载功能。结合读写分离技术,图片上传划分一个子群,图片下载划分一个子群。前面搭建负载均衡服务器支持大量读写操作,两个子群建立在同一个文件系统,组成分布式文件系统。常见的文件系统有NFS、FastDFS、TFS、Hadoop等。

NFS是共享挂载方式,访问图片时仍然占用网络带宽,没有文件备份处理,出现故障不容易恢复。FastDFS是一个分布式同步文件系统,稳定性好可靠,提供各种语言客户端API便于开发。TFS是淘宝正在使用的图片服务器文件系统,支持海量图片读写操作,对于大文件存储能力欠佳。Hadoop是比较火的大数据平台,高容错高吞吐量,技术成熟,分布式文件系统非常好的选择。

7、 数据库与缓存

7.1、数据库集群

如果服务访问量非常大,数据库是访问速度最重要的影响因素。数据的读写操作往往占用大部分时间,数据表上百万级别记录,update操作时间开销会很大。而且外面有一条几万的数据库操作队列,那是人不崩溃,机器已经崩溃。首先是CPU占满,数据库里面堆满上锁sql语句,导致前端反应速度跟不上蜗牛。

对数据库访问频繁数据记录数量巨大的表,进行分片操作,细化数据表提高sql执行速度。数据库服务器使用分布式架构部署,前面架设负载均衡服务器,结合数据库读写分离技术。常见数据库db2、oracle、mysql等,对于分布式mysql系统,可以使用MyCat中间件管理。

7.2、缓存服务

缓存可以提高服务的响应速度,处理及时性要求高的数据时,数据首先进入缓存,然后通过消息队列写入到数据库。从数据库查询出来的实时数据也可以保存在缓存中,在缓存中直接提供用户访问,执行用户操作数据请求,再把数据返回数据库。

Redis是一款出色的缓存服务器,内存级别的键值对数据库,支持丰富数据结构,数据库操作命令也是很齐全。最重要是Redis操作速度非常快,满足缓存服务器需求。Redis提供单机的分片集群,单机硬件性能要求比较高。Redis也可以进行分布式部署,搭建分布式缓存服务。

8、 安全加固

安全配置:隐藏常见系统服务信息、配置用户权限、开启防火墙、关闭无用系统服务、定期更新系统

风险评估:进行渗透测试、漏洞扫描

安全防御:配置IDS\IPS、进行源代码审计、DDOS防御、恶意代码检测

9、 服务器监控

配置运维监控平台,实时监控服务器的健康状况。CPU、内存、磁盘、输入输出、网络性能等参数,配置报警规则,触发报警是立即调用API接口或者第三方回调,发送报警信息到邮箱、微信等。同时,自定监控数据项,检测Web服务、数据库服务、后台程序等运行状态,连续出现拒绝服务行为立刻报警,通知管理员。

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏快乐八哥

Angular企业级开发(1)-AngularJS简介

AngularJS介绍 AngularJS是一个功能完善的JavaScript前端框架,同时是基于MVC(Model-View-Controller理念的框架,...

2218
来自专栏Ryan Miao

session机制详解以及session的相关应用

session是web开发里一个重要的概念,在大多数web应用里session都是被当做现成的东西,拿来就直接用,但是一些复杂的web应用里能拿来用的sessi...

4217
来自专栏Elson's web

【译】开始在web使用JS Modules

原文说的JS modules,实际上指的是ES6的模块化特性,通过<script type="module">可以实现不经过打包直接在浏览器中import/ex...

3417
来自专栏linux、Python学习

你不知道Linux的10个最危险的命令

Linux命令行佷有用、很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候。

950
来自专栏北京马哥教育

Linux的10个最危险的命令

Linux命令行佷有用、很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候。

1572
来自专栏轮子工厂

关于操作系统的一些事,这些你应该要知道~

1054
来自专栏腾讯云数据库(TencentDB)

CynosDB的计算层设计优化揭秘——兼容PostgreSQL版

CynosDB 是腾讯数据库研发团队推出的自研数据库,有PostgreSQL和MySQL两个版本。本文以兼容PostgreSQL版CynosDB为例,介绍我们的...

15.2K4
来自专栏月色的自留地

mac电脑进行可见光通信实验要点

2064
来自专栏ThoughtWorks

高效快速地加载 AngularJS 视图|TW洞见

今日洞见 文章作者、部分图片来自ThoughtWorks:陈计节。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体...

3077
来自专栏地方网络工作室的专栏

打造前端MAC工作站(五)让我们熟悉一下 MAC 命令行吧!

打造前端MAC工作站(五)让我们熟悉一下 MAC 命令行吧! 前言 对于初次基础mac或者linux的朋友来说,接收和使用命令行是一个比较困难的事情。但是,正如...

24410

扫码关注云+社区

领取腾讯云代金券