现代 web 应用的基本框架
web 技术发展到今天已经走过了 30 年的历程,从一开始的纯静态页面到 JavaScript 的横空出世,从最早期网景独家的 Navaigator 浏览器到现在浏览器的百花齐放, 从集中式服务器到现代的分布式服务器集群,从前、后端的强耦合演变为现在的微服务及服务远程调用,从 pc 端到移动端,从 app 到小程序,... web 技术日新月异,迭代速度令人乍舌。从 90 代初 web 浏览器、www 的诞生,到今天 FaceBook、淘宝、微信等各大应用横行天下,web 技术可谓发生了翻天覆地的变化。 这也使得 web 开发的从业人员叫苦不迭,要学的东西实在太多了。
下图显示了现在 web 应用的一个基本框架,相比 web 1.0 时代真是复杂得多。主要体现在:客户端软硬件平台多样化;服务器端代码微服务化,微服务复用及框架多样化;服务器主机虚拟化及服务器主机部署的分布式集群化等。
![d17187ced75fbdc6e1f6ac41a1c4d649.png](https://i-blog.csdnimg.cn/blog_migrate/85d4abae52881942d13b2450f1c19df2.jpeg)
现代 web 应用的基本框架
下图是 web 1.0 基本框架。
![a54938f87f74070f69114c38cbdcbbee.png](https://i-blog.csdnimg.cn/blog_migrate/0b6ea1c2451d652219fc95e5c8536aca.jpeg)
该图来源于“阿里技术”知乎号
想要真正精通现代 web 技术,我们还是从最基本的概念学起吧。这些新兴的名词为什么会出现?这些新兴的技术是为了解决什么样的问题而生的?
web 技术中的那些花式概念
1.apache
apache 是最原始的 web 服务器,使用 C 语言开发的,非常稳定。只支持普通网页(html)的静态解析,但可以通过插件支持 php。基本功能包括:基本网页、个人主页、虚拟主机和网页认证。
2.tomacat
tomcat 是对 apache 服务器的扩展,使用 Java 开发的。它是一个支持动态解析(jsp、asp、php、cgi等)的容器,可以独立于 apache 运行,也可以和 apache 一起使用。举个例子:apache 是一辆车,车上可以装 html,也可以装水。如果要装水的话,就得有个桶,而这个桶就是 tomcat,桶也可以从车上拿下来。
3.spring
spring 诞生于 2002 年,是一款轻量级的开源框架。它设计的初衷是面向企业,为了敏捷开发。我们这里先不谈它的面向切面(创建中间代理类,减少耦合)、控制反转(也叫依赖注入,其实就是工厂模式自动创建对象的过程)、容器等特性,这不是一两句话能讲清的。你只要记住一点:spring 和 jdk(java 开发工具集) 类似,提供了关于 java 开发各个方面的工具,比如 java io,多线程,socket 编程等等,每个方面都有很多类,很多 api 接口。
我们说 spring 是个工具集,里面涉及了多个方面的内容,而每个方面不断发展、演进,又形成了 spring boot、spring cloud 等优秀项目。
4.spring boot
spring boot 专注于快速开发单体个体微服务。
5.spring cloud
spring cloud 关注全局所有的微服务,管理着服务配置、服务发现、路由、锁等。
spring cloud 采用了基于 http 的 REST 方式, 是微服务架构下一站式解决方案。
6.dubbo
dubbo 也是一种面向微服务的基础框架,服务间采用 RPC 通信。如果把 spring cloud 比作品牌手机,那么 dubbo 就是功能手机。
另外,spring cloud 开源社区里一直有人在 commit,在演进,而 dubbo 更新乏力。
7.REST 和 RPC
RPC 基于 tcp 协议(同样可以基于 socket 自定义一套协议 ),而 REST 基于 http 协议(可以理解为就是 http 调用 ),性能上 RPC 表现更好。RPC 适合内网、高频服务调用。
再谈微服务
所谓微服务就是单个应用程序拆分成许多个小型服务的一种开发方法。很容易想到的优点有:解耦、易扩展、好治理等。举个例子:
支付宝上有订购火车票的服务,现在阿里巴巴又开发了一个微信小程序,上面也可以订购火车票,那么订购火车票的代码只需要开发一份就行了,谁需要它就去找它(请求调用)就行啦。