SAGA

前端三大主流框架 React、Vue、Angular的对比

那年仲夏 提交于 2020-08-10 02:11:42
一、Angular,它两个版本都是强主张的,如果你用它,必须接受以下东西: 必须使用它的模块机制 必须使用它的依赖注入 必须使用它的特殊形式定义组件(这一点每个视图框架都有,难以避免) 所以Angular是带有比较强的排它性的,如果你的应用不是从头开始,而是要不断考虑是否跟其他东西集成,这些主张会带来一些困扰。 二、React 它也有一定程度的主张,它的主张主要是函数式编程的理念,比如说,你需要知道什么是副作用,什么是纯函数,如何隔离副作用。它的侵入性看似没有Angular那么强,主要因为它是软性侵入。你当然可以只用React的视图层,但几乎没有人这么用,为什么呢,因为你用了它,就会觉得其他东西都很别扭,于是你要引入Flux,Redux,Mobx之中的一个,于是你除了Redux,还要看saga,于是你要纠结业务开发过程中每个东西有没有副作用,纯不纯,甚至你连这个都可能不能忍: const getData = () => { // 如果不存在,就在缓存中创建一个并返回 // 如果存在,就从缓存中拿 } 因为你要纠结它有外部依赖,同样是不加参数调用,连续两次的结果是不一样的,于是不纯。为什么我一直不认同在中后台项目中使用React,原因就在这里,我反对的是整个业务应用的函数式倾向,很多人都是看到有很多好用的React组件,就会倾向于把它引入,然后

如何选择分布式事务解决方案? 转

一世执手 提交于 2020-08-08 06:25:11
   转自: 如何选择分布式事务解决方案? 导读   分布式事务中涉及的参与者分布在异步网络中,参与者通过网络通信来达到分布式一致性,网络通信不可避免出现失败、超时的情况,因此分布式事务的实现比本地事务面临更多的困难。本文归纳总结五种分布式事务解决方案,并剖析其特点。较长,同学们可收藏后再看。 概述   事务是一组不可分组的操作集合,这些操作要么都成功执行,要么都取消执行。最典型的需要事务的场景是银行账户间的转账:假如 A 账户要给 B 账户转账 100 元,那么 A 账户要扣减 100 元,B 账户要增加 100 元,这两个账户的数据变更都成功才可算作转账成功。更严格来说,可以用 ACID 四个特性表述事务: Atomicity:原子性,事务中的所有操作要么都成功执行,要么都取消执行,不能存在部分执行,部分不执行的状态。 Consistency:一致性,举个例子简单的理解就是,A、B 两个账户各有 100 元,无论两个账户并发相互转账多少次,两个账户的资金总额依然是 200 元。 Isolation:隔离性,并发事务之间的相互影响程度,隔离性也是分级别的:读未提交、读已提交、可重复读等。 Durability:持久性,事务完成后对数据的更改不会丢失。   单体数据库不涉及网络交互,所以在多表之间实现事务是比较简单的,这种事务我们称之为本地事务。  

前端三大主流框架React、Vue、Angular的对比

痞子三分冷 提交于 2020-08-08 06:07:55
前言 每个框架都不可避免会有自己的一些特点,从而会对使用者有一定的要求,这些要求就是主张,主张有强有弱,它的强势程度会影响在业务开发中的使用方式。 一、Angular,它两个版本都是强主张的,如果你用它,必须接受以下东西: 必须使用它的模块机制 必须使用它的依赖注入 必须使用它的特殊形式定义组件(这一点每个视图框架都有,难以避免) 所以Angular是带有比较强的排它性的,如果你的应用不是从头开始,而是要不断考虑是否跟其他东西集成,这些主张会带来一些困扰。 二、React 它也有一定程度的主张,它的主张主要是函数式编程的理念,比如说,你需要知道什么是副作用,什么是纯函数,如何隔离副作用。它的侵入性看似没有Angular那么强,主要因为它是软性侵入。你当然可以只用React的视图层,但几乎没有人这么用,为什么呢,因为你用了它,就会觉得其他东西都很别扭,于是你要引入Flux,Redux,Mobx之中的一个,于是你除了Redux,还要看saga,于是你要纠结业务开发过程中每个东西有没有副作用,纯不纯,甚至你连这个都可能不能忍: const getData = () => { // 如果不存在,就在缓存中创建一个并返回 // 如果存在,就从缓存中拿 } 因为你要纠结它有外部依赖,同样是不加参数调用,连续两次的结果是不一样的,于是不纯。为什么我一直不认同在中后台项目中使用React

模型攻击:鲁棒性联邦学习研究的最新进展

╄→尐↘猪︶ㄣ 提交于 2020-08-05 22:01:59
  机器之心分析师网络    作者:仵冀颖    编辑:H4O       随着联邦学习的推广应用,越来越多的研究人员聚焦于解决联邦学习框架中的模型攻击问题。我们从近两年公开的研究成果中选取了四篇文章进行详细分析,重点关注模型攻击类的鲁棒联邦学习(Robust Federated Learning)。   现代机器学习算法在实际应用场景中可能会受到各种对抗性攻击,包括数据和模型更新过程中中毒( Data and Model Update Poisoning)、模型规避(Model Evasion)、模型窃取(Model Stealing)和对用户的私人训练数据的数据推理性攻击(Data Inference Attacks)等等。在联邦学习的应用场景中,训练数据集被分散在多个客户端设备(如桌面、手机、IoT 设备)之间,这些设备可能属于不同的用户 / 组织。这些用户 / 组织虽然不想分享他们的本地训练数据集,但希望共同学习得到一个全局最优的机器学习模型。由于联邦学习框架的这种分布式性质,在使用安全聚合协议(Secure Aggregation)的情况下,针对机器学习算法的故障和攻击的检测纠正更加困难。   在联邦学习应用中根据攻击目标的不同,可以将对抗性攻击大致分为两类,即非定向攻击(Untargeted Attacks)和定向攻击(Targeted Attacks)

模型攻击:鲁棒性联邦学习研究的最新进展

微笑、不失礼 提交于 2020-08-05 11:03:47
随着联邦学习的推广应用,越来越多的研究人员聚焦于解决联邦学习框架中的模型攻击问题。我们从近两年公开的研究成果中选取了四篇文章进行详细分析,重点关注模型攻击类的鲁棒联邦学习(Robust Federated Learning)。 机器之心分析师网络,作者:仵冀颖,编辑:H4O。 现代机器学习算法在实际应用场景中可能会受到各种对抗性攻击,包括数据和模型更新过程中中毒( Data and Model Update Poisoning)、模型规避(Model Evasion)、模型窃取(Model Stealing)和对用户的私人训练数据的数据推理性攻击(Data Inference Attacks)等等。在联邦学习的应用场景中,训练数据集被分散在多个客户端设备(如桌面、手机、IoT 设备)之间,这些设备可能属于不同的用户 / 组织。这些用户 / 组织虽然不想分享他们的本地训练数据集,但希望共同学习得到一个全局最优的机器学习模型。由于联邦学习框架的这种分布式性质,在使用安全聚合协议(Secure Aggregation)的情况下,针对机器学习算法的故障和攻击的检测纠正更加困难。 在联邦学习应用中根据攻击目标的不同,可以将对抗性攻击大致分为两类,即非定向攻击(Untargeted Attacks)和定向攻击(Targeted Attacks)。非定向攻击的目标是破坏模型

可扩展的微服务演示 Kubernetes Istio Kafka

倖福魔咒の 提交于 2020-07-29 03:08:13
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 本文将演示使用 Kafka 的异步通信的高度可扩展微服务应用。 系列内容 本系列使用不同的技术创建相同的可伸缩微服务应用程序: 1.本文 2.使用 AWS Lambda Kinesis 的可扩展的无服务器微服务演示 3.使用 Knative 和 Kafka 的可扩展的无服务器微服务演示(计划中) 本文关于什么? 本文描述了使用 Kubernetes,Istio 和 Kafka 的高度可扩展的微服务演示应用程序。通过同步的 REST API 调用,可以创建用户。在内部,所有通信都是通过 Kafka 异步完成。 Image 1:Architecture overview Kafka 消费者/生产者 “用户审批服务” 会根据 Kafka 主题中有多少未处理的消息自动缩放(HPA)。还有一个节点/集群缩放器。 我们将扩展到每秒23000个 Kafka 事件,11个 Kubernetes 节点和280个 Pod。 Image 2:Results overview 该应用程序完全使用 Terraform 编写,并且可以使用一条命令来运行。 技术栈 Terraform (Azure)Kubernetes、MongoDB、Container Registry (ConfluentCloud

微服务架构中分布式事务实现方案怎样何取舍

北慕城南 提交于 2020-07-28 10:15:16
提起微服务架构,不可避免的两个话题就是服务治理和分布式事务。数据库和业务模块的垂直拆分为我们带来了系统性能、稳定性和开发效率的提升的同时也引入了一些更复杂的问题,例如在数据一致性问题上,我们不再能够依赖数据库的本地事务,对于一系列的跨库写入操作,如何保证其原子性,是微服务架构下不得不面对的问题。 1 分布式事务解决方案 针对分布式系统的特点,基于不同的一致性需求产生了不同的分布式事务解决方案,追求强一致的两阶段提交、追求最终一致性的柔性事务和事务消息等等。各种方案没有绝对的好坏,抛开具体场景我们无法评价,更无法能做出合理选择。在选择分布式事务方案时,需要我们充分了解各种解决方案的原理和设计初衷,再结合实际的业务场景,从而做出科学合理的选择。 2 强一致解决方案 2.1 两阶段提交 两阶段提交算法中有两种角色:事务协调者和事务参与者,一个事务一般会涉及多个事务参与者,具体的两阶段过程如下图所示: 第一阶段:写库操作完成后协调者向所有参与者发送Prepare消息,询问各参与者的本地事务是否可以提交,参与者根据自身情况向协调者返回可以或不可以; 第二阶段:协调者收到所有参与者的反馈后,如果全部返回的是可以提交则向所有参与者发送提交事务命令。只要有一个参与者返回的是不能提交,则向所有参与者发送回滚命令。如下图所示: 图1 两阶段提交 在上述的两阶段模型中

分布式场景之刚性事务-2PC详解

|▌冷眼眸甩不掉的悲伤 提交于 2020-07-27 14:59:44
分布式一致性 分布式场景下,多个服务同时对服务一个流程,比如电商下单场景,需要支付服务进行支付、库存服务扣减库存、订单服务进行订单生成、物流服务更新物流信息等。如果某一个服务执行失败,或者网络不通引起的请求丢失,那么整个系统可能出现数据不一致的原因。 上述场景就是分布式一致性问题,追根到底,分布式一致性的根本原因在于数据的分布式操作,引起的本地事务无法保障数据的原子性引起。 分布式一致性问题的解决思路有两种,一种是分布式事务,一种是尽量通过业务流程避免分布式事务。分布式事务是直接解决问题,而业务规避其实通过解决出问题的地方(解决提问题的人)。其实在真实业务场景中,如果业务规避不是很麻烦的前提,最优雅的解决方案就是业务规避。 事务分类 分布式事务实现方案从类型上去分刚性事务、柔型事务。刚性事务:通常无业务改造,强一致性,原生支持回滚/隔离性,低并发,适合短事务。柔性事务:有业务改造,最终一致性,实现补偿接口,实现资源锁定接口,高并发,适合长事务。 刚性事务:XA 协议(2PC、JTA、JTS)、3PC 柔型事务:TCC/FMT、Saga(状态机模式、Aop模式)、本地事务消息、消息事务(半消息) 2PC定义 2PC全称Two-phaseCommit,中文名是二阶段提交,是XA规范的实现思路,XA规范是 X/Open DTP 定义的交易中间件与数据库之间的接口规范(即接口函数)

前端三大主流框架React、Vue、Angular的对比

痞子三分冷 提交于 2020-07-26 23:39:42
前言 每个框架都不可避免会有自己的一些特点,从而会对使用者有一定的要求,这些要求就是主张,主张有强有弱,它的强势程度会影响在业务开发中的使用方式。 一、Angular,它两个版本都是强主张的,如果你用它,必须接受以下东西: 必须使用它的模块机制 必须使用它的依赖注入 必须使用它的特殊形式定义组件(这一点每个视图框架都有,难以避免) 所以Angular是带有比较强的排它性的,如果你的应用不是从头开始,而是要不断考虑是否跟其他东西集成,这些主张会带来一些困扰。 二、React 它也有一定程度的主张,它的主张主要是函数式编程的理念,比如说,你需要知道什么是副作用,什么是纯函数,如何隔离副作用。它的侵入性看似没有Angular那么强,主要因为它是软性侵入。你当然可以只用React的视图层,但几乎没有人这么用,为什么呢,因为你用了它,就会觉得其他东西都很别扭,于是你要引入Flux,Redux,Mobx之中的一个,于是你除了Redux,还要看saga,于是你要纠结业务开发过程中每个东西有没有副作用,纯不纯,甚至你连这个都可能不能忍: const getData = () => { // 如果不存在,就在缓存中创建一个并返回 // 如果存在,就从缓存中拿 } 因为你要纠结它有外部依赖,同样是不加参数调用,连续两次的结果是不一样的,于是不纯。为什么我一直不认同在中后台项目中使用React

关于异步

筅森魡賤 提交于 2020-05-08 11:58:05
一、概述 js的执行环境是‘单线程’的,异步操作是至关重要的。异步任务就是任务需要分阶段完成,各阶段可以插入其他任务,否则就是同步任务。 二、实现 js处理异步任务主要分了3个阶段: 回调函数:异步任务拆分成多个阶段的代码,将这些代码用函数包裹以便在满足条件的时候继续异步任务,该函数被称为回调函数。这样处理主要缺点是:异步任务的逻辑被拆分了,异步任务嵌套异步任务后会形成‘回调地狱’,代码耦合程度太高。 Promise和Generator:Promise是回调函数的语法糖,主要解决‘回调地狱’的问题。Generator的特性类似‘协程’,目前的实现只能说是‘半协程’,只有Generator的实例有执行权。Generator通过yield来将异步任务分阶段,每一个阶段结束都会保留当前的执行上下文,调用next方法执行下一个阶段。缺点就是需要手动执行next,错误处理有些破坏结构。 async:async函数是Generator的语法糖,结合Promise将Generator自动化并返回Promise实例,通过await来分阶段,缺点是会阻塞,错误处理没有优化。 三、总结 现在Generator主要用来模仿线程操作(redux-saga)和生成Iterator对象,处理异步任务基本结合使用async和Promise。 来源: oschina 链接: https://my.oschina