记一次JavaWeb网站技术架构总结

news/2024/5/9 11:50:40/文章来源:https://blog.csdn.net/weixin_34279579/article/details/93934627

俗话说的好,冰冻三尺非一日之寒,滴水穿石非一日之功,罗马也不是一天就建成的,当然对于我们开发人员来说,一个好的架构也不是一蹴而就的。

初始搭建

开始的开始,就是各种框架一搭,然后扔到Tomcat容器中跑就是了,这时候我们的文件,数据库,应用都在一个服务器上。

服务分离

随着系统的的上线,用户量也会逐步上升,很明显一台服务器已经满足不了系统的负载,这时候,我们就要在服务器还没有超载的时候,提前做好准备。

由于我们是单体架构,优化架构在短时间内是不现实的,增加机器是一个不错的选择。这时候,我们可能要把应用和数据库服务单独部署,如果有条件也可以把文件服务器单独部署。

反向代理

为了提升服务处理能力,我们在Tomcat容器前加一个代理服务器,我一般使用Nginx,当然你如果更熟悉apache也未尝不可。

用户的请求发送给反向代理,然后反向代理把请求转发到后端的服务器。

严格意义上来说,Nginx是属于web服务器,一般处理静态html、css、js请求,而Tomcat属于web容器,专门处理JSP请求,当然Tomcat也是支持html的,只是效果没Nginx好而已。

反向代理的优势,如下:

  • 隐藏真实后端服务
  • 负载均衡集群
  • 高可用集群
  • 缓存静态内容实现动静分离
  • 安全限流
  • 静态文件压缩
  • 解决多个服务跨域问题
  • 合并静态请求(HTTP/2.0后已经被弱化)
  • 防火墙
  • SSL以及http2

动静分离

基于以上Nginx反向代理,我们还可以实现动静分离,静态请求如html、css、js等请求交给Nginx处理,动态请求分发给后端Tomcat处理。

Nginx 升级到1.9.5+可以开启HTTP/2.0时代,加速网站访问。

当然,如果公司不差钱,CDN也是一个不错的选择。

服务拆分

在这分布式微服务已经普遍流行的年代,其实我们没必要踩过多的坑,就很容易进行拆分。市面上已经有相对比较成熟的技术,比如阿里开源的Dubbo(官方明确表示已经开始维护了),spring家族的spring cloud,当然具体如何去实施,无论是技术还是业务方面都要有很好的把控。

Dubbo
SpringCloud
  • 服务发现——Netflix Eureka
  • 客服端负载均衡——Netflix Ribbon
  • 断路器——Netflix Hystrix
  • 服务网关——Netflix Zuul
  • 分布式配置——Spring Cloud Config
微服务与轻量级通信
  • 同步通信和异步通信
  • 远程调用RPC
  • REST
  • 消息队列

持续集成部署

服务拆分以后,随着而来的就是持续集成部署,你可能会用到以下工具。

Docker、Jenkins、Git、Maven

图片源于网络,基本拓扑结构如下所示:

整个持续集成平台架构演进到如下图所示:

服务集群

Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群)。其实,我们最常见的也是生产中最常接触到的就是负载均衡集群。

负载均衡实现

  • DNS负载均衡,一般域名注册商的dns服务器不支持,但博主用的阿里云解析已经支持
  • 四层负载均衡(F5、LVS),工作在TCP协议下
  • 七层负载均衡(Nginx、haproxy),工作在Http协议下

分布式session

大家都知道,服务一般分为有状态和无状态,而分布式sessoion就是针对有状态的服务。

分布式Session的几种实现方式
  • 基于数据库的Session共享
  • 基于resin/tomcat web容器本身的session复制机制
  • 基于oscache/Redis/memcached 进行 session 共享。
  • 基于cookie 进行session共享
分布式Session的几种管理方式
  • Session Replication 方式管理 (即session复制)
    简介:将一台机器上的Session数据广播复制到集群中其余机器上
    使用场景:机器较少,网络流量较小
    优点:实现简单、配置较少、当网络中有机器Down掉时不影响用户访问
    缺点:广播式复制到其余机器有一定廷时,带来一定网络开销

  • Session Sticky 方式管理
    简介:即粘性Session、当用户访问集群中某台机器后,强制指定后续所有请求均落到此机器上
    使用场景:机器数适中、对稳定性要求不是非常苛刻
    优点:实现简单、配置方便、没有额外网络开销
    缺点:网络中有机器Down掉时、用户Session会丢失、容易造成单点故障

  • 缓存集中式管理
    简介:将Session存入分布式缓存集群中的某台机器上,当用户访问不同节点时先从缓存中拿Session信息
    使用场景:集群中机器数多、网络环境复杂
    优点:可靠性好
    缺点:实现复杂、稳定性依赖于缓存的稳定性、Session信息放入缓存时要有合理的策略写入

