servlet和web服务器的区别是什么?

servlet和web服务器的区别是什么?,第1张

WEB服务器是提供WEB服务的程序。
Servlet是一种容器内的技术,其实是 Server applet的简称,什么意思呢,就是说servlet是在服务器上运行的小程序,所以servlet技术不一定只在WEB服务器上使用。
只是目前常见的Java技术,都是把WEB服务器上的Servlet直接叫做Servlet。
所以运行Servlet,首先是需要WEB服务器的。
然后还要有一个小程序的容器,就是Servlet容器,专门来调用Servlet。
目前就是大部分的J2EE容器能够完成 Servlet的执行。
支持J2EE容器的WEB服务器,也叫 WEB服务器,不支持的,也叫WEB服务器。
我想已经基本解释清楚了。

限流: 原理是监控应用流量的QPS或并发线程数等指标,当达到指定阈值时对流量进行控制,避免系统被瞬时的流量高峰冲垮,保障应用高可用性。保护自身系统防止被外部调垮。

熔断: 调用远程服务,后端服务不可避免的会产生调用失败(超时或者异常),防止应用程序不断地尝试可能超时和失败的服务,能达到应用程序执行而不必等待下游服务修正错误服务。

降级: 是指牺牲非核心的业务功能,保证核心功能的稳定运行。在后台通过开关控制,降级部分非主流程的业务功能,减轻系统依赖和性能损耗,从而提升集群的整体吞吐率。

 Hystrix 的关注点在于以隔离和 熔断 为主的容错机制,超时或被熔断的调用将会快速失败,并可以提供 fallback 机制。Hystrix 提供两种隔离策略: 线程池隔离(Bulkhead Pattern) 和 信号量隔离。

线程池隔离: 针对不同的资源分别创建不同的线程池,不同服务调用都发生在不同的线程池中,在线程池排队、超时等阻塞情况时可以快速失败,并可以提供 fallback 机制。好处是隔离度比较高,单独处理某个资源;代价就是线程上下文切换的 overhead 比较大,会让机器资源碎片化,特别是对低延时的调用有比较大的影响。

信号量隔离: 限制对某个资源调用的并发数,更为轻量,开销更小。但缺点是无法对慢调用自动进行降级,只能等待客户端自己超时,因此仍然可能会出现级联阻塞的情况。

Sentinel 和 Hystrix 的熔断降级功能本质上都是基于熔断器模式(Circuit Breaker Pattern)。Sentinel 与 Hystrix 都支持基于 失败比率(异常比率) 的熔断降级, 在调用达到一定量级并且失败比率达到设定的阈值时自动进行熔断 ,此时所有对该资源的调用都会被 block,直到过了指定的时间窗口后才启发性地恢复。 Sentinel 还支持基于平均响应时间的熔断降级,可以在服务响应时间持续飙高的时候自动熔断 ,拒绝掉更多的请求,直到一段时间后才恢复。这样可以防止调用非常慢造成级联阻塞的情况。

Hystrix 和 Sentinel 的实时指标数据统计实现都是基于滑动窗口的。

Sentinel:轻量级和高性能, 可以针对不同的调用关系,以 不同的运行指标(如 QPS、并发调用数、系统负载等) 为基准,对资源调用进行流量控制,将随机的请求调整成合适的形状。

熔断策略: 平均响应时间 (DEGRADE_GRADE_RT):时间窗口内接口调用RT超过一定时间,下一时间窗口自动熔断; 异常比例 (DEGRADE_GRADE_EXCEPTION_RATIO) :每秒调用时间异常比例超过一定阈值,自动熔断; 异常数 (DEGRADE_GRADE_EXCEPTION_COUNT):当资源近 1 分钟的异常数目超过阈值之后会进行熔断。

流量控制(Flow Control),原理是监控应用流量的QPS或并发线程数等指标,当达到指定阈值时对流量进行控制,避免系统被瞬时的流量高峰冲垮,保障应用高可用性。

