InfoQ 迷你书 笔记

《架构师 2018 7月刊》笔记

2018-07-09  本文已影响44人  专职跑龙套

迷你书地址:http://www.infoq.com/cn/minibooks/architect-201807

Spark 团队开源新作:全流程机器学习平台 MLflow

https://mlflow.org/

An open source platform for the complete machine learning lifecycle

这是一个能够覆盖机器学习全流程(从数据准备到模型训练到最终部署)的新平台,旨在为数据科学家构建、测试和部署机器学习模型的复杂过程做一些简化工作。

目前在 alpha 版,包括三个组件:


MLflow 三个组件

一个快速的示例:
https://www.mlflow.org/docs/latest/quickstart.html

Google 发布Flutter Release Preview 1

https://flutter-io.cn/

Flutter 是 Google 用以帮助开发者在 iOS 和 Android 两个平台开发高质量原生 UI 的移动 SDK。

独家揭秘:腾讯千亿级参数分布式ML 系统无量背后的秘密

模型的生产和使用过程,大致分为几个步骤:

系统架构图

参数服务器架构:

阿里巴巴为什么不用 ZooKeeper 做服务发现?

2011 年,阿里巴巴开源 Dubbo,为了更好开源,需要剥离与阿里内部系统的关系,Dubbo 支持了开源的 ZooKeeper 作为其注册中心,后来在国内,在业界诸君的努力实践下,Dubbo + ZooKeeper 的典型的服务化方案成就了 ZooKeeper 作为注册中心的声名。

让我们回归对服务发现的需求分析,结合阿里巴巴在关键场景上的实践,来一一分析,一起探讨为何说 ZooKeeper 并不是最合适的注册中心解决方案。

注册中心是 CP 还是 AP 系统?

通过以上我们的阐述可以看到,在 CAP 的权衡中,注册中心的可用性比数据强一致性更宝贵,所以整体设计更应该偏向 AP,而非 CP,数据不一致在可接受范围,而 P 下舍弃 A 却完全违反了注册中心不能因为自身的任何原因破坏服务本身的可连通性的原则。

服务规模、容量、服务联通性:
当数据中心服务规模超过一定数量,作为注册中心的 ZooKeeper 很快就会不堪重负。
在服务发现和健康监测场景下,随着服务规模的增大,无论是应用频繁发布时的服务注册带来的写请求,还是刷毫秒级的服务健康状态带来的写请求,还是恨不能整个数据中心的机器或者容器皆与注册中心有长连接带来的连接压力上,ZooKeeper 很快就会力不从心,而 ZooKeeper 的写并不是可扩展的,不可以通过加节点解决水平扩展性问题。

注册中心需要持久存储和事务日志么?
需要,也不需要。
我们知道 ZooKeeper 的 ZAB 协议对每一个写请求,会在每个 ZooKeeper 节点上保持写一个事务日志,同时再加上定期的将内存数据镜像(Snapshot)到磁盘来保证数据的一致性和持久性,以及宕机之后的数据可恢复,这是非常好的特性,但是我们要问,在服务发现场景中,其最核心的数据 - 实时的健康的服务的地址列表真的需要数据持久化么?
对于这份数据,答案是否定的。因为在服务发现中,服务调用发起方更关注的是其要调用的服务的实时的地址列表和实时健康状态,每次发起调用时,并不关心要调用的服务的历史服务地址列表、过去的健康状态。
使用 ZooKeeper 作为服务注册中心时,服务的健康检测常利用 ZooKeeper 的 Session 活性 Track 机制 以及结合 Ephemeral ZNode 的机制,简单而言,就是将服务的健康监测绑定在了 ZooKeeper 对于 Session 的健康监测上,或者说绑定在 TCP 长链接活性探测上了。
这在很多时候也会造成致命的问题,ZK 与服务提供者机器之间的 TCP 长链接活性探测正常的时候,该服务就是健康的么?答案当然是否定的!注册中心应该提供更丰富的健康监测方案,服务的健康与否的逻辑应该开放给服务提供方自己定义,而不是一刀切搞成了 TCP 活性检测!健康检测的一大基本设计原则就是尽可能真实的反馈服务本身的真实健康状态,否则一个不敢被服务调用者相信的健康状态判定结果还不如没有健康检测。

向左走,向右走:
阿里巴巴是不是完全没有使用 ZooKeeper?并不是!
熟悉阿里巴巴技术体系的都知道,其实阿里巴巴维护了目前国内乃至世界上最大规模的 ZooKeeper 集群,整体规模有近千台的 ZooKeeper 服务节点。
如果以我们近 10 年在各个业务线和生产上使用 ZooKeeper 的实践,给 ZooKeeper 用一个短语评价的话,那么我们认为 ZooKeeper 应该是 “The King Of Coordination for Big Data”!

所以可以使用 ZooKeeper,但是大数据请向左,而交易则向右,分布式协调向左,服务发现向右。

Airbnb 弃用之后,我们还应该用React Native 吗?

https://facebook.github.io/react-native/

Build native mobile apps using JavaScript and React.
React Native lets you build mobile apps using only JavaScript. It uses the same design as React, letting you compose a rich mobile UI from declarative components.

从宏观角度来看,使用像 JavaScript 这样的脚本语言来开发移动应用程序几乎是不可避免的,因为使用 Swift/Objective-C/Java/Kotlin 这些语言来开发 UI 效率太差。此外,每个应用程序都要开发两次(或者如果算上Web 就是三次),这根本就是个大麻烦。无论是 React Native、Flutter 还是其他羽翼未满的新产品,它们也都大致如此。

如何“计算”CEPH 读写性能

https://ceph.com/
http://ceph.org.cn/

中心化or 去中心化?聊聊交易所的辩证发展

现阶段,数字货币的交易场所有3种:

目前来看,去中心化交易所是作为中心化交易所的补充存在的。原因是很多小币种因各种原因无法挂牌主流的中心化交易所而选择在去中心化交易所挂牌,或是某些新发行的币种在登陆主流的中心化交易所之前会被去中心化交易所抢先挂牌。

预计在区块链底层基础设施完善前,市场依旧会是由主流交易所主导,只有当撮合效率、交易成本以及用户学习成本能与中心化交易所相似时,去中心化交易所才有可能占据更大的交易份额。

得出上述结论的具体原因,要从用户需求的角度来看。用户“交易”的目的是将自己手中的币以一个能接受的价格兑换成另一种币。交易能否达成,取决于两个方面:效率和代价。
效率,是指用户想交易时,能不能快速找到对手方,能不能快速找到理想的价格,能不能快速完成交易,交易完成后能不能快速交割;代价包括行业的共识推广代价,用户的教育学习代价,以及用户在每一笔交易的背后,付出的显性及隐性代价。

去中心化交易所,一般都采用智能合约方式编写交易撮合和清结算逻辑,并且将合约代码开源出来供所有人查看。这样的话,代码是公开的,又是运行在链上,就可以在一定程度上保障用户的资金安全,防止内部交易。
但是,去中心化交易所也存在不稳定因素。为了获得用户信心,合约代码是需要开源的,谁都可以拿这份代码资金单独部署一套交易所,长期下去会导致多个交易平台出现,多个交易平台的竞争将导致市场流动性的分割,进而导致单个交易市场的深度不足,影响到参与用户的交易机会成本,也会带来价格不稳定的因素。
去中心化交易所因为区块链本身的特性和不同去中心化交易所的技术方案不同,目前很难在技术层面集中解决去中心化交易所带来的流动性分割的问题,一般是通过市场自动平衡价格的力量来解决。

上一篇 下一篇

猜你喜欢

热点阅读