Tomcat分布式----单机部署多应用

分布式架构演进

大型网站都是通过小型网站发展而来的。

1-----在项目的初始化阶段,我们构建一个项目只是需要一台服务器,里面包括了应用程序,文件服务,数据库服务!

2-----随着网站业务的发展,越来越多的用户访问导致性能越来越跟不上,数据存储空间不足够,这个时候就需要进行应用和数据分离,由一台服务器变成三台,即应用服务器,文件服务器,数据库服务器!

3-----网站的访问的特点通常遵循二八定律,80%的业务几种在20%的客户上,因此可有通过缓存把访问频繁客户或者内容给缓存起来,减少数据库的压力,通过访问速度和性能,因此开始进行数据缓存?

------本地缓存:在应用服务器上跟随应用程序的缓存,速度快,但是同样大小有限

------远程分布式缓存:建立远程分布式缓存服务器

4-----使用缓存后,减少了 程序的压力,但是单一服务器能够处理的请求仍然存在着上限,在高峰期仍然会造成网站瓶颈,因此可以通过负载均衡调度实现分布式部署服务器(多机单应用部署)

5-----在使用缓存后,绝大部分数据读操作可以不通过数据库完成,但是对于缓存没有的或者过期的以及写操作,仍然需要操作到数据库,当网站到达一定程度后,数据库会因为负载压力过来而不满足需求!因此需要对数据库进行读写分离,通过主从机制,降低压力!也即是数据库读写分离!当前Sprng框架使用的都是桥接模式(数据库访问模块),部署在应用服务器中

6-----CDN和反向代理都是缓存,区别在于CDN是部署在网络提供商的机房,客户请求的时候从距离自己最近的网络提供商哪里获取数据;而反向代理则是部署在网站的中心机房,客户请求到达后首先呢仍然是先访问反向代理的服务器!

7-----当网站进一步发展,我们只能通过增加部署服务器来提高性能,除此之外就可是优化业务以及提高数据访问能力!比较优化数据库访问模块为统一数据访问模块,增加搜索引擎和NoSQL服务器

8-----业务拆分,当业务发展到一定程度,那么我们则会将一个网站分拆为许多个不同的应用,每个应用用独立部署维护!应用之间可以通过一个超链接建立关系,也可以通过消息队列进行数据分发

9-----既然每一个应用系统都需要执行许多相同的业务功能。那么可以将这些相同的业务功能给提取出来成为一个独立部署的系统。由这些可复用的业务连接数据库,提供共用的业务服务而应用系统就可以只需要管理用户界面,通过分布式服务调用公用业务服务来完成具体操作!

当事物发展到这里,基本技术上的难题和业务问题都被完善了!那么事物要么走向寻求突破自身的机会和方向要么慢慢赘于体质和繁琐的业务慢慢停滞,以期业务上的突破可以改变现状!

==========================================================================================

架构模式:

分层:  企业应用的基本架构模式,在横向维度上切割成几个部分,每个部分负责一部分相对单一的职责,通过上层和下层的依赖和调用组成一个系统。例如三层MVC架构就是一种分层方法,分为应用层,服务层和数据层,而其中应用层也可以再细分为视图层,业务逻辑层,服务层可以分为数据接口层和逻辑处理层。但是在这个过程中,分层也合理地规划好层次和边界接口。

分割:如果将分层当成纵向结构上的划分,那么分割就是针对业务在横向上的分割,当系统足够庞大时候,为了保证系统的维护和运行需要,我们需要将每个部分的业务(逻辑或者业务部署上可以独立的模块)包装成高内聚低耦合的模块单元甚至是系统,这个时候系统的分割粒度将会非常小。

分布式处理:包括分布式应用和服务,分布式静态资源,分布式数据存储,分布式计算,分布式缓存

集群:部署多台服务器

注意:集群和分布式来说,他们之间的区别,集群可以说是物理形态的部署,而分布式是指业务处理模式上的,两者描述的是同一模式在不同领域上的形态!

==========================================================================================

分布式部署服务器:分布式部署Tomcat服务器,的难点在于每台机器要怎么配置多个Tomcat,并部署好Nginx的负载均衡转发,因此只要学会单机部署多应用和Nginx负载均衡转发,其他的都差不多!

1-----第一台Tomcat:

保持不变

2-----第二台Tomcat:

Tomcat的server.xml
server     port-->统一递增加1000
Connect port-->port为9080

Connect port-->8009-->9009

