java分布式 java优点
一、自研Java分布式产品如何技术选型,有哪些比较好的技术推荐
一个非常好的问题。推荐Java+SpringBoot,详细功能组件介绍如下。
Java是主流开发语言,应用普遍,SpringBoot是常用框架,有丰富的组件和易用功能,在电商系统、信息管理系统、各种企业应用开发中处于垄断地位。
一,系统架构基本框架可分为接口服务、数据层、异步任务调度、业务处理、日志监控等几大模块。
1,集成ActiveMQ消息队列,平滑高峰期负载
高峰期时,为了及时处理响应客户端请求,系统架构中引入ActiveMQ消息队列,异步处理业务数据,将瞬间高负载平滑,保障运行稳定,架构易扩展。
2,集成Redis缓存系统,提高数据读写效率,并支持故障恢复
数据保存到Redis缓存中,和使用内存相比有两个优点:
1)在架构上支持集群扩展,多个服务器节点时,处理业务逻辑读写数据时,通过Redis系统保持一致。
2)在服务重启或者发生故障时,可以恢复当前处理的业务数据。
3,集成WebSocket,实时更新数据到后台管理页面,又不增加服务器负载
如何更新显示数据或者状态信息到后台管理页面中?有两个方案可选。
1)定时调用接口,为了及时显示,定时任务执行频率会设置的比较高。这样就带来两个问题,首先是增加服务器负载,其次是在没有新数据时,仍然需要频繁的调用接口。
2)WebSocket推送数据,业务处理服务在收到新请求或者状态发生变化时,推送数据到后台管理页面,不仅做到了信息实时显示,而且占用服务器资源非常少,在多个管理后台打开页面时,不额外增加服务器负载。
1.数据层,MySQL数据库,MyBatis持久层,Flyway版本化管理数据库SQL脚本,AliDruid连接池等框架。Hibernate是另一个经常使用的持久化框架。
MyBatisPlus对MyBatis做了进一步增强、简化开发和提高效率,并且提供了简单易用的代码生成器。
2.缓存系统,最常使用Redis,也可选用MongoDB等其他NoSQL数据库。
3.异步消息队列,常用ActiveMQ,RocketMQ,RabbitMQ,Kafka,考虑部署维护的复杂度,根据项目的业务量选择。
4.JSON数据处理,常用Fastjson,Gson,Jackson,Json-lib,推荐Fastjson。
5.开发工具包,常用ApacheCommons套件,lang,collections,codec,io等功能库。
6.异步任务调度,复杂耗时任务,使用Quartz框架异步执行。小型项目可以使用Spring框架自带的Schedule。
7.单元测试JUnit+Mockit,覆盖功能函数,保障代码质量。
8.日志系统,集成LogBack,接入LogStash配合ELK分析处理。
9.服务监控,使用Actuator等框架实现运行信息收集和报警,配合图像化展示工具,比如Prometheus+Grafana+AlertManager
10.Swagger接口文档,将代码和文档融合一体,在修改代码的同时维护文档。
11.Postman接口调试工具,导出脚本文件方便团队协作,并且可以自动化运行。
三,功能组件列表四,部署运维推荐使用Docker容器,启动本地开发环境,自动化运维部署。阿里云容器镜像服务+Git+Docker镜像自动构建系统。
我是工作多年的Web应用架构师,陆续发布关于软件开发方面的文章,欢迎关注我,了解更多IT专业知识。
二、为什么有人说java适合分布式计算环境
Java为什么适合分布式计算?主要原因还是因为Java是平台无关的!
什么是分布式计算环境?分布式计算英文全称为Distributedcomputing,主要研究的是分布式系统(Distributedsystem)如何计算的,分布式系统本质是一组电脑,通过网络相互连接传递信息,并且在通讯以后协调其行为从而形成一个系统,组件之间的交互是为了解决共同的业务。
分布式计算可以讲大量的计算数据进行分割,并且分割成很多个小块,本质上是有很多台计算机进行分别进行计算,最终将各自的结果统一上传而得到数据结论。
常见的分布式系统的例子比如面向服务的架构,多人大型的网络游戏,对等的网络应用等等,这很显然不可能由某一台计算机完成,超级计算机目前还停留在实验室阶段,即使交付使用,也将存在成本过高等众多原因,那么分布式计算就可以解决这些问题。
为什么Java适合分布式计算环境?从逻辑上讲,分布式主要分为数据上分布以及操作上分布两大类。数据可以分布到网络上的不同的主机上,对于操作分布则是将计算分散在不同的主机上。
Java有url对象,并且可以通过创建url对象来表示url地址,而Java的applet则可以从服务器上下载到客户端上,从而实现将其中的一部分计算拿到客户端来进行。与此同时,Java提供了非常丰富的网络类库,这大大的方便了实际开发。
JavaEE具有非常强大的分布式技术基础,可以说具备强大的分布式能力。JavaSpaces、Jini、Rmi等等都为实现异构分布式计算提供了非常坚实的技术基础。
java本身是面向对象的,在任何平台上,Java源程序被编译器翻译成虚拟机能够识别的字节码,那么只要有Java虚拟机平台,就能够解释执行Java字节码程序,也就是说有了JVM的存在,保证了Java就是平台无关的。
也就是说,因为Java本身是运行在虚拟机JVM上的,这就让Java具有很大的跨平台属性,也就能具有很强的适应分布式计算环境的能力。
三、Java大型互联网架构-如何正常掌握分布式系统的大部分技术
分布式是一种思想,旨在将原本的单节点应用分布到不同的服务器节点,以求获得更大的运算能力和更高的性能。
分布式技术太广了,涉及到将多个服务器的CPU,内存硬盘等组成一个统一的整体,而服务,计算分布在不同的服务器上,服务之间的通信,分布式之后的全局唯一性,数据一致性,分布式事务等等,每一项可以说在实际工作中都会有大量的坑,不经历过很难明白,下面是我的粗浅理解:
分布式存储:
数据库:数据库的主从复制,读写分离,分库分表这些东西,都是通过数据分布在不同的节点,以实现数据查询与修改的更高的效率,同时防止数据在单一节点上因为某些原因的丢失,推荐自己搭建mysql主从,使用springaop代码开发或者组件搭建读写分离,使用mycat等组件实现分库分表!
文件:分布式文件存储系统,有HDFS和Gluster等大型的系统,提供更好的容错性和扩展能力!
分布式服务:对外提供高度内聚,透明,内部灵活,分散的服务集群!
前后端分离:将前后端的服务拆分在不同的集群中,以保证前后端技术架构上的分离,使用node.js部署前端服务,与用户进行交互,后台通过某种通信协议,提供动态数据给前端调用!
后端微服务:以单独业务为导向,建立起细粒度的服务,同时服务之间通过服务发现组件进行通信,在用的springcloud还不错,集成了网关,熔断器,负载均衡等,可以进行快速的搭建!
服务之间的通信通常有服务暴露直接调用(zk.eureka等服务注册与发现),异步消息传输(kafka等消息队列)!
分布式缓存:缓存通常是内存型缓存,可以用来快速的存取数据,减少数据库的压力!分布式缓存通常使用主从复制,高可用方式搭建起集群,提高整个缓存系统的容纳能力,也避免单一缓存节点宕机对整个服务的影响,用的较多的是redis集群(基于redis的集群搭建,请参考)
redis缓存还因为单线程模型,可以用来做分布式锁实现!
分布式计算:将一些大型的计算,使用策略分布到不同的机器上,然后汇总得到计算结果,一般使用map-reduce模型,hadoop,spark等都是成熟而且大规模使用的框架!
分布式技术并没有严格分类,技术也五花八门,作为一个程序员只能是每天不断的学习才能得以入门,每个人的学习能力,领悟到的东西也有不同,今天就写这么多,更多的技术分享,敬请关注。。。