本章主要是讲web应用技术跟新技术介绍,每年的案例分析都会考新技术,做开发的小伙伴如果熟悉可以选做,选做题,可以选熟悉的做,说是新技术,感觉也是几年前的技术了,现在技术更新替代这么快,这些技术也都比较成熟了,不能说老了,只是已经是广泛应用的技术了。

1.web应用技术

Web应用技术分类

从架构来看:MVC,MVP,MVVM,REST,Webservice,微服务。

从缓存来看:MemCache,Redis,Squid。

从并发分流来看:集群(负载均衡)、CDN。

从数据库来看:主从库(主从复制),内存数据库,反规范化技术,NoSQL,分区(分表)技术,视图与物化视图。

从持久化来看:Hibernate,Mybatis。

从分布存储来看:Hadoop,FastDFS,区块链。

从数据编码看:XML,JSON。

从Web应用服务器来看:Apache,WebSphere,Weblogic, Tomcat,JBOSS,IIS。

其它:静态化,有状态与无状态,响应式Web设计。

web技术演进

单机到web服务器与数据库分离

系统分析设计和高级工程师区别(备考高级系统分析师-系统设计-web应用技术-新技术介绍)(1)

应用服务集群

系统分析设计和高级工程师区别(备考高级系统分析师-系统设计-web应用技术-新技术介绍)(2)

系统演变到这里,将会出现问题:用户的请求由谁来转发到具体的应用服务器;

用户如果每次访问到的服务器不一样,那么如何维护session的致性。

负载均衡

系统分析设计和高级工程师区别(备考高级系统分析师-系统设计-web应用技术-新技术介绍)(3)

负载均衡技术,分应用层跟传输层:

应用层负载均衡技术

1、http重定向。HTTP重定向就是应用层的请求转发。用户的请求其实已经到了HTTP重定向负载均衡服务器,服务器根据算法要求用户重定向,用户收到重定向请求后,再次请求真正的集群。

特点:实现简单,但性能较差。

2、反向代理服务器。在用户的请求到这反向代理服务器时(已经到达网站机房),由反向代理服务器根据算法转发到具体的服务器。常用的apache,nginx都可以充当反向代理服务器。

特点:部署简单,但代理服务器可能成为性能的瓶颈。

注意:正向代理,反向代理,我有点懵,感觉这两个一样啊,有什么区别,后来查了下,正向代理是客户端和其他所有服务器(重点:所有)的代理者,而反向代理是客户端和所要代理的服务器之间的代理。

正向代理是帮客户端做事情,反向代理是帮服务器做事情。

举例:一般的正向代理,比如翻墙,任何可以连接到该代理服务器的软件,就可以通过代理访问任何的其他服务器,而反向代理的话,如果他反向代理了两个服务,那么之后客户端访问这两个服务器的时候,该代理服务器才会给它代理,也就是说,这里的代理服务器只对该代理服务器所代理的服务器负责。

传输层负载均衡技术

1、DNS域名解析负载均衡。DNS域名解析负载均衡就是在用户请求DNS服务器,获取域名对应的IP地址时,DNS服务器直接给出负载均衡后的服务器IP。

特点:效率比HTTP重定向高,减少维护负载均衡服务器成本。但一个应用服务器故障,不能及时通知DNS,而且DNS负载均衡的控制权在域名服务商那里,网站无法做更多的改善和更强大的管理。

2、基于NAT的负载均衡。基于NAT的负载均衡将一个外部IP地址映射为多个IP地址,对每次连接请求动态地转换为一个内部节点的地址。

特点:技术较为成熟,一般在网关位置,可以通过硬件实现。

数据库集群,主从库

系统分析设计和高级工程师区别(备考高级系统分析师-系统设计-web应用技术-新技术介绍)(4)

用缓存缓解数据库的读取压力

系统分析设计和高级工程师区别(备考高级系统分析师-系统设计-web应用技术-新技术介绍)(5)

无状态和有状态

无状态服务(stateless service)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任何信息。

有状态服务(stateful service)则相反,它会在自身保存一些数据,先后的请求是有关联的。

CDN

CDN的全称是Content Delivery Network,即内容分发网络。

CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。

CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。

Web架构MVC

用户操作->View(负责接收用户的输入操作)->Controller(业务逻辑处理)->Model(数据持久化)->View(将结果反馈给View)。经典MVC架构如下图所示:

系统分析设计和高级工程师区别(备考高级系统分析师-系统设计-web应用技术-新技术介绍)(6)

MVP

MVP是把MVC中的Controller换成了Presenter(呈现),目的就是为了完全切断View跟Model之间的联系,由Presenter充当桥梁,做到View-Model之间通信的完全隔离。

系统分析设计和高级工程师区别(备考高级系统分析师-系统设计-web应用技术-新技术介绍)(7)

MVVM(好熟悉的双向绑定,一下就想到了vue.js,前端框架,确实是双向绑定)

如果说MVP是对MVC的进一步改进,那么MVVM则是思想的完全变革。它是将“数据模型数据双向绑定”的思想作为核心,因此在View和Model之间没有联系,通过ViewModel进行交互,而且Model和ViewModel之间的交互是双向的,因此视图的数据的变化会同时修改数据源,而数据源数据的变化也会立即反应到View上。