流量整形策略: 直接拒绝模式 :即超出的请求直接拒绝。

慢启动预热模式 :当流量激增的时候,控制流量通过的速率,让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。

匀速器模式: 利用 Leaky Bucket 算法实现的匀速模式,严格控制了请求通过的时间间隔,同时堆积的请求将会排队,超过超时时长的请求直接被拒绝。

常用限流算法:

①计数器限流算法

通过一个计数器,限制每一秒钟能够接收的请求数。周期内,超过阈值后的请求就会被全部拒绝。

②滑动窗口算法(sentinel使用)

滑动窗口算法是将时间周期分为N个小周期(窗口),分别记录每个小周期内访问次数,然后根据时间将窗口往前滑动,统计时间窗口内调用次数。

③漏桶限流算法

实现一个容器,容量固定,访问请求到达时直接放入漏桶,如当前容量已达到上限(限流值),则进行丢弃(触发限流策略)。漏桶以固定的速率进行释放访问请求(即请求通过),直到漏桶为空。实际上消息中间件就使用了漏桶限流的思想,不管生产者的请求量有多大, 消息的处理能力取决于消费者。

④令牌桶限流算法

令牌桶是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。对于每一个请求,都需要从令牌桶中获得一个令牌,如果没有获得令牌,则需要触发限流策略。

一、善用UML工具

用例图

用于需求分析阶段,从用户角度描述系统功能。

用例图

静态图:类图、对象图、包图

静态图

交互图-时序图(注重时间)

常用组合片段:选项(Opt)、循环(Loop)、并行(Par)、抉择(Alt)、中断(Break)

时序图

交互图-协作图(注重对象)

协作图

行为图-状态图(注重状态)

状态图

行为图-活动图(注重活动)

活动图

实现图-组件图

组件图

实现图-部署图

部署图

二、遵从设计原则

设计模式基础

单一职责:一个类只负责一个职能;

里氏转换:在子类中不应重写、重载父类的方法,子类要能替代父类;

接口隔离:不依赖不需要的接口,拆分大接口;

迪米特法则:一个对象应该对其他对象保持最少的了解(低耦合);

开放封闭:对扩展开放,对修改关闭;

依赖倒置:抽象不应该依赖细节,细节应该依赖抽象,即针对接口编程,所有依赖关系都终止于抽象类或接口,不要对实现编程。

设计模式

创建型

工厂方法(FactoryMethod)、抽象工厂(AbstractFactory)、建造者(Builder)、单例(Singleton)、原型(Prototype)。

结构型

组合(Composite)、代理(Proxy)、外观(Facade)、适配器(Adapter)、装饰(Decorator)、桥接(Bridge)、享元(Flyweight)。

行为型

策略(Strategy)、模板方法(Temple

Method)、观察者(Observer)、状态(State)、备忘录(Memento)、迭代器(Iterator)、命令(Command)、责任链(Chain

Of)、中介者(Mediator)、访问者(Visitor)、解释器(Interpreter)。

分布式设计原则

高可用

降级、限流(漏桶-平滑、令牌桶-可突发、环形队列滑动窗口)、切流、熔断、回流、可回流、超时、隔离(线程、读写、资源、热点、爬虫)、负载均衡。

高并发

无状态、拆分、服务化、队列、数据异构(异构->原子化->聚合->缓存)、缓存、并发化(Future、Callback、CompletableFuture)、池化。

业务设计

防重、幂等、规则引擎、状态机、审计、审批。

分布式理论

CAP:一致性、可用性、分区容错性(三选二);

BASE:基本可用、软状态、最终一致性;

ACID:原子性、一致性、隔离性、持久性。

一致性原则

XA协议:准备->提交(具有阻塞、协调者单点、脑裂等缺点);

XA三段协议:询问->准备->提交;

TCC:try->confirm/try->cancel锁定->确认/释放;

