架构师之路
ailinyingai
DevOps 搬砖人 干饭人
展开
-
架构设计的整体
如何做一个有用的设计翻译 2021-06-17 23:28:37 · 123 阅读 · 0 评论 -
架构师之路067
架构思维总结翻译 2021-05-13 23:56:42 · 101 阅读 · 0 评论 -
架构师之路066
架构老化和重构翻译 2021-05-13 23:56:09 · 105 阅读 · 0 评论 -
架构师之路065
文本处理翻译 2021-05-13 23:55:30 · 82 阅读 · 0 评论 -
架构师之路056
服务治理总结最终会走向全栈工程师SRE工程师翻译 2021-05-13 23:52:17 · 86 阅读 · 0 评论 -
架构师之路055
过载保护 容量规划的设计翻译 2021-05-12 00:31:04 · 54 阅读 · 0 评论 -
架构师之路054
云计算 容器革命与服务端的未来原创 2021-05-12 00:29:00 · 57 阅读 · 0 评论 -
架构师之路053
业务的可支持性与持续运营翻译 2021-05-12 00:28:22 · 138 阅读 · 0 评论 -
架构师之路052
故障排查与根因分析翻译 2021-05-12 00:27:49 · 117 阅读 · 0 评论 -
架构师之路051 故障域 故障预案
出现了故障 如何处理翻译 2021-05-12 00:27:10 · 200 阅读 · 0 评论 -
架构师之路050 日志 监控 告警
日志的接入服务 有大规模的比较少翻译 2021-05-12 00:26:04 · 165 阅读 · 0 评论 -
架构师之路049 发布 升级 版本管理
发布工程师翻译 2021-05-12 00:25:08 · 66 阅读 · 0 评论 -
架构师之路048 事务与工程
工程师的思维翻译 2021-05-12 00:24:08 · 75 阅读 · 0 评论 -
架构师之路011 进程 线程 协程
多进程多线程协程 出现解决了什么问题有什么缺点翻译 2021-05-12 00:17:01 · 120 阅读 · 0 评论 -
极客时间学习证书合集
原创 2021-03-22 12:08:32 · 441 阅读 · 0 评论 -
架构师之路047 服务治理的宏观视角
软件在线上成功跑了起来,为用户提供了服务,我们接着面临的挑战是怎么保证它不会挂掉。这涉及非常多层面的事情。首先是怎么知道服务是不是挂了,这就涉及监控与报警。在发现服务挂掉后,需要考虑尽快把它重启起来,恢复到正常的状态。微观上某个软件进程挂掉不能影响到正常的服务。所以我们需要考虑各类故障域,尽可能全面地把单点故障的风险消除掉。单点故障消除,有可能会是个运维问题,但更多时候我们也得从软件的业务架构层面去解决它。服务治理并没有那么简单纯粹。虽然在理想情况下我们应该尽可能自动化所有故障的恢复,但故障的可能性太多,很翻译 2020-08-17 09:21:06 · 165 阅读 · 0 评论 -
架构师之路046 服务端开发的总结
Docker & Kubernetes。毫无疑问,数据中心操作系统(DCOS)是服务端操作系统的发展方向。关于 DCOS ,我们会在下一章涉及。Go 语言。推荐 Brian W. Kernighan 写的《Go 程序设计语言》,本书为传世经典《C 程序设计语言》的作者再次动笔所创。LVS & Nginx。两大当前最主流的流量调度软件。其中 LVS 工作在网络层,Nginx 工作在应用层。MySQL & MongoDB。两大当前最主流的数据库。虽然它们的使用范式差异较大,但背后的基础哲翻译 2020-08-17 09:08:31 · 156 阅读 · 0 评论 -
架构师之路045 如何做详细设计?
详细设计并不是只谈实现就完事,更不是一个架构图。它包括以下这些内容。现状与需求现在在哪里,遇到了什么问题,要作何改进。需求满足方式要做成啥样?交付物的规格,或者说使用界面(接口)。怎么做到?交付物的实现原理。“程序 = 数据结构 + 算法” 是我们很熟悉的一个公式。它其实是怎么描述实现原理的很好的指导方针。当我们谈程序的实现时,我们总是从数据结构和算法两个维度去描述它。...翻译 2020-08-14 14:36:21 · 210 阅读 · 0 评论 -
架构师之路041-044 画图实战程序
基于golang的服务如何设计?翻译 2020-08-14 14:34:57 · 119 阅读 · 0 评论 -
架构师之路040 服务端架构的建议
服务端业务架构,主要是怎么做一个多租户的 Model 层。Model 层本身最重要的是自然体现业务逻辑,它和具体的行业的领域问题相关,对此我们无法进一步展开。但服务端程序还是有它很鲜明的特点。今天我们重点讨论了服务端业务架构相关的通用问题。包括:网络协议、授权、RPC 框架、单元测试等等。当然其实还有一个问题,就是选什么样的存储中间件。它和具体的业务特征更为相关,这一点在后面我们实战案例中再做探讨。...翻译 2020-08-03 14:58:07 · 128 阅读 · 0 评论 -
架构师之路039 存储与缓存
谈到存储与缓存的关系,不能不提 Redis。Redis 在定位上特别奇怪,以至于不同的人对它的认知并不相同。有的人会认为它是内存缓存,有的人会认为它是存储。Redis 的确可以当作缓存来用,我们可以设置内存上限,当内存使用达到上限后,Redis 就会执行缓存淘汰算法。只不过,如果我们把它当作内存缓存,那么其实它只需要是一个简单的键值存储(KV Storage)就行。但是 Redis 实际上是 key => document,它的值可以是各类数据结构,比如:字符串,哈希表,列表,集合,有序集合(支持原创 2020-08-03 14:18:39 · 130 阅读 · 0 评论 -
架构师之路038 文件系统与对象存储
从文件系统谈起,介绍了非结构化数据的存储系统的演进历史。对象存储的出现,是服务端体系架构和桌面操作系统分道扬镳的开始。后续两者的演进方向变得越来越大不相同。由于承载了最大体量的数据规模,对象存储对单位存储成本极其敏感。我们定性探讨了成本与持久性(Durability)之间的平衡关系。...翻译 2020-08-03 14:14:53 · 171 阅读 · 0 评论 -
架构师之路037 键值存储与数据库
我们第一关心的,当然还是使用界面(接口)。从使用界面角度,我们要考虑选择关系型数据库还是文档型数据库,以及是否需要事务特性。确定了我们要使用什么样的数据库后,接着我们从实现角度,考虑主从结构和分布式方面的特性。数据库是非常专业并且复杂的领域,...原创 2020-08-03 14:13:52 · 172 阅读 · 0 评论 -
架构师之路036 业务状态和存储中间件
服务端的领域特征是大规模的用户请求,以及 24 小时不间断的服务。这句话是理解服务端体系架构的核心,至关重要。但某种意义上来说更重要的原则是:坚决不能丢失用户的数据,即他认为已经完成的业务状态。存储即数据结构。存储中间件就是 “元数据结构”。对于服务端来说,存储中间件至关重要。它不只是极大地解放了生产效率,也是服务端的性能瓶颈所在。几乎所有服务端程序扛不住压力,往往都是因为存储没有扛住压力。...翻译 2020-07-31 13:06:18 · 141 阅读 · 0 评论 -
架构师之路035流量调度与负载均衡
pass翻译 2020-08-03 14:11:38 · 339 阅读 · 0 评论 -
架构师之路034 服务端开发开始的宏观视角
相比桌面程序而言,服务端程序依赖的基础软件不只是操作系统和编程语言,还多了两类:负载均衡(Load Balance);数据库或其他形式的存储(DB/Storage)。为什么会需要负载均衡(Load Balance)?为什么会需要数据库或其他形式的存储?2006 年,Amazon 发布弹性计算云(Elastic Compute Cloud),简称 EC2。这被看作云计算诞生的标志性事件。2007 年,Amazon 发布简单存储服务(Simple Storage Service),简称 S3。这是全球第一个对原创 2020-07-01 10:53:01 · 149 阅读 · 1 评论 -
架构师之路033 桌面开发回顾与总结
桌面开发的知识迭代更新非常快,所以很难去列经典书籍。这里我列一下我认为值得重点关注的技术:JavaScript。毫无疑问,这是当前桌面开发的第一大语言,务必要精通。这方面我推荐程劭非(winter)的极客时间专栏“重学前端”。微信小程序。这方面资料比较少,我推荐高磊的极客时间视频课“9 小时搞定微信小程序开发”。React 和 Vue。这应该当前比较知名的两大前端框架,可以学习一下。前者可以看下王沛的“React 实战进阶 45 讲”,后者可以看下唐金州的“Vue 开发实战”。Flutter 和 Swift原创 2020-07-01 10:37:53 · 158 阅读 · 0 评论 -
架构师之路032 系统的概要设计
在概要设计阶段,我们一般以子系统为维度来阐述系统各个角色之间的关系。对于关键的子系统,我们还会进一步分解它,甚至详细到把该子系统的所有模块的职责和接口都确定下来。这个阶段我们的核心意图并不是确定系统完整的模块列表,我们的焦点是整个系统如何被有效地串联起来。如果某个子系统不作进一步的分解也不会在项目上有什么风险,那么我们并不需要在这个阶段对其细化。为了降低风险,概要设计阶段也应该有代码产出。这样做的好处是,一上来我们就关注了全局系统性风险的消除,并且给了每个子系统或模块的负责人一个更具象且确定性的认知。代码即翻译 2020-07-01 10:35:31 · 453 阅读 · 0 评论 -
架构师之路031 辅助界面元素的架构设计
辅助界面元素,或者叫控件的架构设计。从大的实现逻辑来说,它和应用程序不应该有本质的不同。但控件总是要考虑支持多实例,这会带来一些细节上的差异。支持多实例听起来是一项简单的工作,但是从我的观察看,对很多工程师来说实际上并不简单。不少初级工程师写代码往往容易全局变量满天飞,模块之间相互传递信息不假思索地基于全局变量来完成。这些不良习惯会导致代码极难控件化。当然我们不见得什么桌面应用程序都要考虑把它控件化。但是我们花一些精力去思考控件化的话,会有助于你对架构设计中的一些决策提供帮助。当然更重要的,其实是让你有机会翻译 2020-07-01 09:28:53 · 129 阅读 · 1 评论 -
架构师之路010 输出和输出设备
但是,仅通过简单对比所有输入和输出设备的管理方式,我们就可以看出,不同输入和输出设备的管理方法差异非常大,没有太大的共性可言。尽管对 CPU 而言,所有外部设备有着相同的抽象,但这些设备的业务逻辑却如此不同,并不能统一抽象它们。正是因为有了操作系统这样的基础软件,这些设备业务逻辑的复杂性才从我们的软件开发过程中解放出来。人机交互演化的核心变化是输入设备的变化。我们看到,输入手段的变化是非常剧烈的,且每一次演变都是颠覆性的变化。事实上输入意图的理解越来越难了,因为交互在朝着自然(Nature)和智能(Inte原创 2020-07-01 09:00:29 · 190 阅读 · 0 评论 -
架构师之路009 外存管理和文件系统
在物理内存不足的时候,操作系统会利用外存把一些很久没有使用的内存页的数据,保存到外存以进行淘汰。在 UNIX 系的操作系统中,操作系统为此分配了一个磁盘分区叫 swap 分区,专门用于内存页的保存和恢复。在 Windows 操作系统中则通过一个具有隐藏属性的 .swp 文件来实现。在缺页发生比较频繁时,内存页的数据经常性发生保存和恢复,这会发生大量的磁盘 IO 操作,非常占用 CPU 时间,这时候我们通常能够非常明显感觉到计算机变得很慢。在计算机变慢,并且计算机的硬盘灯不停闪烁的时候,我们基本可以确定是物理原创 2020-07-01 08:50:19 · 154 阅读 · 0 评论 -
架构师之路008 操作系统内核与编程接口
操作系统和我们写的程序运行于两个进程中 2.我们写的程序无法直接访问操作系统所在的内存 3.连接操作系统进程和用户进程的桥梁是中断地址 。 可以设想在还没有出现操作系统的上古时代,有两个普通的程序A和B在cpu上跑着,那么程序A和程序B如何交互呢?一种简单的办法就是程序A直接跳到程序B的函数地址上,cpu去执行该函数。但是呢,如果程序A访问不了程序B的地址咋办呢?可以在他们之间创建一个桥梁,这个桥梁就是中断地址,程序A可以通过中断地址间接的把cou执行权限交给B。这样程序B就可以执行了。 从cpu的角度看.翻译 2020-07-01 08:49:36 · 124 阅读 · 0 评论 -
架构师之路007软件运行机制以及内存管理
计算机运行的全过程,并对每一步的核心意义做了简单的介绍。然后我们把话题转到我们这一节的重心:内存管理。谈内存管理,需要谈清楚两个核心问题:如何分配内存(给运行中的软件,避免它们发生资源争抢);如何运行外置存储(比如硬盘)上的软件?我们分别就在实模式下和保护模式下的内存管理进行了讨论。...翻译 2020-06-29 11:21:35 · 143 阅读 · 0 评论 -
架构师之路006 操作系统
多考虑一下系统的“收费需求”或者“商业模式”。嗯,很好。总结一下各个公司的成功途径,就是先要满足大量刚需或者打破现有商业壁垒,然后靠技术、工艺和法律形成新的商业壁垒迅速崛起,最后依靠积累的用户基数和粘性,获得规模效应,开发新产品以获得更高的溢价等等。做硬件和做软件要相结合,只做上游服务并不能形成良好的商业闭环,所以IoT+人工智能我认为很有发展前景。非常希望NAS存储能走进千家万户,360网盘停止服务,百度网盘的限速,内容失效,且网盘内容无法保证隐私性,我妈妈的手机内存很小,经常需要清理内存,如果每天回到翻译 2020-06-29 11:07:03 · 156 阅读 · 0 评论 -
架构师之路004 编程语言进化
站在唯技术论的角度,业务架构与语言无关,影响的只是模块规格的描述语法。但语言的选择在实践中对业务架构决策的影响仍然极其关键。原因之一是开发效率。抛开语言本身的开发效率差异不谈,不同语言会有不同的社区资源。语言长期以来的演进,社区所沉淀下来的框架和基础库,还有你所在的企业长期发展形成的框架和基础库,都会导致巨大的开发效率上的差异。原因之二是后期维护。语言的历史通常都很悠久,很难实质性地消亡。但是语言的确有它的生命周期,语言也会走向衰落。选择公司现在更熟悉的语言,还是选择一个面向未来更优的语言,对架构师来说也是翻译 2020-06-29 10:52:18 · 150 阅读 · 0 评论 -
架构师之路005 可自我迭代的计算机设计
外置存储的数据格式。对此,我们设计文件系统(或 Key-Value 存储)子系统来负责这件事情。另外,我们也提供了 ls 程序来管理外置存储中的文件。用户最终拿到这个计算机后,会迭代出什么能力。对此,我们设计了 sh 程序,让它支持在外置存储上执行任何应用程序。编辑器的交互范式。对此,我们设计了 vi 程序,让它迭代编辑器的能力。汇编语言的使用范式。对此,我们设计了 asm 程序,让它响应 CPU 指令集的迭代,以及汇编语言进化的迭代...翻译 2020-06-29 10:45:21 · 170 阅读 · 0 评论 -
架构师之路003 汇编语言
为了不再用“0101”表达自己的思想,人们创造了汇编语言,这一步让编程成为一个纯软件行为,程序员这一个分工也由此诞生。为了进一步支持程序员这个职业,我们设计了 MVP 版(最小化可行产品)的可自我迭代的计算机。有了这个计算机,我们就可以不断演进,并最终演进出今天越来越多姿多彩的信息科技的世界。今天,我们假设要实现一个最小化的计算能力可自我迭代的计算机,需求如上所述。那么,它的变化点和稳定点分别是什么?为此,你会怎么设计出哪些子系统,每个子系统的规格是什么?扩展性上有哪些考虑?...翻译 2020-06-27 22:48:17 · 133 阅读 · 0 评论 -
架构师之路002 大厦基石
管道化可否理解为随着浏览器成为事实意义上应用的使用平台,操作系统的功能变得单一,单一到只为浏览器提供服务,从逻辑概念上可以理解为服务器与浏览器之间数据传输的管道冯·诺依曼体系结构的不凡之处在于,它想“解决一切可以用‘计算’来解决的问题”。为了实现这个目标,冯·诺依曼引入了三类基础零部件:中央处理器、存储、输入输出设备。所有计算机都可以看做由 “中央处理器 + 存储 + 一系列的输入输出设备” 构成。架构的第一步是需求分析。从需求分析角度来说,关键要抓住需求的稳定点和变化点。需求的稳定点,往往是系统的核心翻译 2020-06-27 22:29:10 · 189 阅读 · 0 评论 -
架构师之路001 宏观视角
架构能力的提升,本质上是对你的知识脉络(全身经络)的反复梳理与融会贯通的过程。具备架构思维并不难,而且极有必要。不管今天的你是不是团队里的一位架构师,对任何一位程序员来说,具备架构思维将会成为让你脱颖而出的关键。...翻译 2020-06-27 22:13:59 · 154 阅读 · 0 评论 -
0066架构老化和重构
架构的功夫全在平常添加功能越来越难 迭代效率低问题持续不断 解决了一个问题却又生出好几个新的问题最小化的核心系统+多个相互正交的周边系统依赖优化的好处 工作量小做的是代码搬运 不改变任何业务逻辑不必深入功能的细节只需要找到该功能的所有相关代码 把它们集中起来对业务的理解有了长足的进步对周边系统切换到新接口的成本有充足的预计集架构设计 资源规划与调度 阶段规划 以及持久战的韧性与...原创 2020-02-05 10:57:00 · 253 阅读 · 0 评论