微服务
微服务:是一种现代的软件SOA架构,用于建立分布式系统,主要是解决单体应用(Monolithic Application)规模增加时所带来的问题
分布式系统主要是分布式计算
什么是SOA?面向服务的体系结构,任何资源都是服务
面向服务架构(SOA) VS 微服务
相同点:面向服务、松耦合、模块化、分布式计算、平台无关性
差异:原子性、领域驱动设计、开发运维体系
微服务面临挑战:
注册与发现、路由、可靠性、延迟、热点、短路、伸缩、异步、监控、配置、数据同步、安全
快速开始建立一个spring-boot项目
https://start.spring.io/
静态web内容
静态web内容:如HTML、CSS、JS、JPEG、Flash等
特点:
计算类型I/O类型、交互方式单一、资源内容基本相同、资源路径都是物理路径(文件、目录)、请求方法主要是GET
使用场景:
- 信息展示
- 样式文件(CSS)
- 脚本文件(JS)
- 图片(JPEG、GIF)
- 多媒体(Flash、Movie)
- 文件下载
常见Web服务 - Apache Http Server
- Nginx
- Microsoft IIS
- GWS (Google Web Server)
静态Web 内容 为什么 Java Web Server 不是常用 WebServer?
- 内存占用:Java类型byte和short其实在JVM当中都是Int类型,所以说在资源上需要分配更大空间
- 垃圾回收:通过System.gc()也是只被动的告诉JVM需要回收,具体什么时候回收还要等,会出现停顿的现象(stop word)线程和程序都会停下来当出现Full GC的时候
- 并发处理:线程池与线程的开销,所以需要将静态服务和动态服务器要进行分离
标准优化技术
资源变化:当第一次请求的时候会相应回最后修改的时间并返回200,但第二次的时候会把请求头带过去If-Modified-Since并返回304 Not Modified 说明此资源没有改变不需要重复请求
- 响应头:Last-Modified Fri, 27 Oct 2017 04:08:11 GMT
- 请求头:If-Modified-Since Fri, 27 Oct 2017 04:08:11 GMT
资源缓存:ETag在第一次请求返回的响应头,相当于直接访问缓存
-响应头:ETag “59f2b12b-0”
-请求头:If-None-Match “59f2b12b-0”
动态Web内容
请求内容通过服务器计算
特点:
- 计算类型:混合类型(I/O、CPU、内存)
- 交互方式:丰富(用户输入、客户端特征等)
- 资源内容:多样性
- 资源路径:逻辑路径(虚拟)
- 请求方法:GET、HEAD、PUT、POST等
常见使用场景:
- 页面渲染
- 表单交互(Form)
- AJAX
- XML
- JSON/JSONP(跨域)
- Web Services(SOAP、WSDL)
- WebSocket
流行Java Web服务器
- Servlet容器(Tomcat、Jetty)
- 非Servlet容器(Undertow)
请求:包括资源定位(URI)、请求协议(Protocol)、请求方法(Method)、请求参数(Parameter)、请求主题(Body)、请求头(Header)、Cookie用于保存用户会话
响应:响应头(Head)、响应主体(Body)
技术/架构演变:
CGI(Common Gateway Interface)
Servlet
JSP(Java Server Page)
Model1(JSP+Servlet+JavaBeans):发送请求经过Servlet处理然后在经过jsp进行返回,一般一个Servlet对应一个jsp页面
Model2(MVC)M:数据和数据处理 V:试图渲染返回 C:控制访问
Struts Web MVC:Http请求到,前端控制器Front Controller,转发给Action,在经过模型处理最后到视图渲染然后返回给客户端
Spring Web MVC:
Model2 与 MVC的细微差异
- Model2为面向Web 服务的架构,MVC 则是面向所有应用场景(PC应用、无线应用)
- 相对于MVC,Model2中Controller 细化为 Front Controller(FC)和Application Controller(AC),前者(FC)负责路由后者(AC),后者(AC)负责跳转视图(View)
模板引擎
JSP:是翻译式语言,JSP->.java->.class,JSP可以用Java代码
Velocity:velocity->解释执行,AST解析
Thymeleaf
从性能而言,JSP > Velocity >Thymeleaf
从可读性,Thymeleaf>Velocity >JSP
XXXProperties