多层架构及其应用领域
Web架构
HTTP和HTML
HTTP(HyperText Transfer Protocol)是web浏览器与web服务器的交流方式约定.
-
超文本(HyperText)指不仅有文本, 还有指向其它文件的链接, 以及图像, 声音, 视频等其它媒体方式的资源.
-
网页(web page)是在浏览器中解释执行的符合HTML(HyperText Markup Language)格式的纯文本文件.
-
超链接(hyperlink)指向服务器(网站)上的资源(网页和其它文件). 超链接是网页(web page)之间的导航方式. 网页之间的超链接把各个服务器上的页面链接在一起, 构成了WWW(World Wide Web).
-
网页的内容 - HTML
- 网页的样式 - CSS
- 网页与用户的交互 - JavaScript
- 转到其它网页 - 超链接
HTTP协议的交互过程
- 浏览器向服务器发送访问资源的请求
- GET/POST… URL代表的网站资源
- 服务器向浏览器向浏览器发送响应
- HTML格式的网页
- 或者其它文本格式, 例如
- json文件 - 近几年很流行
- Base64编码的二进制文件 - 可以传输任何文件
静态网页和动态生成网页
最初的Web用户在通过超链接导航, 在静态网页之间浏览固定的内容. 网站的维护者通过修改静态网页, 为用户提供新的内容. 例如: 每天修改新闻网页. 在只有静态网页的条件下, 用户与网站的交互操作, 例如发布信息, 是难以完成的.
用户与网站之间的交互, 可以实现为: 根据用户的操作, 在服务器上动态生成网页返回给用户. 动态生成网页的技术包括: CGI, Java Servlet, JSP, PHP, ASP等众多服务器端技术.
Java Web架构
支持多线程和网络通信的Java语言提供了Java Servlet技术用于在服务器上动态生成网页. 进一步演进出生成动态网页的模板JSP(Java Server Page).
- Java Servlet是Java程序生成HTML文件. 想象一下, 用print()函数输出一个字符串作为网页的工作量!
- Java代码中嵌入网页
- JSP是在HTML文件中嵌入Java程序. Java程序的结果(字符串), 替换网页中Java程序. 像在网页文件中调用了一个Java函数, 得到函数的结果.
- 网页中嵌入Java代码
JSP(Java Server Page)在服务器端动态生成网页.
服务器端JSP执行过程
- 服务器接收浏览器的请求信息
- 接收到的URL对应的资源
- 接收到的来自浏览器的参数
- URL对应的资源的处理方式
- 静态资源
- 直接返回资源对应的文件
- 资源是JSP
- 根据资源的名称, 找到对应的JSP文件, 生成对应的Servlet. 然后由对应的Servlet处理.
- 可以看出JSP是Servlet的一种方便开发的简化.
- 资源是servlet
- 读取浏览器的请求中附带的参数
- 执行servlet中的业务逻辑
- 返回生成的响应(HTML文件/JSON文件/Base64编码的二进制文件等)
- 静态资源
浏览器执行网页的过程
接收服务器传来的文件, 解码出文件内容. 如果是HTML文件(网页), 则按照内容的顺序执行网页中的脚本, 展示渲染网页中的内容.
浏览器只与HTTP协议, 网页的URL有关. 与服务器生成网页的技术无关.
架构演进
业务架构的演进
以银行为例展现架构的演变. [重要]
-
最早期是一个人 A 0 A_0 A0负责全部存贷款活动, 相当于单层结构.
-
随着业务的增加, 发现忙不过来了. 于是雇佣 B 0 B_0 B0负责记账. A 0 A_0 A0负责接待客户和处理业务逻辑, B 0 B_0 B0相当于数据库服务器.
- 还有一个方案是加盟连锁, 雇佣 A 1 A_1 A1和 A 0 A_0 A0自己做同样的业务. 但是客户的账户在 A 0 A_0 A0和 A 1 A_1 A1之间同步需要时间和精力.
- 随着业务的增加, 于是雇佣人数越来越多. A 1 , A 2 , . . . , A n A_1, A_2, ..., A_n A1,A2,...,An做和 A 0 A_0 A0同样的负责接待客户和业务逻辑. n n n可以任意大.
- 账户同步的消耗越来越大. 完全同步是 2 n − 1 2^{n-1} 2n−1, 通信量增长过快, 时间消耗过长.
- 逐渐出现专门负责账户同步的 M M M. 形成P2P架构, 其关键是能够查询账户由哪个 A i A_i A
- 还有一个方案是加盟连锁, 雇佣 A 1 A_1 A1和 A 0 A_0 A0自己做同样的业务. 但是客户的账户在 A 0 A_0 A0和 A 1 A_1 A1之间同步需要时间和精力.