微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
问题:微服务有什么用?
解答:解决单体应用规模增加时带来的问题。
微服务 vs 单体应用
- 单体应用将所有功能放在一个单一进程中
- 微服务把每个功能元素放进一个独立的服务中,在多个服务器复制,跨服务器统一管理
- 单体应用优点:稳定,性能,部署
- 单体应用缺点:中心化,耦合,学习成本,伸缩性,持续交付
- 适情况选择单体应用或微服务,不要为了技术而技术
分布式系统如何解释?
简单来说,分布式系统就是一群独立计算机集合共同对外提供服务,但是对于系统的用户来说,就像是一台计算机在提供服务一样。集中式系统集中式系统就是把所有的程序、功能都集中到一台主机上,从而往外提供服务的方式。比如,我们主机的PC电脑,或者手机,我们把各种软件都安装在一台机子上,当我需要什么功能,我就从这台机子上去获取。再比如,我们在学生时代做的课程设计或者开发时的小应用,我们把Web服务器、数据库等都会安装到一台电脑上。好处是,易于理解、方便维护,想要的东西我都放到了一个地方,东西好找啊。当然弊端也是显而易见的,如果这台机子崩了,或者硬盘坏了,那相当与整个系统就奔溃了,而且如果备份也是在这个硬盘上,那相当于招了灭顶之灾。
Web 编程基础
静态Web
概述:静态web内容由web服务器文件系统提供,路径为文件系统的路径,常见的静态web内容有,html,css,js,jpeg等
常用的静态web服务器
静态web优化
- http资源变化,如 last-modified<--->if-modified-since
- http资源缓存,如ETag<---> if-None-Match
动态Web
概述: 与静态web不同,请求内容通过服务器计算而来的
流行的JAVA web服务器
- servlet容器(Tomcat,jetty)
- 非servlet容器(undertow)
动态技术/架构演变
- CGI (common gateway interface)
- Servlet (server Applet)
- JSP (java server page)
- MVC (model - view - controller)
问题:mvc 的执行流程?
- 用户通过客户端发送HTTP请求,传至web服务器如tomcat
- servlet(实际是dispacherservlet)充当controller处理分发请求,传至model层
- model层包括了一系列的逻辑处理,包括数据库操作,最后返回一个java beans
- dispachersevlet将结果返回给服务器,服务器返回处理好的view给客户端
- 客户端渲染展示给用户
模板引擎
velocity: apache 产品,现已不维护
jsp: 使用较广泛,编译流程:.jsp-->.java -->.class 。内部可嵌入java语法,导致耦合度较高
themleaf: 新模板引擎
freemarker: 较稳定的一类
REST理论基础
- 来源:来自于Roy Thomas Fielding 2000年的博士论文 - 《Architectural Styles and the Design of Network-based Software Architectures》
- 概念:REST = RESTful =Representational State Transfer,一种软件架构风格
- 架构属性:性能,可伸缩性,统一接口简化性,组件可修改性,可靠性等等
Springboot Rest 核心接口
定义相关
- @Controller
- @RestController
映射相关
- @RequestMapping(path={映射路径}, produces = {返回response的类型}, consumes={接收request的类型})
- @PathVariable
请求相关
- @RequestParam
- @RequestBody
- @RequestHeader
- @CookieValue
- RequestEntity
响应相关
- @ResponseBody
- ResponseEntity
接口默认返回xml只需添加maven节点
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
Servlet 的在web中应用
什么是servlet?
是一种基于java技术的web组件,由容器管理,用于生成动态内容,由java web 服务器加载执行
什么是servlet容器?
Servlet 容器,有时候也称作为 Servlet 引擎,作为Web服务器或应用服务器的一部分。通过请求和响应对话,提供Web 客户端与 Servlets 交互的能力。容器管理Servlets实例以及它们的生命周期。
Servlet 历史发展如何?
1997年六月,Servlet 1.0 版本发行,最新版本 Servlet 4.0 处于研发状态。
Servlet生命周期
- 初始化:当容器第一次执行时,servlet### init(servletConfig) 方法执行
- 请求处理:Http请求到达容器时,servlet### service(ServletRequest req,ServletResponse rep)方法执行
- 销毁:当容器关闭时,容器将会调用Servlet### destroy() 方法被执行,销毁当前Servlet
Fileter生命周期
- 初始化:当容器启动时,Filter#init(FilterConfig)方法被执行,初始化当前Filter
- 请求处理:当http请求到达容器是,Filter#doFilter(ServletRequest,ServletResponse,FilterChain) 方法被执行,可用来拦截请求,所以会在servlet请求处理之前调用
- 销毁: 当容器关闭时,容器将会调用Filter#destroy 方法被执行,销毁当前Filter
Listener 生命周期
- 监听请求:当监听到Http请求时,Listener## requestInitialized(ServletRequestEvent sre)方法执行一次
- 销毁:当请求执行完毕,并返回结果时,Listener## requestDestroyed(ServletRequestEvent sre) 执行一次
Http请求生命周期大致为:
- Listner--> requestInitialized 方法
- Filter --> init 初始化方法
- Filter --> doFilte 处理方法
- Servlet --> init 初始化方法
- servlet --> service 方法
- listener --> destroy 方法