分布式开发

深入解读微服务架构下分布式事务解决方案

喜欢而已 提交于 2019-11-28 15:08:33
原文引用 大专栏 https://www.dazhuanlan.com/2019/08/26/5d6350a8eda02/ 1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务,这样可以降低开发难度、增强扩展性、便于敏捷开发。当前被越来越多的开发者推崇,很多互联网行业巨头、开源社区等都开始了微服务的讨论和实践。 Hailo有160个不同服务构成,NetFlix有大约600个服务。国内方面,阿里巴巴、腾讯、360、京东、58同城等很多互联网公司都进行了微服务化实践。 当前微服务的开发框架也非常多,比较著名的有Dubbo、SpringCloud、thrift 、grpc等。 2 微服务落地存在的问题 虽然微服务现在如火如荼,但对其实践其实仍处于探索阶段。很多中小型互联网公司,鉴于经验、技术实力等问题,微服务落地比较困难。如著名架构师Chris Richardson所言,目前存在的主要困难有如下几方面: 1)单体应用拆分为分布式系统后,进程间的通讯机制和故障处理措施变的更加复杂。 2)系统微服务化后,一个看似简单的功能,内部可能需要调用多个服务并操作多个数据库实现,服务调用的分布式事务问题变的非常突出。 3)微服务数量众多,其测试、部署、监控等都变的更加困难。 随着RPC框架的成熟,第一个问题已经逐渐得到解决。例如dubbo可以支持多种通讯协议

分布式锁实现

廉价感情. 提交于 2019-11-28 15:03:18
在微服务开发中常用的分布式有redis,zookeeper实现,下面就基于这两种分布式锁实现做一个总结: 1,zookeeper的分布式锁实现 基于ZooKeeper分布式锁的流程 在zookeeper指定节点(locks)下创建临时顺序节点node_n 获取locks下所有子节点children 对子节点按节点自增序号从小到大排序 判断本节点是不是第一个子节点,若是,则获取锁;若不是,则监听比该节点小的那个节点的删除事件 若监听事件生效,则回到第二步重新进行判断,直到获取到锁 具体实现 下面就具体使用java和zookeeper实现分布式锁,操作zookeeper使用的是apache提供的zookeeper的包。 通过实现Watch接口,实现process(WatchedEvent event)方法来实施监控,使CountDownLatch来完成监控, 在等待锁的时候使用CountDownLatch来计数,等到后进行countDown,停止等待,继续运行。 以下整体流程基本与上述描述流程一致,只是在监听的时候使用的是CountDownLatch来监听前一个节点。 (1) pom.xml <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3

一些值得收藏的开源框架

只愿长相守 提交于 2019-11-28 14:54:48
阅读本文大概需要 7.2 分钟。 来源:segmentfault.com/a/1190000017346799 1. 分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案。 此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。 地址:https://github.com/spring-cloud-incubator/spring-cloud-alibaba 2. 设计语言 & 前端框架 Ant Design Ant Design 是蚂蚁金服开发和正在使用的一套企业级的前端设计语言和基于 React 的前端框架实现。 它的特性:企业级金融产品的交互语言和视觉体系;丰富实用的 React UI 组件;基于 React 的组件化开发模式;背靠 npm 生态圈;基于 webpack 的调试构建方案,支持 ES6。 地址:https://github.com/ant-design/ant-design 3. JDBC

分布式架构的一致性维持

痞子三分冷 提交于 2019-11-28 14:49:28
在实际开发中,我们的大型项目都需要设计分布式架构,同时对高并发的场景进行管理,而在高并发环境中,我们通过使用redis集群来管理和控制该场景,同时,我们需要保证数据库与缓存的双写一致性,同时因为在常见的高并发场景中,我们对于微服务的控制并不能很好的应对该场景,如spring cloud和docker的结合并不能很好的解决该问题,因此我们需要相应的算法和协议来维持分布式架构的一致性。 如图所示,我们在分布式架构中,通常对于服务器的管理,我们通过观察是否存在特洛伊问题来决定使用哪种方法来解决分布式架构一致性。 在非特洛伊问题中,我们使用paxos和raft协议来维持分布式架构一致性,例如,在使用spring+spring MVC+Mybatis的开发中,我们经常使用@RequestBody 注解来返回一个json格式的网络状态,在常用的消息队列中,例如RabbitMQ,我们使用消息中间件的特性来进行程序的解耦削峰异步,通过消息中间件的作用,我们使传统RPC的方式变为了分布式,从而解决了系统的耦合性,但是对于大型业务场景,消息中间件会产生消息丢失,消息转发失败等系统问题,所以我们在设计架构的时候,通过会使用消息队列锁定算法来维持消息的稳定性,但对于高并发场景一味的使用synchronized或者乐观锁是不现实的,所以我们会使用分布式锁,自旋锁等高级锁来保持高并发场景的读写一致性。

