精华内容
下载资源
问答
  • 她为开发者使用 JavaScript 开发应用提供了快速、安全可靠性高的依赖管理。你可以用 Yarn 处理这五件事。 1. 离线工作 Yarn 为你提供离线工作的能力。如果你之前安装过一个包,你可以在没有网络连接的情况下...

    Yarn能帮你解决的五件事

    转自: http://www.qingpingshan.com/jb/javascript/185590.html

     

    长话短说(TL;DR):在 JavaScript 领域有多个包管理器,举几个来说: npm , bower , component 和 volo 。 截至写本文,最流行的 JavaScript 包管理器是 npm。npm 客户端可以访问 npm 源里成千上万的代码库。只是最近,Facebook 推出了新的 JavaScript 包管理器 Yarn , 号称是更快,更可靠,比现有的 npm 客户端更安全。 在这篇文章,你将学习到你能用 Yarn 做的五件事情。

    Yarn是 Facebook 推出的新的 JavaScript 包管理器。 她为开发者使用 JavaScript 开发应用提供了快速、安全、可靠性高的依赖管理。你可以用 Yarn 处理这五件事。

    1. 离线工作

    Yarn 为你提供离线工作的能力。如果你之前安装过一个包,你可以在没有网络连接的情况下,再次安装。下面展示一个典型的例子:

    当我联网的时候,我用Yarn安装了两个包,如下:

    用 Yarn 初始化 package.json 文件

    用 Yarn 安装 express 和 jsonwebtoken 包

    安装完成

    安装完成后, 我在我的项目里删除了 _node modules 文件夹,并且断开了网络连接。我运行 Yarn ,如下:

    Yarn 离线安装包

    就这样! 所有的包不到两秒钟的时间内再次安装完。 显然,下载的时候 Yarn 缓存了所有的包以至于不需要再次从网络下载。 她通过并行操作最大限度地提高资源利用率,以至于再次下载的时候安装时间比之前更快。

    2. 从多个源安装

    Yarn 为你提供从多个源下载 JavaScript 包的能力。例如 npm , bower ,你的 git 源, 甚至是你本地的文件系统。

    对于你需要的包,Yarn 默认扫描 npm 源,命令如下:

    yarn add <pkg-name>

    从远程 gzip 压缩文件安装一个包,命令如下:

    yarn add <https://thatproject.code/package.tgz>

    从本地文件系统安装一个包,命令如下:

    yarn add file:/path/to/local/folder

    对于持续发布 JavaScript 包的开发者,这是特别有用的。你可以通过这个功能,在发布包之前测试你的包。

    从远程 git 源安装一个包,像这样:

    yarn add <git remote-url>

    Yarn 从 Github 源安装

    Yarn 检测到在 bower 源存在 Github Rep 并且添加到文件里,像这样

    转载于:https://www.cnblogs.com/bonelee/p/6844424.html

    展开全文
  • Google想到能否把这两种协议的优势结合起来,同时实现低时延和高可靠并将其应用到更高安全的协议上,于是就有了QUIC。 本文就来详细介绍下QUIC协议。 从TCP协议说起 当前,web平台的数据传输都基于TCP协议。TCP...

    Google想到能否把这两种协议的优势结合起来,同时实现低时延和高可靠并将其应用到更高安全的协议上,于是就有了QUIC。

    本文就来详细介绍下QUIC协议。

    从TCP协议说起

    当前,web平台的数据传输都基于TCP协议。TCP协议在创建连接之前需要进行三次握手(图1),如果需要提高数据交互的安全性,既增加传输层安全协议(TLS),还会增加更多的握手次数(图2)。

    图1:TCP三次握手示意

    图2:TLS初始化握手示意

    正因为TCP协议连接建立的成本相对较高,可以通过TCP快速打开(TCP Fast Open)来减少建立连接时的握手次数。但是该技术目前应用较少。

    和TCP相反,UDP协议是无连接协议。客户端发出UDP数据包后,只能“假设”这个数据包已经被服务端接收。这样的好处是在网络传输层无需对数据包进行确认,但存在的问题就是为了确保数据传输的可靠性,应用层协议需要自己完成包传输情况的确认。

    此时,QUIC协议就登场了。QUIC协议可以在1到2个数据包(取决于连接的服务器是新的还是已知的)内,完成连接的创建(包括TLS)(图3)。

    图3:QUIC协议握手示意

    QUIC协议的目的

    从前文对比可以看出,QUIC协议的主要目的,是为了整合TCP协议的可靠性和UDP协议的速度和效率。QUIC的维基百科页面介绍了该协议的主要目的:

    对于Google来说优化TCP协议是一个长期目标,QUIC旨在创建几乎等同于TCP的独立连接,但有着低延迟,并对类似SPDY的多路复用流协议有更好的支持。 如果QUIC协议的特性被证明是有效的,这些特性以后可能会被迁移入后续版本的TCP和TLS协议(它们都有很长的开发周期)。

    值得注意的是,如果QUIC的特性被证明是有效的,这些特性以后可能会被迁移到后续版本的TCP协议中

    TCP协议的实现是高度管制的。TCP协议栈通常由操作系统实现,如Linux、Windows内核或者其他移动设备操作系统。修改TCP协议是一项浩大的工程,因为每种设备、系统的实现都需要更新。

    相反的,UDP协议在操作系统层面实现相对简单,基于UDP协议实现新的协议以验证Google对于TCP协议改进的理论,验证成本相对较低。

    QUIC协议内置了TLS栈,实现了自己的传输加密层,而没有使用现有的TLS 1.2。同时QUIC还包含了部分HTTP/2的实现,因此QUIC的地位看起来是这样的:

    从图上可以看出,QUIC底层通过UDP协议替代了TCP,上层只需要一层用于和远程服务器交互的HTTP/2 API。这是因为QUIC协议已经包含了多路复用和连接管理,HTTP API只需要完成HTTP协议的解析即可。

    QUIC协议特性

    1. 避免前序包阻塞

    SPDY和HTTP/2协议现在都支持将页面的多个数据(如图片、Java等)通过一个数据链接进行传输。该特性能够加快页面组件的传输速度,但是对于TCP协议来说,这会遇到前序包阻塞的问题。这是由于TCP协议在处理包时是有严格顺序的,当其中一个数据包遇到问题,TCP连接需要等待这个包完成重传之后才能继续进行。因此,即使逻辑上一个TCP连接上并行的在进行多路数据传输,其他毫无关联的数据也会因此阻塞。

    QUIC协议直接通过底层使用UDP协议天然的避免了该问题。由于UDP协议没有严格的顺序,当一个数据包遇到问题需要重传时,只会影响该数据包对应的资源,其他独立的资源(如其他css、js文件)不会受到影响。

    2. 减少数据包

    前文已经介绍过QUIC协议在创建连接握手时,只需要1到2个数据包即可。这对于拥有高速互联网连接的网络环境下可能没有太大的感觉,因为此时一个数据包的延时大概在10~50ms之间。

    一般来说延迟在50ms之内不会有太大的感觉。但是对于无线网络来说,情况就不太一样了。且不说传统2G/3G网络,即使是4G网络,客户端和服务器之间的延时也通常在100ms以上。传统TCP+TLS协议的传输方式,在创建连接时的4个数据包和QUIC协议的1个数据包相比,连接创建上就会多耗时300ms以上。

    3. 向前纠错

    QUIC协议有一个非常独特的特性,称为向前纠错(Forward Error Correction),每个数据包除了它本身的内容之外,还包括了部分其他数据包的数据,因此少量的丢包可以通过其他包的冗余数据直接组装而无需重传。

    这类似网络层的RAID 5!

    目前默认的冗余量是10%,既每发送10个数据包,其冗余数据就可以重新构建一个丢失的数据包。

    向前纠错牺牲了每个数据包可以发送数据的上限,但是减少了因为丢包导致的数据重传,因为数据重传将会消耗更多的时间(包括确认数据包丢失、请求重传、等待新数据包等步骤的时间消耗)。

    4. 会话重启和并行下载

    底层协议切换到UDP协议之后的另一大好处是,连接不再依赖于来源IP。

    对于TCP协议来说,标识一个TCP连接需要4个参数,既来源IP、来源端口、目的IP和目的端口。其中的任一参数改变,TCP连接就需要重新创建。

    这对于传统网络来说影响不大,因为来源和目的IP相对固定。但是在无线网络中,情况就大不相同了。设备在移动过程中,可能会因为网络切换(如从WIFI网络切换到4G网络环境),导致TCP连接需要重新创建。

    QUIC协议使用了UDP协议,不再需要这四元组参数。同时QUIC协议实现了自己的会话标记方式,称为连接UUID。当设备网络环境切换时,连接UUID不会发生变化,因此无需重新进行握手。

    该特性除了可以减少无谓的连接重连之外,还可以充分利用设备的不同网络接口,进行资源的并行下载。因为虽然这些网络接口有不同的IP,但只要他们能够共享连接UUID,就能够并行的从服务器下载数据。

    QUIC协议实践

    Chrome浏览器从2014年开始已经实验性的支持了QUIC协议。可以通过在Chrome浏览器中输入chrome://net-internals/#quic查看是否已经支持QUIC协议。如果还未支持,可以在chrome://flags/#enable-quic中进行开启。

    开始Chrome浏览器对QUIC协议的支持之后,可以在chrome://net-internals/#quic中查看到当前浏览器的QUIC一些连接。当然目前只有Google服务才支持QUIC协议(如YouTube、 Google.com)。

    关于防火墙

    通常系统管理员会关注防火墙的TCP规则,而忽略UDP规则。如果要在防火墙之后使用QUIC协议,除了传统web服务需要开放的80/TCP、443/TCP之外,针对QUIC还需要开放443/UDP的访问。

    服务端使用QUIC协议

    目前支持QUIC协议的web服务只有0.9版本以后的Caddy。其他常用web服务如nginx、apache等都未开始支持。curl表达了对QUIC协议支持的兴趣。

    QUIC性能优势

    在2015年的博文中,Google分享了一些关于QUIC协议实现的结果。

    这些优势在诸如YouTube的视频服务上更为突出。用户报告通过QUIC协议在观看视频的时候可以减少30%的重新缓冲时间。

    -END-

    欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。

    展开全文
  • 安全性要求比较高的环境中, 关键操作失误可能会导致灾难的发生, 因此, 评估关键操作的人因可靠性不仅能为系统灾难评估提供依据, 而且有助于改善关键操作人员的训练水平...
  • 作者 Andreas Kaltenbach 译者 ...通常情况下,当我们不再为其提供后续支持,或者该产品已经被其它产品替代的时候,它的生命就终结了,...

    作者 Andreas Kaltenbach 译者 丁亮 发布于 2010年6月12日 下午9时39分

     

    我们何时可以认为 软件产品被真正地完成了呢?通常情况下,当我们不再为其提供后续支持,或者该产品已经被其它产品替代的时候,它的生命就终结了,几乎所有软件产品都会经历从开始到结束的演化过程。但存在了很长时间的大型企业级系统却会随 着时间的推移,向不可维护、变僵硬的趋势发展。这导致了软件开发的停滞,使得响应客户需求的时间变长。

    介绍

    在软件工程领域,经过几年的实践,模型驱动的软件开发(MDSD)已经证明了它并非是昙花一现。如今,MDSD的很多承诺[1]已经变成现实,大量 成功的例子也持续涌现出来。

    本文说明了可以如何使用模型驱动方法来解决当前软件系统中的一些问题。牢记MDSD最佳实践[2],我们将关注软件生命周期本身这个非功能性需求。

    软件生命周期

    几乎所有的现代软件系统都面临着生命周期问题。当产品发布或是部署时,你不得不解决向后兼容以及迁移策略等问题。我们通常会低估产品兼容性问题,或 是在开发中完全忽略这个问题。当我们不得不花费很多资源来解决产品兼容性问题时,才会后悔莫及。严肃地看待这个问题会影响到软件产品的演进,正如我们将在 下面这个例子中所看到的。

    案例:java.lang.Cloneable

    Java中的java.lang.Cloneable 接口说明了向后兼容性是如何限制软件演化的。该接口在JDK 1.0时被引入,仅作为一个标记,并不提供任何接口方法,想要支持克隆的类型都需要实现这个接口。

    此外,它还需要提供 java.lang.Object.clone() 方法合适的实现。其实clone() 方法如果 定义在java.lang.Cloneable 接口中似乎更有说服力,并且更自然。但事实上该接口从未改变过,因为那将会破坏向后兼容性。 引入克隆接口方法会导致对所有已实现该接口的类的编译错误。关于这个bug的完整历史,请参看[3],对于java.lang.Cloneable 更 详细的讨论,请参看[4]。

    在分析我们系统中已经存在的生存周期问题细节以前,非常有必要建立一个公共术语表。

    向后兼容性

    如果出现以下情况,那么可以认为该系统是向后兼容的:

    • 它能处理以前系统的接口
    • 它能处理以前系统的数据
    • 该系统的使用者不必关心系统版本改变


    系统的修改可能引发向后不兼容的问题。通过引入兼容性层可以解决这个问题,该层负责提供以前系统接口的视图。在这样的环境中,权衡并设计进-出 良 好的接口更加重要。

    关于二进制与源代码的兼容性在本文中不做讨论,[5]中描述了它们和Java语言之间的差异。

    更新

    更新描述的是对已有软件的改进。通过一次更新,应用的特性集是不会被扩展的。更新的主要目的在于提供额外的健壮性(例如修复安全隐患)。更新不会涉 及到接口与数据描述的改变,它不会引发向后兼容性问题。OSGi版本控制体系[6]定义了版本分类模式major.minor.micro 。 一次更新只增加第三位,即micro位的版本号。

    升级

    我们认为一个新版本,或对已有软件增加功能都是一次升级。与更新不同的是,升级提供了新的特性集。在这个过程中兼容性问题或多或少都会暴露出来,这 取决于新老版本之间的差异大小。让我们再来看一下OSGi版本控制体系,其中的minor版本号的增加描述了一次向后兼容的升级。Major发布号的增加 则意味着一次向后不兼容的升级。

    迁移

    迁移是将软件系统从一个操作环境移动到另一个操作环境的过程。对于软件系统而言,迁移一般是将软件系统移动到一个更新的版本(忽略了将现有软件产品 替换为竞争产品的迁移场景)。如果这个新版本承诺了对老版本是向后兼容的,那么对于消费者而言迁移过程是不需要任何额外操作的。另一种情况就是消费者需要 为迁移做出附加操作以适应新版本。对于此种情况,向后不兼容将影响该产品的所有客户。越多客户使用该产品,对于迁移带来的兼容变更过程就越痛苦。随着产品 相关客户的增加,向后不兼容变更的成本与后续迁移过程代价会变得非常高。因此,对于向后兼容性问题的正确考虑对软件系统演化起着至关重要的作用。

    MSSD,盛装的骑士

    如果您已经在使用模型驱动的方法进行产品开发,那么在这里你会找到很多能够减少我们前面提到的冲突的方法。我们的主要目的就是为了让客户满意,并且 不受系统变更的影响,同时还可以让产品继续发展,而不会感到在你的开发瓶颈处有里程碑的存在。

    在每个现代应用中,我们都可以识别出一些潜在的向后不兼容的情况。有了MDSD方法,我们就拥有了消除这些阻力的工具。以下的三个示例说明了在当前 的软件体系结构中,生存周期方面的问题隐藏在何处,以及如何使用模型驱动方法来让软件系统的兼容性处于控制之下。

    API 的不兼容性

    每个暴露给外部的API都声明了提供者与其编程接口的潜在消费者之间的契约。使用新的不兼容的API替换现存的API将会导致正在使用旧API的客 户端死锁。这不仅只是针对类似Java的普通编程语言,对于所有暴露接口的形式(例如Web服务)都一样。

    1

    API的不兼容性可以通过一个专门的向后兼容层来解决。当软件系统无法支持以前版本API,而只是暴露最新版本的API时,我们可以在目标系统(客 户端系统)前部署向后兼容层,它会提供当前软件系统中所有版本的API。对于这个向后兼容层到底是以中间件ESB(企业服务总线)的形式部署还是直接部署 于目标系统中我们不做深究。向后兼容层在此扮演了一个API门面的角色,它在各API版本间进行消息转换[7]。有了这个架构,我们就需要制定消息转换的 规则。

    2

    对于每个不兼容的API都必须定义对应的消息转换规则,这是MDSD的关键所在。在重要项目中,我们应该将定义消息转换规则视作正常处理而非异常处 理。因此,编写转换代码是经常性的并且是非常关键的任务。如果遗漏了一项转换,那么就会导致无法使用以前对应版本的API接口。如果遵循模型驱动方 法,API接口应该定义为一个模型。对于软件系统的每个版本都对应一个模型。当比较不同版本的API接口时,可以通过对比它们对应的模型实例看出差异。由 此您可以得到所谓的系统差异模型,其包含了两个系统版本间的所有差异。以该差异模型作为输入,可以生成一份可读的变更报告,该报告描述了两个系统版本的细 节差异。以该报告作为检查清单,您可以控制系统发生的所有改变。而不会再忽略了任何一个变更或是遗漏了编写该变更对应的转换代码。对于一组接口的变更处理 和上面是类似的。有了差异模型,您可以更顺利地处理后续项目任务。另外,对于转换通常是给转换数据添加一个必须的类型字段,以标识出该消息需要转换成的类 型。对于同一类消息的转换而言,这项工作是非常乏味、重复的,最好将其自动化。在没有模型驱动支持时,开发者不得不手工编写所有转换代码,但当我们拥有整 个变更信息时,通过模型驱动的方式,可以以某个确定的标识模式生成消息转换代码。这可以将开发人员从重复、易出错的任务中解放出来,将他们的时间投在其他 更值得去做、更有挑战性的任务上。当然,模型驱动的方法也是有局限性的。100% 生成转换代码只是一种乌托邦式的期待。在模型中总有一些复杂变更不能标识到模式目录。对于这样的情况,转换只能手工编写。因此,我们需要时刻谨记区分自动 生成与手工编写变换代码的最佳实践[2]。说到这里,您可能会问“为什么我们要付出如此多的努力在向后兼容上?”,这个问题问到点上了,而且必须针对每一 种不同产品的具体情况来回答。对于历史遗留系统,您没有选择,必须保持向后兼容。这点在电子保健领域印证无疑。有很多医疗机构需要与中心外部系统保持通 信,而这些中心系统一般都非常古老,并且希望有稳定的接口与其通信。改变目标接口,那么每个医疗机构都必须做出相应的修改。投入一些时间来解决目标端的不 兼容性冲突比想办法移除所有异构遗留环境更为合理。

    数据库模式出轨

    通过使用数据关系映射工具(例如Hibernate)对数据库进行抽象既是一种赐福也是一种诅咒。一方面,它为开发者提供了想要的数据库技术抽象; 另一方面也隐藏了对不同版本间数据库模式的出轨(不匹配)。对于每一次持久化模型的变更都将重新处理已部署应用的数据库模式。例如给领域对象添加一个新的 持久化字段就需要给对应的数据库表添加一个新的列。如果持久化模型与数据库模式不同步,那我们就认为数据库模式出轨了。

    3

    >而MDSD方法保证了数据库模式不会出轨。如果我们以持久化模型作为主模型,根据该模型生成需要的数据库模式,那么我们就能够重用模型信息 以处理兼容性问题。假设我们有不同的模型版本,我们就可以生成差异模型,差异模型会为我们提供非常有用的不同版本差异的信息。就像前面那样,我们可以生成 一份变更报告,来查看变更影响。另外,我们还可以基于差异模型生成SQL升级脚本。我们不打算100%生成脚本,那不现实。对于复杂数据库模式情况,生成 的脚本总是需要手动添加一些代码的。自动生成部分与手工编写部分的组合定义了数据库模式从一个旧的版本升级到一个新的版本。由于存在各式各样的SQL方 言,所以提供已支持数据库的对应升级脚本是很重要的。如果系统支持多个数据库,那么这些脚本必须遵从对应方言。对于Ruby迁移[8]而言,Ruby社区 提供了不依赖数据库(database-agnostic)的DSL来描述数据库模式变更。这些数据库模式变更描述将被翻译成不同方言的SQL语句。与直 接生成SQL相比,模型驱动方法能够将差异模型变换成Ruby迁移表达。这样一来,生成SQL语句的责任就转移到了Ruby迁移。随着MDSD提供的支 持,对于领域模型变更带来的恐惧消失殆尽。开发者可以不再犹豫对领域模型的演进,项目重获敏捷。

    语言变更

    当使用模型驱动的技术时,我们经常使用一些领域特定语言(DSLs)来描述我们的模型。这些领域特定语言非常适合描述目标领域,因为它们为我们提供 了对所需要的领域特定的表达与抽象。与一些通用意图语言(general purpose languages,GPLs)相比,DSLs不会像GPLs那样死板,并且不受语言变更约束。随着DSL描述的领域与元模型的演化,一些新增的概念与结 构体(constructs)将被添加或替换,语言本身也在演化。不幸的是,领域特定语言本身对于不兼容性是没有任何免疫力的。

    4

    而对于潜在的冲突还是有办法解决的。我们可以使用文献[9]中提到的反腐化层(Anticorruption Layer)模式处理这类冲突。就像其名字一样,该模式可以解决腐化问题。在一个语言变更场景中,腐化发生于我们变更语言元模型的地方。对于新版本元模型 而言,所有满足旧的元模型的模型都腐化了。遗留的元模型不再被系统支持,并且客户端将被强制迁移到基于新元模型的语言上。通过特定的反腐化层,我们既能保 护旧的元模型,也能让元模型朝着更合理的方向演化。反腐化层是一系列门面、适配器以及描述不同模型变换的变换器的组合。客户端对于元模型可见的同时,我们 也维护这一个内部元模型。该内部元模型作为主元模型将被用于未来的模型处理。所有的外部模型实例将被变换成对应内部元模型的模型实例。外部元模型提供了目 标领域的特定视图。通过反腐化层,我们可以将多个视图正确映射到一个通用的元模型上。此时,不同版本变换可以在反腐化层内部被清晰地分离出来,元模型过时 策略也可以被更容易地实现。

    这里有个简单的例子展示了反腐化层所带来的好处:假设您用自己的DSL管理您全世界的豪华汽车车库容量。在版本1中,您为每一辆车指定了宽度、高度 以及长度。几个月后,你发现您的车库里只停了三种尺寸的车辆:S、M以及L,因此,新版本的仓库尺寸描述替代了三维描述。您没有将新版本尺寸描述马上上 线,而是实现了一个反腐化层,该层仍然理解原来版本1的三维元模型,只是在内部将其变换为版本2的尺寸元模型。

    拇指规则

    就像您在示例中看到那样,我们经常面对各种不兼容性问题。当结合MDSD处理兼容性问题时,本文得出如下规则:

    向后兼容性是用户友好的

    流行的顶尖应用将带来更多的客户。委托客户增加时,您必须应对随之而来的更多的需求。因此,成功的应用将进一步开发后续版本。以往已经有足够多的失 望之极的客户与不兼容性作斗争的反面示例,所以解决兼容性问题将得到客户非常高的满意度评价,可以将客户牢牢拉拢在您的解决方案上。满意的客户是长期系统 运维的关键动力。

    向后兼容性是昂贵的

    兼容性不是免费的。生存周期关注面犹如一个沉睡的巨人,架构师通常不会去唤醒它们。一旦它们被唤醒,特别是在开发后期,我们需要花费巨大的代价来控 制它。通过模型驱动技术,兼容性关注面可以在一开始就被评估出并可以进行正确的整合处理。因此,兼容性问题不再限制了成功产品的演化。使用增量式迁移能够 保持低成本、可管理的复杂度:只提供直线迁移路径替代提供所有支持版本迁移路径。迁移链完成后,您一样可以达到同样的迁移目标。

    不兼容性不可避免

    兼容性问题在所有的软件产品中都需要考虑。对于内部产品而言,使用范围与兼容性可以被控制,而其他产品则需要避免发生兼容性问题。项目需要有着保持 向后兼容的能力以及可以朝着向需要方向进行合并的生命力。只有这样才能让产品长期存活。因此,不要等兼容性问题发生时才后悔,对于公开开发的产品更是如 此。事实上,开源开发者从不知道他们的产品将被如何使用,在何地使用。

    系统一旦发布,就成了遗留系统

    一次发布版本号描述了系统生命中的一个快照。一旦发布了确定的版本,开发其实早已进行多时。因此,该发布描述了过去的开发状态。当产品发布后,您不 得不为了赢得客户满意而为其提供支持。

    模型差异也是模型

    前两个示例中强调,模型差异描述了一些有价值的、可在后续开发中利用的信息。在运用模型驱动方法后,获取不同模型版本的差异模型是非常廉价的。已有 工具链需要被扩展,以产生并处理差异模型。一些环境(例如版本控制系统)对于维护已有模型版本是非常有用的。

    反腐化层是一种最佳实践

    反腐化层给我们带来一种处理兼容性与弹性的有力模式。当内部与外部联系非常紧密时,它清晰地分离了内部与外部表示。它所引入到已有工具链中的部分是 非常小的,并且可以在稍晚时候引入。一旦整合完毕,它允许所有终端独立演化。

    有用的框架与工具

    Java中的MDSD框架有:openArchitectureWare(oAW)[10],它是一个“构建MDSD/MDA工具的工具”。它是 Eclipse模型项目(EMP)的一个子项目,提供了健壮的模型驱动开发解决方案。在EMP中,Eclipse建模框架(EMF)[11]作为主要的构 建工具提供了顶尖的结构化数据模型处理。因为oAW非常多地使用了EMF技术,所以我们建议两者结合使用。EMF Compare[12]是一个用于比较EMF模型的工具,看上去它非常适合我们创建有价值的差异模型。

    关于作者

    Andreas Kaltenbach是一名来自InterComponentWare AG(ICW)[13]的软件开发者与培训者,他是德国保健相关应用的专家。他围绕ICW的电子保健框架(eHF),关注MDSD方法以及安全学。另外, 他还是ICW的开放电子保健基金会[14](关注于建立保健相关行业的开源社区)的开发者代表。

    链接与文献

    [1] VÖlter, Stahl: Model-Driven Software Development (2006)

    [2] Efftinge, Friese, K??hnlein: Best Practices for Model-Driven Software Development (2008) http://www.infoq.com/articles/model-driven-dev-best-practices

    [3] Cloneable doesn't define .clone, http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4098033

    [4] Bloch: Effective Java: A Programming Language Guide (2008), item 11

    [5] Gosling et al.: The Java Language Specification, Third Edition (2005), chapter 13

    [6] OSGi Alliance: OSGi Service Platform Core Specification (2007), chapter 3.6.2

    [7] Hohpe: Enterprise Integration Patterns (2003), chapter 8

    [8] Understanding Migrations, http://wiki.rubyonrails.org/rails/pages/understandingmigrations

    [9] Eric Evans: Domain-Driven Design: Tackling Complexity in the Heart of Software (2003), chapter 14

    [10] openArchitectureWare, http://openarchitectureware.com/

    [11] Eclipse Modeling Framework, http://www.eclipse.org/modeling/emf/

    [12] EMF Compare, http://wiki.eclipse.org/index.php/EMF_Compare

    [13] InterComponentWare AG, http://www.icw-global.com/

    [14] Open eHealth Foundation, http://www.openehealth.org

     

    查看英文原文: Staying Safe and Sound Thanks to MDSD


    感谢侯 伯薇 对本文的审校。

    转载于:https://www.cnblogs.com/lanzhi/archive/2010/07/20/6468798.html

    展开全文
  • 阿里副总裁今天表示,打造国产自主可控、安全可靠的操作系统是阿里重要的战略布局。在阿里,OS系统项目已经有多个,其中AliOS一度成为手机厂商替代安卓的选择,不过这几年AliOS已经转向物联网、车联网等领域,AliOS...

    除了半导体芯片,OS操作系统也是国内卡脖子的关键之一,这方面还要依赖Windows、Linux、安卓、iOS等系统。阿里副总裁今天表示,打造国产自主可控、安全可靠的操作系统是阿里重要的战略布局

    在阿里,OS系统项目已经有多个,其中AliOS一度成为手机厂商替代安卓的选择,不过这几年AliOS已经转向物联网、车联网等领域,AliOS官网上也很久没有更新了。

    阿里现在云操作系统上取得了不菲的成绩,去年底阿里云的王坚博士当选中国工程院院士,他是我国唯一自研云计算操作系统飞天的提出者、设计者和建设者,推动中国IT产业从IOE(IBM小型机、Oracle数据库和EMC存储)向云计算转变。

    2017年,飞天获得中国电子学会15年来首个科技进步特等奖,是云计算核心关键技术自主创新的成功实践。

    5097b6173b8c479a5b6610643f0318e8.png

    今年4月份,阿里还宣布未来3年再投2000亿,用于云操作系统、服务器、芯片、网络等重大核心技术研发攻坚和面向未来的数据中心建设

    据悉,达摩院XG实验室、平头哥等最新研究成果将率先应用在阿里云下一代数据中心。飞天云操作系统、含光800芯片、神龙服务器、自研云交换机、高性能低延时网络、大计算系统集群等核心自研技术,将在云数据中心大规模部署。

    展开全文
  • 煤矿安全监控系统的正常运行能够实现多级监控和矿井安全生产的网络化集中监测、管理,为生产、经营快速决策提供数据信息支持,对保证矿井安全起着人工无法替代的作用。付煤公司特成立安全监控系统升级改造小组,着力...
  • 在现今的汽车应用中,设计人员需要把大电流可靠安全地引流到接地的阻性或感性负载,这类应用包括:白炽灯、电机控制和加热器件等。现在要实现这一目的,设计人员不得不依赖分立式或机电式解决方案,或是受制于市场...
  • 随着科技的发展,系统工程的设计体量逐渐庞大起来,尤其是对于轨道交通、航空航天、核电站等安全关键领域中,如何在复杂度逐年变大的同时保证其安全性和可靠性,是近年来各大公司需要研究的课题。最近比较火热的基于...
  • Azuriom是下一代游戏CMS,它是免费和开源的,并且是现有CMS的现代,可靠,快速和安全替代产品,因此您可以拥有最佳的网络体验。 支持的游戏 当前,Azuriom支持以下游戏: 文献资料 Azuriom的文档可。 安装 您可以...
  • 近几年,Rust语言以极快的增长速度获得了大量关注。微软正在探索使用 Rust 编程语言作为 C、C++ 和其他语言的替代方案,以此来改善应用程序的安全状况。在Rust被很多项目使用以后,其实际安全性表现到底如何呢?
  • 因此,为了减少在这方面的资金投入,许多安全人员都会选择使用一些开源软件来替代。 事实上,无论是学习,试验,还是在生产基础上进行部署,安全专业人员长期以来都将开源软件视为其工具包的重要组成部分。下面...
  • KCP-GO是生产级可靠-UDP库 。 该库旨在通过UDP数据包提供平滑,有弹性,有序,经过错误检查和匿名的流交付,并已通过开源项目进行了测试。 数以百万计的设备(从低端MIPS路由器到高端服务器)已经以各种形式(例如...
  • 你会首先想到“事务”,事务确实能够让一组操作一起可靠安全执行,要么全部执行,要么一个也别想执行,如果有两个同时发生的并发事务怎么办?使用事务隔离级别,这是ACID中的定义,关系数据库内部机制中就是这么做的...
  • 达梦数据库驱动.zip

    2020-05-07 09:31:55
    随着国产化的进程加快,达梦数据库被广泛应用于安可替代(安全可靠替代),该资源是 驱动,jar包,各类jar包均包含,java与python,以及达梦hibernate本地包,亲测可用。maven上我自己找过,maven上没有的,至少我是...
  • 11个IDA Pro反汇编程序的替代

    千次阅读 2018-05-17 11:57:14
    中国知名网络安全专家,东方联盟创始人郭盛华发表安全博文: 要破解加密的软件,...值得庆幸的是,多年来出现了一些可靠替代品。黑客教父郭盛华列出了以下IDAPro 11款替代反汇编器。 1.HOPPER  Hopper是OSX和L...
  • 一、java反射常用方法获取...// 该方法最为安全可靠,程序性能更高。 Class class2 = string.getClass(); Class class3 = Class.forName("java.lang.String");// 可能抛出ClassNotFoundException异常Class class ...
  • 它旨在包含用于在Cadence中实现安全可靠,易于理解和易于使用的不可替代令牌合约的最小功能。 什么是流量? Flow是面向开放世界的新区块链。 阅读更多有关它的。 什么是Cadence? Cadence是一种新的面向资源的...
  •   中国黑客教父,元老,知名网络安全专家,东方联盟创始人郭盛华发表安全博文: 要破解...值得庆幸的是,多年来出现了一些可靠替代品。黑客教父郭盛华列出了以下IDAPro 11款替代反汇编器。 1 HOPPER   Hoppe...
  • 由我司自主开发的国产自主可控的形式化验证代码自动生成工具ModelCoder可替代Matlab/Sumlink是一款支持多种嵌入式系统建模并可以自动生成高安全可靠的C代码的软件设计和开发工具。ModelCoder支持同步数据流以及状态...
  • 相比npm,yarn更加快捷、安全可靠,可以离线安装本地modules、在安装前会检查包是否出错、不受电脑环境影响。在使用npm安装包时会出现长时间卡顿,使用yarn时一般不会出现这种情况。 安装yarn:npm install -g ...
  • 该库是对的重写,最重要的增强是顶部,您可以在很大程度上将其用作嵌入式替代。 该库是用TypeScript编写的,因此类型不是事后的想法,而是库附带的。 通过使用fsyncWait选项,该库比快一点,并且可以快10倍,而...
  • yarn---npm的替代

    2019-12-09 21:53:47
    yarn的简介: Yarn是facebook发布的一款...超级安全。 在执行代码之前,Yarn 会通过算法校验每个安装包的完整性。 超级可靠。 使用详细、简洁的锁文件格式和明确的安装算法,Yarn 能够保证在不同系统上无差异的工作...
  • 现代社会面临的最大挑战之一是解决固体废物的过量产生和对环境安全的处置。 在这种情况下,需要对市政废物进行有效管理,但是许多国家的地方当局受到资金有限和服务不足的限制。 在城市固体废物管理领域的决策不仅...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 338
精华内容 135
关键字:

安全可靠替代