如何用Java实现Web服务器,第1张

如何用Java实现Web服务器 一、HTTP协议的作用原理

WWW是以Internet作为传输媒介的一个应用系统,WWW网上最基本的传输单位是Web网页。WWW的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信。HTTP协议是基于TCP/IP协议之上的协议,是Web浏览器和Web服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。HTTP协议的作用原理包括四个步骤:

(1) 连接:Web浏览器与Web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。

(2) 请求:Web浏览器通过socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:

GET 路径/文件名 HTTP/10

文件名指出所访问的文件,HTTP/10指出Web浏览器使用的HTTP版本。

(3) 应答:Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。

对于海量数据和海量并发请求,集群处理,有LB导致的需求,也有存储容量导致的需求。在以微服务的架构下,一个业务流程可能会经历多个业务服务器。而这多个业务服务器,甚至包含Gate服务,是不是需要转发,有LB导致的需求,也有后端服务LB或者存储容量导致的需求。而且,还有一大类是容灾和故障转移等安全和稳定性导致的需求。  比如作为一个Gateway,要访问后端用户交易系统,分发请求道不同的用户交易系统Gateway,这个可以说是因为后端用户交易系统Gateway的LB导致的需求;又比如作为一个Gateway,要访问后端数据库,分发请求到不同的数据库,这是容量导致的需求;又比如作为一个Gateway,要访问后端About或者其他极少变动也极少访问的业务配置信息缓存,这是架构设计容灾灾备导致的需求,和LB、容量等等无关。又比如作为一个业务服务,当需要聚合资源时,分发请求到不同的后端服务上去,这是架构设计也业务导致的需求,可能完全和LB没有半毛钱关系。而分发请求的方式呢,一般我常用的有这么几种(根据不同的需求,用的方式不同): 一致性Hash,随机、轮转、分区/段、强一致性分发、广播、任一成功广播、半数成功广播。 再说一遍,业务不同,需求不同,方式也就不同。

负载均衡有分硬件负载和软件。

1

硬件方面,可以用F5做负载,内置几十种算法

2

软件方面,可以使用反向代理服务器,例如apache,Nginx等高可用反向代理服务器。

利用DNSPOD智能解析的功能,就可以实现多台机器负载均衡

首先你用一台高配置的机器来当数据库服务器然后把网站的前端页面复制成多份,分别放在其他的几台机器上面再用DNSPOD做智能解析,把域名解析指向多个服务器的IP,DNSPOD默认就有智能分流的作用,也就是说当有一台机器的资源不够用时会自动引导用户访问其他机器上这是相对来讲比较简单的实现负载均衡的方法

方法1:

建议加域控,通过组策略,统一电脑管理。

方法2:

虚拟化,就是服务器(几台超级主机),安装思杰,

虚拟化能,最大发挥服务器的功能。将硬件资源分配给用户,最大能保证1000用户同时在线。

瞎回答的很多。实质上,并没有魔术。阿里云的ip就是买的,是一大段一大段ip范围买下的。

那些说类似专线独立ip的人,都是瞎掰,专线实质上是电信买下的ip范围里租一个给你用,电信那端通过调整路由表把对应的ip报文转发到你那根物理线路上。

阿里云的技术方式完全不一样。

首先阿里和电信一样,都是购买巨大的一段ip地址范围,它的地址范围不比电信小多少。ipv4的地址范围就是这些大佬买光的,国外aws,google,微软的ip范围更大。

其次,阿里云内部,不是简单的改路由器,而是当有bgp能力的核心路由把全网络里属于阿里云的ip报文导入数据中心后,通过服务器进行报文数据软交换,也就是常说的sdn(软件定义的网络)技术把ip分配给具体的虚拟机。这样确保虚拟机绑ip可轻松的自动绑定。当你在界面上点一下申请弹性ip的时候,阿里云就从它的ip池里空余的ip中,分一个给你,注意,这个ip池比阿里的机器数量,甚至虚拟机数量要大很多。当你分配了弹性ip后,如果要绑定弹性ip到具体某个虚拟机时候,背地里,阿里云就简单的把这个ip和虚拟机的路由关系告诉它的软交换服务器集群,然后所有进入阿里云中的报文里,属于这个ip的报文被投递给这台虚拟机。

可以通过安装虚拟机实现,利用vmware公司的esxi这款产品实现。

配置方法:

esxi里面自带有集群这一项功能,可将多台服务器添加到集群中来,集群建好后还可以利用里面的ha(高可用性)、drs(分布式存储调试),evc(多硬件兼容)等多种特性将多台服务器的硬件资源加入到一个资源池里,可对硬件的资源做分配。

