
An updated and organized reading list for illustrating the patterns of scalable, reliable, and performant large-scale systems. Concepts are explained in the articles of prominent engineers and credible references. Case studies are taken from battle-tested systems that serve millions to billions of users.
目的
学习如何设计大型系统。
为系统设计的面试做准备。
学习如何设计大型系统
学习如何设计可扩展的系统将会有助于你成为一个更好的工程师。
系统设计是一个很宽泛的话题。在互联网上,关于系统设计原则的资源也是多如牛毛。
这个仓库就是这些资源的组织收集,它可以帮助你学习如何构建可扩展的系统。
从开源社区学习
这是一个不断更新的开源项目的初期的版本。
开发过稍微大一点的soa服务系统的程序员都听说过trace系统(但真正从零开始设计的人,我个人认为很少)。为什么需要trace呢?原因是调用soa服务的调用链路太复杂(什么是调用链路,下面解释),trace的目的是为了定位系统的调用过程的一切一切。
理论依据
Google 的 Dapper: a Large-Scale Distributed Systems Tracing Infrastructure
听说过或开源的trace框架
-
Googe的Dapper;
-
Twitter的zipkin;
-
淘宝的鹰眼;
-
大众点评的cat;
-
京东的hydra,现在是CallGraph,hydra已不维护了;
-
spring Cloud Sleuth,它可以集成zipkin;
概念
在计算机科学中,依其应用的语境不同,幂等性一词可能有不同的含义:
在命令式编程中,如果在一个或几个调用之后系统状态保持不变,则带有副作用的子程序是幂等的,换句话说,如果从系统状态空间到与子程序相关联的自身的函数在定义中给出的数学意义上是幂等的;
在函数式编程中,如果一个纯函数在定义中给出的数学意义上是幂等的,那么它就是幂等的。
在许多情况下,这是一个非常有用的属性,因为它意味着操作可以在不造成意外影响的情况下尽可能频繁地重复或重试。
对于非幂等操作,算法可能需要跟踪操作是否已经执行。
- 个人比较赞同的解释