一、大型网站系统架构演化【高速发展阶段】
第四阶段【使用服务集群改善网站并发处理能力】
背景:
- 用户的请求由谁来转发到具体的应用服务器?
- 用户如果每次访问到的服务器不一样,那么如何维护session的一致性?
负载均衡分类:
- 基于特定软件的负均衡(HTTP重定向)【应用层】
- 反向代理负载均衡【应用层】
- 基于DNS(域名解析:通过域名解析到不同的服务节点)的负载均衡【传输层】
- 基于NAT(网络地址转换:私有地址转互联网IP)的负载均衡【传输层】
应用层负载均衡
HTTP重定向
实现思路:应用层转发,重定向
特点:实现简单,性能较差
反向代理服务器
实现思路:反向代理服务器转发请求
特点:部署简单,但代理服务器可能成为性能的瓶颈
传输层负载均衡
DNS域名解析负载均衡
实现思路:在用户请求DNS服务器获取域名对应的IP地址时,DNS服务器直接给出负载均衡后的服务器IP。
特点:效率比HTTP重定向高,减少维护负载均衡服务器成本。
基于NAT的负载均衡
实现思路:将一个外部IP地址映射为多个IP,对每次连接请求动态地转换为一个内部节点的地址。
特点:技术较为成熟,一般在网关位置,可以通过硬件实现。
其他负载均衡实现
- 硬件:F5
- 软件:LVS、Nginx、HAproxy
算法分类
静态算法(不考虑动态负载)
- 轮询:轮流将服务请求 (任务) 调度给不同的服务器节点。
- 加权轮询:考虑不同节点处理能力的差异,加入权重。
- 源地址哈希散列:根据请求的源IP,作为散列键从静态分配的散列表找出对应的节点。
- 目标地址哈希散列:根据请求的目标IP做散列找出对应节点。
- 随机算法:随机分配,简单,但不可控。
动态算法(考虑动态负载)
- 最小连接数:新请求分配给当前活动请求数量最少的节点。
- 加权最小连接数:根据节点处理能力不同,再按最小连接数分配。
- 加权百分比:考虑了节点的利用率、硬盘速率、进程个数等,使用利用率来表现剩余处理能力。
Session共享机制
有状态与无状态
无状态服务:对单次请求的处理,不依赖其他请求。【处理一次请求所需的全部信息都在这次请求里,服务器本身不存储任何信息】
有状态服务:会在自身保存一些数据,先后的请求有关联性。
第五阶段【数据库读写分离】
主从数据库结构特点:一主多从 / 多主多从
主从分工:主库写、从库读
主从复制步骤:
- 1、主库(Master)更新数据完成前,将操作写binlog日志文件。
- 2、从库(Slave)打开I/O线程与主库连接,做binlog dump process,并将事件写入中继日志。
- 3、从库执行中继日志事件,保持与主库一致。
第六阶段【使用反向代理和CDN加速网站响应】
CDN定义:内容分发网络
实现思路:尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。
第七阶段【使用分布式文件系统和分布式数据库系统】
第八阶段【使用NoSQL和搜索引擎】
第九阶段【业务拆分】
第十阶段【分布式服务】
Web应用服务器
WEB服务器:其职能较为单一,就是把浏览器发过来的Request请求返回Html页面。
应用服务器:进行业务逻辑的处理。
常见服务器:
- lls:早期 Web 服务器,目前小规模站点仍有应用。
- Tomcat:开源、运行Servlet和JSP Web应用软件的,基于Java的Web应用软件容器。
- JBOSS:基于J2EE的开放源代码的应用服务器。一般与Tomcat或Jetty绑定使用。
- WebLogic:一种多功能、基于标准的web应用服务器,为企业构建自己的应用提供了坚实的基础。
- Jetty:Jetty是一个开源的Servlet容器,基于Java的web容器。
响应式Web设计
定义:一种网络页面设计布局。(类似自适应布局)【创建页面的图片排版大小,可以智能地根据用户行为以及使用的设备环境进行相对应的布局】
实现方式:
- 采用流式布局和弹性化设计:使用相对单位,设定百分比而非具体值的方式设置页面元素的大小。
- 响应式图片:不仅要同比例缩放图片,还要在小设备上降低图片自身的分辨率。
中台
定义:一套结合互联网技术和行业特性,将企业核心能力以共享服务形式沉淀,形成“大中台、小前台”的组织和业务机制,供企业快速低成本的进行业务创新的企业架构。
本质:对企业通用能力在不同层面的沉淀,并对外能力开放。
分类:
- 业务中台:提供重用服务,例如学员中心、课程中心之类的开箱即用可重用能力。
- 数据中台:提供数据整合分析能力,帮助企业从数据中学习改进,调整方向。
- 1、数据汇聚整合
- 2、数据提纯加工
- 3、数据服务可视化
- 4、价值变现
- 技术中台:提供技术重用组件能力,帮助解决基础技术平台的复用。【如:中间件、分布式存储、AI、负载均衡等基础设施。】
持久化技术【ORM】
ORM定义:对象与关系数据之间的映射。
MDA
核心组成:
- Model:客观事物的抽象表示。
- Architecture:构成系统的部件、连接件及其约束的规约。
- Model-Driven:使用模型完成软件的分析、设计、构建、部署、维护等各项开发活动。
起源:分离系统规约和平台实现的思想。
主要目标:可移植性、互通性、可重用性
核心模型:
- 平台独立模型(PIM):具有高抽象层次、独立于任何实现技术的模型。
- 平台相关模型(PSM):为某种特定实现技术量身定做,以可用的实现构造来描述系统的模型。PS:PIM会转换成一个或多个PSM。
- 代码(code):用源代码对系统的描述(规约)。每个PSM都将被变换成代码。