打开第二个tomcat的catalina.bat和startup.bat,并修改里面:

 “CATALINA_BASE”为“CATALINA_2_BASE”

“CATALINA_HOME”为“CATALINA_2_HOME”

“TOMCAT_HOME”为“TOMCAT_2_HOME”

在系统变量中新增变量:

 “CATALINA_BASE”和“CATALINA_2_BASE”:路径为到tomcat中bin目录的上一级目录

“CATALINA_HOME”为“CATALINA_2_HOME”:路径为到tomcat中bin目录的上一级目录

在处理完配置后,请前往Tomcat2目录中的ROOT目录下替换tomcat.png为任意一自己能识别的图片,而后分别重启 服务器,并反问http://localhost:8080 和http://localhost:9080/

============================================================================

Nginx负载均衡处理器:用于请求和转发,提供项目的横向扩展能力,对多个Tomcat请求进行转发

1---负载均衡的几种模式:

-----轮询:实现简单,不考虑服务器处理能力,每台服务器的权重都是1,代表相对访问的概率相同

-----权重:考虑每台服务器的性能和处理能力,按照权重不同适当倾斜(生产最常用)

-----IP Hash:实现同一个用户只能访问同一个服务器,但是IP Hash的分配会不平均,导致服务器倾斜不同

-----URL Hash:频繁请求会导致被分布到同一个服务器,导致分布不平均,第三方需要安装插件

-----fair第三方公平:按照后端服务器的响应时间请求,时间短的优先分配,在节点下增加fair

2---域名负载均衡配置

upstream backserver{
   ip_hash;
   server 127.0.0.1:9090 down;(down表示当前的server暂时不参与负载)
   server 127.0.0.1:8080 weight=2;(weight默认为1,负载越大,权重越大)
   server 127.0.0.1:6060;
   server 127.0.0.1:7070 backup;(其他的非所有的backup机器down或者忙得时候,请求backup机器)

 }  

3----常用设置

在Nginx中的conf文件夹下的.conf文件中配置,此外接文件,然后重载

include vhos/*.conf
   重载
   linux sudo ./nginx -s reload   
   windows nginx.exe -s reload 再打开新的窗口

在该目录下建立vhost文件,在文件里面建立要维护的域名权重负载均衡配置

文件命名格式:www.cyqxm.com.conf  域名加后缀

upstream www.cyqxm.com{
    server 127.0.0.1:8080 weight=10;
    server 127.0.0.1:9080 weight=15;
}
server { 
listen 80; 
autoindex on; 
server_name www.cyqxm.com;                        #虚拟的访问代理域名,浏览器访问的网址
access_log D:/CYQJAVA/Nginx/nginx-1.10.2/logs/mylogs/access.log combined;                   #错误日志记录
index index.html index.htm index.jsp index.php; 
#error_page 404 /404.html;
if ( $query_string ~* ".*[\;'\<\>].*" ){ 
return 404; 


location / { 
  proxy_pass http://www.cyqxm.com;           #正确的访问地址,server_name即是服务代理输入的域名,当输入此域名,则会转到      proxy_pass            指定的地址中来
  add_header Access-Control-Allow-Origin *;

}

流程: Nginx先访问server,server读取到后访问location,location后访问upstream

关于在没有买域名的情况下测试:

因为考虑到个人开发的成本问题,单独购买域名和服务器可能会花费很大,因此可以通过本地自测试的方式,在Host文件中维护server_name 的域名指向:

打开系统:C:\Windows\System32\drivers\etc\hosts  里面的hosts文件进行修改

维护:www.cyqxm.com      127.0.0.1的域名转换,以后访问本地则可以代理localost进行访问

关于一些极可能遇到的问题:

------Nginx启动出错:重载后重新打开,windows页面下打开后不关闭cmd

------Nginx启动失败:Nginx一旦修改文件必须对文件进行重载

------Host权限不足:

对于需要修改Hosts文件时候,当前存在的Host权限不足的问题,现在网上常见的有给文件赋值,给当前用户赋值,使用管理员权限打开修改,直接复制文件出来修改后替换!以上行为都是属于正确的又合理的,但是建立用户的本身具备权限或者管理本身存在其权限组内,才可以顺利修改!在以上方法均失败的情况下,只有进入安全模式才可以修改,否则即使重装系统也不一定有用!

猜你喜欢

转载自blog.csdn.net/qq_36505948/article/details/80983165
今日推荐