目前生产中使用到的
  • 基于tomcat配置实现的MemCache缓存管理session实现(麻烦)
  • 基于OsCache和shiro组播的方式实现(网络影响)
  • 基于spring-session+redis实现的(最适合)

负载均衡策略

负载均衡策略的优劣及其实现的难易程度有两个关键因素:一、负载均衡算法,二、对网络系统状况的检测方式和能力。

1、rr 轮询调度算法。顾名思义,轮询分发请求。

优点:实现简单

缺点:不考虑每台服务器的处理能力

2、wrr 加权调度算法。我们给每个服务器设置权值weight,负载均衡调度器根据权值调度服务器,服务器被调用的次数跟权值成正比。

优点:考虑了服务器处理能力的不同

3、sh 原地址散列:提取用户IP,根据散列函数得出一个key,再根据静态映射表,查处对应的value,即目标服务器IP。过目标机器超负荷,则返回空。

4、dh 目标地址散列:同上,只是现在提取的是目标地址的IP来做哈希。

优点:以上两种算法的都能实现同一个用户访问同一个服务器。

5、lc 最少连接。优先把请求转发给连接数少的服务器。

优点:使得集群中各个服务器的负载更加均匀。

6、wlc 加权最少连接。在lc的基础上,为每台服务器加上权值。算法为:(活动连接数*256+非活动连接数)÷权重 ,计算出来的值小的服务器优先被选择。

优点:可以根据服务器的能力分配请求。

7、sed 最短期望延迟。其实sed跟wlc类似,区别是不考虑非活动连接数。算法为:(活动连接数+1)*256÷权重,同样计算出来的值小的服务器优先被选择。

8、nq 永不排队。改进的sed算法。我们想一下什么情况下才能“永不排队”,那就是服务器的连接数为0的时候,那么假如有服务器连接数为0,均衡器直接把请求转发给它,无需经过sed的计算。

9、LBLC 基于局部性的最少连接。均衡器根据请求的目的IP地址,找出该IP地址最近被使用的服务器,把请求转发之,若该服务器超载,最采用最少连接数算法。

10、LBLCR 带复制的基于局部性的最少连接。均衡器根据请求的目的IP地址,找出该IP地址最近使用的“服务器组”,注意,并不是具体某个服务器,然后采用最少连接数从该组中挑出具体的某台服务器出来,把请求转发之。若该服务器超载,那么根据最少连接数算法,在集群的非本服务器组的服务器中,找出一台服务器出来,加入本服务器组,然后把请求转发之。

读写分离

MySql主从配置,读写分离并引入中间件,开源的MyCat,阿里的DRDS都是不错的选择。

如果是对高可用要求比较高,但是又没有相应的技术保障,建议使用阿里云的RDS或者Redis相关数据库,省事省力又省钱。

全文检索

如果有搜索业务需求,引入solr或者elasticsearch也是一个不错的选择,不要什么都塞进关系型数据库。

缓存优化

引入缓存无非是为了减轻后端数据库服务的压力,防止其"罢工"。

常见的缓存服务有,Ehcache、OsCache、MemCache、Redis,当然这些都是主流经得起考验的缓存技术实现,特别是Redis已大规模运用于分布式集群服务中,并证明了自己优越的性能。

消息队列

异步通知:比如短信验证,邮件验证这些非实时反馈性的逻辑操作。

流量削锋:应该是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。

日志处理:系统中日志是必不可少的,但是如何去处理高并发下的日志确是一个技术活,一不小心可能会压垮整个服务。工作中我们常用到的开源日志ELK,为嘛中间会加一个Kafka或者redis就是这么一个道理(一群人涌入和排队进的区别)。

消息通讯:点对点通信(个人对个人)或发布订阅模式(聊天室)。

日志服务

消息队列中提到的ELK开源日志组间对于中小型创业供公司是一个不错的选择。

安全优化

以上种种,没有安全做保证可能都会归于零。

  • 阿里云的VPN虚拟专有网络以及安全组配置
  • 自建机房的话,要自行配置防火墙安全策略
  • 相关服务访问,比如Mysql、Redis、Solr等如果没有特殊需求尽量使用内网访问并设置鉴权
  • 尽量使用代理服务器,不要对外开放过多的端口
  • https配合HTTP/2.0也是个不错的选择

架构装逼必备词汇

高可用

  • 负载均衡(负载均衡算法)
  • 反向代理
  • 服务隔离
  • 服务限流
  • 服务降级(自动优雅降级)
  • 失效转移
  • 超时重试(代理超时、容器超时、前端超时、中间件超时、数据库超时、NoSql超时)
  • 回滚机制(上线回滚、数据库版本回滚、事务回滚)

