`
bugyun
  • 浏览: 551509 次
社区版块
存档分类
最新评论

浅谈java分布式系统(转)

    博客分类:
  • Java
 
阅读更多

 

转:http://itindex.net/detail/54295-java-%E7%B3%BB%E7%BB%9F-%E8%AE%A4%E8%AF%86

 

相对于单机系统,分布式系统非常复杂,涉及到非常多的技术,作为一个屌丝,有幸能够在大规模分布式系统下工作,故在此记录一些浅薄认识,作为自己未来学习路线的参考。

一、分布式系统概述

分布式系统往往是把应用拆分成多个应用,每个团队维护一个应用,应用与应用通过远程过程调用或者消息中间件通信。这种系统的优点是能够做到高内聚低耦合,可以支撑业务的快速发展,缺点则是运维成本大大提高了,系统出了问题,需要全链路排查。如图所示,用户使用应用A,应用A首先需要调用应用B,然后调用应用C,其中应用B又要调用应用D和E,其中任何一个应用挂了,都会影响整个系统的链路。以上只是一个很简单的例子,真实的系统之间的依赖关系往往非常复杂。

 

二 分布式系统下的技术栈

在此主要是挖个坑,后续我会一个一个填的。。。

对于分布式系统中的某个应用来说,它的入口往往有三个:远程过程调用(其他应用来调用我的服务)、消息中间件(我订阅了其他系统的消息,其他系统会给我发消息)、web访问(主要访问页面),它的出口则有很多:远程过程调用(调用其他应用的服务)、消息中间件(我向消息服务器发消息,供其他应用消费)、访问分布式缓存、访问分布式日志、访问数据库,执行调度任务。有了入口和出口,剩下的就是应用的核心部分,包括核心逻辑代码和辅助框架。对于分布式系统来说,有个东西必不可少,那就是配置中心。无论是远程过程调用、消息中间件还是分布式缓存,它们都需要从配置中心获取地址列表。

下面简要概括一下分布式系统涉及的技术:

1、远程服务框架:远程服务框架是分布式系统中不可或缺的,对于远程服务框架来说,关键的几个点是:服务消费者、服务提供者、协议(java序列号、反序列化、hessian协议等等)、网络(NIO、多路复用等等)、地址列表。其中协议的选择、网络的优化以及地址列表的获取是难点。目前业界比较有名的开源框架有:Apache Thrift(跨语言)、Dubbo等等。

2、消息中间件:引入消息中间件是用来降低应用之间的耦合的。对于上游应用来说,它往往会依赖非常多的下游应用,如果全部用同步调用(远程过程调用就是同步调用)的方式,那么上游应用必须等到所有下游应用全部执行成功后,才能返回成功,这种等待往往是不可忍受的。为此,需要将同步异步化,而消息中间件可以实现这种异步化。使用消息中间件后,上游应用只需要向消息服务器发送消息就可以了,它不用等待所有应用执行完,它可以提前返回执行成功,后续,消息服务器会去向这些下游应用发消息,通知它们执行。虽然异步化降低了应用之间的耦合,但也引入了新的问题。比如,下游系统执行的时候挂了,而这时候上游系统其实是返回的成功,这样就导致了状态不一致。要解决这个问题,就需要使用消息中间件本身的重试机制,对于一些系统异常,需要重试直到成功,对于应用本身,又需要对这种重试进行幂等处理,并且使用正向状态机管理整个系统的状态。消息中间件的规范可以参考JMS,业界也有成熟的开源方案,比如ActivityMQ。

3、wrapper层:warpper层主要是上面两个入口的包装层,进行一些异常管理,日志管理和AOP拦截

4、MVC框架:这个不用多说了吧,个人比较喜欢spring MVC,有空可以阅读下源代码

5、分布式缓存:待填坑。。

6、分布式日志:待填坑。。

7、文件存储系统:待填坑。。

8、IOC容器:目前用的最多的是spring容器,对于spring的核心的几个模块,可以参考《spring源码深度解析》

9、ORM框架:ORM最好使用ibatis,不推荐hibernate,因为ibatis可以控制sql,在大数据量读写下,必须对sql进行优化。至于ibatis本身的架构,有空我会单独写文章。

10、调度引擎:用于执行异步的定时任务的引擎,待填坑。。

11、分布式数据访问层:正在学习中。。

12、配置中心:统一的配置管理中心,待填坑。。

13、web容器:tomcat,结合《tomcat源代码分析》和tomcat本身的源代码,应该可以很容易的懂tomcat的架构和实现。

14、业务逻辑层:流程引擎和规则引擎,配合spring来治理极易变动的业务逻辑,后续有空单独写个流程引擎

 

分享到:
评论

相关推荐

    浅谈分布式操作系统的论文

    2. 中间件:中间件是分布式系统中的重要组成部分,如Java RMI、CORBA和Apache Thrift,它们提供标准化的服务接口,简化了分布式应用的开发和部署。 五、分布式系统的构建技术 1. 基于对象的分布式系统:将对象作为...

    浅谈常用的分布式事务选型

    本文将探讨几种常用的分布式事务处理方案,包括通用分布式事务规范XA、JAVA分布式事务规范(JTA)以及一些常见的分布式事务框架如2PC/3PC、TCC、MQ、Seata和Saga。 #### 二、分布式事务基础知识 ##### 2.1 事务的...

    浅谈java获取UUID与UUID的校验

    UUID 的主要用途是为了在分布式系统中生成唯一的标识符,以便于标识一些信息。在 Java 中,我们可以使用 java.util.UUID 类来生成 UUID。 UUID 的格式是一个 32 位十六进制数字,通常以 5 个部分的形式表示,中间用...

    浅谈Java技术中的数据库应用

    总的来说,Java通过JDBC为开发者提供了强大而灵活的数据库访问能力,使得在构建分布式、跨平台的数据库应用时,可以充分利用Java的特性,实现高效、稳定的数据库交互。随着Java技术的不断演进,JDBC也在不断地完善,...

    浅谈J2EE框架和分布式网络管理.pdf

    J2EE基于Java技术,为多层分布式企业应用提供了标准的中间件规范,包括一组技术和服务。本文将详细介绍J2EE框架的构成、其主要优势以及与分布式网络管理的关系。 一、J2EE框架构成 J2EE框架主要包括以下几个层次: ...

    浅谈Java(SpringBoot)基于zookeeper的分布式锁实现

    在分布式系统中,分布式锁是一种机制,用于确保在多个节点上执行的操作是同步的。分布式锁可以防止多个节点同时执行同一个操作,从而避免了数据不一致的问题。 zookeeper的分布式锁实现 zookeeper是一种分布式协调...

    浅谈Redis分布式锁的正确实现方式

    分布式锁是一种在分布式系统中用于协调不同节点间访问共享资源的机制,以确保同一时刻只有一个客户端能够访问特定的资源。在微服务架构中,由于多个服务实例可能并发操作同一数据,分布式锁成为了确保数据一致性的...

    借《浅谈PHP与Java之Web开发整合技术》说LAJP

    《浅谈PHP与Java之Web开发整合技术》一文深入探讨了PHP与Java两种语言在Web开发中的结合应用,尤其聚焦于三种关键技术:SOAP、Quercus和PHP/JavaBridge,为开发人员提供了宝贵的整合思路。 ### 一、SOAP(Simple ...

    浅谈计算机软件开发中JAVA编程语言的应用.zip

    Java在企业级应用开发中占据主导地位,尤其是在大型分布式系统中。例如,Java EE(Java Platform, Enterprise Edition)提供了一套完整的框架和服务,用于构建可扩展、安全和高度可用的Web应用程序。Spring框架是另...

    浅谈计算机软件开发的JAVA编程语言.pdf

    远程方法调用(Java Remote Method Invocation, RMI)技术主要用于分布式计算结构中,解决程序、函数和数据的远程调用问题。该技术使得客户端和服务器能够实现互联互通,允许用户调用服务器上的JAVA程序中的任意类。...

    浅谈JAVA如何生成UUID唯一标识

    UUID 唯一标识在 JAVA 中的生成和应用非常广泛,通过 UUID,可以使分布式系统中的所有元素都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。同时,UUID 也可以作为数据库数据表主键,保证每次生成...

    浅谈SOAP浅谈SOAP

    ### 浅谈SOAP #### 一、引言 随着信息技术的迅速发展,现代企业的运营环境变得日益复杂。这种复杂性不仅体现在技术层面,更表现在跨平台、跨系统的集成需求上。为了应对这一挑战,企业解决方案必须具备广泛的兼容...

    浅谈Java消息队列总结篇(ActiveMQ、RabbitMQ、ZeroMQ、Kafka)

    Java 消息队列是分布式系统中重要的组件,主要解决应用解耦、异步消息、流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性架构。常用的消息队列有 ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ 等。...

    浅谈java线程join方法使用方法

    浅谈Java线程join方法使用方法 Java中的线程join方法是一种实现线程同步的方式,可以将原本并行执行的多线程方法变成串行执行的。在Java中,线程join方法的作用是使当前线程等待另一个线程的结束,然后再继续执行...

    浅谈人工智能:现状、任务、构架与统一

    掌握MapReduce原理以及分布式文件系统的使用对于高效处理大数据至关重要。 ### 结语 综上所述,进入机器学习领域需要具备多方面的知识技能,不仅限于编程语言的选择、概率统计基础、应用数学与算法理论,还包括...

    浅谈java实现redis的发布订阅(简单易懂)

    * 分布式架构:在分布式架构中,Redis 的发布订阅机制可以用于实现数据的实时同步。 * 博客网站:在博客网站中,使用 Redis 的发布订阅机制,可以实时推送新文章给订阅者。 五、总结 本篇文章详细介绍了 Redis 的...

    浅谈Quartz(WEB)

    6. **集群支持**:在大型分布式系统中,Quartz还支持集群部署,多个Quartz实例可以共享相同的作业和触发器,确保任务的高可用性和一致性。 7. **API与配置**:Quartz提供了一套丰富的API供开发者使用,同时也支持...

    java文章合集2

    分布式存储系统的一致性是什么?.pdf 初识Java 9模块化编程.pdf 区块链难理解?200行代码教你写一个自己的区块链!.pdf 十个问答助你了解 Redis 高可用架构及 Redis 运维.pdf 后Kubernetes时代,带你系统梳理K8S 12...

Global site tag (gtag.js) - Google Analytics