分布式架构

资料搜集-JAVA系统的梳理知识12-Dubbo

こ雲淡風輕ζ 提交于 2020-01-25 03:18:54
本文是作者根据官方文档以及自己平时的使用情况,对 Dubbo 所做的一个总结。如果不懂 Dubbo 的使用的话,可以参考我的这篇文章[《超详细,新手都能看懂 !使用SpringBoot+Dubbo 搭建一个简单的分布式服务》](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247484706&idx=1&sn=d413fc17023482f67ca17cb6756b9ff8&chksm=fd985343caefda555969568fdf4734536e0a1745f9de337d434a7dbd04e893bd2d75f3641aab&token=1902169190&lang=zh_CN#rd) Dubbo 官网:http://dubbo.apache.org/zh-cn/index.html Dubbo 中文文档: http://dubbo.apache.org/zh-cn/index.html <!-- MarkdownTOC --> - [一 重要的概念](#一-重要的概念) - [1.1 什么是 Dubbo?](#11-什么是-dubbo) - [1.2 什么是 RPC?RPC原理是什么?](#12-什么是-rpcrpc原理是什么) - [1.3 为什么要用 Dubbo?](#13-为什么要用-dubbo)

主流分布式文件系统对比:区块链分布式技术引发云存储革命?HDFS,GFS,GPFS,FusionStorage,IPFS

依然范特西╮ 提交于 2020-01-24 05:57:32
https://blog.csdn.net/weixin_45494421/article/details/98760782 概要:常见的分布式文件系统有GFS、HDFS等,也有新兴的基于区块链IPFS/Filecoin等。有的广泛应用,有的开始挑战,有的是闭源,有的开源。在不同的领域和不同的计算机发展阶段,它们都对数据存储起到了各自的作用。那么这些分布式文件系统都有什么优缺点?我们应该怎样选择适合自己的解决方案? 一、HDFS:被雅虎开源的分布式文件系统 Hadoop分布式文件系统(HDFS),是一个分布式、可扩展的Hadoop框架,具有高容错、低成本部署优势。HDFS提供对应用程序数据的高吞吐量访问,适用于具有大型数据集的应用程序。HDFS最初是作为Apache Nutch网络搜索引擎项目的基础设施而构建的,现在是Apache Hadoop子项目。 HDFS如何工作?HDFS支持计算节点之间的数据快速传输,文件系统多次复制或复制每个数据,并将副本分发到各个节点,将至少一个副本放在与其他服务器机架不同的服务器上。因此,崩溃的节点上的数据可以在群集中的其他位置找到。这可确保在恢复数据时继续处理。这使得HDFS高容错性。简单来说,HDFS将文件拆分为块,并将它们分布在集群中的节点上。 架构分析:HDFS采用的是主/从架构(master/slave )

分布式和集群有区别吗?

冷暖自知 提交于 2020-01-24 00:01:31
** 分布式和集群有区别吗? ** 概念理解: 分布式:一个业务分拆多个子业务,部署在不同的服务器上 集群:同一个业务,部署在多个服务器上。 怎么理解:网上很好的例子: 小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关系是集群。 为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群。 单机结构 我想大家最最最熟悉的就是单机结构,一个系统业务量很小的时候所有的代码都放在一个项目中就好了,然后这个项目部署在一台服务器上就好了。整个项目所有的服务都由这台服务器提供。这就是单机结构。 那么,单机结构有啥缺点呢?我想缺点是显而易见的,单机的处理能力毕竟是有限的,当你的业务增长到一定程度的时候,单机的硬件资源将无法满足你的业务需求。此时便出现了集群模式,往下接着看。 集群结构 集群模式在程序猿界有各种装逼解释,有的让你根本无法理解,其实就是一个很简单的玩意儿,且听我一一道来。 单机处理到达瓶颈的时候,你就把单机复制几份,这样就构成了一个“集群”。集群中每台服务器就叫做这个集群的一个“节点”,所有节点构成了一个集群。每个节点都提供相同的服务,那么这样系统的处理能力就相当于提升了好几倍

阿里巴巴的Java开源项目

六月ゝ 毕业季﹏ 提交于 2020-01-22 21:15:39
阿里巴巴的Java开源项目 前言 阿里巴巴的超神Java开源项目有不少,今天我们来总结一点吧! GO GO GO ! 分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。 地址: https://github.com/spring-cloud-incubator/spring-cloud-alibaba JDBC 连接池、监控组件 Druid Druid是一个 JDBC 组件。 监控数据库访问性能。 提供了一个高效、功能强大、可扩展性好的数据库连接池。 数据库密码加密。 SQL执行日志。 地址: https://github.com/alibaba/druid Java 的 JSON 处理器 fastjson fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。 主要特点:快速FAST

springboot集成分布式事务seata-1.0.0的AT模式(nacos作为注册中心以及配置中心)

你离开我真会死。 提交于 2020-01-22 02:12:39
Seata 是什么? Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。在 Seata 开源之前,Seata 对应的内部版本在阿里经济体内部一直扮演着分布式一致性中间件的角色,帮助经济体平稳的度过历年的双11,对各BU业务进行了有力的支撑。经过多年沉淀与积累,商业化产品先后在阿里云、金融云进行售卖。2019.1 为了打造更加完善的技术生态和普惠技术成果,Seata 正式宣布对外开源,未来 Seata 将以社区共建的形式帮助其技术更加可靠与完备。 seata的官方文档: http://seata.io/zh-cn/index.html seata github地址: https://github.com/seata/seata 设计初衷 对业务无侵入:即减少技术架构上的微服务化所带来的分布式事务问题对业务的侵入 高性能:减少分布式事务解决方案所带来的性能消耗 发展远景 架构 TC - 事务协调者 维护全局和分支事务的状态,驱动全局事务提交或回滚。 TM - 事务管理器 定义全局事务的范围:开始全局事务、提交或回滚全局事务。 RM - 资源管理器 管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。 微服务框架支持 目前已支持 Dubbo、Spring Cloud、Sofa-RPC

Pytorch调研笔记

随声附和 提交于 2020-01-21 16:07:51
Pytorch 训练调研 首先我们简单说明一下,这么多深度学习框架中,为什么选择PyTorrch呢? 因为PyTorch是当前难得的简洁优雅且高效快速的框架。在笔者眼里,PyTorch达到目前深度学习框架的最高水平。当前开源的框架中,没有哪一个框架能够在灵活性、易用性、速度这三个方面有两个能同时超过PyTorch。下面是许多研究人员选择PyTorch的原因。 1、简洁:PyTorch的设计追求最少的封装,尽量避免重复造轮子。不像TensorFlow中充斥着session、graph、operation、name_scope、variable、tensor、layer等全新的概念,PyTorch的设计遵循tensor→variable(autograd)→nn.Module 三个由低到高的抽象层次,分别代表高维数组(张量)、自动求导(变量)和神经网络(层/模块),而且这三个抽象之间联系紧密,可以同时进行修改和操作。 简洁的设计带来的另外一个好处就是代码易于理解。PyTorch的源码只有TensorFlow的十分之一左右,更少的抽象、更直观的设计使得PyTorch的源码十分易于阅读。 2、速度:PyTorch的灵活性不以速度为代价,在许多评测中,PyTorch的速度表现胜过TensorFlow和Keras等框架 。框架的运行速度和程序员的编码水平有极大关系,但同样的算法

本地缓存google.guava及分布式缓存redis 随笔

人盡茶涼 提交于 2020-01-21 12:34:36
近期项目用到了缓存,我选用的是主流的google.guava作本地缓存,redis作分布式 缓存,先说说我对本地缓存和分布式缓存的理解吧,可能不太成熟的地方,大家指出,一起 学习.本地缓存的特点是速度快,不会受到网络阻塞的干扰,但由于是放在本地内存中,所 以容量较小,不能项目间共享比IO效率高比redis,且不会持久化.所以拿来存储一些数据 很少,但又经常执行的,甚至只要启动程序就会访问的数据. 我们可以自定义初始化本地缓存的方法,指定存储量和缓存淘汰机制. /** * 初始化本地缓存 */@PostConstructpublic void init() { commonCache = CacheBuilder.newBuilder() //设置缓存的 .initialCapacity(10) //设置缓存中最大可以存储的key数量,超过就会按照LRU的策略进行清除 .maximumSize(100).expireAfterWrite(60, TimeUnit.SECONDS).build();}几种常见的内存淘汰机制:LRU,LFULFU:根据数据的历史访问频率来淘汰数据LRU:根据访问时间的前后来淘汰数据,优先保留近期访问的数据guava是极度轻量级的cache,只具备基本的增删改查和刷新数据,淘汰数据等功能,但能满足大部分需求.redis作为常用的分布式缓存

存储系统科普——分布式存储系统解决方案介绍

这一生的挚爱 提交于 2020-01-21 07:45:05
简介 该篇blog只是存储系列科普文章中的第四篇,所有文章请参考: 博客所有文章 在工程架构领域里,存储是一个非常重要的方向,这个方向从底至上,我分成了如下几个层次来介绍: 硬件层:讲解磁盘,SSD,SAS, NAS, RAID等硬件层的基本原理,以及其为操作系统提供的存储界面; 操作系统层:即文件系统,操作系统如何将各个硬件管理并对上提供更高层次接口; 单机引擎层:常见存储系统对应单机引擎原理大概介绍,利用文件系统接口提供更高级别的存储系统接口; 分布式层:如何将多个单机引擎组合成一个分布式存储系统; 查询层:用户典型的查询语义表达以及解析; 分布式系统主要分成存储模型和计算模型两类。本文主要描述的是存储模型的介绍。其中计算模型的分布式系统原理跟存储模型类似,只是会根据自身计算特点加一些特殊调度逻辑进去。 分布式层 分布式系统简介 任何一个分布式系统都需要考虑如下5个问题: 数据如何分布 就像把鸡蛋放进篮子里面。一般来说篮子大小是一样的,当然也有的系统支持不一样大小的篮子。鸡蛋大小也不一样,有很多系统就把鸡蛋给"切割"成一样大小然后再放。并且有的鸡蛋表示对篮子有要求,比如对机房/机架位的要求。 衡量一个数据分布算法好不好就看他是否分得足够均匀,使得所有机器的负载方差足够小。 如何容灾 分布式系统一个很重要的定位就是要让程序自动来管机器,尽量减少人工参与

spring cloud分布式微服务:springboot开启声明式

偶尔善良 提交于 2020-01-21 05:31:52
springboot开启事务很简单,只需要一个注解@Transactional 就可以了。因为在springboot中已经默认对jpa、jdbc、mybatis开启了事事务,引入它们依赖的时候,事物就默认开启。了解springcloud架构可以加求求:三五三六二四七二五九,当然,如果你需要用其他的orm,比如beatlsql,就需要自己配置相关的事物管理器。 准备阶段 这篇文章基于xml的来实现,并开启声明式事务。 环境依赖 在pom文件中引入mybatis启动依赖: < dependency > < groupId > org . mybatis . spring . boot < / groupId > < artifactId > mybatis - spring - boot - starter < / artifactId > < version > 1.3 .0 < / version > < / dependency > 引入MySQL 依赖 < dependency > < groupId > mysql < / groupId > < artifactId > mysql - connector - java < / artifactId > < scope > runtime < / scope > < / dependency > < dependency >

Dubbo(六)------为什么要用Dubbo

社会主义新天地 提交于 2020-01-21 02:46:09
众所周知,Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架。 从这段话中,我们提取 关键字:分布式、RPC 一、为什么需要使用分布式系统 1、单机系统 项目工程比较简单,可能全部代码就在一个工程中, 或者按照模块来划分工程结构。 将项目放入tomcat就可以直接运行。用户流量增多,那么就多部署几台tomcat服务器,外层做负载均衡,实现分流。如果一台服务器挂了,系统还可以正常使用,相对实现“高可用”。 弊端: 实现项目结构比较单一的项目,如何项目开发团队上10人,系统代码具有100万行代码,几十人共同维护一个项目,涉及冲突会让人崩溃。并且项目新模块A需要上线,需要测试全部模块才可以保证系统正常,很容易造成新模块影响原有功能。每次发布需要全部代码重新发布,费事又费力。 2、分布式系统 分布式系统:庞大系统分而治之。 在我的理解中,分布式系统就是一个不断拆分的过程。把一个大整系统分划为多个小的子系统。众多的子系统合在一起便过程整个系统。 一个大的系统拆分为很多小的系统,甚至很多小的服务,然后几个人组成一个小组就专门维护其中一个小系统,或者每个人维护一个小服务。 简单来说,就是分而治之,这样每个人可以专注维护自己的代码。 不同的小系统自己开发、测试和上线,都不会跟别人耦合在一起,可以自己独立进行,非常的方便,大大简化了大规模系统的开发成本。 当然使用分布式