tag 标签: 主流

相关帖子
相关资源
  • 所需E币: 0
    时间: 2023-12-21 16:08
    大小: 3.22KB
    目前主流的Java分布式框架有哪些,学起来难不难?Java的框架主要有:SpringMVC、Spring、Mybatis、Dubbo、Maven、RabbitMQ、Log4j、Ehcache、Redis、Shiro等等今天就给大家讲讲关于Java主流分布式的一些解决方法,内容包括:JVM锁和MySql锁解决库存超卖问题、基于Redisson框架实现分布式锁及实战&源码深入剖析、基于ZooKeeper实现分布式锁、分布式存储系统Etcd实现分布式锁、实现分布式锁通用SDK与集成、七种分布式事务解决方案、分布式事务Seata框架深入剖析、分库分表利器一-Sharding-JDBC实战等等内容。我将分别从源码、手撸框架、实战演练等多个方面进行多维度深入讲解,让大家轻松掌握分布式各种解决方案。首先我要问大家一个问题:大型项目分布式系统核心问题你能解决多少?1、分布式锁1.你知道Etcd如何实现分布式锁的吗?2.你知道Redis实现的分布式锁存在什么问题吗?3.不同分布式锁实现方案的优缺点你清楚了吗?4.如果让你手撸实现Redis分布式锁,你可以做到吗?2、分布式事务1.你知道为什么CAP不能同时满足吗?2.你了解不同分布式事务解决方案对应什么样的应用场景么?3.你知道为什么大多数业务场景都选择了最终一致性实现方案么?4.你了解Seata框架为什么当下如此受欢迎么?3、分布式ID1.这么多种分布式ID生成方式,应该选择哪种呢?2.雪花算法底层实现原理是什么?4、分库分表1.当数据量大了之后,我们应该如何选择分库分表的解决方案?2.做分库分表,是应该垂直切分还是水平切分?带着这些问题,我们一起来展开代码实战:新增和修改我们封装一个通用方法updateItem(),该方法传入两个参数:storeName、data,storeName表示对象仓库名称,data是一个对象,包含主键和索引,在调用indexedDB所提供的put()方法,在新增操作的时候不需要传入索引的键值对,修改操作的时候在该方法中另外多传递一个主键的键值对,这样才能根据id去修改对应的某一条数据。updateItem(storeName:string,data:any){  console.log(this.db)  conststore=this.db.transaction([storeName],'readwrite').objectStore(storeName)  constrequest=store.put({   ...data,   updateTIme:newDate().getTime()  })  request.onsuccess=(event:any)=>{   console.log('数据写入成功')   console.log(event)  }  request.onerror=(event:any)=>{   console.log('数据写入失败')   console.log(event)  }}关键点是根据传入key即为主键id的值来查询某一条数据,需要使用到indexedDB提供的get()方法来实现查询操作。getItem(storeName:string,key:number|string){  conststore=this.db.transaction([storeName],'readwrite').objectStore(storeName)  constrequest=store.get(key)  request.onsuccess=(event:any)=>{   console.log('查询某一条数据成功')   console.log(event.target.result)  }  request.onerror=(event:any)=>{   console.log('查询某一条数据失败')   console.log(event)  }}为了更好的获取indexedD事务中的返回结果,我们使用promise来包装一下上一小节indexedDB.ts中定义的几个方法:openStore、updateItem、deleteItem、getList、getItem。下面代码片段为getList() //查询所有数据 getList(storeName:string){  conststore=this.db.transaction(storeName).objectStore(storeName)  constrequest=store.getAll()  returnnewPromise((resolve,reject)=>{   request.onsuccess=(event:any)=>{    console.log('查询所有数据成功')    console.log(event.target.result)    resolve(event.target.result)   }   request.onerror=(event:any)=>{    console.log('查询所有数据失败')    console.log(event)    reject(event)   }  }) }在第一步中,首先使用Typescript的interface为store中的所有state声明类型,然后将interface放置在InjectionKeyd的泛型类型中,代码片段如下://src/store/index.tsimport{createStore,Store}from'vuex'import{InjectionKey}from'vue'//为storestate声明类型exportinterfaceAllStateTypes{ count:number, locale:any, userStatus:Number}//定义injectionkeyexportconstkey:InjectionKey<Store<AllStateTypes>>=Symbol('storeKey')exportconststore=createStore<AllStateTypes>({ //...})通过环境变量区分server.js中的一些代码片段,因为有些代码需要运行在开发环境,而有些代码需要运行在生产环境。本小节在server.js中一共对3个地方进行了环境区分,代码片段如下://server.jsif(!isProd){ //1.读取index.html template=fs.readFileSync(  path.resolve(__dirname,'index.html'),  'utf-8' ) //2.应用ViteHTML转换。这将会注入ViteHMR客户端, //  同时也会从Vite插件应用HTML转换。 //  例如:@vitejs/plugin-react-refresh中的globalpreambles template=awaitvite.transformIndexHtml(url,template) //3.加载服务器入口。vite.ssrLoadModule将自动转换 //  你的ESM源码使之可以在Node.js中运行!无需打包 //  并提供类似HMR的根据情况随时失效。 render=(awaitvite.ssrLoadModule('/src/entry-server.ts')).render}else{ //1.读取index.html template=fs.readFileSync(  path.resolve(__dirname,'dist/client/index.html'),  'utf-8' ) //3.加载服务器入口 render=require('./dist/server/entry-server.ts').render}fetchElephant()接口中有两个await,分别依次执行连接数据库和查询数据的操作,我们接下来在home.vue中引入这个Mock接口,然后调用,代码片段如下所示://home.vue//Mock接口functiongetElephant(){ fetchElephant().then(res=>{  console.log('Mock接口',res) })}getElephant()通过emit触发父组件上的事件,将language传递给父组件,并赋值给父组件中的全局组件<ElConfigProvider/>上的locale属性,同样也赋值给useI18n()实例上的locale属性,这样就可以实现在子组件headearCommon.vue中进行国际化切换操作并作用到父组件App.vue中
  • 所需E币: 0
    时间: 2023-10-27 18:00
    大小: 3.56KB
    上传者: huangyasir1990
    一、什么是分布式系统?要理解分布式系统,主要需要明白一下2个方面:1、分布式系统一定是由多个节点组成的系统。其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。2、这些连通的节点上部署了我们的节点,并且相互的操作会有协同。分布式系统对于用户而言,他们面对的就是一个服务器,提供用户需要的服务而已。而实际上这些服务是通过背后的众多服务器组成的一个分布式系统。因此分布式系统看起来像是一个超级计算机一样。Java筑基(基础):Tomcat+Mysql+设计模式+并发编程+JVM+Netty开源框架(SSM框架):Spring+SpringMVC+Mybatis微服务架构:Dubbo、SpringBoot、SprinGCloud、Docker分布式:分布式限流+分布式缓存+分布式通讯(限流:Nignx+Zookeeper/缓存:Redis+MongoDB+Memcached/通讯:RabbitMQ+RocketMQ+Kafka)性能优化:Mysql优化+Java性能调优+JVM调优+Tomcat调二、分布式对象技术有三大流派目前国际上,分布式对象技术有三大流派——COBRA、COM/DCOM和Java。CORBA技术是最早出现的,1991年OMG颁布了COBRA1.0标准,在当时来说做得非常漂亮;再有就是Microsoft的COM系列,从最初的COM发展成现在的DCOM,形成了Microsoft一套分布式对象的计算平台;而Sun公司的Java平台,在其最早推出的时候,只提供了远程的方法调用,在当时并不能被称为分布式对象计算,只是属于网络计算里的一种,接着推出的JavaBean,也还不足以和上述两大流派抗衡,而其目前的版本叫J2EE,推出了EJB,除了语言外还有组件的标准以及组件之间协同工作通讯的框架。于是,也就形成了目前的三大流派。Motan是新浪微博开源的一个Java框架。它诞生的比较晚,起于2013年,2016年5月开源。Motan在微博平台中已经广泛应用,每天为数百个服务完成近千亿次的调用。rpcx是Go语言生态圈的Dubbo,比Dubbo更轻量,实现了Dubbo的许多特性,借助于Go语言优秀的并发特性和简洁语法,可以使用较少的代码实现分布式的RPC服务。gRPC是Google开发的高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(ProtocolBuffers)序列化协议开发,且支持众多开发语言。本身它不是分布式的,所以要实现上面的框架的功能需要进一步的开发。thrift是Apache的一个跨语言的高性能的服务框架,也得到了广泛的应用。首先明确一点:分布式并不是某个技术的概称,而是一个互联网服务系统架构思想。我们一般称之为分布式架构。那么分布式到底是什么一个概念:分布式诞生的初衷是为了在多业务场景下,保证五个特点:高性能,高并发,高可用,可伸缩,可维护。它的具体实现——分布式系统,则是由一组服务节点,共同协调工作组成。它们之间通过网络进行通信。可以说它的诞生为单体架构解决了很大一部分问题,满足了互联网对大数据存储,高并发,快响应的要求,采用了”分而治之“的思想。三、Java工程师必须学习分布式架构技术吗?不论是从公司发展的需要、还是从个人能力提升考虑,分布式架构技术对于每位Java工程师来说,可以说是一项必备技能了!每一位想要在职业发展之路上更进一步的Java从业者,都需要牢牢掌握分布式架构思想。在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的缓存策略,那么到时候重构起来将会是一个噩梦。本文主要是分享了5个常用的Java分布式缓存框架,这些缓存框架支持多台服务器的缓存读写功能,可以让你的缓存系统更容易扩展。四、分布式架构的技术要点:RPC的设计架构与思想,RPC架构完整调用流程,自定义RPC相应因素详情等;Netty三大组件,ByteBuffer之工作原理、应用模式、分配与释放机制、源码剖析等;RPC工程设计与整体结构,完成RPC服务注册与发现功能;ZK核心组件剖析,ZK工作流程剖析,网络通信组件、会话接收器、并发处理器等;Dubbo源码结构、整体设计及层次结构与作用,SPI机制,Dubbo服务注册发现剖析,Dubbo服务高可用,Dubbo服务治理之调用过程、服务降级与限流剖析,网络通信协议详解。五、分布式锁的解决方式1.首先明确一点,有人可能会问是否可以考虑采用ReentrantLock来实现,但是实际上去实现的时候是有问题的,ReentrantLock的lock和unlock要求必须是在同一线程进行,而分布式应用中,lock和unlock是两次不相关的请求,因此肯定不是同一线程,因此导致无法使用ReentrantLock。2.基于数据库表做乐观锁,用于分布式锁。3.使用memcached的add()方法,用于分布式锁。4.使用memcached的cas()方法,用于分布式锁。(不常用) 5.使用redis的setnx()、expire()方法,用于分布式锁。6.使用redis的setnx()、get()、getset()方法,用于分布式锁。7.使用redis的watch、multi、exec命令,用于分布式锁。(不常用) 8.使用zookeeper,用于分布式锁。(不常用) 六、大型项目分布式系统核心问题你能解决多少?分布式锁1.你知道Etcd如何实现分布式锁的吗?2.你知道Redis实现的分布式锁存在什么问题吗?3.不同分布式锁实现方案的优缺点你清楚了吗?4.如果让你手撸实现Redis分布式锁,你可以做到吗?分布式事务1.你知道为什么CAP不能同时满足吗?2.你了解不同分布式事务解决方案对应什么样的应用场景么?3.你知道为什么大多数业务场景都选择了最终一致性实现方案么?4.你了解Seata框架为什么当下如此受欢迎么?分布式ID1.这么多种分布式ID生成方式,应该选择哪种呢?2.雪花算法底层实现原理是什么?分库分表1.当数据量大了之后,我们应该如何选择分库分表的解决方案?2.做分库分表,是应该垂直切分还是水平切分?分布式会话
  • 所需E币: 5
    时间: 2023-1-10 15:51
    大小: 286.74KB
    上传者: 张红川
    车联网之主流车辆定位理论与算法
  • 所需E币: 0
    时间: 2022-9-26 23:11
    大小: 71.63KB
    上传者: czd886
    住宅小区及家庭智能化主流技术及其应用探讨
  • 所需E币: 0
    时间: 2022-3-15 02:21
    大小: 19.65KB
    上传者: samewell
    S8261和DW01-8205A主流锂电池保护板原理图说明.pdf
  • 所需E币: 0
    时间: 2021-4-23 00:23
    大小: 18.93KB
    上传者: Argent
    音响设备在许多娱乐场所是必备的电子产品,好的音响设备不仅在硬件电路方面要求严苛,与时俱进,增加些更优的参考设计才能满足市场需求。本人搜集了些有关音响设计的参考资料,欢迎下载。
  • 所需E币: 0
    时间: 2021-3-22 17:43
    大小: 16.62KB
    上传者: Goodluck2020
    世界主流GPS芯片介绍.zip
  • 所需E币: 0
    时间: 2021-3-17 17:33
    大小: 140.38KB
    上传者: czdian2005
    中国北斗卫星导航BDS能否取代GPS成为GNSS主流导航系统
  • 所需E币: 1
    时间: 2021-3-14 11:41
    大小: 71.16KB
    上传者: czd886
    两款主流定点DSP芯片的性能比较
  • 所需E币: 0
    时间: 2020-12-18 23:06
    大小: 20.55KB
    上传者: samewell
    目前市场主流的无线充电优缺点介绍.
  • 所需E币: 0
    时间: 2020-12-19 21:47
    大小: 127.33KB
    上传者: samewell
    涵盖行业主流型号的WiFi模块型号目录
  • 所需E币: 0
    时间: 2020-12-13 18:54
    大小: 36KB
    上传者: xiaosh728
    目前市场主流的无线充电优缺点介绍
  • 所需E币: 1
    时间: 2020-11-20 20:57
    大小: 3.24KB
    上传者: symic
    ALTERA常用主流芯片和配置芯片介绍
  • 所需E币: 0
    时间: 2020-11-16 17:03
    大小: 157.5KB
    上传者: stanleylo2001
    涵盖行业主流型号的WiFi模块型号目录[摘要]WiFi模块型号目录,涵盖行业主流型号,智能化产品集成时可以丰富参考
  • 所需E币: 0
    时间: 2020-9-8 18:59
    大小: 16.55KB
    上传者: Goodluck2020
    世界主流GPS芯片介绍
  • 所需E币: 0
    时间: 2020-9-9 11:53
    大小: 279.7KB
    几种主流433M无线模块对比
  • 所需E币: 0
    时间: 2020-8-13 15:26
    大小: 144.39KB
    上传者: Goodluck2020
    中国北斗卫星导航BDS能否取代GPS成为GNSS主流导航系统.pdf
  • 所需E币: 1
    时间: 2020-6-17 18:07
    大小: 18.93KB
    上传者: Argent
    智能时代,电子产品丰富多彩,设计方案多多。手头有些硬件、软件方面的设计资料,包括成熟的方案,分享出来仅供大家参考,欢迎下载。
  • 所需E币: 1
    时间: 2020-4-27 13:54
    大小: 9.41MB
    上传者: eeNick
    在每个项目的电源方案选型时,往往需要在诸多牵制条件下做出综合的评估考虑,来选择最合适的方案。面对数百上千个的电源ic型号,许多工程师在选型时感觉无从下手。根据选用习惯选出了28款引脚功能兼容的同步整流dcdc芯片,希望能对工程师的选型有所帮助。资料包括兼容的芯片原理图,测试报告,纹波情况等。
  • 所需E币: 3
    时间: 2020-3-12 12:30
    大小: 650.5KB
    上传者: 十次方
    数据咨询公司IDC近日发布了《IDCFutureScape:全球云计算2020年预测——中国启示》,报告中介绍了全球云计算2020年的十项预测以及中国启示,并提出了未来5年云计算技术买家对于技术发展路线所需要考虑的行动建议。