分布式架构浅谈

╄→尐↘猪︶ㄣ 提交于 2019-11-28 10:56:48
http://homeway.me/ 0x01.大型网站演化 简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。 集群主要分为:高可用集群(High Availability Cluster),负载均衡集群(Load Balance Cluster,nginx即可实现),科学计算集群(High Performance Computing Cluster)。 分布式是指将不同的业务分布在不同的地方;而集群指的是将几台服务器集中在一起,实现同一业务。分布式中的每一个节点,都可以做集群。 而集群并不一定就是分布式的。 之前在网上看到一篇关于大型网站演化的博客。 http://www.cnblogs.com/leefreeman/p/3993449.html 每个大型网站都会有不同的架构模式,而架构内容也就是在处理均衡负载,缓存,数据库,文件系统等,只是在不同的环境下,不同的条件下,架构的模型不一样,目的旨在提高网站的性能。 最初的架构只有应用程序,数据库,文件服务。 到后来,分布式服务、集群架设。 0x02.关于均衡负载方案 在上一篇, 《Nginx反向代理实现均衡负载》 讨论过过的nginx现实均衡负载方案,这里选择另一种HAProxy+Keepalived双机高可用均衡负载方案。 HAProxy是免费

架构设计(1)-谈谈架构

耗尽温柔 提交于 2019-11-28 08:12:20
1、什么是架构和架构本质 在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。 此君说的架构和彼君理解的架构未必是一回事。 LInux有架构,MySQL有架构,JVM也有架构,使用Java开发、MySQL存储、跑在Linux上的业务系统也有架构,应该关注哪一个?想要清楚以上问题需要梳理几个有关系又相似的概念:系统与子系统、模块与组建、框架与架构: 一、系统与子系统 系统:泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能独立完成的工作能力的群体。 子系统:也是由一群关联的个体组成的系统,多半是在更大的系统中的一部分。 二、模块与组件 都是系统的组成部分,从不同角度拆分系统而已。模块是逻辑单元,组件是物理单元。 模块就是从逻辑上将系统分解, 即分而治之, 将复杂问题简单化。模块的粒度可大可小, 可以是系统,几个子系统、某个服务,函数, 类,方法、 功能块等等。 三、框架与架构 框架是组件的规范,例如:MVC、MVP、MVVM等,是提供基础功能的产品,例如:Ruby on Rails、Spring、Laravel、Django等。 框架是规范,架构是结构。 我在这重新定义架构:软件架构指软件系统的顶层结构。 架构是经过系统性地思考, 权衡利弊之后在现有资源约束下的最合理决策, 最终明确的系统骨架: 包括子系统, 模块, 组件. 以及他们之间协作关系,

分布式监控系统