最终一致性:查询、补偿、定期校对、可靠消息、缓存一致性。

超时处理

原则:谁超时谁处理,即接口调用超时,查询补偿;接口调用成功后,接口内部服务超时须自己补偿。

两状态同步接口(OK/ERR):接口调用超时,调用方查询补偿;接口内部服务超时,内部快速失败冲正;

三状态同步接口(OK/ING/ERR):接口调用超时,调用方查询补偿;接口内部服务超时,返回处理中,内部查询补偿到成功,调用方轮询;

异步接口:接口调用超时,调用方查询补偿;接口内部服务超时,内部查询补偿到成功,回调通知;接口回调通知超时,指数补偿回调;

消息队列:生产者发送超时,持久化可靠发送幂等消费;消费者消费超时,消息处理完偏移量增加。

缓存

缓存分片:客户端分片(redic)、代理分片、集群分片(一致性Hash);

缓存穿透:缓存空值、有效Key判断;

缓存并发:分布式锁、本地锁、软过期(业务过期);

缓存雪崩:错峰失效。

三、画好架构图

41视图

场景视图:参与者与功能用例关系,用例图表示;

逻辑视图:功能拆解后的组件边界及关系,组件图和类图表示;

物理视图:软件与硬件映射关系,部署图表示;

处理流程图:各组件流程与数据交互,时序图和流程图表示;

开发视图:模块划分及包组成,包图表示。

C4视图

语境图:梳理待建设系统用户和高层次依赖,在中间画出自己的系统,周围是用户与其它交互系统。

C4语境图

容器图:展开语境图待建设系统,用框图表示,可包含名称、技术选择、职责、框图间交互,明确外部系统边界。

C4容器图

组件图:展开某个容器,描述其内部模块组件组成、关系。

C4组件图

类图:同UML静态图,此处不再展开。

淘宝客API限流是做淘宝客的数据接口权限被限制了,在应用上的源码中接入API数据口,就可以在应用上使用API数据等信息。

API 是淘宝网一个数据开放接口,主要是面向开发人员的,如果是具备开发能力可以到淘宝开放平台去看参考文档自己开发基于API的淘宝客程序。

扩展资料:

API限流最直接的原因就是服务器爆满,限制部分用户登陆。

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

容器就是你的程序运行时需要的环境,具体如下:


Tomcat是Servlet的运行环境,即一个Servlet容器。

Servlet容器的作用是负责处理客户请求,当客户请求来到时,Servlet容器获取请求,然后调用某个Servlet,并把Servlet的执行结果返回给客户。

Servlet容器的工作过程是:当客户请求某个资源时,Servlet容器使用ServletRequest对象把客户的请求信息封装起来,然后调用java Servlet API中定义的Servlet的一些生命周期方法,完成Servlet的执行,接着把Servlet执行的要返回给客户的结果封装到 ServletResponse对象中,最后Servlet容器把客户的请求发送给客户,完成为客户的一次服务过程。

每一个Servlet的类都执行 init()、service()、destory()三个函数的自动调用,在启动时调用一次init()函数用以进行参数的初始化,在服务期间每当接收到对该Servlet的请求时都会调用Service()函数执行该Servlet的服务 *** 作,当容器销毁时调用一次destory()函数。

典型的Servlet应用是监听器、过滤器的实现。


JSP运行原理:当Web服务器上的JSP页面第一次被请求执行时,JSP引擎先将JSP页面文件转译成一个Java文件,即Servlet,Java Servlet是基于服务器端编程的API,用Java Servlet编写的Java程序称为servlet,servlet通过HTML与客户交互。


服务器将前面转译成的Java文件编译成字节码文件,再执行这个字节码文件来响应客户的请求。当这个JSP页面再次被请求时,只要该JSP文件没有被改动,JSP引擎就直接调用已装载的Servlet。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13100774.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-30
下一篇 2023-05-30

发表评论

登录后才能评论

评论列表(0条)

保存