高并发

  • 应用缓存
  • HTTP缓存
  • 多级缓存
  • 分布式缓存
  • 连接池
  • 异步并发

分布式事务

  • 二阶段提交(强一致)
  • 三阶段提交(强一致)
  • 消息中间件(最终一致性),推荐阿里的RocketMQ

队列

  • 任务队列
  • 消息队列
  • 请求队列

扩容

  • 单体垂直扩容
  • 单体水平扩容
  • 应用拆分
  • 数据库拆分
  • 数据库分库分表
  • 数据异构
  • 分布式任务

网络安全

  • SQL注入
  • XSS攻击
  • CSRF攻击
  • 拒绝服务(DoS,Denial of Service)攻击

架构装逼必备工具

操作系统

Linux(必备)、某软的

负载均衡

DNS、F5、LVS、Nginx、OpenResty、HAproxy、负载均衡SLB(阿里云)

分布式框架

Dubbo、Motan、Spring-Could

数据库中间件

DRDS (阿里云)、Mycat、360 Atlas、Cobar (不维护了)

消息队列

RabbitMQ、ZeroMQ、Redis、ActiveMQ、Kafka

注册中心

Zookeeper、Redis

缓存

Redis、Oscache、Memcache、Ehcache

集成部署

Docker、Jenkins、Git、Maven

存储

OSS、NFS、FastDFS、MogileFS

数据库

MySql、Redis、MongoDB、PostgreSQL、Memcache、HBase

网络

专用网络VPC、弹性公网IP、CDN

作者: 小柒

出处: https://blog.52itstyle.com

分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(345849402@qq.com)咨询。

转载于:https://www.cnblogs.com/wuxl360/p/7489763.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_747378.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站SSL安装配置

背景介绍:HTTPS,全称:Hyper Text Transfer Protocol over Secure Socket Layer,是通过SSL安全机制传输,保证网站数据不被窃听、冒充、篡改等安全风险,保证网站传输安全可靠,下面是通过nginx配置ssl模块记录…

【提权过程】嘉缘网站--提权,代理,内网渗透(针对445端口)

这篇是由上篇 【渗透过程】嘉缘网站--测试https://www.cnblogs.com/G-Shadow/articles/10964374.html之后的操作,文章包括了提权,HTTP代理及对内网的渗透 使用蚁剑连接上写入的一句话后,使用虚拟终端发现自己权限为最高权限可以执行任何操作 …

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性(Avaliability)描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间(故障时间)故障修复时间点-故障发现(报告)时间点…

大型网站技术架构(四)网站的高性能架构

2019独角兽企业重金招聘Python工程师标准>>> 网站性能是客观的指标,可以具体体现到响应时间、吞吐量、并发数、性能计数器等技术指标。 1、性能测试指标 1.1 响应时间 指应用执行一个操作需要的时间,指从发出请求到最后收到响应数据所需要的时…

大型网站技术架构(八)网站的安全架构

