InfoQ 迷你书 笔记

《架构师 2018 8月刊》笔记

2018-08-15  本文已影响43人  专职跑龙套

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

Kotlin 生态调查结果出炉:超过 6 成的开发者用过 Kotlin 了

Stream 从 Python 切换到 Go 的原因

Stream 是一套用于构建、伸缩、定制化新闻源和活动流的API。

Go最大的卖点在于它的性能,无论在运行还是编译时它都有突出的性能优势。它与Java或者C++的运算速度几乎相当。在实际使用中,我们发现它比Python大约快30倍。

用Go编写的Go编译器也非常快。Stream中最复杂的微服务就采用Go编写,它的编译时间仅仅需要6秒,Java和C++等工具链则慢得多,快则一分钟,慢则数小时。

Go在语言层面通过goroutine和channel支持了并发。

Go有一句重要的格言,即:不要通过共享内存来通信,相反,通过通信来共享内存 。

Go有助于开发微服务。谷歌的protobuf和gRPC是微服务间通信的基础,Go对它们提供了很好的支持。作为开发人员,我们只需在清单文件中定义一项服务,工具便会自动生成客户端和服务器端代码,并且保证代码的高性能以及很低的网络负载。此外,清单文件还可以被其他语言用来生成他们自己的客户端和服务器端代码。

需要注意的是,对于某些适合使用Python开发的模块,Stream仍然使用Python。例如,我们的仪表板、网站以及用于个性化订阅的机器学习都使用Python实现,因为Python提供的这些工具更好用。我们不会马上完全弃用Python,但是对于性能要求较高的代码,我们今后会使用Go来编写。

腾讯大规模分布式机器学习系统无量是如何进行技术选型的?

GitHub 的 MySQL 高可用性实践

我们的集群使用经典的主-副设置,其中集群的单个节点(主节点)能够接受写操作。其它集群节点(副节点)异步更新主节点的变更并服务我们的读流量。

为了支持写操作,我们显然需要有一个可用的写节点,即集群的主节点。但同样重要的是,我们需要能够识别,或者发现,那个节点。
遇到一个故障时,比如主节点崩溃的场景,我们必须确保存在一个新的主节点,并且能够快速通告其身份。
检测故障、运行故障恢复以及通告新主节点身份所花费的时间组成了总宕机时间。

orchestrator MySQL 集群管理工具

https://github.com/github/orchestrator
orchestrator is a MySQL high availability and replication management tool, allowing for:

远离基于 VIP 和 DNS 的服务发现

在我们之前的迭代中,我们使用:

在那个迭代中,客户端通过使用一个名称,例如 mysql-writer-1.github.net 来发现写节点。这个名称解析为主节点获取的虚拟IP地址(Virtual IPaddress,VIP)。
因此,平常的时候,客户端会只解析这个名称,连接解析到的IP地址,然后找到正在另一端监听的主节点。
当发生一个主节点故障事件时,一个新的服务器(副本之一),必须被提升为主节点。
orchestrator将监测到一个故障,提升一个新的主节点,然后采取行动重新分配名称/VIP。客户端并不准确地知道主节点的身份:它们所知道的只是一个名称,而那个名称现在一定解析到了新的主节点。

GitHub 的高可用性方案:orchestrator、Consul 和 GLB

一个普通的工作流:

运满满的技术架构演进之路

运满满使用 Xgboost 来预测车 - 货的基础相关性,实际是一个 CTR 和 CVR 混布模型,其中部署了在线实时系统,自研了一套基于 FTRL 算法的在线学习算法,将用户实时的行为数据结果和 Xgboost 的离线结果共同训练而得,点击预测的准确率超过 90%。

百度智能运维的技术演进之路

百度提出了指导智能运维的三个原则:

针对不同的场景提供不同的异常检测算法解决人工配置困难和监控漏报&误报的问题。

面向大规模 AI 在线推理的可靠性设计

上一篇 下一篇

猜你喜欢

热点阅读