初生 : 无名小网站
访问量低,一天服务器满足要求(应用程序+文件+数据库)
典型技术LAMP: Linux +Apache+Mysql+PHP
面临问题1: 业务复杂访问量多之后,性能越来越差,存储空间不足。
解决方式:应用服务器与数据服务分离:应用服务器+数据库服务器+文件服务器
应用服务器:需要更块强调的CPU(处理大量的业务逻辑)
数据库服务器:需要更块的硬盘和更大的内存(快速磁盘检索和数据库缓存)
文件服务器:需要更大的磁盘(存储大量用户上传文件)
不同服务器承担不同的服务角色:并发处理能力+数据存储空间 ==>性能提升
面临问题2: 用户增多,网站访问增大,数据库压力增大导致访问延迟,用户体验差
解决方式:使用缓存改善性能
缓存分类:本地缓存(速度极快,但是缓存的数据量有限,因为内存有限。与应用程序争用内存) ,
远程分布式缓存(按需做扩展,可以做成集群,先对于本地缓存要慢点)
常用缓存组件:memcache , redis
面临问题3: 单一应用服务问题,能处理请求连接有限,网站访问高峰期,拒绝访问与响应时间常问题,应用服务成为瓶颈。
解决方式:应用服务集群,改善网站的并发处理能力,起到分流的作用。
负载均衡调度服务器+集群应用服务器 +(文件服务器+远程分布式缓存服务器+数据库服务器)
为什么不用更强的服务器?负载均衡的实现方式有哪些?
应为更强的服务器也有瓶颈,再往上扩展不了,集群可以按需扩展。
负载均衡服务器一定有具有高并发高性能的能力。它要对请求做并发处理。
负载均衡实现方式:软件:Apache Nginx Reverse-proxy pWEB LVS
硬件:F5
DNS负载均衡:域名解析的过程。一个域名对应多个ip地址,每次请求解析返回不同的ip地址
面临问题4: 缓存减小了数据库压力,但是有一部分读操作(缓存访问不命令或者过期)和全部的操作要访问数据库,当用户达到一定柜面,数据库因为负载压力过高而遇到瓶颈。
解决方式:数据读写分离
负载均衡调度服务器+集群应用服务器 +(文件服务器+远程分布式缓存服务器+主数据库+从数据库服务器(主写读从))
数据访问模块怎么做?
在Mybatis中开发插件:
MyCat
Sharding-JDBC
面临问题5:用户越来越多,地域越来越广,网络环境差异大。因访问慢引而用户流失。
解决方式:反向代码和CDN加速(提前把静态资源缓存到外部服务器)
CDN服务器集群+反向代理服务器集群+负载均衡调度服务器+......
CDN内容分发网络,它是要部署在运营商的数据中心里面。类似于代理商,由代理商来处理。适用于静态资源,将静态资源提前放到本地方运营商的数据中心。请求的时候不需要跑到别的地方取数据*
带来的好处:加速用户访问响应速度,减轻后端服务器的负载压力
面临问题6: 单文件服务器,单数据库服务器,存不下日益增长的数据。
解决方式:分布式文件系统和分布式数据库系统(分库分表)
分布式文件怎样做?分库分表怎样做?
适合存储小文件,图片的分布式文件系统: FastDFS, TFS
**数据访问模块: MyCat Sharding-JDBC **
面临问题7:数据的存储需求和检索越来越复杂,存储的字段差异比较大,骷髅表;复杂的文本检索。
解决方式:使用NoSQL,搜索引擎
搜索引擎:lucene ,solr,elasticsearch
NoSQL: mongodb,elasticsearch
面临问题8: 网站越好,业务扩大,程序变庞大,迭代周期快,怎样快速应对业务的发展。
解决方式:业务拆分(应用服务拆分多个)
如大小电商网站会将首页,店铺,订单,买家等拆分成不同的产品线,分归不同的短途负责,分查不同的应用,独立部署。通过连接,mq,数据存储系统建立关联。
消息队列:RabbitMQ, ActiveMQ,Kafka
面临问题9: 拆分越小越多,关系越复杂后端的数据要被成千上万台应用服务器连接,数据连接资源不足。
解决方式:分布式服务化。
如何服务化?如何做配置中心?
服务化两种架构方式:SOA(Enterprise Services Bus -ESB消息总线,它会成为一个瓶颈,是作为一个中心点),
微服务(Microservices,没有中心,存在服务治理的问题)。
微服务框架:Dubbo SpringCloud
配置中心:Dubbo , SpringCloud config, Disconf 百度 ,Config-toolkit 当当 , Diamond 阿里
面临问题10:数据挖掘,分析,推荐等乐舞需求,庞大系统监控,问题分析问题。
解决问题:大数据技术,监控,日志分析系统。
大数据:Hadoop ,Spark
系统监控:Zabbix,elasticsearch+beats+kibana
集中式日志分析系统:ELK