一个高性能,高并发,高可用的系统是如何演变来的
PHP / 44 / 0 / 发布于 3个月前 文章来自:PHP自学中心 大型电商系统或社交网站的系统架构从一开始就没有设计具有完整的高性能,高可用性,高可伸缩性等特性的。它是随着用户的增加和业务功能的扩展,逐步演变和完善起来的。 在此过程中,开发模式,技术体系结构和设计思想都发生了很大的变化。因此,随着业务的扩展,成熟的系统体系结构将逐渐得到改善。 例如淘宝,解决海量商品信息的搜索,订购和支付问题;例如腾讯,解决了亿万用户的实时消息传输。百度处理大量搜索请求。 他们都有各自的业务特性,系统架构也有所不同。不过我们也可以从这些不同的网站背景中,找出其中广泛运用在这些系统里共用的技术手段 下面我们可以通过介绍大型网站系统的演化过程,来认识这些技术。 1 最开始的网站架构 一个网站的最初开始,每个开发者都接触过。每个应用程序,数据库,静态文件等都会部署在一个服务器里。流量基本很小的网站,比如个人网站,博客等就可以这样部署。如图: 2 应用、数据、文件分离 业务的扩展与需要,访问流量多了一点,一台服务器已经不能满足性能需求,这个时候我们就要把应用程序,数据库,文件等各自部署到独立的服务器上各自管理。并且根据用途配置不同的硬件。 这样就达到了满足性能需求的最佳效果了。基本小型企业,业务每天流量不到1w的都可以算是最佳的。如图: 3 缓存改善网站性能 每个开发者在遇到性能瓶颈或者硬件性能有效的时候基本都会想到用缓存改善网站性能,经常用到的Nosql如: Memcached, Redis 。 使用缓存主要源于热点数据的存在,为了减少热点数据的访问路径与提高用户体验,我们可以对热点数据进行缓存,提高网站性能。 缓存实现的方式有:本地缓存,分布式缓存,还有 CDN、反向代理。 1 本地缓存:速度快,根据本地空间缓存数据量。 2 分布式缓存:Memcached、Redis 4 使用集群改善应用服务器性能 集群就是同一个业务,部署在多个服务器上(不同的服务器运行同样的代码,干同一件事),那我们就可以用负载均衡来解决相应的问题,提高性能。 方式:常用的负载均衡技术硬件的有 F5,价格比较贵,软件的有 LVS、Nginx、HAProxy。 LVS 是四层负载均衡,根据目标地址和端口选择内部服务器,Nginx 和 HAProxy 是七层负载均衡,可以根据报文内容选择内部服务器。 因此 LVS 分发路径优于 Nginx 和 HAProxy,性能要高。而 Nginx 和 HAProxy 则更具配置性,如可以用来做动静分离,比如根据请求报文特征,来选择静态资源服务器还是应用服务器。 应用服务器是网站的入口,会承载大量的请求,我们就在应用服务器前面部署负载均衡服务器调度用户请求,根据分发策略将请求分发到多个应用服务器节点。如图: 5 数据库读写分离和分库分表 这个相信大家都听过,但是会不会就不知道了。详细可以查看这篇文章: 【进阶】Mysql分库分表方案,如何分,怎样分? 分库分表分为水平切分和垂直切分两种。 1 水平切分是对一个数据库特大的表进行拆分,例如用户表。 2 垂直切分则是根据业务的不同来切分,比如用户业务、商品业务相关的表放在不同的数据库中。 一个网站的流量的增加,也就是用户访问量的增加,访问量的增加则数据库就会成为最大的瓶颈。 然而改善数据库的性能,我们常用的手段是对数据库进行读写分离和分库分表。实现数据同步从而改善数据库性能。如图 6 使用分布式文件系统 什么是分布式文件系统:分布式文件系统的全部不在同一台计算机,而是分散布置在多台计算机上。所以多个分散的小文件系统组合在一起,形成一个完整的文件系统。 分布式的特点:分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。 这里使用到分布式文件系统,想想就知道了,用户每天都在增加,业务量越来越大,而产生的文件越来越多,单台的文件服务器已经不能满足需求,这时就需要分布式文件系统的支撑。常用的分布式文件系统有 GFS、HDFS、TFS。具体就不介绍了。看图: 7 使用 CDN ...
https://learnku.com/articles/64472