「高可用java架构图」高可用框架

博主:adminadmin 2022-11-28 16:01:06 61

本篇文章给大家谈谈高可用java架构图,以及高可用框架对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Java的技术架构有哪些

服务分离

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

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

反向代理

为了提升服务处理能力,我们在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信息放入缓存时要有合理的策略写入

架构图汇总

一,java内存模型

由于java1.8对java内存模型进行了改动,我们这里分开来说明,首先来看java1.8之前的java内存模型。

1,java1.8之前的内存模型

关于java内存模型,有一点,要提一下,那就是,线程之间的通信机制。也就是说:线程之间是如何通信的?

答:共享内存和消息传递。

共享内存通信,指的是各线程之间通过共享内存这一块区域,来进行隐式通信。线程之间通过读写共享内存来进行通信。在java中,典型的应用就是通过共享对象来进行通信。这里要搞清楚2个概念,共享内存和本地内存。共享内存是各线程共享的公共区域。本地内存是线程独享的,其他线程不能访问。

消息传递通信,指的是线程之间必须通过明确的发送消息来进行显示通信。这种通信方式,线程之间没有共享对象,而是通过wait()、notify()等方法,显式的告诉其他线程来进行通信。

2,java1.8的内存模型

java1. 8移出了内存模型中的方法区,引入了元空间的概念。元空间使用的是操作系统的内存,而不是jvm内存。指定元空间的大小,通过下面这个jvm参数:

-XX:MetaspaceSize

还有一个关键点,就是常量池。在java1.7之前,常量池位于方法区。从java1.7开始,常量池位于堆中。

二,java对象的结构

java对象的结构

对象头的结构

Mark Word

三,双亲委派模型

什么是双亲委派模型?

为什么叫双亲委派模型?

双亲指的是谁?

四,类的生命周期

java类的生命周期:加载-连接-初始化-使用-卸载。

如下图:

五,Eureka架构图

这个架构图是结合源码画出的,个人觉得还是很不错的。

六,Kafka架构图

注意:只有broker和consumer需要向Zookeeper集群注册。生产者无需注册到Zookeeper。

七,Spring Cloud微服务架构图

java 架构设计图用什么软件

架构图用office家族的visio最牛逼,各种图都可以画出来。

用VISIO画的分层架构设计图

高可用java架构图的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于高可用框架、高可用java架构图的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-28,除非注明,否则均为首码项目网原创文章,转载请注明出处。