痴心易碎 提交于 2019-11-28 04:23:56
在一个大型分布式系统中(一个完备的云计算系统也是一个巨无霸的分布式系统) 任何一个client的请求调用,会在分布式系统中产生上百次的调用(各种缓存、中间件、数据库、微服务),一旦一个请求异常;那具体到哪个系统服务异常就变得很重要的;【在分布式监控系统比较低级时,比如只能监控某一个微服务的运行情况:这时就需要一些人力来保证整个链路的问题的及时发现,一个人维护100个系统的稳定性,知道哪个系统是否异常,通过这种方式来第一时间知晓哪个系统出现问题】。如果开发一个完善的分布式系统,可以清晰、直观的看到任何一个请求在分布式系统里面任何一个调用的详细情况,就可以在第一时间进行发现问题,这样效率很高! 那怎么样设计和开发一个分布式跟踪监控系统呢?下面我们就慢慢说来: 1 分布式调用跟踪和调用链的介绍 文章基于Goolge 的分布式调用系统Dapper 的理解来讲的,如果有不正确的请指正: 分布式调用跟踪 :就是前端的一次请求产生的分布式调用汇总起来分析;同一次前端请求产生的网络调用就组成了调用链 调用链:调用链一般用树壮结构来展示的,一个调用链的入口开始,根据调用的时间顺序,依次用展示出来,并显示每次调用的状态和耗费的时间latency 调用链的一个重要的信息就是:访问各个节点的先后顺序、节点的状态是否正常、节点的latency 2. 调用链实现原理简介 因为同一时间中间件的调用有很多

分布式版本控制系统——git

谁都会走 提交于 2019-11-27 22:04:31
文章目录 一、git的简介 1.git的功能特性 二、git的常用命令使用 1.git的安装 2.本地版本库的搭建和文件的上传 3.暂存区和工作区的状态区别 4.版本的回退和升级 一、git的简介 Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 Git最初 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 1.git的功能特性 集中式版本控制系统最大的毛病就是必须联网才能工作。 那分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。 和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。 二、git的常用命令使用 1.git的安装 因为git本就是为了管理linux而诞生的

《分布式设计模式—分布式事务》

我的未来我决定 提交于 2019-11-27 21:39:59
作者:h-松 链接:https://juejin.im/post/5d5569466fb9a06af629a9ab 分布式事务的挑战 在多个服务、数据库和消息代理之间维持数据的一致性的传统方式是采用分布式事务。分布式的事实标注是XA、XA采用了两阶段提交老保证事务中的所有参与方同时完成提交,或者失败时同时回滚。应用程序的整个技术栈需要满足XA标准。 许多新技术,包括NoSQLshujk ,liru MongoDB和Cassandra并不支持XA标准的分布式事务。同样,一些流行的消息代理如RabbitMQ和Apache Kafka也不支持分布式事务。如果你坚持在微服务中使用分布式事务,那么不得不放弃使用这些流行的数据库或消息代理。 saga 将跨越多个服务的每个业务事务作为一个SAGA实现。SAGA是一系列本地事务。每个本地事务更新数据库并发布消息或事件以触发SAGA中的下一个本地事务。如果本地事务由于违反业务规则而失败,那么SAGA将执行一系列补偿事务,以撤消前面的本地事务所做的更改。 有两种协调方式: 协同-每个本地事务发布触发其他服务中本地事务的域事件 编排-编排器(对象)告诉参与者要执行的本地事务 协同式 编排 saga这种模式有以下好处: 它使应用程序能够跨多个服务维护数据一致性,而无需使用分布式事务 此解决方案有以下缺点: 编程模型更复杂。例如,开发人员必须设计补偿事务

Python 一.开发环境搭建(分布式爬虫打造搜索引擎)

こ雲淡風輕ζ 提交于 2019-11-27 16:41:44
pycharm的windows安装和使用 mysql和navicat的安装和使用 vitualenv和vitualenvwrapper的安装和配置 1.pycharm的windows安装和使用 进入pycharm官网 https://www.jetbrains.com/pycharm/ 下载专业版,一定要下载专业版!!! 社区版功能有限。 64位的选择64位,不知道电脑是什么位数的,百度一下,你就知道 要激活码的,可以去官网上买,也可以百度去找,建议你去买,这个页面就是话的,看你具体用哪种方法了 具体方法就自己去百度了 到期时间! 安装python, https://www.python.org/ 查看是否安装成功 成功! 配置解释器 2.mysql和navicat的安装和使用 安装MySQL, https://www.mysql.com/ , 安装环境:Window10,64位 数据库:MySQL8.0.12 64位 安装方式:压缩包安装 安装步骤: 1、下载安装包 从MySQL官网上下载最新的安装包: https://dev.mysql.com/downloads/file/?id=479669 直接点击最下方的“No thanks, just start my download.”即可开始下载 下载成功后的压缩包 配置环境变量 path : bin的目录(必须配置)