以百分比的方式做权重,可操控这个资源池里的硬件资源分别分配多少到平台上建好的虚拟机上,可用于生产环境中。

esxi是vmware的虚拟机软件的企业版,底层系统直接安装在服务器上,无需像windows server 2008的hyper v那样依赖于windows操作系统,不用再多占用多余的硬件资源,性能非常好。

esxi简介:

ESXi专为运行虚拟机、最大限度降低配置要求和简化部署而设计。只需几分钟时间,客户便可完成从安装到运行虚拟机的全过程,特别是在下载并安装预配置虚拟设备的时候。

在VMware Virtual Appliance Marketplace 上有800多款为VMware hypervisor 创建的虚拟设备。

如今,ESXi已经实现了与Virtual Appliance Marketplace的直接整合,使用户能够即刻下载并运行虚拟设备。这为即插即用型软件的交付与安装提供了一种全新和极其简化的方式。

一般用的就用简单的轮询就好了

调度算法

静态方法:仅根据算法本身实现调度;实现起点公平,不管服务器当前处理多少请求,分配的数量一致

动态方法:根据算法及后端RS当前的负载状况实现调度;不管以前分了多少,只看分配的结果是不是公平

静态调度算法(static Schedu)(4种):

(1)rr (Round Robin) :轮叫,轮询

说明:轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。缺点:是不考虑每台服务器的处理能力。

(2)wrr (Weight Round Robin) :加权轮询(以权重之间的比例实现在各主机之间进行调度)

说明:由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。

(3)sh (Source Hashing) : 源地址hash实现会话绑定sessionaffinity

说明:简单的说就是有将同一客户端的请求发给同一个real server,源地址散列调度算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的并且没有超负荷,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP地址换成请求的源IP地址。

(4)dh : (Destination Hashing) : 目标地址hash

说明:将同样的请求发送给同一个server,一般用于缓存服务器,简单的说,LB集群后面又加了一层,在LB与realserver之间加了一层缓存服务器,当一个客户端请求一个页面时,LB发给cache1,当第二个客户端请求同样的页面时,LB还是发给cache1,这就是我们所说的,将同样的请求发给同一个server,来提高缓存的命中率。目标地址散列调度算法也是针对目标IP地址的负载均衡,它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

动态调度算法(dynamic Schedu)(6种):

(1)lc (Least-Connection Scheduling): 最少连接

说明:最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器的负载均衡,调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1,当连接中止或超时,其连接数减一,在系统实现时,我们也引入当服务器的权值为0时,表示该服务器不可用而不被调度。此算法忽略了服务器的性能问题,有的服务器性能好,有的服务器性能差,通过加权重来区分性能,所以有了下面算法wlc。

简单算法:active256+inactive (谁的小,挑谁)

(2)wlc (Weighted Least-Connection Scheduling):加权最少连接

加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权限,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。由于服务器的性能不同,我们给性能相对好的服务器,加大权重,即会接收到更多的请求。

简单算法:(active256+inactive)/weight(谁的小,挑谁)

(3)sed (shortest expected delay scheduling):最少期望延迟

说明:不考虑非活动连接,谁的权重大,我们优先选择权重大的服务器来接收请求,但会出现问题,就是权重比较大的服务器会很忙,但权重相对较小的服务器很闲,甚至会接收不到请求,所以便有了下面的算法nq。

基于wlc算法,简单算法:(active+1)256/weight (谁的小选谁)

(4)nq (Never Queue Scheduling): 永不排队

说明:在上面我们说明了,由于某台服务器的权重较小,比较空闲,甚至接收不到请求,而权重大的服务器会很忙,所此算法是sed改进,就是说不管你的权重多大都会被分配到请求。简单说,无需队列,如果有台real server的连接数为0就直接分配过去,不需要在进行sed运算。

(5)LBLC(Locality-Based Least Connections) :基于局部性的最少连接

说明:基于局部性的最少连接算法是针对请求报文的目标IP地址的负载均衡调度,主要用于Cache集群系统,因为Cache集群中客户请求报文的目标IP地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载基本平衡的情况下,将相同的目标IP地址的请求调度到同一个台服务器,来提高服务器的访问局部性和主存Cache命中率,从而调整整个集群系统的处理能力。

(6)LBLCR(Locality-Based Least Connections with Replication) :基于局部性的带复制功能的最少连接

说明:基于局部性的带复制功能的最少连接调度算法也是针对目标IP地址的负载均衡,该算法根据请求的目标IP地址找出该目标IP地 址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除, 以降低复制的程度。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何用Java实现Web服务器

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情