最近发布

英国政府信息化开源带给我们的思考

为英国政府开发的新代码现在已经开源了。政府数字化服务(Government Digital Service,GDS)技术架构师Anna Shipman说,以开源的方式进行代码编写可以让它们被重用,并提高透明度,最后会实现更好的数字服务。 英国政府网站首页:https://www.gov.uk/ 英国政府数字化开源:https://github.com/alphagov/格式日志发布于2016年12月6日

从Monzo银行系统看开源系统的应用

集群管理 Kuberneteshttp://kubernetes.io/ Monzo系统包含大量微服务,如果一台主机上只部署一个服务,会造成对服务器的大量浪费。按照传统方式将服务器归类,会增加服务扩容的难度。因此,一个支持快速伸缩的集群调度系统,应该抽象出应用程序的运行环境,将运行环境和底层硬件进行隔离。调度算法根据应用程序负载和可用资源,对其进行扩容和缩容。另外,Monzo在设计集群管理系统时,希望能够让所有的应用程序共享一个调度器,因此它不仅需要能够调度无状态服务,还需要能够调度有状态服务。 容器化的提出,特别是Docker的兴起,将前面提到的抽象层进行了标准化。首先,通过将应用程序及其运行时依赖打包成一个镜像,使得应用程序运行环境和主机解耦;然后,通过整合Linux内核的隔离特性(cgroup、namespace),使得主机上运行的多个服务之间能够相互隔离,减少干扰。这样,集群管理服务对应用程序可以做到黑盒,将重心放到服务编排上去。 Monzo最初使用Mesos+Marathon的架构,随后切换到了运行在CoreOS上的Kubernetes。下图展示了在切换到Kubernetes之后,整体开销的变化: RPC框架 finagle https://twitter.github.io/finagle/guide/ 通过RPC的方式将基础服务暴露出去,因此基础架构需要一个强大的RPC框架,以支撑其微服务架构。 首先是传输协议,为了能够让多种语言构建的服务之间能够方面交互,HTTP协议是首选的传输协议。几乎每种语言都有实现HTTP协议的标准库,这能够降低使用门槛。 另外,要能够支撑整个微服务架构,RPC框架还应该有以下这些特性: 负载均衡:大部分HTTP库都实现了基于DNS的轮询负载均衡,但是这个方式比较生硬。理想的负载均衡应该能够选择最合适的目标服务器,以达到较低的失败率,较小的延时。这样即使集群中出现因为故障而进行复制的副本,也不会影响整个系统的性能。 自动重试:对于分布式系统来说,故障是难以避免的。如果一个幂等调用失败,RPC系统应该要能够自动请求集群中的其他副本,以确保集群中存在少量故障节点时,系统整体仍然可用。 连接池:如果每个请求都需要重新创建连接,远程调用的延迟会大大增加。理想情况下每个远程调用请求都应该尽可能复用之前已经创建的连接。 路由:对于一个RPC系统来说,能够运行时修改目标机器是非常有必要的。例如一个新版本服务上线,可能需要一定的灰度过程。从新上限到100%使用,期间需要通过路由功能逐步将流量引到新版本服务上。 基于上述这些特性,Monzo最终选择了Finagle。它拥有上述所有特性,并且自身的模块化设计也降低了学习成本。另外,Twitter已经使用该框架多年,说明它经受了实战的考验。刚好,在今年linkerd发布了,它是基于Finagle的进程外代理,这意味着那些不运行在JVM上的语言也能够使用Finagle的这些特性。 异步消息Kafka http://kafka.apache.org/ Monzo的大部分业务逻辑在后台都是通过异步消息完成的。虽然有些操作本身耗时很短,但是通过异步消息,可以更快的向用户反馈任务状态。 由于大量核心逻辑都采取了异步化,每个消息都非常重要,一个完整业务操作每个步骤的消息都不能跳过,即使发生了无法恢复的异常,整个流程也应该能够在故障修复之后继续执行下去。因此,对于异步消息架构来说,必须满足以下特性: 高可用:消息发送者在发出消息之后,无需再关注消息的消费情况。即使消费者节点或者消息系统本身出现故障,该消息也必须确保被最终消费者处理。…

生命教育

成家立业老祖宗的观念: 成家立业就是为了传宗接代,为社会留下一个好的人根;第二是为了更好的孝养双方的父母;第三是为了生活上的互相照顾、互相依靠。 认识生命:生命是为报恩而来到世间。 理解生命:既然生命是为报恩而来到世间,那就应该完善生命,所做的一切都应该为报恩而做。 完善生命:就是要守本分。 发挥生命:就是比父母有能力,超过父母,父母没有做到的,自己也能做到。 圆满生命:父母不愿意做的,不埋怨父母,还能为父母补漏。 能圆满生命的人叫做上等命,能发挥生命的人叫做中等命,能稍微守本分的人叫做下等命,完全违背生命正报的人叫做劣等命。

scala未来实用的编程语言

IBM近期宣布将对Lightbend做战略投资。Lightbend是响应式编程的先行者,同时也是Scala语言的支持公司。众所周知:Scala实现的Spark、AKKA和kafka等现代流程开源框架。可以看出,Scala具有处理流数据和大规模数据的能力,Scala是一种认知开发的语言。 据Gartner估计,至2020年,所有的新业务应用为了改进敏捷性和可扩展性,将有50%被设计为云原生(Cloud Native)并使用微服务。这是对从事Scala开发的工程师来说,是个利好的消息。当然,无论什么编程语言,都有它的用武之地,只是随着时代变迁,解决符合时代的问题使用什么工具更为顺手,更容易解决问题罢了。 IBM提出“动态数据”(Data in Motion)一词用于描述无需存储就对变化中数据进行分析。未来可能更多应用场景需要这种能力——无存储动态分析得出结果的能力。例如智慧城市视频监控,每个城市现在有成千上万个摄像头,这些视频信息要是能够动态处理,那么现实生活将是怎样的改观:隐藏在城市的犯罪可疑分子,无处可躲,通过人脸识别,就可以快速定位;违法车辆,一刻也无法藏身,车牌识别定位;如果通过视频监控的视频流能够在秒级完成信息定位,那么将对城市安全提供非常好的保障。 所以,像Scala这样具有实时数据处理能力的天生语言实在不多,值得学习和研究,未来必有很多应用场景可用。 发布于2017年7月10日作者银狐分类动态

React 设计思想

本文转载自:https://github.com/react-guide/react-basic 译者序:本文是 React 核心开发者、有 React API 终结者之称的 Sebastian Markbåge 撰写,阐述了他设计 React 的初衷。阅读此文,你能站在更高的高度思考 React 的过去、现在和未来。原文地址:https://github.com/reactjs/react-basic 我写此文是想正式地阐述我心中 React 的心智模型。目的是解释为什么我们会这样设计 React,同时你也可以根据这些论点反推出 React。 不可否认,此文中的部分论据或前提尚存争议,而且部分示例的设计可能存在…

基于KafKa构建的各类平台

1、Confluent https://www.confluent.io/ Confluent平台是基于Apache Kafka构建的一个企业级流平台。该平台的5.0版本支持LDAP授权、Kafka主题检查以及用于物联网(IoT)集成的Confluent MQTT代理。最新版本基于Apache Kafka 2.0的特性构建,致力于保证基础设施安全、可靠以及管理使用流数据的应用程序。 2、cruise-control https://github.com/linkedin/cruise-control 持续监控Kafka集群,自动调整分配给服务器的资源,达到预期的性能目标。用户设定目标,Cruise Control对集群的工作负载进行分析,并自动执行一些操作来达成目标。