系统分析设计和高级工程师区别(备考高级系统分析师-系统设计-web应用技术-新技术介绍)(8)

微服务

微服务架构建议将大型复杂的单体架构应用划分为一组微小的服务,每个微服务根据其负责的具体业务职责提炼为单一的业务功能;每个服务可以很容易地部署并发布到生产环境里隔离和独立的进程内部,它可以很容易地扩展和变更;对于一个具体的服务来说可以采用任何适用的语言和工具来快速实现;服务之间基于基础设施互相协同工作。

微服务的优势:

(1)解决了复杂性问题。它把庞大的单一模块应用分解为一系列的服务,同时保持总体功能不变。

(2)让每个服务能够独立开发,开发者能够自由选择可行的技术,让服务来决定API约定。

(3)每个微服务都能独立配置,开发者不必协调对于本地服务配置上的变化,这种变化一旦测试完成就被配置了。

(4)让每个服务都可以独立调整,你可以给每个服务配置正好满足容量和可用性限制的实例数。

微服务架构带来的挑战

(1)并非所有的系统都能转成微服务。例如一些数据库层的底层操作是不推荐服务化的。

(2)部署较以往架构更加复杂:系统由众多微服务搭建,每个微服务需要单独部署,从而增加部署的复杂度,容器技术能够解决这一问题。

(3)性能问题:由于微服务注重独立性,互相通信时只能通过标准接口,可能产生延迟或调用出错。例如一个服务需要访问另一个服务的数据,只能通过服务间接口来进行数据传输,如果是频繁访问,则可能带来较大的延迟。

(4)数据一致性问题:作为分布式部署的微服务,在保持数据一致性方面需要比传统架构更加困难。

缓存技术

MemCache:Memcache是一个高性能的分布式的内存对象缓存系统,用于动态Web应用以减轻数据库负载。Memcache通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、规频、文件以及数据库检索的结果等。

Redis:Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Squid:Squid是一个高性能的代理缓存服务器,Squid支持FTP,gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。

Redis与Memcache的差异

1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。他们都支持key-value数据类型。同时Memcache还可用于缓存其他东西,例如图片、现频等等,Redis还支持list、set、hash等数据结构的存储。

2、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,Memcache挂掉之后,数据就没了。

3、灾难恢复-Memcache挂掉后,数据不可恢复;Redis数据丢失后可以恢复。

4、在Redis中,并不是所有的数据部一直存储在内存中的。这是和Memcache相比一个最大的区别。当物理内存用完时,Redis可以将一些很久没用到的value交换到磁盘。

5、Redis在很多方面支持数据库的特性,可以这样说他就是一个数据库系统,而Memcache只是简单地K/V缓存。

所以在选择方面如果有持久方面的需求或对数据类型和处理有要求的应该选择Redis。如果简单的key/value存储应该选择Memcache。(这个不太对,现在基本都是redis了,memcache是不是淘汰了)

XML

扩展标记语言(Extensible Markup Language,XML),用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

XML的优点

格式统一,符合标准;

容易与其他系统选行远程交互,数据共享比较方便。

XML的缺点

XML文件庞大,文件格式复杂,传输占带宽;

服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;

客户瑞不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;

服务器端和客户端解析XML花费较多的资源和时间。

JSON

JSON(JavaScript Object Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。

JSON的优点

数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;

易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取;

支持多种语言,包括ActionScript,C,C#,ColdFusion, Java, JavaScript, Perl,PHP,Python,Ruby等服务器端语言,便于服务器端的解析;

因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,旦完成任务不变,并且易于维护。

JSON的缺点

没有XML格式这么推广的深入人心和使用广泛,没有XML那么通用性。

Web应用服务器

WEB应用服务器可以理解为两层意思:

(1)WEB服务器:其职能较为单一,就是把浏览器发过来的Reques位请求,返回Html页面。

(2)应用服务器:进行业务逻辑的处理。

Apache:Web服务嚣,市场占有率达60%左右。它可以运行在几乎所有的Unix、Windows、Linux系统平台上。

IIS早期Web服务器,目前小规模站点仍有应用。

Tomcat:开源、运行servlet和JSPWeb应用软件的基于Java的Web应用软件容器。

JBOSS:JBOSS是基于J2EE的开放源代码的应用服务器,一般与Tomcat或Jetty绑定使用。

WebSphere:一种功能完善、开放的Web应用程序服务器,是基于Java的应用环镜,用于建立、部署和管理Internet和IntranetWeb应用程序。

Weblogic:BEA Weblogic Server是一种多功能、基于标准的web应用服务器,为企业构建自己的应用提供了坚实的基础。

Jetty:Jetty是一个开源的servlet容器,是基于Java的web容器。

响应式web设计

是一种网络页面设计布局,其理念是:集中创建页面的图片排版大小,可以智能地根据用户行为以及使用的设备环境进行相对应的布局。

方法与策略

(1)采用流式布局和弹性化设计:使用相对单位,设定百分比而非具体值的方式设置页面元素的大小。

(2)响应式图片:不仅要同比的缩放图片,还要在小设备上降低图片自身的分辨率。

感谢大伙点赞 关注的支持,是我持续学习更新的动力,关注公众号:Coding-9527,跟大伙一起学习,成长,进步!

,