概述
- 从架构角度:MVC、MVP、MVVM、REST、WebService、微服务
- 从并发分流角度:集群(负载均衡)、CDN
- 从缓存角度:MemCache、Redis、Squid
- 从数据库角度:主从库(主从复制)、内存数据库、反规范化技术、NoSQL、分区分表技术、视图
- 从数据编码角度:XML、JSON
- 从Web应用服务器角度:Apache、WebSphere、Weblogic、Tomcat、JBOSS、IIS
- 其他:有状态与无状态、响应式Web设计
Web技术演变
- 单台机器到数据库与Web服务器分离
-
应用服务器集群。存在问题:
- 用户的请求由谁来转发到具体的应用服务器 => 负载均衡
- 用户如果每次访问到的服务器不一样,那么如何维护session的一致性 => Cookie
- 数据库集群。分为主从库,主库用于写,从库用于读
- 用缓存集群缓解数据库读取压力
Web技术架构
内容分发网络 CDN(Content Delivery Network)
- CDN 是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率
- CDN 的关键技术主要有内容存储和分发技术
- CDN 的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求
表述性状态传递 REST(Representational State Transfer)
一种只使用HTTP和XML进行基于Web通信的技术,可以降低开发的复杂性,提高系统的可伸缩性
原则
- 网络上的所有事物都被抽象为资源
- 每个资源对应一个唯一的资源标识
- 通过通用的连接件接口对资源进行操作
- 对资源的各种操作不会改变资源标识
- 所有的操作都是无状态的
微服务架构
- 将大型复杂的单体架构应用划分为一组微小的服务,每个微服务根据其负责的具体业务职责提炼为单一的业务功能
- 每个服务可以很容易地部署并发布到生产环境里隔离和独立的进程内部,它可以很容易地扩展和变更
- 对于一个具体的服务来说可以采用任何适用的语言和工具来快速实现
- 服务之间基于基础设施互相协同工作
优势
- 解决了复杂性问题:它把庞大的单一模块应用分解为一系列的服务,同时保持总体功能不变
- 让每个服务能够独立开发:开发者能够自由选择可行的技术,让服务来决定API约定
- 每个微服务都能独立配置:开发者不必协调对于本地服务配置上的变化,这种变化一旦测试完成就被配置了
- 让每个微服务都可以独立调整:可以给每个服务配置正好满足容量和可用性限制的实例数
挑战
- 并非所有的系统都能转成微服务
- 部署较以往架构更加复杂:系统由众多微服务搭建,每个微服务需要单独部署,从而增加部分的复杂度,容器技术能够解决这一问题
- 性能问题:由于微服务注重独立性,互相通信时只能通过标准接口,可能产生延迟或调用出错
- 数据一致性问题:作为分布式部署的微服务,在保持数据一致性方面需要比传统架构更加复杂
扩展标记语言 XML(Extensible Markup Language)
用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言
优点
- 格式统一,符合标准
- 容易与其他系统进行远程交互,数据共享比较方便
缺点
- XML 文件庞大,文件格式复杂,传输占带宽
- 服务器端和客户端都需要花费大量代码来解析XML,导致服务器和客户端代码变得异常复杂且不易维护
- 客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码
JSON(JavaScript Object Notation)
一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性,可在不同平台之间进行数据交换
优点
- 数据格式比较简单,易于读写,格式都是压缩的,占用带宽小
- 易于解析
- 支持多种语言
- 简化了服务器端和客户端的代码开发量
JSON vs XML
响应式Web设计
一种网络页面设计布局,其理念是:集中创建页面的图片排版大小,可以智能的根据用户行为以及使用的设备环境进行相对应的布局
方法和策略
- 采用流式布局和弹性化设计:使用相对单位,设定百分比而非具体值的方式设置页面元素的大小
- 响应式图片:不仅要同比的缩放图片,还要在小设备上降低图片自身的分辨率
知识点
- 无状态服务(stateless service):对单词请求的处理,不依赖其他请求。处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(Case:数据库),服务器本身不存储任何信息
- 有状态服务(stateful service):自身保存一些数据,先后的请求是有关联的