2019独角兽企业重金招聘Python工程师标准>>> 从互联网诞生起,安全威胁就一直伴随着网站的发展,各种Web攻击和信息泄露也从未停止。常见的攻击手段有XSS攻击、SQL注入、CSRF、Session劫持等。 1、XSS攻击 XSS攻击即跨站点脚本攻击(…

实现手机访问,自动跳转网站手机版

百度Site App的uaredirect.js实现手机访问&#xff0c;自动跳转网站手机版 以下为代码&#xff0c;可放置在网站foot底部文件&#xff0c;或者haead顶部文件&#xff0c;建议将代码放在网站顶部&#xff0c;这样可以实现手机访问立即跳转&#xff01; <script src"http…

通过webDAV来管理网站上的资源

WebDAV&#xff08;Web Distributed Authoring and Versioning&#xff09;扩展了HTTP.1.1通信协议的功能&#xff0c;他让具备适当权限的用户&#xff0c;可以直接通过浏览器、网上邻居来管理远程的webDAV文件夹内的文件&#xff0c;我们下面就来讲一下webDAV是实现。一、启用…

猫咪单独为某个网站添加Proxy

猫咪将overleaf网站添加到猫咪名单中&#xff0c;猫咪单独为某个网站添加猫咪 坑。暂时没有找到解决方案。 我想实现的效果是&#xff0c;打开一个网站&#xff0c;如果网站比较卡&#xff0c;就把这个网站添加到直联列表中。停止对它的猫咪。 方案1&#xff1a; 1、修改猫…

如何禁止自己的电脑访问某个网站?

如何禁止自己的电脑访问某个网站&#xff1f;BlockSite 方案1&#xff1a; https://blog.csdn.net/main_double/article/details/105613165 https://zh.wikihow.com/%E5%9C%A8%E7%94%B5%E8%84%91%E4%B8%8A%E5%B1%8F%E8%94%BD%E7%BD%91%E7%AB%99 操作了一大堆都是没用的&…

电商网站设计系列——促销码功能设计与思考

2019独角兽企业重金招聘Python工程师标准>>> 本文作者将会从三个方面讲述&#xff1a;如何设计电商网站的促销码功能呢&#xff1f;在设计过程中我们需要注意些什么呢&#xff1f; 国外电商网站中有一个东西叫做“促销码”&#xff0c;相当于国内电商的“优惠券”。…

大型网站架构系列:电商网站架构案例(3)

本文章是电商网站架构案例的第三篇&#xff0c;主要介绍数据库集群&#xff0c;读写分离&#xff0c;分库分表&#xff0c;服务化&#xff0c;消息队列的使用&#xff0c;以及本电商案例的架构总结。 6.5数据库集群&#xff08;读写分离&#xff0c;分库分表&#xff09; 大型网…

打开小猫咪之后,国内的网站打不开了,怎么办。原因是dns解析出了问题

打开小猫咪之后&#xff0c;国内的网站打不开了&#xff0c;怎么办。原因是dns解析出了问题 关闭远程dns解析功能即可&#xff0c;之前回答过该问题&#xff01; https://blog.csdn.net/Hodors/article/details/126922545?ops_request_misc%257B%2522request%255Fid%2522%25…

为什么开了小猫咪之后,国内的网站就登录不上去了

为什么开了小猫咪之后&#xff0c;国内的网站就登录不上去了 现象描述&#xff1a; 1、打开小猫咪&#xff0c;能够gole&#xff1b; 2、但是访问csdn时&#xff0c;巨卡&#xff1b;DNS解析错误&#xff1b; 3、关闭小猫咪&#xff0c;不能gole&#xff0c;但是能访问csdn…

2014年我国钓鱼网站数量已超9.3万个

中国互联网协会、国家互联网应急中心(CNCERT)20日在京发布的《中国互联网站发展状况及其安全报告(2015)》显示&#xff0c;2014年&#xff0c;我国发现恶意仿冒钓鱼网站页面数量增至93136个&#xff0c;较2013年增长2.1倍。 据国家互联网应急中心高级工程师何世平介绍&#xff…

分享一个在线的简历制作网站:Reactive-Resume

分享一个在线的简历制作网站&#xff1a;Reactive-Resume rxresu.me 这个网站最厉害的地方是&#xff1a; Free, foreverNo AdvertisingNo User TrackingAccessible in multiple languagesImport data from LinkedIn, JSON ResumeExport your resume to JSON or PDF formatA…

java 企业网站源码模版 有前后台 springmvc SSM 生成静态化

java 企业网站源码 前后台都有 静态模版引擎&#xff0c; 代码生成器大大提高开发效率点击&#xff1a;获取地址QQ 313596790系统介绍&#xff1a;1.网站后台采用主流的 SSM 框架 jsp JSTL&#xff0c;网站后台采用freemaker静态化模版引擎生成html2.因为是生成的html&#xff…

12个网站帮助你学习 Flash / ActionScript

Adobe Flash是一个很好的技术&#xff0c;该技术允许开发人员加入的互动性和平稳的动画网页。 其受欢迎程度是如此巨大&#xff0c;您可以看到许多网站&#xff0c;致力于帮助开发者有兴趣在闪光。 在这篇文章中&#xff0c; 您可以找到12个精彩的网站&#xff0c;值得一提的书…

免费下载无版权高清大图,我推荐这几个网站

前几天有同学问我&#xff0c;有没有下载高清无版权大图的网站。 作为各种素材都有的我来说&#xff0c;回答当然是&#xff1a;有&#xff01;其实这类的网站还是很多的&#xff0c;大部分以国外的网站为主&#xff0c;而且图片的质量都是非常高。这里我整理总结了几个网站跟大…

博客网站容器化

文章目录欢迎关注公众号原本的VPS是Centos 6的&#xff0c;系统比较老&#xff0c;而且不原生的支持docker。最近疫情肆虐&#xff0c;在家闲着也是闲着&#xff0c;着手把系统升级到7,顺手也把网站的部署容器化。备份 关于如何备份&#xff0c;查到的资料中&#xff0c;有的说…

知道这5个隐藏资源网站的人非常少,难怪总是找不到资源!

现在的互联网是开放的&#xff0c;我们可以通过网络下载到很多自己需要的东西&#xff0c;但是有些网站因为不够知名而被忽视&#xff0c;但是里面的资源还是很不错的。 今天小编就来跟大家分享几个隐藏的资源网站&#xff1a; Aio search国外的一个BT资源站&#xff0c;资源非…